* Add key to UserGroupDto
* Fix renaming table in sqlite
The SqliteSyntaxProvider needed an overload to use the correct query
* Start work on user group GUID migration
* Add key index to UserGroupDto
* Copy over data when migrating sqlite
* Make sqlite column migration work
* Remove PostMigrations
These should be replaced with Notification usage
* Remove outer scope from Upgrader
* Remove unececary null check
* Add marker base class for migrations
* Enable scopeless migrations
* Remove unnecessary state check
The final state of the migration is no longer necessarily the final state of the plan.
* Extend ExecutedMigrationPlan
* Ensure that MigrationPlanExecutor.Execute always returns a result.
* Always save final state, regardless of errors
* Remove obsolete Execute
* Add Umbraco specific migration notification
* Publish notification after umbraco migration
* Throw the exception that failed a migration after publishing notification
* Handle notification publishing in DatabaseBuilder
* Fix tests
* Remember to complete scope
* Clean up MigrationPlanExecutor
* Run each package migration in a separate scope
* Add PartialMigrationsTests
* Add unhappy path test
* Fix bug shown by test
* Move PartialMigrationsTests into the correct folder
* Comment out refresh cache in data type migration
Need to add this back again as a notification handler or something.
* Start working on a notification test
* Allow migrations to request a cache rebuild
* Set RebuildCache from MigrateDataTypeConfigurations
* Clean MigrationPlanExecutor
* Add comment explaining the need to partial migration success
* Fix tests
* Allow overriding DefinePlan of UmbracoPlan
This is needed to test the DatabaseBuilder
* Fix notification test
* Don't throw exception to be immediately re-caught
* Assert that scopes notification are always published
* Ensure that scopes are created when requested
* Make test classes internal.
It doesn't really matter, but this way it doesn't show up in intellisense
* Add notification handler for clearing cookies
* Add CompatibilitySuppressions
* Use unscoped migration for adding GUID to user group
* Make sqlite migration work
It's really not pretty, square peg, round hole.
* Don't re-enable foreign keys
This will happen automatically next time a connection is started.
* Scope database when using SQLServer
* Don't call complete transaction
* Tidy up a couple of comment
* Only allow scoping the database from UnscopedMigrationBase
* Fix comment
* Remove remark in UnscopedMigrationBase as it's no longer true
* Add keys when creating default user groups
* Map database value from DTO to entity
* Fix migration
Rename also renamed the foreign keys, making it not work
* Make migration idempotent
* Fix unit test
* Update CompatibilitySuppressions.xml
* Add GetUserGroupByKey to UserService
* Add ByKey endpoint
* Add UniqueId to AppendGroupBy
Otherwise MSSQL grenades
* Ensure that languages are returned by PerformGetByQuery
* add POC displaying model
* Clean up by key controller
* Add GetAllEndpoint
* Add delete endpoint
* Use GetKey to get GUID from id
Instead of pulling up the entire entity.
* Add UserGroup2Permission table
* Fetch the new permissions when getting user groups
* Dont ToString int to parse it to a short
I'm pretty sure this is some way old migration type code that doesn't make any sense anymore
* Add new relation to GetDeleteClauses
* Persist the permissions
* Split UserGroupViewModel into multiple models
This is to make it possible to make endpoints more rest-ish
* Bootstrap create and update endpoints
* Make GetAllUserGroupController paged
* Add method to create IUserGroup from UserGroupSaveModel
* Add sanity check version of endpoint
* Fix persisting permissions
* Map section aliases to the name the frontend expects
This is a temporary fix till we find out how we really want to handle this
* Fix up post merge
* Make naming more consistent
* Implement initial update endpoint
* Fix media start node
* Clean name for XSS when mapping to IUserGroup
* Use a set instead of a list for permission names
We don't want dupes
* Make permission column nvarchar max
* Add UserGroupOperationStatuses
* Add IUserGroupAuthorizationService
* Add specific user group creation method to user service
* Move validating and authorizing into its own methods
* Add operation result to action result mapping
* Update create controller to use the create method
* Fix create end point
* Comment out getting current user untill we have auth
* Add usergroup service
* Obsolete usergroup things from IUserService
* Add update to UserGroupService interface
* User IUserGroupService in controllers
* User async notifications overloads
* Move authorize user group creation into its own service
* Add AuthorizeUserGroupUpdate method
* Make new service implementations internal and sealed
* Add update user
* Add GetAll to usergroup service
* Remove or obsolete usages of GetAllUserGroups
* Add usergroup service to DI
* Remove usage of GetGroupsByAlias
* Remove usages of GetUserGroupByAlias
* Remove usage of GetUserGroupById
* Add new table when creating a new database
* Implement Delete
* Add skip and take to getall
* Move skip take into the service
* Fixup suggestions in user group service
* Fixup unit tests
* Allow admins to change user groups they're not a part of
* Add CompatibilitySuppressions
* Update openapi
* Uppdate OpenApi.json
again
* Add missing compatibility suppression
* Added missing type info in ProducesResponseTypeAttribute
* Added INamedEntityViewModel and added on the relevant view models
* Fixed bug, resulting in serialization not being the same as swagger reported. Now all types objects implementing an interface, is serialized with the $type property
* updated OpenApi.json
* Added missing title in notfound response
* Typo
* .Result to .GetAwaiter().GetResult()
* Update comment to mention it should be implemented on CurrentUserController
* Validate that start nodes actually exists
* Handle not found consistently
* Use iso codes instead of ids
* Update OpenAPI
* Automatically infer statuscode in problemdetails
* Ensure that the language exists
* Fix usergroup 2 permission index
* Validate that group name and alias is not too long
* Only return status from validation
We're just returning the same usergroups, and this is less boilerplate code
* Handle empty and null group names
* Remove group prefix from statuses
* Add some basic validation tests
* Don't allow updating a usergroup to having a duplicate alias
---------
Co-authored-by: Bjarke Berg <mail@bergmania.dk>
* Updated OpenIddict to v4 and when through the migration guide.
(SetAuthorizationEndpointUris and SetTokenEndpointUris should not start with a leading / anymore)
* Fixed issue where the old backoffice did not build
* Fixed build
* Fake a change - hopefully npm can see the file now?
* try using npm install instead of npm ci
* Another trial
* remove build of old backoffice
* Oops build new backoffice - not the old
* rollback changes to static assets
* Foreach csproj file instead. Fix for breaking change in dotnet sdk 7.0.200
* Refactor AllHealthCheckGroupController to return just the names of the groups + changes in the HealthCheckFactory
* Introduce a new "get by name without results" endpoint
* Create a "check" endpoint
* View models changes
* Factory renaming changes
* Remove Task.FromResult
* Update OpenApi.json
* Minor updates
* Inject HealthCheckCollection directly into the factory
* Use language ISO code for language fallback instead of language ID
* Remove language and language ID from dictionary item and dictionary item translation
* ADd unit test for dictionary item translation value extension
* Make the internal service implementations sealed
* Rename translation ISO code to be more explicit in its origin (Language)
* Add breaking changes suppression
* Handle save of invalid fallback iso code
* Fixed test
* Only allow non-UserCustomCulture's
* Fixed and added tests
* Rename ISO code validation method
* Fix language telemetry test (create Swedish with the correct ISO code)
---------
Co-authored-by: Bjarke Berg <mail@bergmania.dk>
* Rework language service and API
* Revert unintended commit of Directory.Build.props
* Create OS conditional test for invalid ISO codes
* Reintroduce and obsolete old Delete method on ILocalizationService + make new Delete method delete by ISO code + add obsoletion attrs to service implementation
* Review comments + utilize new Delete method
* Do not allow model reuse when creating a new language
* Fix bad merge
* Split localization service into dedicated services for language and dictionary item handling
* Replaced ILocalizationService usage in management API (as much as can be done for now)
* Ensure we can create dictionary items with explicit keys (but no duplicates)
* Fix culture controller so it works properly with pagination
* Update OpenAPI JSON
* Actually update the language being updated...
* Unit test for invalid ISO now no longer needs to differ between OS :)
* A little bit of code health improvements
* A litte less code duplication
* Remove duplicate validation
* Fixing a few nullable reference types for log viewer (#13634)
(cherry picked from commit b4ca2a6636)
* Adding LogControllerBase
* Migrating GetLogLevels()
* Migrating GetNumberOfErrors()
* Migrating GetLogLevelCounts()
* Migrating GetCanViewLogs()
* Migrating GetMessageTemplates()
* Migrating GetLogs()
* Migrating GetSavedSearches()
* Migrating PostSavedSearch()
* Migrating DeleteSavedSearch()
* Adding LoggerViewModel
* Adding LogViewModelMapDefinition
* Update OpenApi.json
* Cleanup
* V12: Change nullability for the log searches (#13647)
* Changing nullability
* Obsolete DeleteSavedSearch since the query param is not used
* Fix a bit more referenced
* Add default implementation for the new overload of DeleteSavedSearch
(cherry picked from commit 5e06f5a8a0)
* Updates based on nullability fix
* Adding GetSavedSearchByName
* Implementing ByName endpoint
* Refactoring Delete endpoint based on GetSavedSearchByName
* Refactoring Create endpoint to return the item's location
* Suppress new GetSavedSearchByName in ILogViewer interfaces
* Update OpenApi.json
* Adding github initials to FIXME
* Renaming
* Moving files to Core proj
* Adding GetLogs with skip and take
* Introducing ILogViewerService
* Supressing xml for ILogViewer.GetLogsAsPagedModel()
* Changing to our own Enum representation of LogLevel
* Creating ILogEntry needed for GetPagedLogs()
* Refactoring controllers to use the new logViewerService
* Removing base class methods since those have been moved to the new service
* Removing ErrorCountLogViewerController since the result can be calculated from another endpoint
* Refactoring the MapDefinition because of the new return types from the service
* Update OpenApi.json
* Obsoleting old methods in favor of the ILogViewerService
* Cleanup
* Fixing enum representation as strings for Swagger
* Adding documentation
* Changing enum representation to string in OpenApi.OpenApi.json
* Fix FIXME (use CreatedAtAction)
* Removing JsonStringEnumConverter as there should be another way to fix enum representation for Swagger
* Removing MappingBuilderExtensions and making specific LogViewerBuilderExtensions
* Changes to the .sln file
* Take only the result in the response
* Register the LogViewer extensions
* Update OpenApi.json
* Fix the supressions.xml
* Add inheritdoc
* Remove GetSavedSearchByName as it isn't necessary to introduce it anymore
* Obsolete interfaces
* Rename ViewPermission controller to ValidateLogFileSize
* Make rest of the methods async
* Route name change
* Remove methods obsoletion
* Introduce the "attempt" pattern
* Refactoring of ILogViewerService
* Refactoring controllers
* Another OpenApi.json update
* Adding fixme
* Re-add new client project
Co-authored-by: nikolajlauridsen <nikolajlauridsen@protonmail.ch>
* Rework dictionary CRUD operations
* Update OpenAPI json
* Move responsibility to localization service, introduce new attempt pattern for create and update operations, update unit tests accordingly
* Fix merge
* Rollback assumption that we can map entities from scratch (entity relations got in the way)
* Update OpenAPI JSON
* Add breakage supressions
* Add compat suppressions for integration test project
* Make dictionary item deletion follow same pattern as create and update
* Review comments + update delete to use new pattern
* Update breakage suppressions to match the new Delete method
* Refactored ManagementApiComposer into several extension classes
* ADd support for non-nullable reference types in OpenAPI doc
* Update OpenAPI JSON to reflect new (lack of) nullability
* Don't add factories twice :)
* Rework composing + move backoffice route detection for management API to core
* Template query builder API
* Create a dedicated template service (copy template operations from file service)
* CRUD API for templates
* Make file service consume the template service (remove duplicated code)
* Use the template service in the old template controller so we can track changes better (note: this is breaking, but it doesn't matter as the controller will be deleted)
* Add scaffolding to the template API
* Make the route differ between query settings and execution
* Get rid of ugly string constants
* Refactor query execution a little to improve code health
* Fix build checks (compat)
* Deduce the master template from the template contents
* Make template service async, move master template parsing into template service
* Fix open API test
* Make sure the unit tests use new template parsing
* Add FIXME for SetMasterTemplate
* added obsolete attributes
Co-authored-by: Bjarke Berg <mail@bergmania.dk>
* Add PropertyEditorUiAlias to datatype incl. migration for persistence
* Add configuration validation
* Folder CRUD (reusable for other folder trees) + datatype delete + more RESTish response from datatype create and update
* API for datatype references
* Clean up response types, swagger metadata and fix OpenAPI test
* Allow breakage in the build
* Use yield return pattern
Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
* Fix incorrect return type from references API
Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
* Moved refactor from V12 based branch
* Remove obsolete config property to avoid obsoletion warnings
* Clean up test models
* Make the datatype API a little less confusing by introducing explicit models for create and update
* Remame "Configuration" to "Data" to make FE happy :)
* Safeguard deserialization of empty configs
* Less strict number handling for deserialization
* Prepare for data type config migrations
* Attempt to have contextual config serializers
* Update OpenAPI spec with (temporary) data type controller
* Fix unit tests
* Update compat suppressions (allow breakage for datatype and configuration editor)
* Make the duplicate JsonObjectConverter implementation private
* Adding health check controllers - getAll & getGroupByName
* Adding HealthCheckGroup mapper
* Adding viewModels
* Adding a factory for building a health check group with result view model
* Registering the mapper and factory
* Updating OpenApi.json
* Remove unnecessary checks - we instantiate the target before calling the Map()
* Adding ProducesResponseType for GetAll()
* Fixing usings
* Making checks required for a health check group
* Adding OK() around result to be explicit
* Adding default values to skip and take
* Adding Umbraco.Code comments
* Removing ? from HealthCheckGroupWithResultViewModel return type
* Move the grouping creation to the factory
* Adding Actions[] for each health check + mapping
* Defaulting ValueRequired to false
* Refactoring routes - from health-check to health-check-group
* Move to HealthCheckGroup folder
* Fix OpenApi.json
* Changing class name and making Key of HealthCheckActionViewModel non-nullable
* Fixing namespace
* Migrating ExecuteAction endpoint
* Add execute-action endpoint to OpenApi.json
* Use Task.FromResult() around the action result
* Fixing namespaces and swagger group name
* Fixing naming of the key in the health check action
* Fix tag names in OpenApi.json
* Add status endpoint
* Refactor GetStatus to use a factory for the viewmodel
* Move controllers to correct namespace
* Add response type to GetStatus
* Create query endpoint
* Create GetAll endpoint
* Add by key
* Add delete by key
* Rename enabled controller
* Add SetEnabled endpoint
* Update OpenApi.json
* Replace query endpoint with a optional filter parameter
* Use enum to enabled and disable url tracking
* Update OpenApi.json
* Add bad request response type to GetAll endpoint