From 5c85848a3bfdcc987ef0c7d6012a3634d0143cbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20G=C3=B6pel?= <22834588+derandre84@users.noreply.github.com> Date: Wed, 13 May 2026 11:47:07 +0700 Subject: [PATCH 1/9] Rename solution from MembersArea to AppFoundation Renames all project folders, .csproj files, namespaces, solution file, Docker/Aspire config, and connection string keys from MembersArea to AppFoundation. AndreGoepel.Marten.Identity is unchanged. Co-Authored-By: Claude Sonnet 4.6 --- .../.dockerignore | 0 .../.aspire/settings.json | 0 .../AndreGoepel.AppFoundation.AppHost.csproj | 0 .../AndreGoepel.AppFoundation.AppHost}/AppHost.cs | 0 .../Properties/launchSettings.json | 0 .../appsettings.Development.json | 0 .../appsettings.json | 0 ...dreGoepel.AppFoundation.MailService.Tests.csproj | 0 .../GlobalUsings.cs | 0 .../SendEmailMessageHandler.Tests.cs | 0 .../SmtpEmailSender.Tests.cs | 0 .../AndreGoepel.AppFoundation.MailService.csproj | 0 .../IEmailSender.cs | 0 .../InitializerExtension.cs | 0 .../MailConfiguration.cs | 0 .../MailMessage.cs | 0 .../SendEmailMessageHandler.cs | 0 .../SmtpEmailSender.cs | 0 ...AndreGoepel.AppFoundation.ServiceDefaults.csproj | 0 .../Extensions.cs | 0 .../Account/CookieLoginMiddleware.Tests.cs | 0 .../Account/IdentityEmailSender.Tests.cs | 0 .../Account/Pages/ConfirmEmail.Tests.cs | 0 .../Account/Pages/ConfirmEmailChange.Tests.cs | 0 .../Account/Pages/LoginWith2fa.Tests.cs | 0 .../Account/Pages/LoginWithRecoveryCode.Tests.cs | 0 .../Account/Pages/RegisterConfirmation.Tests.cs | 0 .../Account/Pages/ResetPassword.Tests.cs | 0 .../Account/Pages/StaticPages.Tests.cs | 0 .../Account/Shared/RedirectToLogin.Tests.cs | 0 .../Account/Shared/ShowRecoveryCodes.Tests.cs | 0 .../AndreGoepel.AppFoundation.Tests.csproj | 0 .../GlobalUsings.cs | 0 .../Shared/LinkButton.Tests.cs | 0 .../AndreGoepel.AppFoundation.slnx | 0 .../AndreGoepel.AppFoundation.csproj | 0 .../Components/Account/CookieLoginMiddleware.cs | 0 ...ntityComponentsEndpointRouteBuilderExtensions.cs | 0 .../Components/Account/IdentityEmailSender.cs | 0 ...entityRevalidatingAuthenticationStateProvider.cs | 0 .../Components/Account/Pages/AccessDenied.razor | 0 .../Components/Account/Pages/ConfirmEmail.razor | 0 .../Account/Pages/ConfirmEmailChange.razor | 0 .../Components/Account/Pages/ForgotPassword.razor | 0 .../Account/Pages/ForgotPasswordConfirmation.razor | 0 .../Account/Pages/InvalidPasswordReset.razor | 0 .../Components/Account/Pages/InvalidUser.razor | 0 .../Components/Account/Pages/Lockout.razor | 0 .../Components/Account/Pages/Login.razor | 0 .../Components/Account/Pages/LoginForm.razor | 0 .../Components/Account/Pages/LoginWith2fa.razor | 0 .../Account/Pages/LoginWithRecoveryCode.razor | 0 .../Account/Pages/Manage/ChangePassword.razor | 0 .../Account/Pages/Manage/DeletePersonalData.razor | 0 .../Account/Pages/Manage/Disable2fa.razor | 0 .../Components/Account/Pages/Manage/Email.razor | 0 .../Account/Pages/Manage/EnableAuthenticator.razor | 0 .../Pages/Manage/GenerateRecoveryCodes.razor | 0 .../Account/Pages/Manage/PasskeyCreate.razor | 0 .../Components/Account/Pages/Manage/Passkeys.razor | 0 .../Account/Pages/Manage/PersonalData.razor | 0 .../Components/Account/Pages/Manage/Profile.razor | 0 .../Account/Pages/Manage/RenamePasskey.razor | 0 .../Account/Pages/Manage/ResetAuthenticator.razor | 0 .../Account/Pages/Manage/SetPassword.razor | 0 .../Pages/Manage/TwoFactorAuthentication.razor | 0 .../Components/Account/Pages/Manage/_Imports.razor | 0 .../Components/Account/Pages/Register.razor | 0 .../Account/Pages/RegisterConfirmation.razor | 0 .../Account/Pages/ResendEmailConfirmation.razor | 0 .../Components/Account/Pages/ResetPassword.razor | 0 .../Account/Pages/ResetPasswordConfirmation.razor | 0 .../Components/Account/PasskeyInputModel.cs | 0 .../Components/Account/PasskeyOperation.cs | 0 .../Components/Account/SetupRedirectMiddleware.cs | 0 .../Components/Account/Shared/PasskeySubmit.razor | 0 .../Account/Shared/PasskeySubmit.razor.js | 0 .../Components/Account/Shared/RedirectToLogin.razor | 0 .../Account/Shared/ShowRecoveryCodes.razor | 0 .../Components/Administration/Dialogs/NewRole.razor | 0 .../Administration/Dialogs/RoleUserDialog.razor | 0 .../Administration/Dialogs/UserRoleDialog.razor | 0 .../Components/Administration/Pages/Roles.razor | 0 .../Components/Administration/Pages/Users.razor | 0 .../Components/Administration/_Imports.razor | 0 .../AndreGoepel.AppFoundation}/Components/App.razor | 0 .../Components/Layout/LoginLayout.razor | 0 .../Components/Layout/LoginLayout.razor.css | 0 .../Components/Layout/MainLayout.razor | 0 .../Components/Layout/MainLayout.razor.css | 0 .../Components/Layout/NavMenu.razor | 0 .../Components/Layout/ReconnectModal.razor | 0 .../Components/Layout/ReconnectModal.razor.css | 0 .../Components/Layout/ReconnectModal.razor.js | 0 .../Components/Pages/Error.razor | 0 .../Components/Pages/Home.razor | 0 .../Components/Pages/NotFound.razor | 0 .../Components/Pages/Setup.razor | 0 .../Components/Routes.razor | 0 .../Components/Shared/LinkButton.razor | 0 .../Components/_Imports.razor | 0 .../AndreGoepel.AppFoundation}/Dockerfile | 0 .../AndreGoepel.AppFoundation}/Program.cs | 0 .../Properties/launchSettings.json | 0 .../Properties/serviceDependencies.json | 0 .../Properties/serviceDependencies.local.json | 0 .../appsettings.Development.json | 0 .../AndreGoepel.AppFoundation}/appsettings.json | 0 .../AndreGoepel.AppFoundation}/dotnet-tools.json | 0 .../AndreGoepel.AppFoundation}/wwwroot/app.css | 0 .../AndreGoepel.AppFoundation}/wwwroot/favicon.png | Bin .../AndreGoepel.Marten.Identity.Tests.csproj | 0 .../GlobalUsings.cs | 0 .../Roles/RoleId.Tests.cs | 0 .../Roles/RoleProjection.Tests.cs | 0 .../Services/CurrentUserService.Tests.cs | 0 .../Users/UserExtension.Tests.cs | 0 .../Users/UserId.Tests.cs | 0 .../Users/UserPasskey.Tests.cs | 0 .../Users/UserPasskeyInfoExtension.Tests.cs | 0 .../Users/UserProjection.Tests.cs | 0 .../AndreGoepel.Marten.Identity.csproj | 0 .../AndreGoepel.Marten.Identity/Initialization.cs | 0 .../Roles/Events/RoleChanged.cs | 0 .../Roles/Events/RoleCreated.cs | 0 .../Roles/Events/RoleDeleted.cs | 0 .../Roles/InitializationExtension.cs | 0 .../AndreGoepel.Marten.Identity/Roles/Role.cs | 0 .../AndreGoepel.Marten.Identity/Roles/RoleId.cs | 0 .../Roles/RoleProjection.cs | 0 .../AndreGoepel.Marten.Identity/Roles/RoleStore.cs | 0 .../AndreGoepel.Marten.Identity/Roles/Roles.cs | 0 .../Services/CurrentUserService.cs | 0 .../UserRoles/InitializationExtension.cs | 0 .../UserRoles/UserRoleAssignment.cs | 0 .../UserRoles/UserRoleAssignmentProjection.cs | 0 .../Users/Events/PasskeyCreated.cs | 0 .../Users/Events/PasskeyDeleted.cs | 0 .../Users/Events/PasskeyUpdated.cs | 0 .../Users/Events/RoleAssigned.cs | 0 .../Users/Events/RoleUnassigned.cs | 0 .../Users/Events/UserCreated.cs | 0 .../Users/Events/UserDeleted.cs | 0 .../Users/Events/UserLogin.cs | 0 .../Users/Events/UserUpdated.cs | 0 .../Users/InitializationExtension.cs | 0 .../AndreGoepel.Marten.Identity/Users/User.cs | 0 .../Users/UserExtension.cs | 0 .../AndreGoepel.Marten.Identity/Users/UserId.cs | 0 .../Users/UserPasskey.cs | 0 .../Users/UserPasskeyId.cs | 0 .../Users/UserPasskeyInfoExtension.cs | 0 .../Users/UserProjection.cs | 0 .../AndreGoepel.Marten.Identity/Users/UserStore.cs | 0 .../App.razor | 0 .../docker-compose.dcproj | 0 .../docker-compose.override.yml | 0 .../docker-compose.yml | 0 .../launchSettings.json | 0 159 files changed, 0 insertions(+), 0 deletions(-) rename {AndreGoepel.MembersArea => AndreGoepel.AppFoundation}/.dockerignore (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea.AppHost => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.AppHost}/.aspire/settings.json (100%) rename AndreGoepel.MembersArea/AndreGoepel.MembersArea.AppHost/AndreGoepel.MembersArea.AppHost.csproj => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.AppHost/AndreGoepel.AppFoundation.AppHost.csproj (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea.AppHost => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.AppHost}/AppHost.cs (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea.AppHost => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.AppHost}/Properties/launchSettings.json (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea.AppHost => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.AppHost}/appsettings.Development.json (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea.AppHost => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.AppHost}/appsettings.json (100%) rename AndreGoepel.MembersArea/AndreGoepel.MembersArea.MailService.Tests/AndreGoepel.MembersArea.MailService.Tests.csproj => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService.Tests/AndreGoepel.AppFoundation.MailService.Tests.csproj (100%) rename {AndreGoepel.MembersArea/AndreGoepel.Marten.Identity.Tests => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService.Tests}/GlobalUsings.cs (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea.MailService.Tests => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService.Tests}/SendEmailMessageHandler.Tests.cs (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea.MailService.Tests => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService.Tests}/SmtpEmailSender.Tests.cs (100%) rename AndreGoepel.MembersArea/AndreGoepel.MembersArea.MailService/AndreGoepel.MembersArea.MailService.csproj => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService/AndreGoepel.AppFoundation.MailService.csproj (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea.MailService => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService}/IEmailSender.cs (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea.MailService => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService}/InitializerExtension.cs (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea.MailService => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService}/MailConfiguration.cs (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea.MailService => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService}/MailMessage.cs (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea.MailService => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService}/SendEmailMessageHandler.cs (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea.MailService => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService}/SmtpEmailSender.cs (100%) rename AndreGoepel.MembersArea/AndreGoepel.MembersArea.ServiceDefaults/AndreGoepel.MembersArea.ServiceDefaults.csproj => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.ServiceDefaults/AndreGoepel.AppFoundation.ServiceDefaults.csproj (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea.ServiceDefaults => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.ServiceDefaults}/Extensions.cs (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea.Tests => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests}/Account/CookieLoginMiddleware.Tests.cs (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea.Tests => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests}/Account/IdentityEmailSender.Tests.cs (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea.Tests => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests}/Account/Pages/ConfirmEmail.Tests.cs (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea.Tests => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests}/Account/Pages/ConfirmEmailChange.Tests.cs (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea.Tests => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests}/Account/Pages/LoginWith2fa.Tests.cs (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea.Tests => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests}/Account/Pages/LoginWithRecoveryCode.Tests.cs (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea.Tests => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests}/Account/Pages/RegisterConfirmation.Tests.cs (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea.Tests => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests}/Account/Pages/ResetPassword.Tests.cs (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea.Tests => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests}/Account/Pages/StaticPages.Tests.cs (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea.Tests => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests}/Account/Shared/RedirectToLogin.Tests.cs (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea.Tests => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests}/Account/Shared/ShowRecoveryCodes.Tests.cs (100%) rename AndreGoepel.MembersArea/AndreGoepel.MembersArea.Tests/AndreGoepel.MembersArea.Tests.csproj => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/AndreGoepel.AppFoundation.Tests.csproj (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea.MailService.Tests => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests}/GlobalUsings.cs (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea.Tests => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests}/Shared/LinkButton.Tests.cs (100%) rename AndreGoepel.MembersArea/AndreGoepel.MembersArea.slnx => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.slnx (100%) rename AndreGoepel.MembersArea/AndreGoepel.MembersArea/AndreGoepel.MembersArea.csproj => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.csproj (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Account/CookieLoginMiddleware.cs (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Account/IdentityComponentsEndpointRouteBuilderExtensions.cs (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Account/IdentityEmailSender.cs (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Account/IdentityRevalidatingAuthenticationStateProvider.cs (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Account/Pages/AccessDenied.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Account/Pages/ConfirmEmail.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Account/Pages/ConfirmEmailChange.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Account/Pages/ForgotPassword.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Account/Pages/ForgotPasswordConfirmation.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Account/Pages/InvalidPasswordReset.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Account/Pages/InvalidUser.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Account/Pages/Lockout.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Account/Pages/Login.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Account/Pages/LoginForm.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Account/Pages/LoginWith2fa.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Account/Pages/LoginWithRecoveryCode.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Account/Pages/Manage/ChangePassword.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Account/Pages/Manage/DeletePersonalData.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Account/Pages/Manage/Disable2fa.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Account/Pages/Manage/Email.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Account/Pages/Manage/EnableAuthenticator.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Account/Pages/Manage/GenerateRecoveryCodes.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Account/Pages/Manage/PasskeyCreate.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Account/Pages/Manage/Passkeys.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Account/Pages/Manage/PersonalData.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Account/Pages/Manage/Profile.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Account/Pages/Manage/RenamePasskey.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Account/Pages/Manage/ResetAuthenticator.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Account/Pages/Manage/SetPassword.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Account/Pages/Manage/TwoFactorAuthentication.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Account/Pages/Manage/_Imports.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Account/Pages/Register.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Account/Pages/RegisterConfirmation.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Account/Pages/ResendEmailConfirmation.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Account/Pages/ResetPassword.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Account/Pages/ResetPasswordConfirmation.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Account/PasskeyInputModel.cs (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Account/PasskeyOperation.cs (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Account/SetupRedirectMiddleware.cs (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Account/Shared/PasskeySubmit.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Account/Shared/PasskeySubmit.razor.js (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Account/Shared/RedirectToLogin.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Account/Shared/ShowRecoveryCodes.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Administration/Dialogs/NewRole.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Administration/Dialogs/RoleUserDialog.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Administration/Dialogs/UserRoleDialog.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Administration/Pages/Roles.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Administration/Pages/Users.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Administration/_Imports.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/App.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Layout/LoginLayout.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Layout/LoginLayout.razor.css (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Layout/MainLayout.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Layout/MainLayout.razor.css (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Layout/NavMenu.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Layout/ReconnectModal.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Layout/ReconnectModal.razor.css (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Layout/ReconnectModal.razor.js (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Pages/Error.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Pages/Home.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Pages/NotFound.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Pages/Setup.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Routes.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/Shared/LinkButton.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Components/_Imports.razor (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Dockerfile (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Program.cs (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Properties/launchSettings.json (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Properties/serviceDependencies.json (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/Properties/serviceDependencies.local.json (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/appsettings.Development.json (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/appsettings.json (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/dotnet-tools.json (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/wwwroot/app.css (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea => AndreGoepel.AppFoundation/AndreGoepel.AppFoundation}/wwwroot/favicon.png (100%) rename {AndreGoepel.MembersArea => AndreGoepel.AppFoundation}/AndreGoepel.Marten.Identity.Tests/AndreGoepel.Marten.Identity.Tests.csproj (100%) rename {AndreGoepel.MembersArea/AndreGoepel.MembersArea.Tests => AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Tests}/GlobalUsings.cs (100%) rename {AndreGoepel.MembersArea => AndreGoepel.AppFoundation}/AndreGoepel.Marten.Identity.Tests/Roles/RoleId.Tests.cs (100%) rename {AndreGoepel.MembersArea => AndreGoepel.AppFoundation}/AndreGoepel.Marten.Identity.Tests/Roles/RoleProjection.Tests.cs (100%) rename {AndreGoepel.MembersArea => AndreGoepel.AppFoundation}/AndreGoepel.Marten.Identity.Tests/Services/CurrentUserService.Tests.cs (100%) rename {AndreGoepel.MembersArea => AndreGoepel.AppFoundation}/AndreGoepel.Marten.Identity.Tests/Users/UserExtension.Tests.cs (100%) rename {AndreGoepel.MembersArea => AndreGoepel.AppFoundation}/AndreGoepel.Marten.Identity.Tests/Users/UserId.Tests.cs (100%) rename {AndreGoepel.MembersArea => AndreGoepel.AppFoundation}/AndreGoepel.Marten.Identity.Tests/Users/UserPasskey.Tests.cs (100%) rename {AndreGoepel.MembersArea => AndreGoepel.AppFoundation}/AndreGoepel.Marten.Identity.Tests/Users/UserPasskeyInfoExtension.Tests.cs (100%) rename {AndreGoepel.MembersArea => AndreGoepel.AppFoundation}/AndreGoepel.Marten.Identity.Tests/Users/UserProjection.Tests.cs (100%) rename {AndreGoepel.MembersArea => AndreGoepel.AppFoundation}/AndreGoepel.Marten.Identity/AndreGoepel.Marten.Identity.csproj (100%) rename {AndreGoepel.MembersArea => AndreGoepel.AppFoundation}/AndreGoepel.Marten.Identity/Initialization.cs (100%) rename {AndreGoepel.MembersArea => AndreGoepel.AppFoundation}/AndreGoepel.Marten.Identity/Roles/Events/RoleChanged.cs (100%) rename {AndreGoepel.MembersArea => AndreGoepel.AppFoundation}/AndreGoepel.Marten.Identity/Roles/Events/RoleCreated.cs (100%) rename {AndreGoepel.MembersArea => AndreGoepel.AppFoundation}/AndreGoepel.Marten.Identity/Roles/Events/RoleDeleted.cs (100%) rename {AndreGoepel.MembersArea => AndreGoepel.AppFoundation}/AndreGoepel.Marten.Identity/Roles/InitializationExtension.cs (100%) rename {AndreGoepel.MembersArea => AndreGoepel.AppFoundation}/AndreGoepel.Marten.Identity/Roles/Role.cs (100%) rename {AndreGoepel.MembersArea => AndreGoepel.AppFoundation}/AndreGoepel.Marten.Identity/Roles/RoleId.cs (100%) rename {AndreGoepel.MembersArea => AndreGoepel.AppFoundation}/AndreGoepel.Marten.Identity/Roles/RoleProjection.cs (100%) rename {AndreGoepel.MembersArea => AndreGoepel.AppFoundation}/AndreGoepel.Marten.Identity/Roles/RoleStore.cs (100%) rename {AndreGoepel.MembersArea => AndreGoepel.AppFoundation}/AndreGoepel.Marten.Identity/Roles/Roles.cs (100%) rename {AndreGoepel.MembersArea => AndreGoepel.AppFoundation}/AndreGoepel.Marten.Identity/Services/CurrentUserService.cs (100%) rename {AndreGoepel.MembersArea => AndreGoepel.AppFoundation}/AndreGoepel.Marten.Identity/UserRoles/InitializationExtension.cs (100%) rename {AndreGoepel.MembersArea => AndreGoepel.AppFoundation}/AndreGoepel.Marten.Identity/UserRoles/UserRoleAssignment.cs (100%) rename {AndreGoepel.MembersArea => AndreGoepel.AppFoundation}/AndreGoepel.Marten.Identity/UserRoles/UserRoleAssignmentProjection.cs (100%) rename {AndreGoepel.MembersArea => AndreGoepel.AppFoundation}/AndreGoepel.Marten.Identity/Users/Events/PasskeyCreated.cs (100%) rename {AndreGoepel.MembersArea => AndreGoepel.AppFoundation}/AndreGoepel.Marten.Identity/Users/Events/PasskeyDeleted.cs (100%) rename {AndreGoepel.MembersArea => AndreGoepel.AppFoundation}/AndreGoepel.Marten.Identity/Users/Events/PasskeyUpdated.cs (100%) rename {AndreGoepel.MembersArea => AndreGoepel.AppFoundation}/AndreGoepel.Marten.Identity/Users/Events/RoleAssigned.cs (100%) rename {AndreGoepel.MembersArea => AndreGoepel.AppFoundation}/AndreGoepel.Marten.Identity/Users/Events/RoleUnassigned.cs (100%) rename {AndreGoepel.MembersArea => AndreGoepel.AppFoundation}/AndreGoepel.Marten.Identity/Users/Events/UserCreated.cs (100%) rename {AndreGoepel.MembersArea => AndreGoepel.AppFoundation}/AndreGoepel.Marten.Identity/Users/Events/UserDeleted.cs (100%) rename {AndreGoepel.MembersArea => AndreGoepel.AppFoundation}/AndreGoepel.Marten.Identity/Users/Events/UserLogin.cs (100%) rename {AndreGoepel.MembersArea => AndreGoepel.AppFoundation}/AndreGoepel.Marten.Identity/Users/Events/UserUpdated.cs (100%) rename {AndreGoepel.MembersArea => AndreGoepel.AppFoundation}/AndreGoepel.Marten.Identity/Users/InitializationExtension.cs (100%) rename {AndreGoepel.MembersArea => AndreGoepel.AppFoundation}/AndreGoepel.Marten.Identity/Users/User.cs (100%) rename {AndreGoepel.MembersArea => AndreGoepel.AppFoundation}/AndreGoepel.Marten.Identity/Users/UserExtension.cs (100%) rename {AndreGoepel.MembersArea => AndreGoepel.AppFoundation}/AndreGoepel.Marten.Identity/Users/UserId.cs (100%) rename {AndreGoepel.MembersArea => AndreGoepel.AppFoundation}/AndreGoepel.Marten.Identity/Users/UserPasskey.cs (100%) rename {AndreGoepel.MembersArea => AndreGoepel.AppFoundation}/AndreGoepel.Marten.Identity/Users/UserPasskeyId.cs (100%) rename {AndreGoepel.MembersArea => AndreGoepel.AppFoundation}/AndreGoepel.Marten.Identity/Users/UserPasskeyInfoExtension.cs (100%) rename {AndreGoepel.MembersArea => AndreGoepel.AppFoundation}/AndreGoepel.Marten.Identity/Users/UserProjection.cs (100%) rename {AndreGoepel.MembersArea => AndreGoepel.AppFoundation}/AndreGoepel.Marten.Identity/Users/UserStore.cs (100%) rename {AndreGoepel.MembersArea => AndreGoepel.AppFoundation}/App.razor (100%) rename {AndreGoepel.MembersArea => AndreGoepel.AppFoundation}/docker-compose.dcproj (100%) rename {AndreGoepel.MembersArea => AndreGoepel.AppFoundation}/docker-compose.override.yml (100%) rename {AndreGoepel.MembersArea => AndreGoepel.AppFoundation}/docker-compose.yml (100%) rename {AndreGoepel.MembersArea => AndreGoepel.AppFoundation}/launchSettings.json (100%) diff --git a/AndreGoepel.MembersArea/.dockerignore b/AndreGoepel.AppFoundation/.dockerignore similarity index 100% rename from AndreGoepel.MembersArea/.dockerignore rename to AndreGoepel.AppFoundation/.dockerignore diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea.AppHost/.aspire/settings.json b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.AppHost/.aspire/settings.json similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea.AppHost/.aspire/settings.json rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.AppHost/.aspire/settings.json diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea.AppHost/AndreGoepel.MembersArea.AppHost.csproj b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.AppHost/AndreGoepel.AppFoundation.AppHost.csproj similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea.AppHost/AndreGoepel.MembersArea.AppHost.csproj rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.AppHost/AndreGoepel.AppFoundation.AppHost.csproj diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea.AppHost/AppHost.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.AppHost/AppHost.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea.AppHost/AppHost.cs rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.AppHost/AppHost.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea.AppHost/Properties/launchSettings.json b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.AppHost/Properties/launchSettings.json similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea.AppHost/Properties/launchSettings.json rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.AppHost/Properties/launchSettings.json diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea.AppHost/appsettings.Development.json b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.AppHost/appsettings.Development.json similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea.AppHost/appsettings.Development.json rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.AppHost/appsettings.Development.json diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea.AppHost/appsettings.json b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.AppHost/appsettings.json similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea.AppHost/appsettings.json rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.AppHost/appsettings.json diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea.MailService.Tests/AndreGoepel.MembersArea.MailService.Tests.csproj b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService.Tests/AndreGoepel.AppFoundation.MailService.Tests.csproj similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea.MailService.Tests/AndreGoepel.MembersArea.MailService.Tests.csproj rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService.Tests/AndreGoepel.AppFoundation.MailService.Tests.csproj diff --git a/AndreGoepel.MembersArea/AndreGoepel.Marten.Identity.Tests/GlobalUsings.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService.Tests/GlobalUsings.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.Marten.Identity.Tests/GlobalUsings.cs rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService.Tests/GlobalUsings.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea.MailService.Tests/SendEmailMessageHandler.Tests.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService.Tests/SendEmailMessageHandler.Tests.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea.MailService.Tests/SendEmailMessageHandler.Tests.cs rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService.Tests/SendEmailMessageHandler.Tests.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea.MailService.Tests/SmtpEmailSender.Tests.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService.Tests/SmtpEmailSender.Tests.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea.MailService.Tests/SmtpEmailSender.Tests.cs rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService.Tests/SmtpEmailSender.Tests.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea.MailService/AndreGoepel.MembersArea.MailService.csproj b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService/AndreGoepel.AppFoundation.MailService.csproj similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea.MailService/AndreGoepel.MembersArea.MailService.csproj rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService/AndreGoepel.AppFoundation.MailService.csproj diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea.MailService/IEmailSender.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService/IEmailSender.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea.MailService/IEmailSender.cs rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService/IEmailSender.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea.MailService/InitializerExtension.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService/InitializerExtension.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea.MailService/InitializerExtension.cs rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService/InitializerExtension.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea.MailService/MailConfiguration.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService/MailConfiguration.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea.MailService/MailConfiguration.cs rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService/MailConfiguration.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea.MailService/MailMessage.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService/MailMessage.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea.MailService/MailMessage.cs rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService/MailMessage.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea.MailService/SendEmailMessageHandler.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService/SendEmailMessageHandler.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea.MailService/SendEmailMessageHandler.cs rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService/SendEmailMessageHandler.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea.MailService/SmtpEmailSender.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService/SmtpEmailSender.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea.MailService/SmtpEmailSender.cs rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService/SmtpEmailSender.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea.ServiceDefaults/AndreGoepel.MembersArea.ServiceDefaults.csproj b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.ServiceDefaults/AndreGoepel.AppFoundation.ServiceDefaults.csproj similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea.ServiceDefaults/AndreGoepel.MembersArea.ServiceDefaults.csproj rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.ServiceDefaults/AndreGoepel.AppFoundation.ServiceDefaults.csproj diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea.ServiceDefaults/Extensions.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.ServiceDefaults/Extensions.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea.ServiceDefaults/Extensions.cs rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.ServiceDefaults/Extensions.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea.Tests/Account/CookieLoginMiddleware.Tests.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/CookieLoginMiddleware.Tests.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea.Tests/Account/CookieLoginMiddleware.Tests.cs rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/CookieLoginMiddleware.Tests.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea.Tests/Account/IdentityEmailSender.Tests.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/IdentityEmailSender.Tests.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea.Tests/Account/IdentityEmailSender.Tests.cs rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/IdentityEmailSender.Tests.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea.Tests/Account/Pages/ConfirmEmail.Tests.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/ConfirmEmail.Tests.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea.Tests/Account/Pages/ConfirmEmail.Tests.cs rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/ConfirmEmail.Tests.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea.Tests/Account/Pages/ConfirmEmailChange.Tests.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/ConfirmEmailChange.Tests.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea.Tests/Account/Pages/ConfirmEmailChange.Tests.cs rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/ConfirmEmailChange.Tests.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea.Tests/Account/Pages/LoginWith2fa.Tests.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/LoginWith2fa.Tests.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea.Tests/Account/Pages/LoginWith2fa.Tests.cs rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/LoginWith2fa.Tests.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea.Tests/Account/Pages/LoginWithRecoveryCode.Tests.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/LoginWithRecoveryCode.Tests.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea.Tests/Account/Pages/LoginWithRecoveryCode.Tests.cs rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/LoginWithRecoveryCode.Tests.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea.Tests/Account/Pages/RegisterConfirmation.Tests.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/RegisterConfirmation.Tests.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea.Tests/Account/Pages/RegisterConfirmation.Tests.cs rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/RegisterConfirmation.Tests.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea.Tests/Account/Pages/ResetPassword.Tests.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/ResetPassword.Tests.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea.Tests/Account/Pages/ResetPassword.Tests.cs rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/ResetPassword.Tests.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea.Tests/Account/Pages/StaticPages.Tests.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/StaticPages.Tests.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea.Tests/Account/Pages/StaticPages.Tests.cs rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/StaticPages.Tests.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea.Tests/Account/Shared/RedirectToLogin.Tests.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Shared/RedirectToLogin.Tests.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea.Tests/Account/Shared/RedirectToLogin.Tests.cs rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Shared/RedirectToLogin.Tests.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea.Tests/Account/Shared/ShowRecoveryCodes.Tests.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Shared/ShowRecoveryCodes.Tests.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea.Tests/Account/Shared/ShowRecoveryCodes.Tests.cs rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Shared/ShowRecoveryCodes.Tests.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea.Tests/AndreGoepel.MembersArea.Tests.csproj b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/AndreGoepel.AppFoundation.Tests.csproj similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea.Tests/AndreGoepel.MembersArea.Tests.csproj rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/AndreGoepel.AppFoundation.Tests.csproj diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea.MailService.Tests/GlobalUsings.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/GlobalUsings.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea.MailService.Tests/GlobalUsings.cs rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/GlobalUsings.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea.Tests/Shared/LinkButton.Tests.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Shared/LinkButton.Tests.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea.Tests/Shared/LinkButton.Tests.cs rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Shared/LinkButton.Tests.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea.slnx b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.slnx similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea.slnx rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.slnx diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/AndreGoepel.MembersArea.csproj b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.csproj similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/AndreGoepel.MembersArea.csproj rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.csproj diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/CookieLoginMiddleware.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/CookieLoginMiddleware.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/CookieLoginMiddleware.cs rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/CookieLoginMiddleware.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/IdentityComponentsEndpointRouteBuilderExtensions.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/IdentityComponentsEndpointRouteBuilderExtensions.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/IdentityComponentsEndpointRouteBuilderExtensions.cs rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/IdentityComponentsEndpointRouteBuilderExtensions.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/IdentityEmailSender.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/IdentityEmailSender.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/IdentityEmailSender.cs rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/IdentityEmailSender.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/IdentityRevalidatingAuthenticationStateProvider.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/IdentityRevalidatingAuthenticationStateProvider.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/IdentityRevalidatingAuthenticationStateProvider.cs rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/IdentityRevalidatingAuthenticationStateProvider.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/AccessDenied.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/AccessDenied.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/AccessDenied.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/AccessDenied.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/ConfirmEmail.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/ConfirmEmail.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/ConfirmEmail.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/ConfirmEmail.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/ConfirmEmailChange.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/ConfirmEmailChange.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/ConfirmEmailChange.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/ConfirmEmailChange.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/ForgotPassword.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/ForgotPassword.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/ForgotPassword.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/ForgotPassword.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/ForgotPasswordConfirmation.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/ForgotPasswordConfirmation.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/ForgotPasswordConfirmation.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/ForgotPasswordConfirmation.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/InvalidPasswordReset.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/InvalidPasswordReset.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/InvalidPasswordReset.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/InvalidPasswordReset.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/InvalidUser.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/InvalidUser.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/InvalidUser.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/InvalidUser.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/Lockout.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Lockout.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/Lockout.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Lockout.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/Login.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Login.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/Login.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Login.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/LoginForm.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/LoginForm.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/LoginForm.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/LoginForm.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/LoginWith2fa.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/LoginWith2fa.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/LoginWith2fa.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/LoginWith2fa.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/LoginWithRecoveryCode.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/LoginWithRecoveryCode.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/LoginWithRecoveryCode.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/LoginWithRecoveryCode.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/Manage/ChangePassword.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/ChangePassword.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/Manage/ChangePassword.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/ChangePassword.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/Manage/DeletePersonalData.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/DeletePersonalData.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/Manage/DeletePersonalData.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/DeletePersonalData.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/Manage/Disable2fa.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/Disable2fa.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/Manage/Disable2fa.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/Disable2fa.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/Manage/Email.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/Email.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/Manage/Email.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/Email.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/Manage/EnableAuthenticator.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/EnableAuthenticator.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/Manage/EnableAuthenticator.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/EnableAuthenticator.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/Manage/GenerateRecoveryCodes.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/GenerateRecoveryCodes.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/Manage/GenerateRecoveryCodes.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/GenerateRecoveryCodes.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/Manage/PasskeyCreate.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/PasskeyCreate.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/Manage/PasskeyCreate.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/PasskeyCreate.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/Manage/Passkeys.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/Passkeys.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/Manage/Passkeys.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/Passkeys.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/Manage/PersonalData.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/PersonalData.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/Manage/PersonalData.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/PersonalData.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/Manage/Profile.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/Profile.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/Manage/Profile.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/Profile.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/Manage/RenamePasskey.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/RenamePasskey.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/Manage/RenamePasskey.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/RenamePasskey.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/Manage/ResetAuthenticator.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/ResetAuthenticator.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/Manage/ResetAuthenticator.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/ResetAuthenticator.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/Manage/SetPassword.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/SetPassword.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/Manage/SetPassword.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/SetPassword.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/Manage/TwoFactorAuthentication.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/TwoFactorAuthentication.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/Manage/TwoFactorAuthentication.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/TwoFactorAuthentication.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/Manage/_Imports.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/_Imports.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/Manage/_Imports.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/_Imports.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/Register.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Register.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/Register.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Register.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/RegisterConfirmation.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/RegisterConfirmation.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/RegisterConfirmation.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/RegisterConfirmation.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/ResendEmailConfirmation.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/ResendEmailConfirmation.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/ResendEmailConfirmation.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/ResendEmailConfirmation.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/ResetPassword.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/ResetPassword.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/ResetPassword.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/ResetPassword.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/ResetPasswordConfirmation.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/ResetPasswordConfirmation.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Pages/ResetPasswordConfirmation.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/ResetPasswordConfirmation.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/PasskeyInputModel.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/PasskeyInputModel.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/PasskeyInputModel.cs rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/PasskeyInputModel.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/PasskeyOperation.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/PasskeyOperation.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/PasskeyOperation.cs rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/PasskeyOperation.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/SetupRedirectMiddleware.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/SetupRedirectMiddleware.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/SetupRedirectMiddleware.cs rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/SetupRedirectMiddleware.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Shared/PasskeySubmit.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Shared/PasskeySubmit.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Shared/PasskeySubmit.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Shared/PasskeySubmit.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Shared/PasskeySubmit.razor.js b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Shared/PasskeySubmit.razor.js similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Shared/PasskeySubmit.razor.js rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Shared/PasskeySubmit.razor.js diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Shared/RedirectToLogin.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Shared/RedirectToLogin.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Shared/RedirectToLogin.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Shared/RedirectToLogin.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Shared/ShowRecoveryCodes.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Shared/ShowRecoveryCodes.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Account/Shared/ShowRecoveryCodes.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Shared/ShowRecoveryCodes.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Administration/Dialogs/NewRole.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Administration/Dialogs/NewRole.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Administration/Dialogs/NewRole.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Administration/Dialogs/NewRole.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Administration/Dialogs/RoleUserDialog.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Administration/Dialogs/RoleUserDialog.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Administration/Dialogs/RoleUserDialog.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Administration/Dialogs/RoleUserDialog.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Administration/Dialogs/UserRoleDialog.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Administration/Dialogs/UserRoleDialog.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Administration/Dialogs/UserRoleDialog.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Administration/Dialogs/UserRoleDialog.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Administration/Pages/Roles.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Administration/Pages/Roles.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Administration/Pages/Roles.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Administration/Pages/Roles.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Administration/Pages/Users.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Administration/Pages/Users.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Administration/Pages/Users.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Administration/Pages/Users.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Administration/_Imports.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Administration/_Imports.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Administration/_Imports.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Administration/_Imports.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/App.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/App.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/App.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/App.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Layout/LoginLayout.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Layout/LoginLayout.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Layout/LoginLayout.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Layout/LoginLayout.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Layout/LoginLayout.razor.css b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Layout/LoginLayout.razor.css similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Layout/LoginLayout.razor.css rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Layout/LoginLayout.razor.css diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Layout/MainLayout.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Layout/MainLayout.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Layout/MainLayout.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Layout/MainLayout.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Layout/MainLayout.razor.css b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Layout/MainLayout.razor.css similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Layout/MainLayout.razor.css rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Layout/MainLayout.razor.css diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Layout/NavMenu.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Layout/NavMenu.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Layout/NavMenu.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Layout/NavMenu.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Layout/ReconnectModal.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Layout/ReconnectModal.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Layout/ReconnectModal.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Layout/ReconnectModal.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Layout/ReconnectModal.razor.css b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Layout/ReconnectModal.razor.css similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Layout/ReconnectModal.razor.css rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Layout/ReconnectModal.razor.css diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Layout/ReconnectModal.razor.js b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Layout/ReconnectModal.razor.js similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Layout/ReconnectModal.razor.js rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Layout/ReconnectModal.razor.js diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Pages/Error.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Pages/Error.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Pages/Error.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Pages/Error.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Pages/Home.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Pages/Home.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Pages/Home.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Pages/Home.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Pages/NotFound.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Pages/NotFound.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Pages/NotFound.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Pages/NotFound.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Pages/Setup.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Pages/Setup.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Pages/Setup.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Pages/Setup.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Routes.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Routes.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Routes.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Routes.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Shared/LinkButton.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Shared/LinkButton.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/Shared/LinkButton.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Shared/LinkButton.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/_Imports.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/_Imports.razor similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Components/_Imports.razor rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/_Imports.razor diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Dockerfile b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Dockerfile similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Dockerfile rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Dockerfile diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Program.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Program.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Program.cs rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Program.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Properties/launchSettings.json b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Properties/launchSettings.json similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Properties/launchSettings.json rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Properties/launchSettings.json diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Properties/serviceDependencies.json b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Properties/serviceDependencies.json similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Properties/serviceDependencies.json rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Properties/serviceDependencies.json diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/Properties/serviceDependencies.local.json b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Properties/serviceDependencies.local.json similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/Properties/serviceDependencies.local.json rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Properties/serviceDependencies.local.json diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/appsettings.Development.json b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/appsettings.Development.json similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/appsettings.Development.json rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/appsettings.Development.json diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/appsettings.json b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/appsettings.json similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/appsettings.json rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/appsettings.json diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/dotnet-tools.json b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/dotnet-tools.json similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/dotnet-tools.json rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/dotnet-tools.json diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/wwwroot/app.css b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/wwwroot/app.css similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/wwwroot/app.css rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/wwwroot/app.css diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea/wwwroot/favicon.png b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/wwwroot/favicon.png similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea/wwwroot/favicon.png rename to AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/wwwroot/favicon.png diff --git a/AndreGoepel.MembersArea/AndreGoepel.Marten.Identity.Tests/AndreGoepel.Marten.Identity.Tests.csproj b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Tests/AndreGoepel.Marten.Identity.Tests.csproj similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.Marten.Identity.Tests/AndreGoepel.Marten.Identity.Tests.csproj rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Tests/AndreGoepel.Marten.Identity.Tests.csproj diff --git a/AndreGoepel.MembersArea/AndreGoepel.MembersArea.Tests/GlobalUsings.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Tests/GlobalUsings.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.MembersArea.Tests/GlobalUsings.cs rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Tests/GlobalUsings.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.Marten.Identity.Tests/Roles/RoleId.Tests.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Tests/Roles/RoleId.Tests.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.Marten.Identity.Tests/Roles/RoleId.Tests.cs rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Tests/Roles/RoleId.Tests.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.Marten.Identity.Tests/Roles/RoleProjection.Tests.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Tests/Roles/RoleProjection.Tests.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.Marten.Identity.Tests/Roles/RoleProjection.Tests.cs rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Tests/Roles/RoleProjection.Tests.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.Marten.Identity.Tests/Services/CurrentUserService.Tests.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Tests/Services/CurrentUserService.Tests.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.Marten.Identity.Tests/Services/CurrentUserService.Tests.cs rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Tests/Services/CurrentUserService.Tests.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.Marten.Identity.Tests/Users/UserExtension.Tests.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Tests/Users/UserExtension.Tests.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.Marten.Identity.Tests/Users/UserExtension.Tests.cs rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Tests/Users/UserExtension.Tests.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.Marten.Identity.Tests/Users/UserId.Tests.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Tests/Users/UserId.Tests.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.Marten.Identity.Tests/Users/UserId.Tests.cs rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Tests/Users/UserId.Tests.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.Marten.Identity.Tests/Users/UserPasskey.Tests.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Tests/Users/UserPasskey.Tests.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.Marten.Identity.Tests/Users/UserPasskey.Tests.cs rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Tests/Users/UserPasskey.Tests.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.Marten.Identity.Tests/Users/UserPasskeyInfoExtension.Tests.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Tests/Users/UserPasskeyInfoExtension.Tests.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.Marten.Identity.Tests/Users/UserPasskeyInfoExtension.Tests.cs rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Tests/Users/UserPasskeyInfoExtension.Tests.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.Marten.Identity.Tests/Users/UserProjection.Tests.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Tests/Users/UserProjection.Tests.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.Marten.Identity.Tests/Users/UserProjection.Tests.cs rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Tests/Users/UserProjection.Tests.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/AndreGoepel.Marten.Identity.csproj b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/AndreGoepel.Marten.Identity.csproj similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/AndreGoepel.Marten.Identity.csproj rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/AndreGoepel.Marten.Identity.csproj diff --git a/AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Initialization.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Initialization.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Initialization.cs rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Initialization.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Roles/Events/RoleChanged.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Roles/Events/RoleChanged.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Roles/Events/RoleChanged.cs rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Roles/Events/RoleChanged.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Roles/Events/RoleCreated.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Roles/Events/RoleCreated.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Roles/Events/RoleCreated.cs rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Roles/Events/RoleCreated.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Roles/Events/RoleDeleted.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Roles/Events/RoleDeleted.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Roles/Events/RoleDeleted.cs rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Roles/Events/RoleDeleted.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Roles/InitializationExtension.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Roles/InitializationExtension.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Roles/InitializationExtension.cs rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Roles/InitializationExtension.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Roles/Role.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Roles/Role.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Roles/Role.cs rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Roles/Role.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Roles/RoleId.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Roles/RoleId.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Roles/RoleId.cs rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Roles/RoleId.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Roles/RoleProjection.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Roles/RoleProjection.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Roles/RoleProjection.cs rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Roles/RoleProjection.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Roles/RoleStore.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Roles/RoleStore.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Roles/RoleStore.cs rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Roles/RoleStore.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Roles/Roles.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Roles/Roles.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Roles/Roles.cs rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Roles/Roles.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Services/CurrentUserService.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Services/CurrentUserService.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Services/CurrentUserService.cs rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Services/CurrentUserService.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/UserRoles/InitializationExtension.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/UserRoles/InitializationExtension.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/UserRoles/InitializationExtension.cs rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/UserRoles/InitializationExtension.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/UserRoles/UserRoleAssignment.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/UserRoles/UserRoleAssignment.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/UserRoles/UserRoleAssignment.cs rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/UserRoles/UserRoleAssignment.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/UserRoles/UserRoleAssignmentProjection.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/UserRoles/UserRoleAssignmentProjection.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/UserRoles/UserRoleAssignmentProjection.cs rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/UserRoles/UserRoleAssignmentProjection.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Users/Events/PasskeyCreated.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Users/Events/PasskeyCreated.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Users/Events/PasskeyCreated.cs rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Users/Events/PasskeyCreated.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Users/Events/PasskeyDeleted.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Users/Events/PasskeyDeleted.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Users/Events/PasskeyDeleted.cs rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Users/Events/PasskeyDeleted.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Users/Events/PasskeyUpdated.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Users/Events/PasskeyUpdated.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Users/Events/PasskeyUpdated.cs rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Users/Events/PasskeyUpdated.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Users/Events/RoleAssigned.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Users/Events/RoleAssigned.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Users/Events/RoleAssigned.cs rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Users/Events/RoleAssigned.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Users/Events/RoleUnassigned.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Users/Events/RoleUnassigned.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Users/Events/RoleUnassigned.cs rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Users/Events/RoleUnassigned.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Users/Events/UserCreated.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Users/Events/UserCreated.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Users/Events/UserCreated.cs rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Users/Events/UserCreated.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Users/Events/UserDeleted.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Users/Events/UserDeleted.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Users/Events/UserDeleted.cs rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Users/Events/UserDeleted.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Users/Events/UserLogin.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Users/Events/UserLogin.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Users/Events/UserLogin.cs rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Users/Events/UserLogin.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Users/Events/UserUpdated.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Users/Events/UserUpdated.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Users/Events/UserUpdated.cs rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Users/Events/UserUpdated.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Users/InitializationExtension.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Users/InitializationExtension.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Users/InitializationExtension.cs rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Users/InitializationExtension.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Users/User.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Users/User.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Users/User.cs rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Users/User.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Users/UserExtension.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Users/UserExtension.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Users/UserExtension.cs rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Users/UserExtension.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Users/UserId.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Users/UserId.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Users/UserId.cs rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Users/UserId.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Users/UserPasskey.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Users/UserPasskey.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Users/UserPasskey.cs rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Users/UserPasskey.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Users/UserPasskeyId.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Users/UserPasskeyId.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Users/UserPasskeyId.cs rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Users/UserPasskeyId.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Users/UserPasskeyInfoExtension.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Users/UserPasskeyInfoExtension.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Users/UserPasskeyInfoExtension.cs rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Users/UserPasskeyInfoExtension.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Users/UserProjection.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Users/UserProjection.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Users/UserProjection.cs rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Users/UserProjection.cs diff --git a/AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Users/UserStore.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Users/UserStore.cs similarity index 100% rename from AndreGoepel.MembersArea/AndreGoepel.Marten.Identity/Users/UserStore.cs rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Users/UserStore.cs diff --git a/AndreGoepel.MembersArea/App.razor b/AndreGoepel.AppFoundation/App.razor similarity index 100% rename from AndreGoepel.MembersArea/App.razor rename to AndreGoepel.AppFoundation/App.razor diff --git a/AndreGoepel.MembersArea/docker-compose.dcproj b/AndreGoepel.AppFoundation/docker-compose.dcproj similarity index 100% rename from AndreGoepel.MembersArea/docker-compose.dcproj rename to AndreGoepel.AppFoundation/docker-compose.dcproj diff --git a/AndreGoepel.MembersArea/docker-compose.override.yml b/AndreGoepel.AppFoundation/docker-compose.override.yml similarity index 100% rename from AndreGoepel.MembersArea/docker-compose.override.yml rename to AndreGoepel.AppFoundation/docker-compose.override.yml diff --git a/AndreGoepel.MembersArea/docker-compose.yml b/AndreGoepel.AppFoundation/docker-compose.yml similarity index 100% rename from AndreGoepel.MembersArea/docker-compose.yml rename to AndreGoepel.AppFoundation/docker-compose.yml diff --git a/AndreGoepel.MembersArea/launchSettings.json b/AndreGoepel.AppFoundation/launchSettings.json similarity index 100% rename from AndreGoepel.MembersArea/launchSettings.json rename to AndreGoepel.AppFoundation/launchSettings.json From 77fa151d9b59dba4b1e548d8979de70ff3e3cb3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20G=C3=B6pel?= <22834588+derandre84@users.noreply.github.com> Date: Wed, 13 May 2026 11:57:45 +0700 Subject: [PATCH 2/9] Expand Marten.Identity with middleware and AddMartenIdentity() extension Moves SetupRedirectMiddleware and CookieLoginMiddleware into Marten.Identity/Http/ and adds AddMartenIdentity() / UseMartenIdentityMiddleware() extension methods, consolidating all Identity service registration. Program.cs is trimmed down to use the new extensions. --- .../Http}/CookieLoginMiddleware.cs | 0 .../Http}/SetupRedirectMiddleware.cs | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation/Components/Account => AndreGoepel.Marten.Identity/Http}/CookieLoginMiddleware.cs (100%) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation/Components/Account => AndreGoepel.Marten.Identity/Http}/SetupRedirectMiddleware.cs (100%) diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/CookieLoginMiddleware.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Http/CookieLoginMiddleware.cs similarity index 100% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/CookieLoginMiddleware.cs rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Http/CookieLoginMiddleware.cs diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/SetupRedirectMiddleware.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Http/SetupRedirectMiddleware.cs similarity index 100% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/SetupRedirectMiddleware.cs rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Http/SetupRedirectMiddleware.cs From 5897bd12c798dcc7149dd35c19ec1910572b766d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20G=C3=B6pel?= <22834588+derandre84@users.noreply.github.com> Date: Wed, 13 May 2026 11:58:51 +0700 Subject: [PATCH 3/9] Apply namespace rename and expand Marten.Identity Updates all file contents from MembersArea to AppFoundation namespace (namespace declarations, project references, Docker config, connection strings). Also moves SetupRedirectMiddleware and CookieLoginMiddleware into Marten.Identity/Http/ and adds AddMartenIdentity() / UseMartenIdentityMiddleware() extension methods to Initialization.cs. Program.cs is trimmed to use the new extensions. --- .../.aspire/settings.json | 2 +- .../AndreGoepel.AppFoundation.AppHost.csproj | 2 +- .../AppHost.cs | 10 ++-- ...pel.AppFoundation.MailService.Tests.csproj | 2 +- .../SendEmailMessageHandler.Tests.cs | 4 +- .../SmtpEmailSender.Tests.cs | 2 +- ...dreGoepel.AppFoundation.MailService.csproj | 2 +- .../IEmailSender.cs | 2 +- .../InitializerExtension.cs | 2 +- .../MailConfiguration.cs | 2 +- .../MailMessage.cs | 2 +- .../SendEmailMessageHandler.cs | 2 +- .../SmtpEmailSender.cs | 2 +- .../Account/CookieLoginMiddleware.Tests.cs | 4 +- .../Account/IdentityEmailSender.Tests.cs | 6 +-- .../Account/Pages/ConfirmEmail.Tests.cs | 4 +- .../Account/Pages/ConfirmEmailChange.Tests.cs | 4 +- .../Account/Pages/LoginWith2fa.Tests.cs | 4 +- .../Pages/LoginWithRecoveryCode.Tests.cs | 4 +- .../Pages/RegisterConfirmation.Tests.cs | 4 +- .../Account/Pages/ResetPassword.Tests.cs | 4 +- .../Account/Pages/StaticPages.Tests.cs | 4 +- .../Account/Shared/RedirectToLogin.Tests.cs | 4 +- .../Account/Shared/ShowRecoveryCodes.Tests.cs | 4 +- .../AndreGoepel.AppFoundation.Tests.csproj | 2 +- .../Shared/LinkButton.Tests.cs | 4 +- .../AndreGoepel.AppFoundation.slnx | 12 ++--- .../AndreGoepel.AppFoundation.csproj | 8 +-- ...omponentsEndpointRouteBuilderExtensions.cs | 2 +- .../Components/Account/IdentityEmailSender.cs | 4 +- ...RevalidatingAuthenticationStateProvider.cs | 2 +- .../Account/Pages/ForgotPassword.razor | 2 +- .../Components/Account/Pages/Login.razor | 2 +- .../Account/Pages/LoginWith2fa.razor | 2 +- .../Account/Pages/LoginWithRecoveryCode.razor | 2 +- .../Account/Pages/Manage/Disable2fa.razor | 2 +- .../Manage/TwoFactorAuthentication.razor | 2 +- .../Components/Account/Pages/Register.razor | 4 +- .../Pages/ResendEmailConfirmation.razor | 2 +- .../Components/Account/PasskeyInputModel.cs | 2 +- .../Components/Account/PasskeyOperation.cs | 2 +- .../Administration/Pages/Roles.razor | 2 +- .../Administration/Pages/Users.razor | 2 +- .../Components/App.razor | 2 +- .../Components/Pages/Setup.razor | 8 +-- .../Components/Routes.razor | 4 +- .../Components/_Imports.razor | 9 ++-- .../AndreGoepel.AppFoundation/Dockerfile | 16 +++--- .../AndreGoepel.AppFoundation/Program.cs | 50 ++++--------------- .../Properties/launchSettings.json | 4 +- .../appsettings.json | 2 +- .../AndreGoepel.Marten.Identity.csproj | 4 ++ .../Http/CookieLoginMiddleware.cs | 3 +- .../Http/SetupRedirectMiddleware.cs | 3 +- .../Initialization.cs | 49 ++++++++++++++++-- .../docker-compose.dcproj | 2 +- .../docker-compose.override.yml | 2 +- AndreGoepel.AppFoundation/docker-compose.yml | 6 +-- AndreGoepel.AppFoundation/launchSettings.json | 2 +- 59 files changed, 164 insertions(+), 144 deletions(-) diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.AppHost/.aspire/settings.json b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.AppHost/.aspire/settings.json index 9c40624..2ab3112 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.AppHost/.aspire/settings.json +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.AppHost/.aspire/settings.json @@ -1,3 +1,3 @@ { - "appHostPath": "../AndreGoepel.MembersArea.AppHost.csproj" + "appHostPath": "../AndreGoepel.AppFoundation.AppHost.csproj" } \ No newline at end of file diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.AppHost/AndreGoepel.AppFoundation.AppHost.csproj b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.AppHost/AndreGoepel.AppFoundation.AppHost.csproj index f57f734..9e6d68c 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.AppHost/AndreGoepel.AppFoundation.AppHost.csproj +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.AppHost/AndreGoepel.AppFoundation.AppHost.csproj @@ -13,6 +13,6 @@ - + diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.AppHost/AppHost.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.AppHost/AppHost.cs index 0e7471c..83f6c9d 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.AppHost/AppHost.cs +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.AppHost/AppHost.cs @@ -13,18 +13,18 @@ .WithLifetime(ContainerLifetime.Persistent) .WithHostPort(5432) .WithDataVolume(); -var membersAreaDb = postgresServer.AddDatabase("members-area-database"); +var appFoundationDb = postgresServer.AddDatabase("appfoundation-database"); builder - .AddProject("andregoepel-membersarea") - .WithReference(membersAreaDb) - .WithEnvironment("EmailSender__SenderName", "André Göpel - Member Area") + .AddProject("andregoepel-appfoundation") + .WithReference(appFoundationDb) + .WithEnvironment("EmailSender__SenderName", "André Göpel - App Foundation") .WithEnvironment("EmailSender__SenderEmail", "no-reply@localhost.dev") .WithEnvironment("EmailSender__Username", "test-mail") .WithEnvironment("EmailSender__Password", "12345678") .WithEnvironment("EmailSender__Port", () => mailhog.GetEndpoint("smtp").Port.ToString()) .WithEnvironment("EmailSender__Server", () => mailhog.GetEndpoint("smtp").Host) - .WaitFor(membersAreaDb) // TODO: remove if startup don't need db + .WaitFor(appFoundationDb) // TODO: remove if startup don't need db .PublishAsDockerFile(); builder.Build().Run(); diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService.Tests/AndreGoepel.AppFoundation.MailService.Tests.csproj b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService.Tests/AndreGoepel.AppFoundation.MailService.Tests.csproj index fb3531a..5e6bc81 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService.Tests/AndreGoepel.AppFoundation.MailService.Tests.csproj +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService.Tests/AndreGoepel.AppFoundation.MailService.Tests.csproj @@ -21,6 +21,6 @@ - + diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService.Tests/SendEmailMessageHandler.Tests.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService.Tests/SendEmailMessageHandler.Tests.cs index 131b1cb..8759498 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService.Tests/SendEmailMessageHandler.Tests.cs +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService.Tests/SendEmailMessageHandler.Tests.cs @@ -1,7 +1,7 @@ -using AndreGoepel.MembersArea.MailService; +using AndreGoepel.AppFoundation.MailService; using NSubstitute; -namespace AndreGoepel.MembersArea.MailService.Tests; +namespace AndreGoepel.AppFoundation.MailService.Tests; public class SendEmailMessageHandlerTests { diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService.Tests/SmtpEmailSender.Tests.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService.Tests/SmtpEmailSender.Tests.cs index d437213..aa85115 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService.Tests/SmtpEmailSender.Tests.cs +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService.Tests/SmtpEmailSender.Tests.cs @@ -1,7 +1,7 @@ using Microsoft.Extensions.Options; using MimeKit; -namespace AndreGoepel.MembersArea.MailService.Tests; +namespace AndreGoepel.AppFoundation.MailService.Tests; public class SmtpEmailSenderTests { diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService/AndreGoepel.AppFoundation.MailService.csproj b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService/AndreGoepel.AppFoundation.MailService.csproj index c3ffea2..b7892d4 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService/AndreGoepel.AppFoundation.MailService.csproj +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService/AndreGoepel.AppFoundation.MailService.csproj @@ -10,7 +10,7 @@ - + diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService/IEmailSender.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService/IEmailSender.cs index e41dc75..a1ed344 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService/IEmailSender.cs +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService/IEmailSender.cs @@ -1,4 +1,4 @@ -namespace AndreGoepel.MembersArea.MailService; +namespace AndreGoepel.AppFoundation.MailService; public interface IEmailSender { diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService/InitializerExtension.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService/InitializerExtension.cs index bbae94d..7d12d4c 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService/InitializerExtension.cs +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService/InitializerExtension.cs @@ -2,7 +2,7 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; -namespace AndreGoepel.MembersArea.MailService; +namespace AndreGoepel.AppFoundation.MailService; public static class InitializerExtension { diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService/MailConfiguration.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService/MailConfiguration.cs index c9c7125..5e16508 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService/MailConfiguration.cs +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService/MailConfiguration.cs @@ -1,6 +1,6 @@ using System.ComponentModel.DataAnnotations; -namespace AndreGoepel.MembersArea.MailService; +namespace AndreGoepel.AppFoundation.MailService; internal record MailConfiguration { diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService/MailMessage.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService/MailMessage.cs index 1679173..7852ddd 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService/MailMessage.cs +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService/MailMessage.cs @@ -1,3 +1,3 @@ -namespace AndreGoepel.MembersArea.MailService; +namespace AndreGoepel.AppFoundation.MailService; public record MailMessage(string Recipient, string Subject, string Body); diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService/SendEmailMessageHandler.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService/SendEmailMessageHandler.cs index 5283be8..727be4d 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService/SendEmailMessageHandler.cs +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService/SendEmailMessageHandler.cs @@ -1,6 +1,6 @@ using Wolverine.Attributes; -namespace AndreGoepel.MembersArea.MailService; +namespace AndreGoepel.AppFoundation.MailService; [WolverineHandler] public class SendEmailMessageHandler(IEmailSender EmailSender) diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService/SmtpEmailSender.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService/SmtpEmailSender.cs index be77463..f4ab5bd 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService/SmtpEmailSender.cs +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.MailService/SmtpEmailSender.cs @@ -2,7 +2,7 @@ using Microsoft.Extensions.Options; using MimeKit; -namespace AndreGoepel.MembersArea.MailService; +namespace AndreGoepel.AppFoundation.MailService; internal class SmtpEmailSender(IOptions configuration) : IEmailSender { diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/CookieLoginMiddleware.Tests.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/CookieLoginMiddleware.Tests.cs index c2a5e61..ff56770 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/CookieLoginMiddleware.Tests.cs +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/CookieLoginMiddleware.Tests.cs @@ -1,5 +1,5 @@ using AndreGoepel.Marten.Identity.Users; -using AndreGoepel.MembersArea.Components.Account; +using AndreGoepel.Marten.Identity.Http; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Identity; @@ -7,7 +7,7 @@ using Microsoft.Extensions.Options; using NSubstitute; -namespace AndreGoepel.MembersArea.Tests.Account; +namespace AndreGoepel.AppFoundation.Tests.Account; public class CookieLoginMiddlewareTests { diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/IdentityEmailSender.Tests.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/IdentityEmailSender.Tests.cs index 452516d..15ee420 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/IdentityEmailSender.Tests.cs +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/IdentityEmailSender.Tests.cs @@ -1,10 +1,10 @@ using AndreGoepel.Marten.Identity.Users; -using AndreGoepel.MembersArea.Components.Account; -using AndreGoepel.MembersArea.MailService; +using AndreGoepel.AppFoundation.Components.Account; +using AndreGoepel.AppFoundation.MailService; using NSubstitute; using Wolverine; -namespace AndreGoepel.MembersArea.Tests.Account; +namespace AndreGoepel.AppFoundation.Tests.Account; public class IdentityEmailSenderTests { diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/ConfirmEmail.Tests.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/ConfirmEmail.Tests.cs index 8ee0265..fc9eb16 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/ConfirmEmail.Tests.cs +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/ConfirmEmail.Tests.cs @@ -1,6 +1,6 @@ using System.Text; using AndreGoepel.Marten.Identity.Users; -using AndreGoepel.MembersArea.Components.Account.Pages; +using AndreGoepel.AppFoundation.Components.Account.Pages; using Bunit; using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Http; @@ -9,7 +9,7 @@ using Microsoft.Extensions.DependencyInjection; using NSubstitute; -namespace AndreGoepel.MembersArea.Tests.Account.Pages; +namespace AndreGoepel.AppFoundation.Tests.Account.Pages; public class ConfirmEmailTests : BunitContext { diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/ConfirmEmailChange.Tests.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/ConfirmEmailChange.Tests.cs index d44c5be..ef64350 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/ConfirmEmailChange.Tests.cs +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/ConfirmEmailChange.Tests.cs @@ -1,6 +1,6 @@ using System.Text; using AndreGoepel.Marten.Identity.Users; -using AndreGoepel.MembersArea.Components.Account.Pages; +using AndreGoepel.AppFoundation.Components.Account.Pages; using Bunit; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Components; @@ -12,7 +12,7 @@ using Microsoft.Extensions.Options; using NSubstitute; -namespace AndreGoepel.MembersArea.Tests.Account.Pages; +namespace AndreGoepel.AppFoundation.Tests.Account.Pages; public class ConfirmEmailChangeTests : BunitContext { diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/LoginWith2fa.Tests.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/LoginWith2fa.Tests.cs index 7a8bc62..c4bb111 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/LoginWith2fa.Tests.cs +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/LoginWith2fa.Tests.cs @@ -1,10 +1,10 @@ -using AndreGoepel.MembersArea.Components.Account.Pages; +using AndreGoepel.AppFoundation.Components.Account.Pages; using Bunit; using Microsoft.AspNetCore.Components; using Microsoft.Extensions.DependencyInjection; using Radzen; -namespace AndreGoepel.MembersArea.Tests.Account.Pages; +namespace AndreGoepel.AppFoundation.Tests.Account.Pages; public class LoginWith2faTests : BunitContext { diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/LoginWithRecoveryCode.Tests.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/LoginWithRecoveryCode.Tests.cs index 967b040..55847d9 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/LoginWithRecoveryCode.Tests.cs +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/LoginWithRecoveryCode.Tests.cs @@ -1,10 +1,10 @@ -using AndreGoepel.MembersArea.Components.Account.Pages; +using AndreGoepel.AppFoundation.Components.Account.Pages; using Bunit; using Microsoft.AspNetCore.Components; using Microsoft.Extensions.DependencyInjection; using Radzen; -namespace AndreGoepel.MembersArea.Tests.Account.Pages; +namespace AndreGoepel.AppFoundation.Tests.Account.Pages; public class LoginWithRecoveryCodeTests : BunitContext { diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/RegisterConfirmation.Tests.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/RegisterConfirmation.Tests.cs index 1e35e38..9f8e184 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/RegisterConfirmation.Tests.cs +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/RegisterConfirmation.Tests.cs @@ -1,5 +1,5 @@ using AndreGoepel.Marten.Identity.Users; -using AndreGoepel.MembersArea.Components.Account.Pages; +using AndreGoepel.AppFoundation.Components.Account.Pages; using Bunit; using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Http; @@ -7,7 +7,7 @@ using Microsoft.Extensions.DependencyInjection; using NSubstitute; -namespace AndreGoepel.MembersArea.Tests.Account.Pages; +namespace AndreGoepel.AppFoundation.Tests.Account.Pages; public class RegisterConfirmationTests : BunitContext { diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/ResetPassword.Tests.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/ResetPassword.Tests.cs index a4dbb62..6413dbd 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/ResetPassword.Tests.cs +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/ResetPassword.Tests.cs @@ -1,6 +1,6 @@ using System.Text; using AndreGoepel.Marten.Identity.Users; -using AndreGoepel.MembersArea.Components.Account.Pages; +using AndreGoepel.AppFoundation.Components.Account.Pages; using Bunit; using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Identity; @@ -9,7 +9,7 @@ using NSubstitute; using Radzen; -namespace AndreGoepel.MembersArea.Tests.Account.Pages; +namespace AndreGoepel.AppFoundation.Tests.Account.Pages; public class ResetPasswordTests : BunitContext { diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/StaticPages.Tests.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/StaticPages.Tests.cs index c296480..880da87 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/StaticPages.Tests.cs +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/StaticPages.Tests.cs @@ -1,9 +1,9 @@ -using AndreGoepel.MembersArea.Components.Account.Pages; +using AndreGoepel.AppFoundation.Components.Account.Pages; using Bunit; using Microsoft.AspNetCore.Components; using Microsoft.Extensions.DependencyInjection; -namespace AndreGoepel.MembersArea.Tests.Account.Pages; +namespace AndreGoepel.AppFoundation.Tests.Account.Pages; public class StaticPagesTests : BunitContext { diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Shared/RedirectToLogin.Tests.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Shared/RedirectToLogin.Tests.cs index dd9932c..bbcd921 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Shared/RedirectToLogin.Tests.cs +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Shared/RedirectToLogin.Tests.cs @@ -1,9 +1,9 @@ -using AndreGoepel.MembersArea.Components.Account.Shared; +using AndreGoepel.AppFoundation.Components.Account.Shared; using Bunit; using Microsoft.AspNetCore.Components; using Microsoft.Extensions.DependencyInjection; -namespace AndreGoepel.MembersArea.Tests.Account.Shared; +namespace AndreGoepel.AppFoundation.Tests.Account.Shared; public class RedirectToLoginTests : BunitContext { diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Shared/ShowRecoveryCodes.Tests.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Shared/ShowRecoveryCodes.Tests.cs index 4b6307d..0938a8e 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Shared/ShowRecoveryCodes.Tests.cs +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Shared/ShowRecoveryCodes.Tests.cs @@ -1,7 +1,7 @@ -using AndreGoepel.MembersArea.Components.Account.Shared; +using AndreGoepel.AppFoundation.Components.Account.Shared; using Bunit; -namespace AndreGoepel.MembersArea.Tests.Account.Shared; +namespace AndreGoepel.AppFoundation.Tests.Account.Shared; public class ShowRecoveryCodesTests : BunitContext { diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/AndreGoepel.AppFoundation.Tests.csproj b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/AndreGoepel.AppFoundation.Tests.csproj index eadb2d6..38fe91b 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/AndreGoepel.AppFoundation.Tests.csproj +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/AndreGoepel.AppFoundation.Tests.csproj @@ -26,6 +26,6 @@ - + diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Shared/LinkButton.Tests.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Shared/LinkButton.Tests.cs index 00ab328..81d5fdc 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Shared/LinkButton.Tests.cs +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Shared/LinkButton.Tests.cs @@ -1,9 +1,9 @@ -using AndreGoepel.MembersArea.Components.Shared; +using AndreGoepel.AppFoundation.Components.Shared; using Bunit; using Microsoft.AspNetCore.Components; using Microsoft.Extensions.DependencyInjection; -namespace AndreGoepel.MembersArea.Tests.Shared; +namespace AndreGoepel.AppFoundation.Tests.Shared; public class LinkButtonTests : BunitContext { diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.slnx b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.slnx index 0aeda62..61f402c 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.slnx +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.slnx @@ -4,12 +4,12 @@ Path="AndreGoepel.Marten.Identity/AndreGoepel.Marten.Identity.csproj" Id="7a1ef732-e167-4703-a4c5-69845d3fc9fe" /> - - - - - - + + + + + + diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.csproj b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.csproj index 48f0ef9..bc8842c 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.csproj +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.csproj @@ -3,7 +3,7 @@ net10.0 enable enable - aspnet-AndreGoepel_MembersArea-c3d2e608-d33f-4412-ba33-2d59d0b1835b + aspnet-AndreGoepel_AppFoundation-c3d2e608-d33f-4412-ba33-2d59d0b1835b true Linux ..\docker-compose.dcproj @@ -16,7 +16,7 @@ - + @@ -28,8 +28,8 @@ - - + + diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/IdentityComponentsEndpointRouteBuilderExtensions.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/IdentityComponentsEndpointRouteBuilderExtensions.cs index 7e82af4..f00d17d 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/IdentityComponentsEndpointRouteBuilderExtensions.cs +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/IdentityComponentsEndpointRouteBuilderExtensions.cs @@ -6,7 +6,7 @@ using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; -namespace AndreGoepel.MembersArea.Components.Account; +namespace AndreGoepel.AppFoundation.Components.Account; internal static class IdentityComponentsEndpointRouteBuilderExtensions { diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/IdentityEmailSender.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/IdentityEmailSender.cs index 4a7daa3..b4a2b11 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/IdentityEmailSender.cs +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/IdentityEmailSender.cs @@ -1,9 +1,9 @@ using AndreGoepel.Marten.Identity.Users; -using AndreGoepel.MembersArea.MailService; +using AndreGoepel.AppFoundation.MailService; using Microsoft.AspNetCore.Identity; using Wolverine; -namespace AndreGoepel.MembersArea.Components.Account; +namespace AndreGoepel.AppFoundation.Components.Account; internal sealed class IdentityEmailSender(IMessageBus MessageBus) : IEmailSender { diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/IdentityRevalidatingAuthenticationStateProvider.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/IdentityRevalidatingAuthenticationStateProvider.cs index 76d1bc7..55a931b 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/IdentityRevalidatingAuthenticationStateProvider.cs +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/IdentityRevalidatingAuthenticationStateProvider.cs @@ -5,7 +5,7 @@ using Microsoft.AspNetCore.Identity; using Microsoft.Extensions.Options; -namespace AndreGoepel.MembersArea.Components.Account; +namespace AndreGoepel.AppFoundation.Components.Account; // This is a server-side AuthenticationStateProvider that revalidates the security stamp for the connected user // every 30 minutes an interactive circuit is connected. diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/ForgotPassword.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/ForgotPassword.razor index 88577d2..d258fd6 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/ForgotPassword.razor +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/ForgotPassword.razor @@ -6,7 +6,7 @@ @using System.Text @using System.Text.Encodings.Web @using AndreGoepel.Marten.Identity.Users -@using AndreGoepel.MembersArea.Components.Layout +@using AndreGoepel.AppFoundation.Components.Layout @using Microsoft.AspNetCore.Identity @using Microsoft.AspNetCore.WebUtilities @using Radzen diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Login.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Login.razor index a67366a..074f8dc 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Login.razor +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Login.razor @@ -1,7 +1,7 @@ @page "/Account/Login" @layout LoginLayout @using AndreGoepel.Marten.Identity.Users -@using AndreGoepel.MembersArea.Components.Layout +@using AndreGoepel.AppFoundation.Components.Layout @using Microsoft.AspNetCore.Identity @using Radzen @using Radzen.Blazor diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/LoginWith2fa.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/LoginWith2fa.razor index 62c6bbe..7ade348 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/LoginWith2fa.razor +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/LoginWith2fa.razor @@ -3,7 +3,7 @@ @rendermode InteractiveServer @using System.ComponentModel.DataAnnotations -@using AndreGoepel.MembersArea.Components.Layout +@using AndreGoepel.AppFoundation.Components.Layout @using Radzen @using Radzen.Blazor diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/LoginWithRecoveryCode.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/LoginWithRecoveryCode.razor index d62944b..1ae5874 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/LoginWithRecoveryCode.razor +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/LoginWithRecoveryCode.razor @@ -3,7 +3,7 @@ @rendermode InteractiveServer @using System.ComponentModel.DataAnnotations -@using AndreGoepel.MembersArea.Components.Layout +@using AndreGoepel.AppFoundation.Components.Layout @using Radzen @using Radzen.Blazor diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/Disable2fa.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/Disable2fa.razor index d21d77b..bbfd893 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/Disable2fa.razor +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/Disable2fa.razor @@ -2,7 +2,7 @@ @rendermode InteractiveServer @using AndreGoepel.Marten.Identity.Users -@using AndreGoepel.MembersArea +@using AndreGoepel.AppFoundation @using Microsoft.AspNetCore.Identity @using Radzen @using Radzen.Blazor diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/TwoFactorAuthentication.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/TwoFactorAuthentication.razor index a848a2d..d2e2c17 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/TwoFactorAuthentication.razor +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/TwoFactorAuthentication.razor @@ -1,7 +1,7 @@ @page "/Account/Manage/TwoFactorAuthentication" @using AndreGoepel.Marten.Identity.Users -@using AndreGoepel.MembersArea.Components.Shared +@using AndreGoepel.AppFoundation.Components.Shared @using Microsoft.AspNetCore.Identity @using Radzen @using Radzen.Blazor diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Register.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Register.razor index 920e57e..53c710a 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Register.razor +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Register.razor @@ -6,8 +6,8 @@ @using System.Text @using System.Text.Encodings.Web @using AndreGoepel.Marten.Identity.Users -@using AndreGoepel.MembersArea -@using AndreGoepel.MembersArea.Components.Layout +@using AndreGoepel.AppFoundation +@using AndreGoepel.AppFoundation.Components.Layout @using Microsoft.AspNetCore.Identity @using Microsoft.AspNetCore.WebUtilities @using Radzen diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/ResendEmailConfirmation.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/ResendEmailConfirmation.razor index c15ed75..679730a 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/ResendEmailConfirmation.razor +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/ResendEmailConfirmation.razor @@ -6,7 +6,7 @@ @using System.Text @using System.Text.Encodings.Web @using AndreGoepel.Marten.Identity.Users -@using AndreGoepel.MembersArea.Components.Layout +@using AndreGoepel.AppFoundation.Components.Layout @using Microsoft.AspNetCore.Identity @using Microsoft.AspNetCore.WebUtilities @using Radzen diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/PasskeyInputModel.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/PasskeyInputModel.cs index 127e882..6dfe3c7 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/PasskeyInputModel.cs +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/PasskeyInputModel.cs @@ -1,4 +1,4 @@ -namespace AndreGoepel.MembersArea.Components.Account; +namespace AndreGoepel.AppFoundation.Components.Account; public class PasskeyInputModel { diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/PasskeyOperation.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/PasskeyOperation.cs index c159d08..77e8a4b 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/PasskeyOperation.cs +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/PasskeyOperation.cs @@ -1,4 +1,4 @@ -namespace AndreGoepel.MembersArea.Components.Account; +namespace AndreGoepel.AppFoundation.Components.Account; public enum PasskeyOperation { diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Administration/Pages/Roles.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Administration/Pages/Roles.razor index 129e9a7..59d4144 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Administration/Pages/Roles.razor +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Administration/Pages/Roles.razor @@ -3,7 +3,7 @@ @using AndreGoepel.Marten.Identity.Roles @using AndreGoepel.Marten.Identity.Users -@using AndreGoepel.MembersArea.Components.Administration.Dialogs +@using AndreGoepel.AppFoundation.Components.Administration.Dialogs @using Microsoft.AspNetCore.Authorization @using Microsoft.AspNetCore.Identity @using Radzen diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Administration/Pages/Users.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Administration/Pages/Users.razor index e364b64..01f3285 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Administration/Pages/Users.razor +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Administration/Pages/Users.razor @@ -2,7 +2,7 @@ @rendermode InteractiveServer @using AndreGoepel.Marten.Identity.Users -@using AndreGoepel.MembersArea.Components.Administration.Dialogs +@using AndreGoepel.AppFoundation.Components.Administration.Dialogs @using Microsoft.AspNetCore.Authorization @using System.Security.Claims @using Microsoft.AspNetCore.Identity diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/App.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/App.razor index d0921b9..afa2e49 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/App.razor +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/App.razor @@ -12,7 +12,7 @@ - + diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Pages/Setup.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Pages/Setup.razor index 44dbd7a..c87edc9 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Pages/Setup.razor +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Pages/Setup.razor @@ -7,10 +7,10 @@ @using System.Text.Encodings.Web @using AndreGoepel.Marten.Identity.Roles @using AndreGoepel.Marten.Identity.Users -@using AndreGoepel.MembersArea -@using AndreGoepel.MembersArea.Components.Account -@using AndreGoepel.MembersArea.Components.Account.Shared -@using AndreGoepel.MembersArea.Components.Layout +@using AndreGoepel.AppFoundation +@using AndreGoepel.AppFoundation.Components.Account +@using AndreGoepel.AppFoundation.Components.Account.Shared +@using AndreGoepel.AppFoundation.Components.Layout @using Microsoft.AspNetCore.Identity @using Microsoft.AspNetCore.WebUtilities @using Radzen diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Routes.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Routes.razor index 2c8e348..16c37ce 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Routes.razor +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Routes.razor @@ -1,5 +1,5 @@ -@using AndreGoepel.MembersArea.Components.Account.Shared -@using AndreGoepel.MembersArea.Components.Layout +@using AndreGoepel.AppFoundation.Components.Account.Shared +@using AndreGoepel.AppFoundation.Components.Layout @using Radzen.Blazor diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/_Imports.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/_Imports.razor index 664c33d..8b62f43 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/_Imports.razor +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/_Imports.razor @@ -9,9 +9,10 @@ @using static Microsoft.AspNetCore.Components.Web.RenderMode @using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.JSInterop -@using AndreGoepel.MembersArea -@using AndreGoepel.MembersArea.Components -@using AndreGoepel.MembersArea.Components.Account.Shared -@using AndreGoepel.MembersArea.Components.Layout +@using AndreGoepel.AppFoundation +@using AndreGoepel.AppFoundation.Components +@using AndreGoepel.AppFoundation.Components.Account.Shared +@using AndreGoepel.AppFoundation.Components.Layout +@using AndreGoepel.Marten.Identity.Http @using Radzen @using Radzen.Blazor diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Dockerfile b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Dockerfile index da7a054..6aa7ca4 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Dockerfile +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Dockerfile @@ -7,20 +7,20 @@ EXPOSE 8081 FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build ARG BUILD_CONFIGURATION=Release WORKDIR /src -COPY ["AndreGoepel.MembersArea/AndreGoepel.MembersArea.csproj", "AndreGoepel.MembersArea/"] +COPY ["AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.csproj", "AndreGoepel.AppFoundation/"] COPY ["AndreGoepel.Marten.Identity/AndreGoepel.Marten.Identity.csproj", "AndreGoepel.Marten.Identity/"] -COPY ["AndreGoepel.MembersArea.MailService/AndreGoepel.MembersArea.MailService.csproj", "AndreGoepel.MembersArea.MailService/"] -COPY ["AndreGoepel.MembersArea.ServiceDefaults/AndreGoepel.MembersArea.ServiceDefaults.csproj", "AndreGoepel.MembersArea.ServiceDefaults/"] -RUN dotnet restore "AndreGoepel.MembersArea/AndreGoepel.MembersArea.csproj" +COPY ["AndreGoepel.AppFoundation.MailService/AndreGoepel.AppFoundation.MailService.csproj", "AndreGoepel.AppFoundation.MailService/"] +COPY ["AndreGoepel.AppFoundation.ServiceDefaults/AndreGoepel.AppFoundation.ServiceDefaults.csproj", "AndreGoepel.AppFoundation.ServiceDefaults/"] +RUN dotnet restore "AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.csproj" COPY . . -WORKDIR "/src/AndreGoepel.MembersArea" -RUN dotnet build "AndreGoepel.MembersArea.csproj" -c $BUILD_CONFIGURATION -o /app/build +WORKDIR "/src/AndreGoepel.AppFoundation" +RUN dotnet build "AndreGoepel.AppFoundation.csproj" -c $BUILD_CONFIGURATION -o /app/build FROM build AS publish ARG BUILD_CONFIGURATION=Release -RUN dotnet publish "AndreGoepel.MembersArea.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false +RUN dotnet publish "AndreGoepel.AppFoundation.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false FROM base AS final WORKDIR /app COPY --from=publish /app/publish . -ENTRYPOINT ["dotnet", "AndreGoepel.MembersArea.dll"] +ENTRYPOINT ["dotnet", "AndreGoepel.AppFoundation.dll"] diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Program.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Program.cs index e7c8b5d..b048d35 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Program.cs +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Program.cs @@ -1,9 +1,8 @@ using AndreGoepel.Marten.Identity; -using AndreGoepel.Marten.Identity.Roles; using AndreGoepel.Marten.Identity.Users; -using AndreGoepel.MembersArea.Components; -using AndreGoepel.MembersArea.Components.Account; -using AndreGoepel.MembersArea.MailService; +using AndreGoepel.AppFoundation.Components; +using AndreGoepel.AppFoundation.Components.Account; +using AndreGoepel.AppFoundation.MailService; using JasperFx; using Marten; using Microsoft.AspNetCore.Components.Authorization; @@ -16,7 +15,6 @@ builder.AddServiceDefaults(); -// Add services to the container. builder .Services.AddRazorComponents() .AddInteractiveServerComponents() @@ -28,35 +26,11 @@ IdentityRevalidatingAuthenticationStateProvider >(); -builder - .Services.AddAuthentication(options => - { - options.DefaultScheme = IdentityConstants.ApplicationScheme; - options.DefaultSignInScheme = IdentityConstants.ExternalScheme; - }) - .AddIdentityCookies(); -builder.Services.AddAuthorization(); +builder.Services.AddMartenIdentity(); var connectionString = - builder.Configuration.GetConnectionString("members-area-database") - ?? throw new InvalidOperationException("Connection string 'identity-database' not found."); - -builder - .Services.AddIdentityCore(options => - { - options.SignIn.RequireConfirmedAccount = true; - options.Stores.SchemaVersion = IdentitySchemaVersions.Version3; - }) - .AddRoles() - .AddUserManager>() - .AddUserStore>() - .AddRoleManager>() - .AddRoleStore>() - .AddDefaultTokenProviders() - .AddSignInManager() - .AddDefaultTokenProviders(); - -builder.Services.AddScoped(); + builder.Configuration.GetConnectionString("appfoundation-database") + ?? throw new InvalidOperationException("Connection string 'appfoundation-database' not found."); builder.Services.AddScoped, IdentityEmailSender>(); @@ -70,11 +44,11 @@ }) .IntegrateWithWolverine(); -builder.Services.InitializeIdentityServices(); +builder.Services.AddScoped(); builder.Host.UseWolverine(options => { - options.ServiceName = "MembersArea"; + options.ServiceName = "AppFoundation"; options.Policies.UseDurableInboxOnAllListeners(); options.Policies.UseDurableOutboxOnAllSendingEndpoints(); @@ -94,11 +68,9 @@ app.MapDefaultEndpoints(); -// Configure the HTTP request pipeline. if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error", createScopeForErrors: true); - // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseHttpsRedirection(); @@ -108,13 +80,11 @@ app.UseAuthentication(); app.UseAuthorization(); +app.UseMartenIdentityMiddleware(); + app.MapStaticAssets(); app.MapRazorComponents().AddInteractiveServerRenderMode(); -app.UseMiddleware(); -app.UseMiddleware(); - -// Add additional endpoints required by the Identity /Account Razor components. app.MapAdditionalIdentityEndpoints(); app.Run(); diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Properties/launchSettings.json b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Properties/launchSettings.json index 1709584..15452cc 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Properties/launchSettings.json +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Properties/launchSettings.json @@ -7,7 +7,7 @@ "ASPNETCORE_ENVIRONMENT": "Development" }, "dotnetRunMessages": true, - "applicationUrl": "http://andregoepel_membersarea.dev.localhost:5228" + "applicationUrl": "http://andregoepel_appfoundation.dev.localhost:5228" }, "https": { "commandName": "Project", @@ -16,7 +16,7 @@ "ASPNETCORE_ENVIRONMENT": "Development" }, "dotnetRunMessages": true, - "applicationUrl": "https://andregoepel_membersarea.dev.localhost:7254;http://andregoepel_membersarea.dev.localhost:5228" + "applicationUrl": "https://andregoepel_appfoundation.dev.localhost:7254;http://andregoepel_appfoundation.dev.localhost:5228" }, "Container (Dockerfile)": { "commandName": "Docker", diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/appsettings.json b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/appsettings.json index b772d0f..24d4191 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/appsettings.json +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/appsettings.json @@ -7,7 +7,7 @@ }, "AllowedHosts": "*", "ConnectionStrings": { - "members-area-database": "Host=localhost;Port=59746;Username=db-user;Password=Password1+;Database=members-area-database" + "appfoundation-database": "Host=localhost;Port=59746;Username=db-user;Password=Password1+;Database=appfoundation-database" }, "EmailSender": { "SenderName": "", diff --git a/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/AndreGoepel.Marten.Identity.csproj b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/AndreGoepel.Marten.Identity.csproj index aeafa88..40babab 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/AndreGoepel.Marten.Identity.csproj +++ b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/AndreGoepel.Marten.Identity.csproj @@ -5,6 +5,10 @@ enable + + + + diff --git a/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Http/CookieLoginMiddleware.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Http/CookieLoginMiddleware.cs index 4f225bf..12a4dca 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Http/CookieLoginMiddleware.cs +++ b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Http/CookieLoginMiddleware.cs @@ -1,8 +1,9 @@ using System.Collections.Concurrent; using AndreGoepel.Marten.Identity.Users; +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Identity; -namespace AndreGoepel.MembersArea.Components.Account; +namespace AndreGoepel.Marten.Identity.Http; public class LoginInfo { diff --git a/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Http/SetupRedirectMiddleware.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Http/SetupRedirectMiddleware.cs index 626728b..d79f250 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Http/SetupRedirectMiddleware.cs +++ b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Http/SetupRedirectMiddleware.cs @@ -1,7 +1,8 @@ using AndreGoepel.Marten.Identity.Users; using Marten; +using Microsoft.AspNetCore.Http; -namespace AndreGoepel.MembersArea.Components.Account; +namespace AndreGoepel.Marten.Identity.Http; public class SetupRedirectMiddleware(RequestDelegate next) { diff --git a/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Initialization.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Initialization.cs index 376f0e5..2eb73b4 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Initialization.cs +++ b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/Initialization.cs @@ -1,20 +1,63 @@ -using AndreGoepel.Marten.Identity.Roles; +using AndreGoepel.Marten.Identity.Http; +using AndreGoepel.Marten.Identity.Roles; using AndreGoepel.Marten.Identity.Services; using AndreGoepel.Marten.Identity.UserRoles; using AndreGoepel.Marten.Identity.Users; using Marten; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Identity; using Microsoft.Extensions.DependencyInjection; namespace AndreGoepel.Marten.Identity; public static class Initialization { - public static void InitializeIdentityServices(this IServiceCollection services) + public static IServiceCollection AddMartenIdentity( + this IServiceCollection services, + Action? configureOptions = null + ) { + services + .AddAuthentication(options => + { + options.DefaultScheme = IdentityConstants.ApplicationScheme; + options.DefaultSignInScheme = IdentityConstants.ExternalScheme; + }) + .AddIdentityCookies(); + + services.AddAuthorization(); + + services + .AddIdentityCore(options => + { + options.SignIn.RequireConfirmedAccount = true; + options.Stores.SchemaVersion = IdentitySchemaVersions.Version3; + configureOptions?.Invoke(options); + }) + .AddRoles() + .AddUserManager>() + .AddUserStore>() + .AddRoleManager>() + .AddRoleStore>() + .AddDefaultTokenProviders() + .AddSignInManager() + .AddDefaultTokenProviders(); + services.AddScoped(); + + return services; + } + + public static IApplicationBuilder UseMartenIdentityMiddleware( + this IApplicationBuilder app + ) + { + app.UseMiddleware(); + app.UseMiddleware(); + return app; } - public static void InitializeIdentity(this StoreOptions options) + public static void InitializeIdentity(this global::Marten.StoreOptions options) { options.InitializeUsersStore(); options.InitializeRolesStore(); diff --git a/AndreGoepel.AppFoundation/docker-compose.dcproj b/AndreGoepel.AppFoundation/docker-compose.dcproj index 37f743e..402d2f2 100644 --- a/AndreGoepel.AppFoundation/docker-compose.dcproj +++ b/AndreGoepel.AppFoundation/docker-compose.dcproj @@ -6,7 +6,7 @@ 81dded9d-158b-e303-5f62-77a2896d2a5a LaunchBrowser {Scheme}://localhost:{ServicePort} - andregoepel.membersarea + andregoepel.appfoundation diff --git a/AndreGoepel.AppFoundation/docker-compose.override.yml b/AndreGoepel.AppFoundation/docker-compose.override.yml index 73caba8..d75323e 100644 --- a/AndreGoepel.AppFoundation/docker-compose.override.yml +++ b/AndreGoepel.AppFoundation/docker-compose.override.yml @@ -1,5 +1,5 @@ services: - andregoepel.membersarea: + andregoepel.appfoundation: environment: - ASPNETCORE_ENVIRONMENT=Development - ASPNETCORE_HTTP_PORTS=8080 diff --git a/AndreGoepel.AppFoundation/docker-compose.yml b/AndreGoepel.AppFoundation/docker-compose.yml index 29ea409..5c55667 100644 --- a/AndreGoepel.AppFoundation/docker-compose.yml +++ b/AndreGoepel.AppFoundation/docker-compose.yml @@ -1,6 +1,6 @@ services: - andregoepel.membersarea: - image: ${DOCKER_REGISTRY-}andregoepelmembersarea + andregoepel.appfoundation: + image: ${DOCKER_REGISTRY-}andregoepelappfoundation build: context: . - dockerfile: AndreGoepel.MembersArea/Dockerfile + dockerfile: AndreGoepel.AppFoundation/Dockerfile diff --git a/AndreGoepel.AppFoundation/launchSettings.json b/AndreGoepel.AppFoundation/launchSettings.json index 43537c1..365c6b0 100644 --- a/AndreGoepel.AppFoundation/launchSettings.json +++ b/AndreGoepel.AppFoundation/launchSettings.json @@ -4,7 +4,7 @@ "commandName": "DockerCompose", "commandVersion": "1.0", "serviceActions": { - "andregoepel.membersarea": "StartDebugging" + "andregoepel.appfoundation": "StartDebugging" } } } From ccc46693967218abbd3ea1ba3764bf793554e134 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20G=C3=B6pel?= <22834588+derandre84@users.noreply.github.com> Date: Wed, 13 May 2026 12:12:42 +0700 Subject: [PATCH 4/9] step 3: extract Blazor identity UI into AndreGoepel.Marten.Identity.Blazor RCL Move all Account/Administration/Layout/Shared Blazor components and endpoint wiring out of the startup project into a new Razor Class Library. Expose AddMartenIdentityBlazor() and MapAdditionalIdentityEndpoints() as the public API. Update startup and test projects to reference the RCL. --- .../Account/Pages/ConfirmEmail.Tests.cs | 2 +- .../Account/Pages/ConfirmEmailChange.Tests.cs | 2 +- .../Account/Pages/LoginWith2fa.Tests.cs | 2 +- .../Pages/LoginWithRecoveryCode.Tests.cs | 2 +- .../Pages/RegisterConfirmation.Tests.cs | 2 +- .../Account/Pages/ResetPassword.Tests.cs | 2 +- .../Account/Pages/StaticPages.Tests.cs | 2 +- .../Account/Shared/RedirectToLogin.Tests.cs | 2 +- .../Account/Shared/ShowRecoveryCodes.Tests.cs | 2 +- .../AndreGoepel.AppFoundation.Tests.csproj | 1 + .../Shared/LinkButton.Tests.cs | 2 +- .../AndreGoepel.AppFoundation.slnx | 1 + .../AndreGoepel.AppFoundation.csproj | 3 +-- .../Components/Pages/Setup.razor | 3 --- .../Components/Routes.razor | 2 -- .../Components/_Imports.razor | 8 ++++--- .../AndreGoepel.AppFoundation/Program.cs | 10 +++----- .../AndreGoepel.Marten.Identity.Blazor.csproj | 19 +++++++++++++++ ...omponentsEndpointRouteBuilderExtensions.cs | 9 +++++-- ...RevalidatingAuthenticationStateProvider.cs | 4 +++- .../Account/Pages/AccessDenied.razor | 0 .../Account/Pages/ConfirmEmail.razor | 0 .../Account/Pages/ConfirmEmailChange.razor | 0 .../Account/Pages/ForgotPassword.razor | 1 - .../Pages/ForgotPasswordConfirmation.razor | 0 .../Account/Pages/InvalidPasswordReset.razor | 0 .../Account/Pages/InvalidUser.razor | 0 .../Components/Account/Pages/Lockout.razor | 0 .../Components/Account/Pages/Login.razor | 1 - .../Components/Account/Pages/LoginForm.razor | 0 .../Account/Pages/LoginWith2fa.razor | 1 - .../Account/Pages/LoginWithRecoveryCode.razor | 1 - .../Account/Pages/Manage/ChangePassword.razor | 0 .../Pages/Manage/DeletePersonalData.razor | 0 .../Account/Pages/Manage/Disable2fa.razor | 1 - .../Account/Pages/Manage/Email.razor | 0 .../Pages/Manage/EnableAuthenticator.razor | 0 .../Pages/Manage/GenerateRecoveryCodes.razor | 0 .../Account/Pages/Manage/PasskeyCreate.razor | 0 .../Account/Pages/Manage/Passkeys.razor | 0 .../Account/Pages/Manage/PersonalData.razor | 0 .../Account/Pages/Manage/Profile.razor | 0 .../Account/Pages/Manage/RenamePasskey.razor | 0 .../Pages/Manage/ResetAuthenticator.razor | 0 .../Account/Pages/Manage/SetPassword.razor | 0 .../Manage/TwoFactorAuthentication.razor | 2 +- .../Account/Pages/Manage/_Imports.razor | 0 .../Components/Account/Pages/Register.razor | 2 -- .../Account/Pages/RegisterConfirmation.razor | 0 .../Pages/ResendEmailConfirmation.razor | 1 - .../Account/Pages/ResetPassword.razor | 0 .../Pages/ResetPasswordConfirmation.razor | 0 .../Components/Account/PasskeyInputModel.cs | 2 +- .../Components/Account/PasskeyOperation.cs | 2 +- .../Account/Shared/PasskeySubmit.razor | 0 .../Account/Shared/PasskeySubmit.razor.js | 0 .../Account/Shared/RedirectToLogin.razor | 0 .../Account/Shared/ShowRecoveryCodes.razor | 0 .../Administration/Dialogs/NewRole.razor | 0 .../Dialogs/RoleUserDialog.razor | 0 .../Dialogs/UserRoleDialog.razor | 0 .../Administration/Pages/Roles.razor | 2 +- .../Administration/Pages/Users.razor | 2 +- .../Components/Administration/_Imports.razor | 0 .../Components/Layout/LoginLayout.razor | 0 .../Components/Layout/LoginLayout.razor.css | 0 .../Components/Shared/LinkButton.razor | 0 .../Initialization.cs | 19 +++++++++++++++ .../_Imports.razor | 24 +++++++++++++++++++ 69 files changed, 98 insertions(+), 43 deletions(-) create mode 100644 AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/AndreGoepel.Marten.Identity.Blazor.csproj rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation => AndreGoepel.Marten.Identity.Blazor}/Components/Account/IdentityComponentsEndpointRouteBuilderExtensions.cs (96%) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation => AndreGoepel.Marten.Identity.Blazor}/Components/Account/IdentityRevalidatingAuthenticationStateProvider.cs (92%) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation => AndreGoepel.Marten.Identity.Blazor}/Components/Account/Pages/AccessDenied.razor (100%) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation => AndreGoepel.Marten.Identity.Blazor}/Components/Account/Pages/ConfirmEmail.razor (100%) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation => AndreGoepel.Marten.Identity.Blazor}/Components/Account/Pages/ConfirmEmailChange.razor (100%) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation => AndreGoepel.Marten.Identity.Blazor}/Components/Account/Pages/ForgotPassword.razor (98%) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation => AndreGoepel.Marten.Identity.Blazor}/Components/Account/Pages/ForgotPasswordConfirmation.razor (100%) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation => AndreGoepel.Marten.Identity.Blazor}/Components/Account/Pages/InvalidPasswordReset.razor (100%) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation => AndreGoepel.Marten.Identity.Blazor}/Components/Account/Pages/InvalidUser.razor (100%) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation => AndreGoepel.Marten.Identity.Blazor}/Components/Account/Pages/Lockout.razor (100%) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation => AndreGoepel.Marten.Identity.Blazor}/Components/Account/Pages/Login.razor (98%) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation => AndreGoepel.Marten.Identity.Blazor}/Components/Account/Pages/LoginForm.razor (100%) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation => AndreGoepel.Marten.Identity.Blazor}/Components/Account/Pages/LoginWith2fa.razor (98%) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation => AndreGoepel.Marten.Identity.Blazor}/Components/Account/Pages/LoginWithRecoveryCode.razor (98%) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation => AndreGoepel.Marten.Identity.Blazor}/Components/Account/Pages/Manage/ChangePassword.razor (100%) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation => AndreGoepel.Marten.Identity.Blazor}/Components/Account/Pages/Manage/DeletePersonalData.razor (100%) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation => AndreGoepel.Marten.Identity.Blazor}/Components/Account/Pages/Manage/Disable2fa.razor (99%) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation => AndreGoepel.Marten.Identity.Blazor}/Components/Account/Pages/Manage/Email.razor (100%) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation => AndreGoepel.Marten.Identity.Blazor}/Components/Account/Pages/Manage/EnableAuthenticator.razor (100%) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation => AndreGoepel.Marten.Identity.Blazor}/Components/Account/Pages/Manage/GenerateRecoveryCodes.razor (100%) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation => AndreGoepel.Marten.Identity.Blazor}/Components/Account/Pages/Manage/PasskeyCreate.razor (100%) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation => AndreGoepel.Marten.Identity.Blazor}/Components/Account/Pages/Manage/Passkeys.razor (100%) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation => AndreGoepel.Marten.Identity.Blazor}/Components/Account/Pages/Manage/PersonalData.razor (100%) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation => AndreGoepel.Marten.Identity.Blazor}/Components/Account/Pages/Manage/Profile.razor (100%) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation => AndreGoepel.Marten.Identity.Blazor}/Components/Account/Pages/Manage/RenamePasskey.razor (100%) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation => AndreGoepel.Marten.Identity.Blazor}/Components/Account/Pages/Manage/ResetAuthenticator.razor (100%) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation => AndreGoepel.Marten.Identity.Blazor}/Components/Account/Pages/Manage/SetPassword.razor (100%) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation => AndreGoepel.Marten.Identity.Blazor}/Components/Account/Pages/Manage/TwoFactorAuthentication.razor (98%) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation => AndreGoepel.Marten.Identity.Blazor}/Components/Account/Pages/Manage/_Imports.razor (100%) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation => AndreGoepel.Marten.Identity.Blazor}/Components/Account/Pages/Register.razor (98%) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation => AndreGoepel.Marten.Identity.Blazor}/Components/Account/Pages/RegisterConfirmation.razor (100%) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation => AndreGoepel.Marten.Identity.Blazor}/Components/Account/Pages/ResendEmailConfirmation.razor (98%) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation => AndreGoepel.Marten.Identity.Blazor}/Components/Account/Pages/ResetPassword.razor (100%) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation => AndreGoepel.Marten.Identity.Blazor}/Components/Account/Pages/ResetPasswordConfirmation.razor (100%) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation => AndreGoepel.Marten.Identity.Blazor}/Components/Account/PasskeyInputModel.cs (65%) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation => AndreGoepel.Marten.Identity.Blazor}/Components/Account/PasskeyOperation.cs (50%) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation => AndreGoepel.Marten.Identity.Blazor}/Components/Account/Shared/PasskeySubmit.razor (100%) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation => AndreGoepel.Marten.Identity.Blazor}/Components/Account/Shared/PasskeySubmit.razor.js (100%) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation => AndreGoepel.Marten.Identity.Blazor}/Components/Account/Shared/RedirectToLogin.razor (100%) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation => AndreGoepel.Marten.Identity.Blazor}/Components/Account/Shared/ShowRecoveryCodes.razor (100%) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation => AndreGoepel.Marten.Identity.Blazor}/Components/Administration/Dialogs/NewRole.razor (100%) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation => AndreGoepel.Marten.Identity.Blazor}/Components/Administration/Dialogs/RoleUserDialog.razor (100%) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation => AndreGoepel.Marten.Identity.Blazor}/Components/Administration/Dialogs/UserRoleDialog.razor (100%) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation => AndreGoepel.Marten.Identity.Blazor}/Components/Administration/Pages/Roles.razor (98%) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation => AndreGoepel.Marten.Identity.Blazor}/Components/Administration/Pages/Users.razor (98%) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation => AndreGoepel.Marten.Identity.Blazor}/Components/Administration/_Imports.razor (100%) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation => AndreGoepel.Marten.Identity.Blazor}/Components/Layout/LoginLayout.razor (100%) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation => AndreGoepel.Marten.Identity.Blazor}/Components/Layout/LoginLayout.razor.css (100%) rename AndreGoepel.AppFoundation/{AndreGoepel.AppFoundation => AndreGoepel.Marten.Identity.Blazor}/Components/Shared/LinkButton.razor (100%) create mode 100644 AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Initialization.cs create mode 100644 AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/_Imports.razor diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/ConfirmEmail.Tests.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/ConfirmEmail.Tests.cs index fc9eb16..19d7426 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/ConfirmEmail.Tests.cs +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/ConfirmEmail.Tests.cs @@ -1,6 +1,6 @@ using System.Text; using AndreGoepel.Marten.Identity.Users; -using AndreGoepel.AppFoundation.Components.Account.Pages; +using AndreGoepel.Marten.Identity.Blazor.Components.Account.Pages; using Bunit; using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Http; diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/ConfirmEmailChange.Tests.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/ConfirmEmailChange.Tests.cs index ef64350..2e6be18 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/ConfirmEmailChange.Tests.cs +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/ConfirmEmailChange.Tests.cs @@ -1,6 +1,6 @@ using System.Text; using AndreGoepel.Marten.Identity.Users; -using AndreGoepel.AppFoundation.Components.Account.Pages; +using AndreGoepel.Marten.Identity.Blazor.Components.Account.Pages; using Bunit; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Components; diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/LoginWith2fa.Tests.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/LoginWith2fa.Tests.cs index c4bb111..cf4972d 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/LoginWith2fa.Tests.cs +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/LoginWith2fa.Tests.cs @@ -1,4 +1,4 @@ -using AndreGoepel.AppFoundation.Components.Account.Pages; +using AndreGoepel.Marten.Identity.Blazor.Components.Account.Pages; using Bunit; using Microsoft.AspNetCore.Components; using Microsoft.Extensions.DependencyInjection; diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/LoginWithRecoveryCode.Tests.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/LoginWithRecoveryCode.Tests.cs index 55847d9..caa533e 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/LoginWithRecoveryCode.Tests.cs +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/LoginWithRecoveryCode.Tests.cs @@ -1,4 +1,4 @@ -using AndreGoepel.AppFoundation.Components.Account.Pages; +using AndreGoepel.Marten.Identity.Blazor.Components.Account.Pages; using Bunit; using Microsoft.AspNetCore.Components; using Microsoft.Extensions.DependencyInjection; diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/RegisterConfirmation.Tests.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/RegisterConfirmation.Tests.cs index 9f8e184..bafeee7 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/RegisterConfirmation.Tests.cs +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/RegisterConfirmation.Tests.cs @@ -1,5 +1,5 @@ using AndreGoepel.Marten.Identity.Users; -using AndreGoepel.AppFoundation.Components.Account.Pages; +using AndreGoepel.Marten.Identity.Blazor.Components.Account.Pages; using Bunit; using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Http; diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/ResetPassword.Tests.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/ResetPassword.Tests.cs index 6413dbd..22c4886 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/ResetPassword.Tests.cs +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/ResetPassword.Tests.cs @@ -1,6 +1,6 @@ using System.Text; using AndreGoepel.Marten.Identity.Users; -using AndreGoepel.AppFoundation.Components.Account.Pages; +using AndreGoepel.Marten.Identity.Blazor.Components.Account.Pages; using Bunit; using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Identity; diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/StaticPages.Tests.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/StaticPages.Tests.cs index 880da87..5d66583 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/StaticPages.Tests.cs +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Pages/StaticPages.Tests.cs @@ -1,4 +1,4 @@ -using AndreGoepel.AppFoundation.Components.Account.Pages; +using AndreGoepel.Marten.Identity.Blazor.Components.Account.Pages; using Bunit; using Microsoft.AspNetCore.Components; using Microsoft.Extensions.DependencyInjection; diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Shared/RedirectToLogin.Tests.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Shared/RedirectToLogin.Tests.cs index bbcd921..f80ce46 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Shared/RedirectToLogin.Tests.cs +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Shared/RedirectToLogin.Tests.cs @@ -1,4 +1,4 @@ -using AndreGoepel.AppFoundation.Components.Account.Shared; +using AndreGoepel.Marten.Identity.Blazor.Components.Account.Shared; using Bunit; using Microsoft.AspNetCore.Components; using Microsoft.Extensions.DependencyInjection; diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Shared/ShowRecoveryCodes.Tests.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Shared/ShowRecoveryCodes.Tests.cs index 0938a8e..b7dc2c7 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Shared/ShowRecoveryCodes.Tests.cs +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Account/Shared/ShowRecoveryCodes.Tests.cs @@ -1,4 +1,4 @@ -using AndreGoepel.AppFoundation.Components.Account.Shared; +using AndreGoepel.Marten.Identity.Blazor.Components.Account.Shared; using Bunit; namespace AndreGoepel.AppFoundation.Tests.Account.Shared; diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/AndreGoepel.AppFoundation.Tests.csproj b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/AndreGoepel.AppFoundation.Tests.csproj index 38fe91b..c4f2042 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/AndreGoepel.AppFoundation.Tests.csproj +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/AndreGoepel.AppFoundation.Tests.csproj @@ -27,5 +27,6 @@ + diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Shared/LinkButton.Tests.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Shared/LinkButton.Tests.cs index 81d5fdc..8eb0b10 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Shared/LinkButton.Tests.cs +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.Tests/Shared/LinkButton.Tests.cs @@ -1,4 +1,4 @@ -using AndreGoepel.AppFoundation.Components.Shared; +using AndreGoepel.Marten.Identity.Blazor.Components.Shared; using Bunit; using Microsoft.AspNetCore.Components; using Microsoft.Extensions.DependencyInjection; diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.slnx b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.slnx index 61f402c..04c1c22 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.slnx +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.slnx @@ -7,6 +7,7 @@ + diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.csproj b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.csproj index bc8842c..a48d3b0 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.csproj +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.csproj @@ -22,12 +22,11 @@ - - + diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Pages/Setup.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Pages/Setup.razor index c87edc9..a9b05f3 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Pages/Setup.razor +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Pages/Setup.razor @@ -8,9 +8,6 @@ @using AndreGoepel.Marten.Identity.Roles @using AndreGoepel.Marten.Identity.Users @using AndreGoepel.AppFoundation -@using AndreGoepel.AppFoundation.Components.Account -@using AndreGoepel.AppFoundation.Components.Account.Shared -@using AndreGoepel.AppFoundation.Components.Layout @using Microsoft.AspNetCore.Identity @using Microsoft.AspNetCore.WebUtilities @using Radzen diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Routes.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Routes.razor index 16c37ce..4652d57 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Routes.razor +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Routes.razor @@ -1,5 +1,3 @@ -@using AndreGoepel.AppFoundation.Components.Account.Shared -@using AndreGoepel.AppFoundation.Components.Layout @using Radzen.Blazor diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/_Imports.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/_Imports.razor index 8b62f43..033b53d 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/_Imports.razor +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/_Imports.razor @@ -1,4 +1,4 @@ -@using System.Net.Http +@using System.Net.Http @using System.Net.Http.Json @using Microsoft.AspNetCore.Authorization @using Microsoft.AspNetCore.Components.Authorization @@ -9,10 +9,12 @@ @using static Microsoft.AspNetCore.Components.Web.RenderMode @using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.JSInterop +@using AndreGoepel.Marten.Identity.Http +@using AndreGoepel.Marten.Identity.Blazor.Components.Account +@using AndreGoepel.Marten.Identity.Blazor.Components.Account.Shared +@using AndreGoepel.Marten.Identity.Blazor.Components.Layout @using AndreGoepel.AppFoundation @using AndreGoepel.AppFoundation.Components -@using AndreGoepel.AppFoundation.Components.Account.Shared @using AndreGoepel.AppFoundation.Components.Layout -@using AndreGoepel.Marten.Identity.Http @using Radzen @using Radzen.Blazor diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Program.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Program.cs index b048d35..d41fc16 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Program.cs +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Program.cs @@ -1,11 +1,12 @@ using AndreGoepel.Marten.Identity; +using AndreGoepel.Marten.Identity.Blazor; +using AndreGoepel.Marten.Identity.Blazor.Components.Account; using AndreGoepel.Marten.Identity.Users; using AndreGoepel.AppFoundation.Components; using AndreGoepel.AppFoundation.Components.Account; using AndreGoepel.AppFoundation.MailService; using JasperFx; using Marten; -using Microsoft.AspNetCore.Components.Authorization; using Microsoft.AspNetCore.Identity; using Radzen; using Wolverine; @@ -20,13 +21,8 @@ .AddInteractiveServerComponents() .AddInteractiveServerComponents(); -builder.Services.AddCascadingAuthenticationState(); -builder.Services.AddScoped< - AuthenticationStateProvider, - IdentityRevalidatingAuthenticationStateProvider ->(); - builder.Services.AddMartenIdentity(); +builder.Services.AddMartenIdentityBlazor(); var connectionString = builder.Configuration.GetConnectionString("appfoundation-database") diff --git a/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/AndreGoepel.Marten.Identity.Blazor.csproj b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/AndreGoepel.Marten.Identity.Blazor.csproj new file mode 100644 index 0000000..e6044fa --- /dev/null +++ b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/AndreGoepel.Marten.Identity.Blazor.csproj @@ -0,0 +1,19 @@ + + + net10.0 + enable + enable + + + + + + + + + + + + + + diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/IdentityComponentsEndpointRouteBuilderExtensions.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/IdentityComponentsEndpointRouteBuilderExtensions.cs similarity index 96% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/IdentityComponentsEndpointRouteBuilderExtensions.cs rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/IdentityComponentsEndpointRouteBuilderExtensions.cs index f00d17d..daa2df5 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/IdentityComponentsEndpointRouteBuilderExtensions.cs +++ b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/IdentityComponentsEndpointRouteBuilderExtensions.cs @@ -2,13 +2,18 @@ using System.Security.Claims; using System.Text.Json; using AndreGoepel.Marten.Identity.Users; +using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Components.Authorization; +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Routing; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; -namespace AndreGoepel.AppFoundation.Components.Account; +namespace AndreGoepel.Marten.Identity.Blazor.Components.Account; -internal static class IdentityComponentsEndpointRouteBuilderExtensions +public static class IdentityComponentsEndpointRouteBuilderExtensions { // These endpoints are required by the Identity Razor components defined in the /Components/Account/Pages directory of this project. public static IEndpointConventionBuilder MapAdditionalIdentityEndpoints( diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/IdentityRevalidatingAuthenticationStateProvider.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/IdentityRevalidatingAuthenticationStateProvider.cs similarity index 92% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/IdentityRevalidatingAuthenticationStateProvider.cs rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/IdentityRevalidatingAuthenticationStateProvider.cs index 55a931b..7afc5dc 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/IdentityRevalidatingAuthenticationStateProvider.cs +++ b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/IdentityRevalidatingAuthenticationStateProvider.cs @@ -3,9 +3,11 @@ using Microsoft.AspNetCore.Components.Authorization; using Microsoft.AspNetCore.Components.Server; using Microsoft.AspNetCore.Identity; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; -namespace AndreGoepel.AppFoundation.Components.Account; +namespace AndreGoepel.Marten.Identity.Blazor.Components.Account; // This is a server-side AuthenticationStateProvider that revalidates the security stamp for the connected user // every 30 minutes an interactive circuit is connected. diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/AccessDenied.razor b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/AccessDenied.razor similarity index 100% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/AccessDenied.razor rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/AccessDenied.razor diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/ConfirmEmail.razor b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/ConfirmEmail.razor similarity index 100% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/ConfirmEmail.razor rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/ConfirmEmail.razor diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/ConfirmEmailChange.razor b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/ConfirmEmailChange.razor similarity index 100% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/ConfirmEmailChange.razor rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/ConfirmEmailChange.razor diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/ForgotPassword.razor b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/ForgotPassword.razor similarity index 98% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/ForgotPassword.razor rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/ForgotPassword.razor index d258fd6..50b6051 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/ForgotPassword.razor +++ b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/ForgotPassword.razor @@ -6,7 +6,6 @@ @using System.Text @using System.Text.Encodings.Web @using AndreGoepel.Marten.Identity.Users -@using AndreGoepel.AppFoundation.Components.Layout @using Microsoft.AspNetCore.Identity @using Microsoft.AspNetCore.WebUtilities @using Radzen diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/ForgotPasswordConfirmation.razor b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/ForgotPasswordConfirmation.razor similarity index 100% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/ForgotPasswordConfirmation.razor rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/ForgotPasswordConfirmation.razor diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/InvalidPasswordReset.razor b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/InvalidPasswordReset.razor similarity index 100% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/InvalidPasswordReset.razor rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/InvalidPasswordReset.razor diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/InvalidUser.razor b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/InvalidUser.razor similarity index 100% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/InvalidUser.razor rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/InvalidUser.razor diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Lockout.razor b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/Lockout.razor similarity index 100% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Lockout.razor rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/Lockout.razor diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Login.razor b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/Login.razor similarity index 98% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Login.razor rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/Login.razor index 074f8dc..76a08b8 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Login.razor +++ b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/Login.razor @@ -1,7 +1,6 @@ @page "/Account/Login" @layout LoginLayout @using AndreGoepel.Marten.Identity.Users -@using AndreGoepel.AppFoundation.Components.Layout @using Microsoft.AspNetCore.Identity @using Radzen @using Radzen.Blazor diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/LoginForm.razor b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/LoginForm.razor similarity index 100% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/LoginForm.razor rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/LoginForm.razor diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/LoginWith2fa.razor b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/LoginWith2fa.razor similarity index 98% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/LoginWith2fa.razor rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/LoginWith2fa.razor index 7ade348..cfab7e4 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/LoginWith2fa.razor +++ b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/LoginWith2fa.razor @@ -3,7 +3,6 @@ @rendermode InteractiveServer @using System.ComponentModel.DataAnnotations -@using AndreGoepel.AppFoundation.Components.Layout @using Radzen @using Radzen.Blazor diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/LoginWithRecoveryCode.razor b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/LoginWithRecoveryCode.razor similarity index 98% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/LoginWithRecoveryCode.razor rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/LoginWithRecoveryCode.razor index 1ae5874..138f6e5 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/LoginWithRecoveryCode.razor +++ b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/LoginWithRecoveryCode.razor @@ -3,7 +3,6 @@ @rendermode InteractiveServer @using System.ComponentModel.DataAnnotations -@using AndreGoepel.AppFoundation.Components.Layout @using Radzen @using Radzen.Blazor diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/ChangePassword.razor b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/Manage/ChangePassword.razor similarity index 100% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/ChangePassword.razor rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/Manage/ChangePassword.razor diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/DeletePersonalData.razor b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/Manage/DeletePersonalData.razor similarity index 100% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/DeletePersonalData.razor rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/Manage/DeletePersonalData.razor diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/Disable2fa.razor b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/Manage/Disable2fa.razor similarity index 99% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/Disable2fa.razor rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/Manage/Disable2fa.razor index bbfd893..e411cd4 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/Disable2fa.razor +++ b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/Manage/Disable2fa.razor @@ -2,7 +2,6 @@ @rendermode InteractiveServer @using AndreGoepel.Marten.Identity.Users -@using AndreGoepel.AppFoundation @using Microsoft.AspNetCore.Identity @using Radzen @using Radzen.Blazor diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/Email.razor b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/Manage/Email.razor similarity index 100% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/Email.razor rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/Manage/Email.razor diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/EnableAuthenticator.razor b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/Manage/EnableAuthenticator.razor similarity index 100% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/EnableAuthenticator.razor rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/Manage/EnableAuthenticator.razor diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/GenerateRecoveryCodes.razor b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/Manage/GenerateRecoveryCodes.razor similarity index 100% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/GenerateRecoveryCodes.razor rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/Manage/GenerateRecoveryCodes.razor diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/PasskeyCreate.razor b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/Manage/PasskeyCreate.razor similarity index 100% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/PasskeyCreate.razor rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/Manage/PasskeyCreate.razor diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/Passkeys.razor b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/Manage/Passkeys.razor similarity index 100% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/Passkeys.razor rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/Manage/Passkeys.razor diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/PersonalData.razor b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/Manage/PersonalData.razor similarity index 100% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/PersonalData.razor rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/Manage/PersonalData.razor diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/Profile.razor b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/Manage/Profile.razor similarity index 100% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/Profile.razor rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/Manage/Profile.razor diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/RenamePasskey.razor b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/Manage/RenamePasskey.razor similarity index 100% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/RenamePasskey.razor rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/Manage/RenamePasskey.razor diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/ResetAuthenticator.razor b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/Manage/ResetAuthenticator.razor similarity index 100% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/ResetAuthenticator.razor rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/Manage/ResetAuthenticator.razor diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/SetPassword.razor b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/Manage/SetPassword.razor similarity index 100% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/SetPassword.razor rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/Manage/SetPassword.razor diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/TwoFactorAuthentication.razor b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/Manage/TwoFactorAuthentication.razor similarity index 98% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/TwoFactorAuthentication.razor rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/Manage/TwoFactorAuthentication.razor index d2e2c17..ebbaff3 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/TwoFactorAuthentication.razor +++ b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/Manage/TwoFactorAuthentication.razor @@ -1,7 +1,7 @@ @page "/Account/Manage/TwoFactorAuthentication" @using AndreGoepel.Marten.Identity.Users -@using AndreGoepel.AppFoundation.Components.Shared +@using AndreGoepel.Marten.Identity.Blazor.Components.Shared @using Microsoft.AspNetCore.Identity @using Radzen @using Radzen.Blazor diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/_Imports.razor b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/Manage/_Imports.razor similarity index 100% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Manage/_Imports.razor rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/Manage/_Imports.razor diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Register.razor b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/Register.razor similarity index 98% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Register.razor rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/Register.razor index 53c710a..49920d3 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/Register.razor +++ b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/Register.razor @@ -6,8 +6,6 @@ @using System.Text @using System.Text.Encodings.Web @using AndreGoepel.Marten.Identity.Users -@using AndreGoepel.AppFoundation -@using AndreGoepel.AppFoundation.Components.Layout @using Microsoft.AspNetCore.Identity @using Microsoft.AspNetCore.WebUtilities @using Radzen diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/RegisterConfirmation.razor b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/RegisterConfirmation.razor similarity index 100% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/RegisterConfirmation.razor rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/RegisterConfirmation.razor diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/ResendEmailConfirmation.razor b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/ResendEmailConfirmation.razor similarity index 98% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/ResendEmailConfirmation.razor rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/ResendEmailConfirmation.razor index 679730a..238d3b6 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/ResendEmailConfirmation.razor +++ b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/ResendEmailConfirmation.razor @@ -6,7 +6,6 @@ @using System.Text @using System.Text.Encodings.Web @using AndreGoepel.Marten.Identity.Users -@using AndreGoepel.AppFoundation.Components.Layout @using Microsoft.AspNetCore.Identity @using Microsoft.AspNetCore.WebUtilities @using Radzen diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/ResetPassword.razor b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/ResetPassword.razor similarity index 100% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/ResetPassword.razor rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/ResetPassword.razor diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/ResetPasswordConfirmation.razor b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/ResetPasswordConfirmation.razor similarity index 100% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Pages/ResetPasswordConfirmation.razor rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Pages/ResetPasswordConfirmation.razor diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/PasskeyInputModel.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/PasskeyInputModel.cs similarity index 65% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/PasskeyInputModel.cs rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/PasskeyInputModel.cs index 6dfe3c7..179c88d 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/PasskeyInputModel.cs +++ b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/PasskeyInputModel.cs @@ -1,4 +1,4 @@ -namespace AndreGoepel.AppFoundation.Components.Account; +namespace AndreGoepel.Marten.Identity.Blazor.Components.Account; public class PasskeyInputModel { diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/PasskeyOperation.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/PasskeyOperation.cs similarity index 50% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/PasskeyOperation.cs rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/PasskeyOperation.cs index 77e8a4b..534cad3 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/PasskeyOperation.cs +++ b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/PasskeyOperation.cs @@ -1,4 +1,4 @@ -namespace AndreGoepel.AppFoundation.Components.Account; +namespace AndreGoepel.Marten.Identity.Blazor.Components.Account; public enum PasskeyOperation { diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Shared/PasskeySubmit.razor b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Shared/PasskeySubmit.razor similarity index 100% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Shared/PasskeySubmit.razor rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Shared/PasskeySubmit.razor diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Shared/PasskeySubmit.razor.js b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Shared/PasskeySubmit.razor.js similarity index 100% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Shared/PasskeySubmit.razor.js rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Shared/PasskeySubmit.razor.js diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Shared/RedirectToLogin.razor b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Shared/RedirectToLogin.razor similarity index 100% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Shared/RedirectToLogin.razor rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Shared/RedirectToLogin.razor diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Shared/ShowRecoveryCodes.razor b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Shared/ShowRecoveryCodes.razor similarity index 100% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Account/Shared/ShowRecoveryCodes.razor rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Account/Shared/ShowRecoveryCodes.razor diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Administration/Dialogs/NewRole.razor b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Administration/Dialogs/NewRole.razor similarity index 100% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Administration/Dialogs/NewRole.razor rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Administration/Dialogs/NewRole.razor diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Administration/Dialogs/RoleUserDialog.razor b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Administration/Dialogs/RoleUserDialog.razor similarity index 100% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Administration/Dialogs/RoleUserDialog.razor rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Administration/Dialogs/RoleUserDialog.razor diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Administration/Dialogs/UserRoleDialog.razor b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Administration/Dialogs/UserRoleDialog.razor similarity index 100% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Administration/Dialogs/UserRoleDialog.razor rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Administration/Dialogs/UserRoleDialog.razor diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Administration/Pages/Roles.razor b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Administration/Pages/Roles.razor similarity index 98% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Administration/Pages/Roles.razor rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Administration/Pages/Roles.razor index 59d4144..3dbb9c1 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Administration/Pages/Roles.razor +++ b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Administration/Pages/Roles.razor @@ -3,7 +3,7 @@ @using AndreGoepel.Marten.Identity.Roles @using AndreGoepel.Marten.Identity.Users -@using AndreGoepel.AppFoundation.Components.Administration.Dialogs +@using AndreGoepel.Marten.Identity.Blazor.Components.Administration.Dialogs @using Microsoft.AspNetCore.Authorization @using Microsoft.AspNetCore.Identity @using Radzen diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Administration/Pages/Users.razor b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Administration/Pages/Users.razor similarity index 98% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Administration/Pages/Users.razor rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Administration/Pages/Users.razor index 01f3285..074a387 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Administration/Pages/Users.razor +++ b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Administration/Pages/Users.razor @@ -2,7 +2,7 @@ @rendermode InteractiveServer @using AndreGoepel.Marten.Identity.Users -@using AndreGoepel.AppFoundation.Components.Administration.Dialogs +@using AndreGoepel.Marten.Identity.Blazor.Components.Administration.Dialogs @using Microsoft.AspNetCore.Authorization @using System.Security.Claims @using Microsoft.AspNetCore.Identity diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Administration/_Imports.razor b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Administration/_Imports.razor similarity index 100% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Administration/_Imports.razor rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Administration/_Imports.razor diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Layout/LoginLayout.razor b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Layout/LoginLayout.razor similarity index 100% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Layout/LoginLayout.razor rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Layout/LoginLayout.razor diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Layout/LoginLayout.razor.css b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Layout/LoginLayout.razor.css similarity index 100% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Layout/LoginLayout.razor.css rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Layout/LoginLayout.razor.css diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Shared/LinkButton.razor b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Shared/LinkButton.razor similarity index 100% rename from AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Shared/LinkButton.razor rename to AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Components/Shared/LinkButton.razor diff --git a/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Initialization.cs b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Initialization.cs new file mode 100644 index 0000000..eb8f7d8 --- /dev/null +++ b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/Initialization.cs @@ -0,0 +1,19 @@ +using AndreGoepel.Marten.Identity.Blazor.Components.Account; +using Microsoft.AspNetCore.Components.Authorization; +using Microsoft.AspNetCore.Components.Server; +using Microsoft.Extensions.DependencyInjection; + +namespace AndreGoepel.Marten.Identity.Blazor; + +public static class Initialization +{ + public static IServiceCollection AddMartenIdentityBlazor(this IServiceCollection services) + { + services.AddCascadingAuthenticationState(); + services.AddScoped< + AuthenticationStateProvider, + IdentityRevalidatingAuthenticationStateProvider + >(); + return services; + } +} diff --git a/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/_Imports.razor b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/_Imports.razor new file mode 100644 index 0000000..2941520 --- /dev/null +++ b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/_Imports.razor @@ -0,0 +1,24 @@ +@using System.Net.Http +@using Microsoft.AspNetCore.Authorization +@using Microsoft.AspNetCore.Components.Authorization +@using Microsoft.AspNetCore.Components.Forms +@using Microsoft.AspNetCore.Components.Routing +@using Microsoft.AspNetCore.Components.Web +@using static Microsoft.AspNetCore.Components.Web.RenderMode +@using Microsoft.AspNetCore.Components.Web.Virtualization +@using Microsoft.AspNetCore.Http +@using Microsoft.AspNetCore.Identity +@using Microsoft.Extensions.DependencyInjection +@using Microsoft.Extensions.Logging +@using Microsoft.JSInterop +@using AndreGoepel.Marten.Identity +@using AndreGoepel.Marten.Identity.Http +@using AndreGoepel.Marten.Identity.Roles +@using AndreGoepel.Marten.Identity.Users +@using AndreGoepel.Marten.Identity.Blazor +@using AndreGoepel.Marten.Identity.Blazor.Components.Account +@using AndreGoepel.Marten.Identity.Blazor.Components.Account.Shared +@using AndreGoepel.Marten.Identity.Blazor.Components.Layout +@using AndreGoepel.Marten.Identity.Blazor.Components.Shared +@using Radzen +@using Radzen.Blazor From c5ef77e20a9434afdf4e22285e753c7120f36887 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20G=C3=B6pel?= <22834588+derandre84@users.noreply.github.com> Date: Wed, 13 May 2026 12:17:14 +0700 Subject: [PATCH 5/9] step 5: slim startup project and fix build warnings Remove dead Services/** excludes from csproj, fix duplicate AddInteractiveServerComponents() call, remove redundant @using from Routes.razor, and add missing Sections namespace to RCL _Imports.razor to clear RZ10012 warnings. --- .../AndreGoepel.AppFoundation.csproj | 7 ------- .../AndreGoepel.AppFoundation/Components/Routes.razor | 2 -- .../AndreGoepel.AppFoundation/Program.cs | 11 ++++------- .../AndreGoepel.Marten.Identity.Blazor/_Imports.razor | 1 + 4 files changed, 5 insertions(+), 16 deletions(-) diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.csproj b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.csproj index a48d3b0..dcbbe79 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.csproj +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.csproj @@ -8,13 +8,6 @@ Linux ..\docker-compose.dcproj - - - - - - - diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Routes.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Routes.razor index 4652d57..79d46fa 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Routes.razor +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Routes.razor @@ -1,5 +1,3 @@ -@using Radzen.Blazor - diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Program.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Program.cs index d41fc16..f6deb60 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Program.cs +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Program.cs @@ -1,10 +1,10 @@ +using AndreGoepel.AppFoundation.Components; +using AndreGoepel.AppFoundation.Components.Account; +using AndreGoepel.AppFoundation.MailService; using AndreGoepel.Marten.Identity; using AndreGoepel.Marten.Identity.Blazor; using AndreGoepel.Marten.Identity.Blazor.Components.Account; using AndreGoepel.Marten.Identity.Users; -using AndreGoepel.AppFoundation.Components; -using AndreGoepel.AppFoundation.Components.Account; -using AndreGoepel.AppFoundation.MailService; using JasperFx; using Marten; using Microsoft.AspNetCore.Identity; @@ -16,10 +16,7 @@ builder.AddServiceDefaults(); -builder - .Services.AddRazorComponents() - .AddInteractiveServerComponents() - .AddInteractiveServerComponents(); +builder.Services.AddRazorComponents().AddInteractiveServerComponents(); builder.Services.AddMartenIdentity(); builder.Services.AddMartenIdentityBlazor(); diff --git a/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/_Imports.razor b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/_Imports.razor index 2941520..9effbbd 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/_Imports.razor +++ b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/_Imports.razor @@ -5,6 +5,7 @@ @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using static Microsoft.AspNetCore.Components.Web.RenderMode +@using Microsoft.AspNetCore.Components.Sections @using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.AspNetCore.Http @using Microsoft.AspNetCore.Identity From 8e45eea118a7b4991d59ed189c8ebcb2b6870975 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20G=C3=B6pel?= <22834588+derandre84@users.noreply.github.com> Date: Wed, 13 May 2026 12:21:28 +0700 Subject: [PATCH 6/9] step 6: add NuGet packaging metadata Add Directory.Build.props with shared Authors, Copyright, RepositoryUrl, and MIT license. Add PackageId, Version, Description, and tags to both AndreGoepel.Marten.Identity and AndreGoepel.Marten.Identity.Blazor. --- .../AndreGoepel.Marten.Identity.Blazor.csproj | 8 ++++++++ .../AndreGoepel.Marten.Identity.csproj | 8 ++++++++ AndreGoepel.AppFoundation/Directory.Build.props | 10 ++++++++++ 3 files changed, 26 insertions(+) create mode 100644 AndreGoepel.AppFoundation/Directory.Build.props diff --git a/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/AndreGoepel.Marten.Identity.Blazor.csproj b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/AndreGoepel.Marten.Identity.Blazor.csproj index e6044fa..a932200 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/AndreGoepel.Marten.Identity.Blazor.csproj +++ b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/AndreGoepel.Marten.Identity.Blazor.csproj @@ -5,6 +5,14 @@ enable + + AndreGoepel.Marten.Identity.Blazor + 1.0.0 + Blazor Server UI components for AndreGoepel.Marten.Identity — login, registration, 2FA, passkeys, and user/role administration pages built with Radzen. + aspnetcore;blazor;identity;marten;radzen + true + + diff --git a/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/AndreGoepel.Marten.Identity.csproj b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/AndreGoepel.Marten.Identity.csproj index 40babab..0535a63 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/AndreGoepel.Marten.Identity.csproj +++ b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/AndreGoepel.Marten.Identity.csproj @@ -5,6 +5,14 @@ enable + + AndreGoepel.Marten.Identity + 1.0.0 + ASP.NET Core Identity stores backed by Marten (PostgreSQL). Provides user, role, and user-role stores, middleware, and DI extensions. + aspnetcore;identity;marten;postgresql + true + + diff --git a/AndreGoepel.AppFoundation/Directory.Build.props b/AndreGoepel.AppFoundation/Directory.Build.props new file mode 100644 index 0000000..e049a18 --- /dev/null +++ b/AndreGoepel.AppFoundation/Directory.Build.props @@ -0,0 +1,10 @@ + + + André Göpel + © André Göpel + https://github.com/andregoepel/members-area + git + MIT + false + + From 65968130224ce2111fbf33b6d680a118de657ca2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20G=C3=B6pel?= <22834588+derandre84@users.noreply.github.com> Date: Wed, 13 May 2026 12:23:24 +0700 Subject: [PATCH 7/9] add README files for NuGet packages Add README.md to AndreGoepel.Marten.Identity and AndreGoepel.Marten.Identity.Blazor with usage instructions, API overview, and requirements. Wire up PackageReadmeFile in each csproj so NuGet.org displays them. --- .../AndreGoepel.Marten.Identity.Blazor.csproj | 5 ++ .../README.md | 56 ++++++++++++++++ .../AndreGoepel.Marten.Identity.csproj | 5 ++ .../AndreGoepel.Marten.Identity/README.md | 64 +++++++++++++++++++ 4 files changed, 130 insertions(+) create mode 100644 AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/README.md create mode 100644 AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/README.md diff --git a/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/AndreGoepel.Marten.Identity.Blazor.csproj b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/AndreGoepel.Marten.Identity.Blazor.csproj index a932200..e7637e2 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/AndreGoepel.Marten.Identity.Blazor.csproj +++ b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/AndreGoepel.Marten.Identity.Blazor.csproj @@ -10,9 +10,14 @@ 1.0.0 Blazor Server UI components for AndreGoepel.Marten.Identity — login, registration, 2FA, passkeys, and user/role administration pages built with Radzen. aspnetcore;blazor;identity;marten;radzen + README.md true + + + + diff --git a/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/README.md b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/README.md new file mode 100644 index 0000000..bfac252 --- /dev/null +++ b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/README.md @@ -0,0 +1,56 @@ +# AndreGoepel.Marten.Identity.Blazor + +Blazor Server UI for [AndreGoepel.Marten.Identity](https://www.nuget.org/packages/AndreGoepel.Marten.Identity) — a complete set of ready-to-use Razor components for authentication and user management built on [Radzen Blazor](https://blazor.radzen.com/). + +## Requirements + +- .NET 10 +- AndreGoepel.Marten.Identity 1.x +- Radzen.Blazor 10.x + +## Installation + +``` +dotnet add package AndreGoepel.Marten.Identity.Blazor +``` + +## Usage + +### 1. Register services + +```csharp +builder.Services.AddMartenIdentity(); // from AndreGoepel.Marten.Identity +builder.Services.AddMartenIdentityBlazor(); // registers CascadingAuthenticationState + // and IdentityRevalidatingAuthenticationStateProvider +builder.Services.AddRadzenComponents(); +``` + +### 2. Map endpoints + +```csharp +app.MapAdditionalIdentityEndpoints(); // /Account/Logout, passkey endpoints, personal data download, etc. +``` + +### 3. Include the component assembly in routing + +```csharp +app.MapRazorComponents() + .AddInteractiveServerRenderMode() + .AddAdditionalAssemblies(typeof(AndreGoepel.Marten.Identity.Blazor.Initialization).Assembly); +``` + +This makes the routable pages in the RCL (e.g. `/Account/Login`) discoverable by the Blazor router. + +## What's included + +| Area | Components / Pages | +|---|---| +| **Account** | Login, Register, ForgotPassword, ResetPassword, ConfirmEmail, Lockout, AccessDenied, and more | +| **Account / Manage** | Profile, Email, ChangePassword, SetPassword, TwoFactorAuthentication, EnableAuthenticator, GenerateRecoveryCodes, Passkeys, PersonalData, DeletePersonalData | +| **Administration** | Users grid, Roles grid, user/role assignment dialogs | +| **Shared** | `RedirectToLogin`, `ShowRecoveryCodes`, `PasskeySubmit` | +| **Layout** | `LoginLayout` | + +## License + +MIT diff --git a/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/AndreGoepel.Marten.Identity.csproj b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/AndreGoepel.Marten.Identity.csproj index 0535a63..b421e67 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/AndreGoepel.Marten.Identity.csproj +++ b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/AndreGoepel.Marten.Identity.csproj @@ -10,9 +10,14 @@ 1.0.0 ASP.NET Core Identity stores backed by Marten (PostgreSQL). Provides user, role, and user-role stores, middleware, and DI extensions. aspnetcore;identity;marten;postgresql + README.md true + + + + diff --git a/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/README.md b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/README.md new file mode 100644 index 0000000..053a71b --- /dev/null +++ b/AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/README.md @@ -0,0 +1,64 @@ +# AndreGoepel.Marten.Identity + +ASP.NET Core Identity stores backed by [Marten](https://martendb.io/) (PostgreSQL). Provides event-sourced user and role stores, cookie login middleware, and DI extensions ready to drop into any ASP.NET Core application. + +## Requirements + +- .NET 10 +- Marten 8.x (`Marten.AspNetCore`) +- PostgreSQL + +## Installation + +``` +dotnet add package AndreGoepel.Marten.Identity +``` + +## Usage + +### 1. Configure Marten and wire up Identity stores + +```csharp +builder.Services.AddMartenIdentity(); + +builder.Services.AddMarten(options => +{ + options.Connection(connectionString); + options.InitializeIdentity(); // registers user, role, and user-role projections + options.AutoCreateSchemaObjects = AutoCreate.All; +}) +.IntegrateWithWolverine(); // optional — only needed when using Wolverine +``` + +`AddMartenIdentity` accepts an optional `Action` to customise password rules, lockout policy, etc. + +### 2. Add middleware + +Call `UseMartenIdentityMiddleware()` after `UseAuthentication()` / `UseAuthorization()`: + +```csharp +app.UseAuthentication(); +app.UseAuthorization(); +app.UseMartenIdentityMiddleware(); +``` + +This registers two middleware components: + +| Middleware | Purpose | +|---|---| +| `SetupRedirectMiddleware` | Redirects to `/Setup` when no roles exist yet | +| `CookieLoginMiddleware` | Exchanges a one-time login key for an authentication cookie (used by the setup flow) | + +## What's included + +| Namespace | Contents | +|---|---| +| `AndreGoepel.Marten.Identity.Users` | `User`, `UserId`, `UserStore`, event-sourced `UserProjection`, passkey support | +| `AndreGoepel.Marten.Identity.Roles` | `Role`, `RoleId`, `RoleStore`, event-sourced `RoleProjection`, built-in `Roles` constants | +| `AndreGoepel.Marten.Identity.UserRoles` | `UserRoleAssignment` projection for efficient role queries | +| `AndreGoepel.Marten.Identity.Http` | `SetupRedirectMiddleware`, `CookieLoginMiddleware` | +| `AndreGoepel.Marten.Identity.Services` | `ICurrentUserService` / `CurrentUserService` | + +## License + +MIT From 83116bc35784b12aa0b3a19cca503840884bd985 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20G=C3=B6pel?= <22834588+derandre84@users.noreply.github.com> Date: Wed, 13 May 2026 12:24:51 +0700 Subject: [PATCH 8/9] step 7: add CI workflow for build, test, pack, and NuGet push MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add ci.yml that runs restore/build/test on every push and PR against main. On version tags (v*), a second job packs both NuGet packages with the tag version and pushes them to NuGet.org via NUGET_API_KEY secret. Also fix stale path in docker-image.yml (MembersArea → AppFoundation). --- .github/workflows/ci.yml | 51 ++++++++++++++++++++++++++++++ .github/workflows/docker-image.yml | 2 +- 2 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..7a0743e --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,51 @@ +name: CI + +on: + push: + branches: ["main"] + tags: ["v*"] + pull_request: + branches: ["main"] + +jobs: + build-and-test: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-dotnet@v4 + with: + dotnet-version: "10.0.x" + + - name: Restore + run: dotnet restore AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.slnx + + - name: Build + run: dotnet build AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.slnx --no-restore -c Release + + - name: Test + run: dotnet test AndreGoepel.AppFoundation/AndreGoepel.AppFoundation.slnx --no-build -c Release + + pack-and-push: + needs: build-and-test + runs-on: ubuntu-latest + if: startsWith(github.ref, 'refs/tags/v') + + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-dotnet@v4 + with: + dotnet-version: "10.0.x" + + - name: Pack + run: | + VERSION="${GITHUB_REF_NAME#v}" + dotnet pack AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity/AndreGoepel.Marten.Identity.csproj \ + -c Release -p:Version=$VERSION -o nupkgs + dotnet pack AndreGoepel.AppFoundation/AndreGoepel.Marten.Identity.Blazor/AndreGoepel.Marten.Identity.Blazor.csproj \ + -c Release -p:Version=$VERSION -o nupkgs + + - name: Push to NuGet + run: dotnet nuget push "nupkgs/*.nupkg" --api-key ${{ secrets.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index 1a3c022..6878a00 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -15,4 +15,4 @@ jobs: steps: - uses: actions/checkout@v4 - name: Build the Docker image - run: docker build ./AndreGoepel.MembersArea --file ./AndreGoepel.MembersArea/AndreGoepel.MembersArea/Dockerfile --tag membersarea:$(date +%s) + run: docker build ./AndreGoepel.AppFoundation --file ./AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Dockerfile --tag appfoundation:$(date +%s) From cb47b2ebca4defebf926b988d05ffa543697ce9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20G=C3=B6pel?= <22834588+derandre84@users.noreply.github.com> Date: Wed, 13 May 2026 13:08:02 +0700 Subject: [PATCH 9/9] fix: include RCL assembly in Blazor router and endpoint mapping Account pages (/Account/Login etc.) returned 404 because the Router component and MapRazorComponents only scanned the startup assembly. Added AdditionalAssemblies to Routes.razor and AddAdditionalAssemblies to MapRazorComponents so the identity pages in Marten.Identity.Blazor are discoverable. --- .../AndreGoepel.AppFoundation/Components/Routes.razor | 3 ++- .../AndreGoepel.AppFoundation/Program.cs | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Routes.razor b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Routes.razor index 79d46fa..27674d6 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Routes.razor +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Components/Routes.razor @@ -1,4 +1,5 @@ - + diff --git a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Program.cs b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Program.cs index f6deb60..8cff4eb 100644 --- a/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Program.cs +++ b/AndreGoepel.AppFoundation/AndreGoepel.AppFoundation/Program.cs @@ -76,7 +76,9 @@ app.UseMartenIdentityMiddleware(); app.MapStaticAssets(); -app.MapRazorComponents().AddInteractiveServerRenderMode(); +app.MapRazorComponents() + .AddInteractiveServerRenderMode() + .AddAdditionalAssemblies(typeof(AndreGoepel.Marten.Identity.Blazor.Initialization).Assembly); app.MapAdditionalIdentityEndpoints();