* WIP initial TUS tests
* WIP further tus integration
* WIP authenticate uploads
* boilerplate stuff
* Migrated handlers
* resolving type errors
* tackle some build errors
* WIP moving resumable uploads to its own package
* added migration and integrated local file storage into directus files
* cleaned up local store
* cleaned up failed experiments
* prettier
* Add tus_data and tus_id to system data
* Improve file upload progress estimation for multiple files
* bypass creating a revision per uploaded chunk
* fixed accidental commit
* Fix pause/resume for multiple uploads
* Null coalesce all the way
* Added directus locking logic
* prettier
* Small tweak (added resume uploads dialog)
* authentication
* Add remove to resumable uploads
* added delete endpoint and cleaned old service setup
* WIP s3 storage adapter
* Less breaking of interfaces, more breaking of text
* Moved local adapter to its own package
* Prettying some things up
* Sort resumable uploads by creation time
* Fix resumable uploads dialog popping up on second file upload
* Move buttons around & properly handle error
* s3
* A few changes
- Make S3 driver work more reliable
- Move common logic to tus driver class
- Respect `folder` when uploading from a different folder
- Implement cleanup for both local and S3
* synced dependencies
* accept presets
* Remove extra code for folder, as this is handled in presets now
* Rename migration to most recent date
* updated lcokfile
* prettier
* dont fully rely on the sudo service
* removed unused import
* Hide partial file uploads from the API
* satisfy linter
* Refactor tus into storage driver
* Fix merge conflicts
* Update pnpm-lock
* Fix typing issue
* nuked tus driver packages
* updated environment vars
* prettier
* Change type import style
* Fix S3 cleanup
* Use `modified_on` instead of tus creation date
* Pass chunk size to storage drivers
* Add sudo service to scheduled job
* Make cleanup work even if no upload was done before
* Remove "Resume Uploads" interface
* Update packages/env/src/constants/defaults.ts
Co-authored-by: ian <licitdev@gmail.com>
* Add config docs
* Add resumable to dictionary
* moved chunk filter to service
* simplify middleware
* use lodash
* Update api/src/services/tus/data-store.ts
Co-authored-by: Rijk van Zanten <rijkvanzanten@me.com>
* move to devDeps
* package lock
* fixed import
* updated test mocking
* Create a new TUS server handler for every request instead of one global one
* Allow for tree-shaking tus-client
* Rename resumable-uploads.ts to tus.ts
* Extract meta data from uploaded file
* Only consider full parts or the final part for bytesUploaded in S3
* Add additional sanity check to S3 driver
* Remove pause/resume functionality
* fixed file replacement
* Remove unused expose
* Reintroduce defineExpose and expose abort
* Broken file replace
* fixed replacement
* prettier
* added filesize in replace
* update metadata extraction
* Remove unused import
* updated package-lock
* extra validation check
* oops
---------
Co-authored-by: Hannes Küttner <kuettner.hannes@gmail.com>
Co-authored-by: Hannes Küttner <4376726+hanneskuettner@users.noreply.github.com>
Co-authored-by: ian <licitdev@gmail.com>
Co-authored-by: Rijk van Zanten <rijkvanzanten@me.com>
* Limit users
* Add defaults
* Allow specifying of reason for limit exceeded error
* Update config options doc
* Make existing tests pass
* Update extensions limit error
* Update usage of regular expression
Co-authored-by: Brainslug <br41nslug@users.noreply.github.com>
* Rename typo
Co-authored-by: Brainslug <br41nslug@users.noreply.github.com>
* Rename files
Co-authored-by: Brainslug <br41nslug@users.noreply.github.com>
* Use first() and remove redundant +=
* Fix incorrect api access count
* Rework to account for passing of unchanged access values
* Fix increased counts in updateMany
* Consistent error message
* Simplify unnecessary find
* Add tests
* Rename UserCount to AccessTypeCount
* renamed env var
* prettier
* Add changeset
* fix limit checking for batch and status updates
* test and prettier
* removed obsolete check
* updated error
* fixed error usage in extenions service
* Use randomUUID from '@directus/random'
* Fix payload check in updateMany
* implemented RolesService.updateBatch from its parent
* resolved unit test error
* updated type
* fixed existing role query
* Temporary activation of blackbox tests
* Move to separate fn, to make skippable for non-existent role
* Revert "Temporary activation of blackbox tests"
This reverts commit 4c4ac846d6.
* Revert "Move to separate fn, to make skippable for non-existent role"
This reverts commit 1d90a82e39.
* Add user limits - extension (#22642)
* adressing existing users issue
* migrated changes from pascal
* only check the role for active users
* only count active users
* updated incorrect if
* default to count zero
* Undid abstraction to separate function
* fixed updating through user counting error
* prettier
* simplified fallback query
* prettier
* Added try catch to be safee
* updated db mocking for tests
* removed extra check to satisfy implementation tests
---------
Co-authored-by: Brainslug <br41nslug@users.noreply.github.com>
Co-authored-by: Brainslug <tim@brainslug.nl>
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
* WIP: add new register dummy-route
* fix notice on register route
* WIP register form
* WIP: registering ui and controller for testing
* fix lint ordering problem
* wip: users service
* add migration, initial style for fields in settings
* redo how emails will be filtered
* WIP add filter in the register handler
* conditionally render register link depending on settings
* WIP: add email validation
* wip add email sending
* make clicking the email link work
* rm console log
* update controller
* dont send emails for existing emails
* add translation
* only show register link when unauthenticated
* add different redirects
* only allow selecting non-admin roles
* redirect to users page
* update translation
* move logic from controller to usersservice
* rm remnant of logic from controller
* add stall time to registration
* update translation
* rm comments
* rm unused var
* add changeset
* update translation for success
* remove sso related stuff from registration
* also allow setting first and last name
* update error check
* add @directus/errors to app
* replace error strings with enum
* rename to public_registration
* rename to public_registration_verify_email
* add notes to fields
* add types package to changeset
* dont stall if no work is being done
* allow null-role and resending of reg. email
* add public registration env vars, rm RATE_LIMITER_GLOBAL_STORE
RATE_LIMITER_GLOBAL_STORE wasnt being used. Lets just stick to RATE_LIMITER_STORE for all rate limiters. TODO: also remove from docs!
* use ratelimiter for registration, use stall time env var
* add registration limiter docs, rm global store variable from docs
* update changeset
* add ignore-notice
Co-authored-by: Hannes Küttner <4376726+hanneskuettner@users.noreply.github.com>
* use and document new `EMAIL_VERIFICATION_TOKEN_TTL`, also doc `REGISTER_STALL_TIME`
* change variable name
Co-authored-by: ian <licitdev@gmail.com>
* apply variable rename to usage
* change backticks to single quote
Co-authored-by: ian <licitdev@gmail.com>
* inline variables
* add fields to server info, update types
- The other ratelimiters also expose points and duration, done
- Add `public_registration_verify_email` so that we can render different success messages
* tiny wording tweak of registration mail
* add new user status 'unverified' and check for it
* add unverified status translation
* decouple email verification and validation
* enable register rate limiter by default and up its config
* add autocomplete=new-password on the registration form
* added sdk functions
* add gql query for new fields
* added register api reference
* updated verify sdk function name
* added reference block for email verify endpoint
* updated reference examples
* WIP: add gql resolvers
* add ratelimiter to mutation
* remove ratelimiter registration point+duration info
* rm points and duration from gql
* Update docs/reference/system/users.md
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
---------
Co-authored-by: Hannes Küttner <4376726+hanneskuettner@users.noreply.github.com>
Co-authored-by: ian <licitdev@gmail.com>
Co-authored-by: Brainslug <tim@brainslug.nl>
Co-authored-by: Brainslug <br41nslug@users.noreply.github.com>
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
* Improve env variable casting for already typed variables configured through .[c]js files
* Revert back to using dedicated toX functions and extended toBoolean to handle boolean type values
* Some additions to test and removed some redundant code in toBoolean
* Fix test case name
* Add changeset
* Change changeset
* Add support for MIGRATIONS_PATH (#20627)
* Deprecate "local" extension types (#20624)
* No longer resolve local non-package extensions
* Remove local extensions from watcher
* Install fs-extra for app dev
* Replace usage of get-extensions
* Rename create functions to match behavior
* Drop extensions prefix from cli create
* Drop name requirement from cli add
* Drop extensions name regex checks
* Don't rely on regex for extension identification
* Add changeset
* Fix build for @directus/extensions
* Don't ensure nested dirs
* Load npm dependency by name prefix
* Throw more helpful error when pkg json is missing
* Fix dependency loading paths
* Only load local extensions if extensions path exists
* Fix merge conflict
* Remove unused fs-extra
* Only sync extensions if location is defined
* `extensions` -> `localExtensions`
* Fix resolving of package extensions
- consistent usage of term "package extensions"
- enhance error messages
* Fix syncing extension from storage
* Revert-revert change from #20627
---------
Co-authored-by: ian <licitdev@gmail.com>
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
* Add back `MIGRATIONS_PATH` to `@directus/env` (#21053)
* Setup browse endpoint for browsing Directus extensions (#21033)
* Rename tag directus-custom to directus-extension
* Devil's in the details
* [WIP] Start on search lib
* Setup extensions-registry package
* Update pnpm lock
* Move registry search fn to new package
* Squash bugs
* Remove unused deps
* Remove unused dep in `extensions`
* Add tests for validate-limit
* Finish test coverage
* Remove unused constant
* Add back lodash-es 😇
* Install extensions-registry
* Add default keywords
* Expose registry endpoint in rest api
* Add describe module
* Reinstal pnpm
* Drop reliance on author field
The problem is that there's no requirement for it to be a valid(ated) user. Publisher is the only field we can rely on being an existing NPM user.
* Update convertSearchResult test after author change
* Format
* Allow anything after the route
To support packages with scopes
* Add test for describe
* Add more tests
* Throw unprocessablecontenterror instead of error
* Install errors pkg
* Finish test coverage
* Don't require description
* Don't wrap individual keywords
* Run formatter
* Add changeset
* Update packages/extensions-registry/src/modules/search/utils/validate-text.ts
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
* Return sandbox information
* Drop support for directus-custom keyword
* Set type to null for multiple tags
* Restart api for new registry
* Add version utility
* Add out-of-date error
* Add assertion for api versions
* Finish new list method
* Add describe
* Use updated registry functions
* Fix controller usage
* Return output in data flag to be consistent
* Add tests for the describe module
* Add tests for list module
* Finish tests for extensions-registry package
* Remove vscode shenanigans
---------
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
* Project Forum: Browse UX (#21276)
* Render marketplace route in-app
* Update api list integration
* Add support for limit/offset in list
* Boilerplate route for drawer
* Render extension readme in drawer
* Render extension detail as separate page
* Setup markup for extension banner
* Render readme with markdown styling
* Boilerplate metadata block
* Use v-list for extension metadata metrics
* Render compatibility metric
* Show downloads and publish date
* Refactor to individual files
* Fix missing import
* Add size metric
* Show author on metadat
* Show verified badge
* Finish metadata
* Run formatter
* Style forum detail banner (#21290)
* Style banner contents
* Add background art
* Add banner styles to default dark mode theme
* Undo base style change to avoid conflict
* Add beta chip badge to settings nav (#21296)
* Add layout styling for detail page (#21297)
* Render metadata as grid if size allows
* Finish layout for detail page
* Fix alignment of count
* Fix search-input active state
* Finalize forum header
* Add marketplace banner
* Style registry filter
* Change v-list-item height to min-height
Allows rows for forum registry to grow
* Finalize styling for extension list item
* Finalize styling for registry
* Don't rely on format util
* Forum account detail page (#21299)
* Add support for author describe endpoint
* Boilerplate author page
* Add author endpoint
* Update naming to account
* Render github name on registry list
* Render user's name + avatar on detail
* Load account data on account page
* Restructure module
* Render account banner on account page
* Render account metadata
* Finish account detail page
* Run formatter
* Add sidebar info detail sections
* install extensions from registry (#21070)
* added an endpoint to install extensions from registries
* add changeset
* Revert format/lint scripts
* Update pnpm-lock
* Remove unused dependency
* Add download module to extensions-registry abstraction
* Download from extension registry instead of direct npm
* Throw on error
* Install based on version ID rather than name
* Install based on ID in body
Allows us to extend it in the future if need be
* Download to tmp path instead of extensions
* Save to extensions manager flattened
* Use const for package folder name
* Run more in try/catch to avoid server exit
* Remove changeset
* Undo docs updates
We'll do all docs in a single PR :)
---------
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
Co-authored-by: Rijk van Zanten <rijkvanzanten@me.com>
* Manage extensions by directus_extensions primary key instead of npm package name (#21300)
* Add marketplace migration
* Include bundle info
* Rename name to folder
* Store name as folder
* [WIP] Change name to ID
* Update API to use UUIDs for extensions
* Update app to use extensions id
* Run formatter
* Add changeset
* Update generate-app-entrypoint to use updated format
* Fix graphql usage
* Format
* Add forum uninstall endpoint (#21301)
* Bootstrap uninstall
* Finish uninstall endpoint
* Use shared extensions store state for managing extensions in settings (#21317)
* Use extensionsstore for extensions management
* Use shared store for extensions state and modification
* Remove unused emit
* Adds install/uninstall GUI elements for project forum (#21319)
* Use warning color for incompatible
* Styling tweaks
* Transition optional background color
* Add keys for installing
* Add install button to extension detail
* Finish install button
* Add uninstall option to extensions item
* Empty local cached extensions on start
* Add (hopefully) temporary hack to await reload
* Add install / uninstall buttons
* Update lockfile
* Fix bundle entries not rendering properly
* Clean up spinner styling
* Properly wait for reload to be done
* Run formatter
* Fix registry name
* Fix local extension loading
* Render location/company in byline
* Rearchitect metadata to unstyled listitems
* Add max-width to page container
* Only allow admins to install/uninstall extensions
* Remove unused link
* Disable eslint for map use
* Run formatter
* Add no-results indicator (#21389)
* Add no-results indicator
* add error state as well
* Standardize trailing slash
* Standardize pk check
* Resolve unnecessary check
* Move all deps to dev deps in app
* Optimize exec order
* Pull data from top level package
* Redesign filter bar
* Reset page count on filter change
* Use default padding on top of page
Feels weird now, but there's a theme-update coming that'll make this make sense :)
* Show first/last in pagination
* Auto-format package name
* Use updated registry api return names
* Add sorting by total downloads
* Add sparkline for downloads
* Add a bit of padding
* Finalize sparkline styling
* Run formatterg
* Add sandbox flag in list call
* Add MARKETPLACE_TRUST env var
* Set sandbox requirement on download
* Render list item badge
* Fix padding
* Show license in gui
* Add support for multiple maintainers
* Add activity tracking for install
* Make incompatibility notice friendlier
* Tweak margin of sparkline
* Update default CSP headers to include github content
* Make extension readme selectable
* Consistent icon, add tooltips
* Reduce size of install button
* Run formatter
* Render readme anchors with target blank
* Add min width to v-select components
* Fix background on search input
* Reduce padding on marketplace pages
* Fix showing no results
* Be consistent
* Render type filter menu in full height
* Clean up compatibility notice
* Hide count result when search count is 0
* Use v-show instead
* Bump no results notice down a bit
* Cleanup size of install buttons
* Use buttons for install / author
* Fix sparkline rendering
* Add better loading state for extension detail page
* Add spinners
* Render proper error message in case readme is missing
* Use heart logo for marketplace
* Add image border shadow
* Add loading banner on account page
* Show reload warning as persistent notification
* Only show one notification
* Update snapshot
* Add padding to verified icon
* Base extensions id on package id, show installed badge
* Sync pagination / search / filter with URL
Special shoutout to Tim
* Next max ext (#21541)
* Add limit exceeded error
* Add limit exceeded translation
* Add extensions_limit env var
* Load extensions limit in app
* Don't allow installing unknown versions
* Don't require installed flag
* Return bundled entries in describe
* Update chip to match style
* Prevent install on limit reached
* Run formatter
* Fix bundle loading
* Resolve npm extensions by package manifest (#21478)
* Merge main into next (#21669)
* Clean-up deps
* Don't export type (as long as not used anywhere)
* Update semver to latest
* Relax compatibility notice
* Use more suitable icon for version
* Re-render download charts on color-scheme change
* Link extensions to marketplace
---------
Co-authored-by: Rijk van Zanten <rijkvanzanten@me.com>
Co-authored-by: ian <licitdev@gmail.com>
Co-authored-by: Mahendra Kumar <22556323+mahendraHegde@users.noreply.github.com>