Releases: cofoundry-cms/cofoundry
Releases · cofoundry-cms/cofoundry
v0.11.1
0.11.0
0.10.3
0.10.2
0.10.1
0.10.0
Features
Pages and Directories
- #187 Pages / Directories: Restrict by User Area
- #200 Pages / Directories: Increase maximum url slug length
- #464 Page Directories: "Name" property is superfluous
- #465 Pages / Directories: Naming of FullUrl inconsistent
- #288 Page & Custom Entity: Add update date
- #463 Page Directories: extract ChangePageUrlCommand from UpdatePageDirectoryCommand
- #462 Improve Page Message Publishing: Including changed urls and propagate directory changes
- #461 Page Directories: Publish Command Messages
User Areas
- #467 Users: Name should not be required
- #496 Users: Add "DisplayName"
- #495 UserMicroSummary: Remove FirstName, LastName, Email fields
- #490 Users: Deactivate
- #485 Users: Confirm Account
- #479 Self-service Password Reset: Rename to "Account Recovery" and audit/tidy
- #470 User Area Admin: Misc improvements
Configuration
- #493 AuthenticationSettings: Move to UserSettings.Authentication
- #477 UserArea: Make unique validation of emails optional
- #476 User Areas: Configurable Email and Username validation
- #468 Email Uniqueness: Support IDNs and improve uniqueness handling
- #499 Roles: Improve initialization
API Improvements
- #82 UserRepository, LoginService and missing queries/command
- #473 IAdvancedContentRepositoryUserRepository: Move "Current" out to own child repository
- #489 Rework the auth controller helpers, replacing with a solution based on the content repository
- #488 User Auth: Replace ILoginService with Queries and Commands
- #482 UserLoginInfoAuthenticationResult: Replace Error enum with a ValidationError with standardized error codes
- #487 Change uses of the term "Login" and "Logout" to "SignIn" and "SignOut"
- #281 Add message/event publishing for Users
- #474 Remove UserAccountDetails projection
Security
- #494 Users: Soft-deletes should anonymize data
- #492 UserLoginLog: Rename to UserAthentication and move rate limit settings to user settings
- #491 Users: Add duration padding to the execution of commands and queries succeptible to time-based enumeration attacks
- #480 User Admin: Force password reset
- #478 Users: Security stamp / session invalidation
- #469 User Areas: Configurable password policies
- #454 Migrate to ASP.NET Core Identity IPasswordHasher
Mail Templates
- #215 Allow admin mail templates to be easily overridden
Misc
- #405 Show friendly enumeration item names
- #415 Improved handling of AuthenticationFailedException in ApiResponseHelper.RunCommandAsync
- #497 ContentRepository: Add overloads to patch update commands
- #483 IDomainRepository.WithExecutionContext: Support passing in IUserContext
- #472 IUploadedFile: Improve the public API and document
- #484 Domain.Data: Specifiy DateTime properties as DateTimeKind.Utc
- #481 Remove obsolete APIs (pre v0.10)
Bugs
- #409 Improved error handling for serialization errors
- #458 Page Template has two Regions but Admin says it has none
Docs
- #162 Provide better documentation for authentication
- #190 User Areas: Samples and better documentation of creating user management screens
- #200 Add guide for setting up email via plugins
- #423 Configuring data protection system
- #419 Nested Transactions
Breaking changes
Term Changes (system wide)
- Term "PasswordReset" (self-service forgot-password style) changed to "AccountRecovery" to avoid confusion with passwords being reset by an administration user.
- Term "Login/Logged In" changed to "Sign in/signed in"
Models
CustomEntityDetails.FullPathis nowCustomEntityDetails.FullUrlPathIPageRoute.FullPathis nowIPageRoute.FullUrlPathPageRoute.FullPathis nowPageRoute.FullUrlPathCustomEntityPage.FullPathis nowCustomEntityPage.FullUrlPathPageSummary.FullPathis nowPageSummary.FullUrlPathCurrentUserViewHelperContext.IsLoggedInis nowCurrentUserViewHelperContext.IsSignedIn
Queries
GetUserLoginInfoIfAuthenticatedQuerynow returnsUserLoginInfoAuthenticationResultinstead ofUserLoginInfodirectly and now includes checks for max login attempt validation.- Role queries such as
GetRoleByIdQuerynow return null if an id is specified but no role is found. The original behavior returned the anonymous role, which was unintentional; specifying null as the Id however still returns the anonymous role as intended. GetEntityDependencySummaryByRelatedEntityis nowGetEntityDependencySummaryByRelatedEntityId(naming consistency)IsEmailUniqueQueryis nowIsUserEmailAddressUniqueQueryGetUserLoginInfoIfAuthenticatedQueryis nowAuthenticateUserCredentialsQueryGetUpdateCommandQueryis nowGetPatchableCommandQueryGetUpdateCommandByIdQueryis nowGetPatchableCommandByIdQuery
Commands
AddCofoundryUserCommandhas been removed and replaced with the more genericAddUserWithTemporaryPassword.- Url updating parts of
UpdatePageDirectoryCommandreplaced with dedicatedUpdatePageUrlCommand CompleteUserPasswordResetCommandis nowCompleteUserPasswordResetRequestCommandInitiatePasswordResetRequestCommandis nowInitiateUserPasswordResetRequestCommandCompleteUserAccountRecoveryByEmailCommand.SendNotificationhas been removed and replaced with a config settingCofoundry:Users:Password:SendNotificationOnUpdateUpdateUnauthenticatedUserPasswordCommandis nowUpdateUserPasswordByCredentialsCommandUpdateCurrentUserAccountCommandis nowUpdateCurrentUserCommand
Content Repository
IAdvancedContentreporsitory.Users().AddUserCommandAsyncis nowIAdvancedContentreporsitory.Users().AddUserWithTemporaryPasswordAsyncContentRepository.Users().AddUserWithTemporaryPasswordAsync()is nowContentRepository.Users().AddWithTemporaryPasswordAsync()ContentRepository.Users().UpdateUserAsync()is nowContentRepository.Users().UpdateAsync()ContentRepository.Users().DeleteUserAsync()is nowContentRepository.Users().DeleteAsync()IAdvancedRepository.Users().IsEmailUniqueAsyncis nowIAdvancedRepository.Users().IsEmailAddressUniqueAsyncIContentRepository.CustomEntities().GetByDefinitionCode(string).AsRenderSummary()is nowAsRenderSummaries()
Auth
IAuthConfigurationhas been updated to make it easier to override specific parts of the configuration. See the class for more details.CofoundryAuthenticationConstants.FormatAuthenticationSchemeis nowAuthenticationSchemes.UserAreaIUserAreaDefinition.IsDefaultAuthSchemais nowIUserAreaDefinition.IsDefaultAuthScheme(typo)AuthenticationFailedExceptionhas been removed as it is unused. If an action is not permitted useNotPermittedExceptioninstead.
Misc
IUserAreaDefinitionRepository.GetByCoderenamedIUserAreaDefinitionRepository.GetRequiredByCodeto be consistent with other definition repositories- Much of Cofoundry.Web.Identity has changed, but should still be familiar. If you're using these do check ...
0.9.2
0.9.1
0.9.0
Features
- #325 Support multiple nested data model type options (NestedDataModelMultiTypeCollectionAttribute)
- #181 Dynamic data model: Default values
- #397 IApiResponseHelper should use IJsonSerializerSettingsFactory
- #338 Annotate a field as non editable in a Custom Entity
- #311 Admin panel: Add field/picker for date and time
- #312 Admin panel: Add field for decimal/double/float
- #388 ImageCollection does not support tag filtering or preview dimensions
- #392
ImageUpload: Resize images client side if they exceed limits - #377 TinyMCE: source editor monospaced font, full screen display bug
- #381 Admin: Panel should fill width if there are no actions
- #390 InMemoryObjectCache: Allow configuraiton of cache lifetimes
- #387 ContentRepository: Missing GetCustomEntityRenderSummariesByUrlSlugQuery
Bug fixes
- #379 Admin: Search Filter prevents links in the header from being clicked.
- #389 PageTemplateRegistrationException: Duplicate template region
- #373 Visual Editor does not load when Application Insights is configured
- #364 Visual Editor does not work when no layout file is specified
- #330 Way to disable Html Sanitizer on RawHtmlDataModel Region/Blocks
- #320 Option List using IListOptionApiSource: Issues with API location and formatting
- #380 Admin: Text in tables is not selectable
- #342 Data Annotations in Nested Data Models not validating
- #344 Data model annotations for image size are ignored when uploading image during a page edit
Breaking changes
IApiControllermethods now returnsJsonResultinstead ofIActionResultIApiControllermethods no longer require aControllerparameter- The UI editor associated with the
[Date]annotation now captures UTC time instead of local time. To capture local time use the[DateLocal]data annotation instead. - Razor comments blocks are now removed when parsing PageTemplate files
Other notable changes
- The front-end build for the admin panel has been rewritten to use Gulp, it's now less verbose and easier to use in plugins and custom modules, although it is still a non-documented feature and liable to change in an upcoming refresh of the admin panel framework.
- Column titles can now be customized in the display table rendered for a
[CustomEntityMultiTypeCollection]data annotation.
See the announcement blog post for full details.