diff --git a/IdentityServer/v8/UserManagement/README.md b/IdentityServer/v8/UserManagement/FullSample/README.md similarity index 71% rename from IdentityServer/v8/UserManagement/README.md rename to IdentityServer/v8/UserManagement/FullSample/README.md index f9cfba4bc..9ba6abf2f 100644 --- a/IdentityServer/v8/UserManagement/README.md +++ b/IdentityServer/v8/UserManagement/FullSample/README.md @@ -1,6 +1,6 @@ # Duende User Management Sample -This sample demonstrates a complete IdentityServer v8 implementation using **Duende User Management** — a user store and authentication platform that ships as a NuGet package and replaces ASP.NET Identity for IdentityServer scenarios. +This sample demonstrates a complete IdentityServer v8 implementation using **Duende User Management** to store users and authenticate them with te below authentication methods. ## What This Sample Shows @@ -16,11 +16,11 @@ This sample demonstrates a complete IdentityServer v8 implementation using **Due ### User Profile Management -User Management uses a **schema-driven attribute model** rather than a fixed user table. Attributes like `email`, `name`, `website`, and custom ones like `location` are defined as `AttributeDefinition` entries. Profiles are collections of `AttributeValue` instances tied to a `UserSubjectId`. +User Management uses a schema-driven attribute model rather than a fixed user table. Attributes like `email`, `name`, `website`, and custom ones like `location` are defined as `AttributeDefinition` entries. Profiles are collections of `AttributeValue` instances tied to a `UserSubjectId`. ### Migration from ASP.NET Identity -The Admin → Import page demonstrates bulk-importing users from an existing ASP.NET Identity SQLite database, including: +The IdentityServer `/Admin/Import` page demonstrates bulk-importing users from an existing ASP.NET Identity SQLite database, including: - Password hash compatibility (imports hashes as-is using a custom `IPasswordHashAlgorithm`) - Claims-to-attributes mapping (e.g., `given_name` + `family_name` → `name`) @@ -50,10 +50,11 @@ This launches: | Service | URL | |---------|-----| | IdentityServer | `https://localhost:5001` | -| Client App | (assigned by Aspire) | -| Mailpit UI | `http://localhost:8025` | -| Mailpit SMTP | `localhost:1025` | -| Aspire Dashboard | `https://localhost:15027` | +| Client App | `https://client.dev.localhost:5002` | +| ASP.NET Identity Source | `https://aspnet-identity-source.dev.localhost:5003` | +| Aspire Dashboard | `https://aspire.dev.localhost:17300` | +| Mailpit UI | `http://mailpit-aspire.localhost:8025` | +| Mailpit SMTP | `tcp://localhost:1025` | ### Test Credentials @@ -77,27 +78,6 @@ If you change the hosting URL, update these values in `Program.cs`. Google authentication is configured but hidden when credentials are not present. To enable it, add your Google OAuth client ID and secret to the app configuration. -## Project Structure - -``` -UserManagement/ -├── UserManagementSample/ # IdentityServer application -│ ├── Program.cs # Service registration and configuration -│ ├── SeedData.cs # Creates test users on startup -│ ├── SecondFactorStateCookie.cs # Encrypted cookie for 2FA interim state -│ ├── OtpCookie.cs # Encrypted cookie for OTP flow state -│ ├── Pages/ -│ │ ├── Account/ # Login, OTP, password, passkey, external -│ │ ├── Manage/ # Profile, 2FA setup, passkey management -│ │ └── Admin/ # User search, details, import -│ ├── Import/ # ASP.NET Identity migration logic -│ └── Services/ # SecondFactorResolver for passkey 2FA -├── UserManagementSample.AppHost/ # Aspire orchestrator (Mailpit + services) -├── UserManagementSample.Client/ # OIDC client app (Authorization Code + PKCE) -├── UserManagementSample.AspNetIdentitySource/ # Legacy identity DB for import demo -└── UserManagementSample.ServiceDefaults/ # Shared Aspire configuration -``` - ## Key APIs Demonstrated ### Configuration (Program.cs) diff --git a/IdentityServer/v8/UserManagement/UserManagement.slnx b/IdentityServer/v8/UserManagement/FullSample/UserManagement.slnx similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagement.slnx rename to IdentityServer/v8/UserManagement/FullSample/UserManagement.slnx diff --git a/IdentityServer/v8/UserManagement/FullSample/UserManagementSample.AppHost/Program.cs b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample.AppHost/Program.cs new file mode 100644 index 000000000..d1060da77 --- /dev/null +++ b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample.AppHost/Program.cs @@ -0,0 +1,36 @@ +// Copyright (c) Duende Software. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +var builder = DistributedApplication.CreateBuilder(args); + +var mailpit = builder.AddContainer("mailpit", "axllent/mailpit") + .WithContainerName($"user-management-sample-mailpit") + .WithHttpEndpoint(port: 8025, targetPort: 8025, name: "ui", isProxied: false) + .WithEndpoint(port: 1025, targetPort: 1025, name: "smtp", isProxied: false); +var smtpEndpoint = mailpit.GetEndpoint("smtp"); + +var identityServer = builder.AddProject("identity-server") + .WaitFor(mailpit) + .WithSmtp(smtpEndpoint); + +builder.AddProject("client") + .WithReference(identityServer); + +builder.AddProject("aspnet-identity-source"); + +builder.Build().Run(); + +internal static class AspireExtensions +{ + /// + /// Injects SMTP configuration (Smtp:Host, Smtp:Port, Smtp:EnableSsl) from a mailpit endpoint. + /// + internal static IResourceBuilder WithSmtp(this IResourceBuilder project, EndpointReference smtpEndpoint) + where T : IResourceWithEnvironment => + project + .WithEnvironment("Smtp__Host", smtpEndpoint.Property(EndpointProperty.Host)) + .WithEnvironment("Smtp__Port", smtpEndpoint.Property(EndpointProperty.Port)) + .WithEnvironment("Smtp__FromEmail", "no-reply@localhost") + .WithEnvironment("Smtp__FromName", "UserManagement Sample") + .WithEnvironment("Smtp__EnableSsl", "false"); +} diff --git a/IdentityServer/v8/UserManagement/UserManagementSample.AppHost/Properties/launchSettings.json b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample.AppHost/Properties/launchSettings.json similarity index 85% rename from IdentityServer/v8/UserManagement/UserManagementSample.AppHost/Properties/launchSettings.json rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample.AppHost/Properties/launchSettings.json index dcf3150fc..eb7c26f9d 100644 --- a/IdentityServer/v8/UserManagement/UserManagementSample.AppHost/Properties/launchSettings.json +++ b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample.AppHost/Properties/launchSettings.json @@ -5,7 +5,7 @@ "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, - "applicationUrl": "https://localhost:17300;http://localhost:15300", + "applicationUrl": "https://aspire.dev.localhost:17300", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development", "DOTNET_DASHBOARD_OTLP_ENDPOINT_URL": "https://localhost:21300", diff --git a/IdentityServer/v8/UserManagement/UserManagementSample.AppHost/UserManagementSample.AppHost.csproj b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample.AppHost/UserManagementSample.AppHost.csproj similarity index 87% rename from IdentityServer/v8/UserManagement/UserManagementSample.AppHost/UserManagementSample.AppHost.csproj rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample.AppHost/UserManagementSample.AppHost.csproj index 4d498f42c..85f4e3926 100644 --- a/IdentityServer/v8/UserManagement/UserManagementSample.AppHost/UserManagementSample.AppHost.csproj +++ b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample.AppHost/UserManagementSample.AppHost.csproj @@ -9,7 +9,6 @@ - diff --git a/IdentityServer/v8/UserManagement/UserManagementSample.AspNetIdentitySource/Data/ApplicationDbContext.cs b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample.AspNetIdentitySource/Data/ApplicationDbContext.cs similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample.AspNetIdentitySource/Data/ApplicationDbContext.cs rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample.AspNetIdentitySource/Data/ApplicationDbContext.cs diff --git a/IdentityServer/v8/UserManagement/UserManagementSample.AspNetIdentitySource/Migrations/20260529133048_InitialCreate.Designer.cs b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample.AspNetIdentitySource/Migrations/20260529133048_InitialCreate.Designer.cs similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample.AspNetIdentitySource/Migrations/20260529133048_InitialCreate.Designer.cs rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample.AspNetIdentitySource/Migrations/20260529133048_InitialCreate.Designer.cs diff --git a/IdentityServer/v8/UserManagement/UserManagementSample.AspNetIdentitySource/Migrations/20260529133048_InitialCreate.cs b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample.AspNetIdentitySource/Migrations/20260529133048_InitialCreate.cs similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample.AspNetIdentitySource/Migrations/20260529133048_InitialCreate.cs rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample.AspNetIdentitySource/Migrations/20260529133048_InitialCreate.cs diff --git a/IdentityServer/v8/UserManagement/UserManagementSample.AspNetIdentitySource/Migrations/ApplicationDbContextModelSnapshot.cs b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample.AspNetIdentitySource/Migrations/ApplicationDbContextModelSnapshot.cs similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample.AspNetIdentitySource/Migrations/ApplicationDbContextModelSnapshot.cs rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample.AspNetIdentitySource/Migrations/ApplicationDbContextModelSnapshot.cs diff --git a/IdentityServer/v8/UserManagement/UserManagementSample.AspNetIdentitySource/Program.cs b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample.AspNetIdentitySource/Program.cs similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample.AspNetIdentitySource/Program.cs rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample.AspNetIdentitySource/Program.cs diff --git a/IdentityServer/v8/UserManagement/FullSample/UserManagementSample.AspNetIdentitySource/Properties/launchSettings.json b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample.AspNetIdentitySource/Properties/launchSettings.json new file mode 100644 index 000000000..214082073 --- /dev/null +++ b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample.AspNetIdentitySource/Properties/launchSettings.json @@ -0,0 +1,14 @@ +{ + "$schema": "https://json.schemastore.org/launchsettings.json", + "profiles": { + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "https://aspnet-identity-source.dev.localhost:5003", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/IdentityServer/v8/UserManagement/UserManagementSample.AspNetIdentitySource/SeedData.cs b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample.AspNetIdentitySource/SeedData.cs similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample.AspNetIdentitySource/SeedData.cs rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample.AspNetIdentitySource/SeedData.cs diff --git a/IdentityServer/v8/UserManagement/UserManagementSample.AspNetIdentitySource/UserManagementSample.AspNetIdentitySource.csproj b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample.AspNetIdentitySource/UserManagementSample.AspNetIdentitySource.csproj similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample.AspNetIdentitySource/UserManagementSample.AspNetIdentitySource.csproj rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample.AspNetIdentitySource/UserManagementSample.AspNetIdentitySource.csproj diff --git a/IdentityServer/v8/UserManagement/UserManagementSample.AspNetIdentitySource/appsettings.json b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample.AspNetIdentitySource/appsettings.json similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample.AspNetIdentitySource/appsettings.json rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample.AspNetIdentitySource/appsettings.json diff --git a/IdentityServer/v8/UserManagement/UserManagementSample.Client/Pages/Index.cshtml b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample.Client/Pages/Index.cshtml similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample.Client/Pages/Index.cshtml rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample.Client/Pages/Index.cshtml diff --git a/IdentityServer/v8/UserManagement/UserManagementSample.Client/Pages/Index.cshtml.cs b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample.Client/Pages/Index.cshtml.cs similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample.Client/Pages/Index.cshtml.cs rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample.Client/Pages/Index.cshtml.cs diff --git a/IdentityServer/v8/UserManagement/UserManagementSample.Client/Pages/Shared/_Layout.cshtml b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample.Client/Pages/Shared/_Layout.cshtml similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample.Client/Pages/Shared/_Layout.cshtml rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample.Client/Pages/Shared/_Layout.cshtml diff --git a/IdentityServer/v8/UserManagement/UserManagementSample.Client/Pages/_ViewImports.cshtml b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample.Client/Pages/_ViewImports.cshtml similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample.Client/Pages/_ViewImports.cshtml rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample.Client/Pages/_ViewImports.cshtml diff --git a/IdentityServer/v8/UserManagement/UserManagementSample.Client/Pages/_ViewStart.cshtml b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample.Client/Pages/_ViewStart.cshtml similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample.Client/Pages/_ViewStart.cshtml rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample.Client/Pages/_ViewStart.cshtml diff --git a/IdentityServer/v8/UserManagement/UserManagementSample.Client/Program.cs b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample.Client/Program.cs similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample.Client/Program.cs rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample.Client/Program.cs diff --git a/IdentityServer/v8/UserManagement/UserManagementSample.GettingStarted/Properties/launchSettings.json b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample.Client/Properties/launchSettings.json similarity index 80% rename from IdentityServer/v8/UserManagement/UserManagementSample.GettingStarted/Properties/launchSettings.json rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample.Client/Properties/launchSettings.json index 7fb19be2e..a360284b4 100644 --- a/IdentityServer/v8/UserManagement/UserManagementSample.GettingStarted/Properties/launchSettings.json +++ b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample.Client/Properties/launchSettings.json @@ -5,7 +5,7 @@ "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, - "applicationUrl": "https://localhost:7214;http://localhost:5127", + "applicationUrl": "https://client.dev.localhost:5002", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } diff --git a/IdentityServer/v8/UserManagement/UserManagementSample.Client/UserManagementSample.Client.csproj b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample.Client/UserManagementSample.Client.csproj similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample.Client/UserManagementSample.Client.csproj rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample.Client/UserManagementSample.Client.csproj diff --git a/IdentityServer/v8/UserManagement/UserManagementSample.Client/appsettings.json b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample.Client/appsettings.json similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample.Client/appsettings.json rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample.Client/appsettings.json diff --git a/IdentityServer/v8/UserManagement/UserManagementSample.ServiceDefaults/Extensions.cs b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample.ServiceDefaults/Extensions.cs similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample.ServiceDefaults/Extensions.cs rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample.ServiceDefaults/Extensions.cs diff --git a/IdentityServer/v8/UserManagement/UserManagementSample.ServiceDefaults/UserManagementSample.ServiceDefaults.csproj b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample.ServiceDefaults/UserManagementSample.ServiceDefaults.csproj similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample.ServiceDefaults/UserManagementSample.ServiceDefaults.csproj rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample.ServiceDefaults/UserManagementSample.ServiceDefaults.csproj diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/Import/AspNetIdentityImporter.cs b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Import/AspNetIdentityImporter.cs similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/Import/AspNetIdentityImporter.cs rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Import/AspNetIdentityImporter.cs diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/Import/AspNetIdentityPasswordHashAlgorithm.cs b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Import/AspNetIdentityPasswordHashAlgorithm.cs similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/Import/AspNetIdentityPasswordHashAlgorithm.cs rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Import/AspNetIdentityPasswordHashAlgorithm.cs diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/Import/ImportResult.cs b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Import/ImportResult.cs similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/Import/ImportResult.cs rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Import/ImportResult.cs diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/Import/OverwriteConflictResolver.cs b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Import/OverwriteConflictResolver.cs similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/Import/OverwriteConflictResolver.cs rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Import/OverwriteConflictResolver.cs diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/OtpCookie.cs b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/OtpCookie.cs similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/OtpCookie.cs rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/OtpCookie.cs diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/Pages/Account/ExternalLogin.cshtml b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Account/ExternalLogin.cshtml similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/Pages/Account/ExternalLogin.cshtml rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Account/ExternalLogin.cshtml diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/Pages/Account/ExternalLogin.cshtml.cs b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Account/ExternalLogin.cshtml.cs similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/Pages/Account/ExternalLogin.cshtml.cs rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Account/ExternalLogin.cshtml.cs diff --git a/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Account/Login.cshtml b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Account/Login.cshtml new file mode 100644 index 000000000..33e0725c0 --- /dev/null +++ b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Account/Login.cshtml @@ -0,0 +1,50 @@ +@page +@model UserManagementSample.Pages.Account.LoginModel + +
+

Sign In

+
+ + + Sign in with OTP + + + Sign in with Password + + @if (Model.GoogleConfigured) + { + + Sign in with Google + + } + else + { + +
google authentication is disabled. Configure the key Authentication:Google:ClientId in appsettings.json to enable it
+ } +
+ +@section Scripts { + + +} diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/Pages/Account/Login.cshtml.cs b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Account/Login.cshtml.cs similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/Pages/Account/Login.cshtml.cs rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Account/Login.cshtml.cs diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/Pages/Account/LoginWith2FA.cshtml b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Account/LoginWith2FA.cshtml similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/Pages/Account/LoginWith2FA.cshtml rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Account/LoginWith2FA.cshtml diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/Pages/Account/LoginWith2FA.cshtml.cs b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Account/LoginWith2FA.cshtml.cs similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/Pages/Account/LoginWith2FA.cshtml.cs rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Account/LoginWith2FA.cshtml.cs diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/Pages/Account/LoginWithOtp.cshtml b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Account/LoginWithOtp.cshtml similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/Pages/Account/LoginWithOtp.cshtml rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Account/LoginWithOtp.cshtml diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/Pages/Account/LoginWithOtp.cshtml.cs b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Account/LoginWithOtp.cshtml.cs similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/Pages/Account/LoginWithOtp.cshtml.cs rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Account/LoginWithOtp.cshtml.cs diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/Pages/Account/LoginWithPassword.cshtml b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Account/LoginWithPassword.cshtml similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/Pages/Account/LoginWithPassword.cshtml rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Account/LoginWithPassword.cshtml diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/Pages/Account/LoginWithPassword.cshtml.cs b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Account/LoginWithPassword.cshtml.cs similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/Pages/Account/LoginWithPassword.cshtml.cs rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Account/LoginWithPassword.cshtml.cs diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/Pages/Account/LoginWithRecoveryCode.cshtml b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Account/LoginWithRecoveryCode.cshtml similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/Pages/Account/LoginWithRecoveryCode.cshtml rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Account/LoginWithRecoveryCode.cshtml diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/Pages/Account/LoginWithRecoveryCode.cshtml.cs b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Account/LoginWithRecoveryCode.cshtml.cs similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/Pages/Account/LoginWithRecoveryCode.cshtml.cs rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Account/LoginWithRecoveryCode.cshtml.cs diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/Pages/Account/Logout.cshtml b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Account/Logout.cshtml similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/Pages/Account/Logout.cshtml rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Account/Logout.cshtml diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/Pages/Account/Logout.cshtml.cs b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Account/Logout.cshtml.cs similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/Pages/Account/Logout.cshtml.cs rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Account/Logout.cshtml.cs diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/Pages/Account/RegisterPasskey.cshtml b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Account/RegisterPasskey.cshtml similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/Pages/Account/RegisterPasskey.cshtml rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Account/RegisterPasskey.cshtml diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/Pages/Account/RegisterPasskey.cshtml.cs b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Account/RegisterPasskey.cshtml.cs similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/Pages/Account/RegisterPasskey.cshtml.cs rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Account/RegisterPasskey.cshtml.cs diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/Pages/Account/VerifyOtp.cshtml b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Account/VerifyOtp.cshtml similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/Pages/Account/VerifyOtp.cshtml rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Account/VerifyOtp.cshtml diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/Pages/Account/VerifyOtp.cshtml.cs b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Account/VerifyOtp.cshtml.cs similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/Pages/Account/VerifyOtp.cshtml.cs rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Account/VerifyOtp.cshtml.cs diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/Pages/Admin/Import.cshtml b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Admin/Import.cshtml similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/Pages/Admin/Import.cshtml rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Admin/Import.cshtml diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/Pages/Admin/Import.cshtml.cs b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Admin/Import.cshtml.cs similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/Pages/Admin/Import.cshtml.cs rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Admin/Import.cshtml.cs diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/Pages/Admin/UserDetails.cshtml b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Admin/UserDetails.cshtml similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/Pages/Admin/UserDetails.cshtml rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Admin/UserDetails.cshtml diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/Pages/Admin/UserDetails.cshtml.cs b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Admin/UserDetails.cshtml.cs similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/Pages/Admin/UserDetails.cshtml.cs rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Admin/UserDetails.cshtml.cs diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/Pages/Admin/Users.cshtml b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Admin/Users.cshtml similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/Pages/Admin/Users.cshtml rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Admin/Users.cshtml diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/Pages/Admin/Users.cshtml.cs b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Admin/Users.cshtml.cs similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/Pages/Admin/Users.cshtml.cs rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Admin/Users.cshtml.cs diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/Pages/Consent.cshtml b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Consent.cshtml similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/Pages/Consent.cshtml rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Consent.cshtml diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/Pages/Consent.cshtml.cs b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Consent.cshtml.cs similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/Pages/Consent.cshtml.cs rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Consent.cshtml.cs diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/Pages/Error.cshtml b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Error.cshtml similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/Pages/Error.cshtml rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Error.cshtml diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/Pages/Error.cshtml.cs b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Error.cshtml.cs similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/Pages/Error.cshtml.cs rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Error.cshtml.cs diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/Pages/Index.cshtml b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Index.cshtml similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/Pages/Index.cshtml rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Index.cshtml diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/Pages/Index.cshtml.cs b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Index.cshtml.cs similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/Pages/Index.cshtml.cs rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Index.cshtml.cs diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/Pages/Manage/ChangePassword.cshtml b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Manage/ChangePassword.cshtml similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/Pages/Manage/ChangePassword.cshtml rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Manage/ChangePassword.cshtml diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/Pages/Manage/ChangePassword.cshtml.cs b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Manage/ChangePassword.cshtml.cs similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/Pages/Manage/ChangePassword.cshtml.cs rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Manage/ChangePassword.cshtml.cs diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/Pages/Manage/ManagePasskeys.cshtml b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Manage/ManagePasskeys.cshtml similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/Pages/Manage/ManagePasskeys.cshtml rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Manage/ManagePasskeys.cshtml diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/Pages/Manage/ManagePasskeys.cshtml.cs b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Manage/ManagePasskeys.cshtml.cs similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/Pages/Manage/ManagePasskeys.cshtml.cs rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Manage/ManagePasskeys.cshtml.cs diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/Pages/Manage/ManageProfile.cshtml b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Manage/ManageProfile.cshtml similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/Pages/Manage/ManageProfile.cshtml rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Manage/ManageProfile.cshtml diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/Pages/Manage/ManageProfile.cshtml.cs b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Manage/ManageProfile.cshtml.cs similarity index 86% rename from IdentityServer/v8/UserManagement/UserManagementSample/Pages/Manage/ManageProfile.cshtml.cs rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Manage/ManageProfile.cshtml.cs index c6d18ee71..f3f7feda8 100644 --- a/IdentityServer/v8/UserManagement/UserManagementSample/Pages/Manage/ManageProfile.cshtml.cs +++ b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Manage/ManageProfile.cshtml.cs @@ -2,10 +2,13 @@ // Licensed under the MIT License. See LICENSE in the project root for license information. using System.ComponentModel.DataAnnotations; + using Duende.IdentityModel; using Duende.Storage.EntityAttributeValue; +using Duende.Storage.Internal.Outbox; using Duende.UserManagement; using Duende.UserManagement.Profiles; + using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; @@ -46,19 +49,22 @@ public async Task OnGetAsync() return Page(); } - if (profile.Attributes.TryGetValue(OidcStandardAttributes.Name.Code, out var name)) + if (profile.Attributes.TryGetValue(OidcStandardAttributes.Name.Code, out var nameAttribute) + && nameAttribute.TryGetValue(out var name)) { - Name = name.ToString() ?? string.Empty; + Name = name ?? string.Empty; } - if (profile.Attributes.TryGetValue(OidcStandardAttributes.Email.Code, out var email)) + if (profile.Attributes.TryGetValue(OidcStandardAttributes.Email.Code, out var emailAttribute) + && emailAttribute.TryGetValue(out var email)) { - Email = email.ToString() ?? string.Empty; + Email = email ?? string.Empty; } - if (profile.Attributes.TryGetValue(OidcStandardAttributes.Website.Code, out var website)) + if (profile.Attributes.TryGetValue(OidcStandardAttributes.Website.Code, out var websiteAttribute) + && websiteAttribute.TryGetValue(out var website)) { - Website = website.ToString(); + Website = website; } return Page(); diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/Pages/Manage/Setup2FA.cshtml b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Manage/Setup2FA.cshtml similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/Pages/Manage/Setup2FA.cshtml rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Manage/Setup2FA.cshtml diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/Pages/Manage/Setup2FA.cshtml.cs b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Manage/Setup2FA.cshtml.cs similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/Pages/Manage/Setup2FA.cshtml.cs rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Manage/Setup2FA.cshtml.cs diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/Pages/Manage/ShowRecoveryCodes.cshtml b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Manage/ShowRecoveryCodes.cshtml similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/Pages/Manage/ShowRecoveryCodes.cshtml rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Manage/ShowRecoveryCodes.cshtml diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/Pages/Manage/ShowRecoveryCodes.cshtml.cs b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Manage/ShowRecoveryCodes.cshtml.cs similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/Pages/Manage/ShowRecoveryCodes.cshtml.cs rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Manage/ShowRecoveryCodes.cshtml.cs diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/Pages/Shared/_Layout.cshtml b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Shared/_Layout.cshtml similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/Pages/Shared/_Layout.cshtml rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Shared/_Layout.cshtml diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/Pages/Shared/_ValidationScriptsPartial.cshtml b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Shared/_ValidationScriptsPartial.cshtml similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/Pages/Shared/_ValidationScriptsPartial.cshtml rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/Shared/_ValidationScriptsPartial.cshtml diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/Pages/_ViewImports.cshtml b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/_ViewImports.cshtml similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/Pages/_ViewImports.cshtml rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/_ViewImports.cshtml diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/Pages/_ViewStart.cshtml b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/_ViewStart.cshtml similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/Pages/_ViewStart.cshtml rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Pages/_ViewStart.cshtml diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/Program.cs b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Program.cs similarity index 83% rename from IdentityServer/v8/UserManagement/UserManagementSample/Program.cs rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Program.cs index 8571beeb9..948e1b48c 100644 --- a/IdentityServer/v8/UserManagement/UserManagementSample/Program.cs +++ b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Program.cs @@ -3,7 +3,6 @@ using Duende.IdentityServer; using Duende.IdentityServer.Models; -using Duende.IdentityServer.UserManagement; using Duende.Storage.Schema; using Duende.Storage.Sqlite; using Duende.UserManagement; @@ -52,26 +51,7 @@ // Adds configuration for sending OTP's. In this sample, we're sending OTP's via email, // but you could also implement a custom delivery mechanism, e.g. for sending OTP's via SMS. - authentication.UseSmtpOtpDispatcher(smtp => - { - var connectionString = builder.Configuration.GetConnectionString("mailpit"); - if (!string.IsNullOrWhiteSpace(connectionString) && - Uri.TryCreate(connectionString, UriKind.Absolute, out var uri)) - { - smtp.Host = uri.Host; - smtp.Port = uri.Port; - smtp.EnableSsl = false; - } - else - { - smtp.Host = "localhost"; - smtp.Port = 1025; - smtp.EnableSsl = false; - } - - smtp.FromEmail = "no-reply@localhost"; - smtp.FromName = "UserManagement Sample"; - }); + _ = authentication.UseSmtpOtpDispatcher(options => builder.Configuration.GetSection("Smtp").Bind(options)); }); // Store user management data in sql lite @@ -85,9 +65,9 @@ ClientSecrets = { new Secret("secret".Sha256()) }, AllowedGrantTypes = GrantTypes.Code, RequirePkce = true, - RedirectUris = { "https://localhost:5002/signin-oidc" }, - PostLogoutRedirectUris = { "https://localhost:5002/signout-callback-oidc" }, - FrontChannelLogoutUri = "https://localhost:5002/signout-oidc", + RedirectUris = { "https://client.dev.localhost:5002/signin-oidc" }, + PostLogoutRedirectUris = { "https://client.dev.localhost:5002/signout-callback-oidc" }, + FrontChannelLogoutUri = "https://client.dev.localhost:5002/signout-oidc", AllowedScopes = { IdentityServerConstants.StandardScopes.OpenId, diff --git a/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Properties/launchSettings.json b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Properties/launchSettings.json new file mode 100644 index 000000000..1552e1134 --- /dev/null +++ b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Properties/launchSettings.json @@ -0,0 +1,15 @@ +{ + "$schema": "https://json.schemastore.org/launchsettings.json", + "profiles": { + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + //Don't use dev.localhost TLD because Google Auth is hard coded to use this endpoint + "applicationUrl": "https://localhost:5001", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/SecondFactorStateCookie.cs b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/SecondFactorStateCookie.cs similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/SecondFactorStateCookie.cs rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/SecondFactorStateCookie.cs diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/SeedData.cs b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/SeedData.cs similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/SeedData.cs rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/SeedData.cs diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/Services/SecondFactorResolver.cs b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Services/SecondFactorResolver.cs similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/Services/SecondFactorResolver.cs rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/Services/SecondFactorResolver.cs diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/UserManagementSample.csproj b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/UserManagementSample.csproj similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/UserManagementSample.csproj rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/UserManagementSample.csproj diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/appsettings.Development.json b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/appsettings.Development.json similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/appsettings.Development.json rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/appsettings.Development.json diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/appsettings.json b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/appsettings.json similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/appsettings.json rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/appsettings.json diff --git a/IdentityServer/v8/UserManagement/UserManagementSample/wwwroot/css/site.css b/IdentityServer/v8/UserManagement/FullSample/UserManagementSample/wwwroot/css/site.css similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample/wwwroot/css/site.css rename to IdentityServer/v8/UserManagement/FullSample/UserManagementSample/wwwroot/css/site.css diff --git a/IdentityServer/v8/UserManagement/db/README.MD b/IdentityServer/v8/UserManagement/FullSample/db/README.MD similarity index 100% rename from IdentityServer/v8/UserManagement/db/README.MD rename to IdentityServer/v8/UserManagement/FullSample/db/README.MD diff --git a/IdentityServer/v8/UserManagement/UserManagementSample.GettingStarted/Config.cs b/IdentityServer/v8/UserManagement/GettingStarted/Config.cs similarity index 95% rename from IdentityServer/v8/UserManagement/UserManagementSample.GettingStarted/Config.cs rename to IdentityServer/v8/UserManagement/GettingStarted/Config.cs index e9097d336..f6787ec33 100644 --- a/IdentityServer/v8/UserManagement/UserManagementSample.GettingStarted/Config.cs +++ b/IdentityServer/v8/UserManagement/GettingStarted/Config.cs @@ -3,7 +3,7 @@ using Duende.IdentityServer.Models; -namespace UserManagementSample.GettingStarted; +namespace GettingStarted; public static class Config { diff --git a/IdentityServer/v8/UserManagement/UserManagementSample.GettingStarted/ConsoleOtpDispatcher.cs b/IdentityServer/v8/UserManagement/GettingStarted/ConsoleOtpDispatcher.cs similarity index 91% rename from IdentityServer/v8/UserManagement/UserManagementSample.GettingStarted/ConsoleOtpDispatcher.cs rename to IdentityServer/v8/UserManagement/GettingStarted/ConsoleOtpDispatcher.cs index f915b40c9..f5201fcde 100644 --- a/IdentityServer/v8/UserManagement/UserManagementSample.GettingStarted/ConsoleOtpDispatcher.cs +++ b/IdentityServer/v8/UserManagement/GettingStarted/ConsoleOtpDispatcher.cs @@ -3,7 +3,7 @@ using Duende.UserManagement.Authentication.Otp; -namespace UserManagementSample.GettingStarted; +namespace GettingStarted; public class ConsoleOtpDispatcher : IOtpDispatcher { diff --git a/IdentityServer/v8/UserManagement/UserManagementSample.GettingStarted/UserManagementSample.GettingStarted.csproj b/IdentityServer/v8/UserManagement/GettingStarted/GettingStarted.csproj similarity index 56% rename from IdentityServer/v8/UserManagement/UserManagementSample.GettingStarted/UserManagementSample.GettingStarted.csproj rename to IdentityServer/v8/UserManagement/GettingStarted/GettingStarted.csproj index 0268adbdd..065dd49ac 100644 --- a/IdentityServer/v8/UserManagement/UserManagementSample.GettingStarted/UserManagementSample.GettingStarted.csproj +++ b/IdentityServer/v8/UserManagement/GettingStarted/GettingStarted.csproj @@ -8,13 +8,9 @@ - - - - - - - + + + \ No newline at end of file diff --git a/IdentityServer/v8/UserManagement/GettingStarted/GettingStarted.slnx b/IdentityServer/v8/UserManagement/GettingStarted/GettingStarted.slnx new file mode 100644 index 000000000..83262b49e --- /dev/null +++ b/IdentityServer/v8/UserManagement/GettingStarted/GettingStarted.slnx @@ -0,0 +1,3 @@ + + + diff --git a/IdentityServer/v8/UserManagement/UserManagementSample.GettingStarted/Pages/Account/EnterOtp.cshtml b/IdentityServer/v8/UserManagement/GettingStarted/Pages/Account/EnterOtp.cshtml similarity index 68% rename from IdentityServer/v8/UserManagement/UserManagementSample.GettingStarted/Pages/Account/EnterOtp.cshtml rename to IdentityServer/v8/UserManagement/GettingStarted/Pages/Account/EnterOtp.cshtml index 7036df76d..aa766f57d 100644 --- a/IdentityServer/v8/UserManagement/UserManagementSample.GettingStarted/Pages/Account/EnterOtp.cshtml +++ b/IdentityServer/v8/UserManagement/GettingStarted/Pages/Account/EnterOtp.cshtml @@ -1,5 +1,5 @@ @page -@model UserManagementSample.GettingStarted.Pages.Account.EnterOtpModel +@model GettingStarted.Pages.Account.EnterOtpModel

Enter one-time password

@@ -13,6 +13,11 @@ } + +
diff --git a/IdentityServer/v8/UserManagement/UserManagementSample.GettingStarted/Pages/Account/EnterOtp.cshtml.cs b/IdentityServer/v8/UserManagement/GettingStarted/Pages/Account/EnterOtp.cshtml.cs similarity index 97% rename from IdentityServer/v8/UserManagement/UserManagementSample.GettingStarted/Pages/Account/EnterOtp.cshtml.cs rename to IdentityServer/v8/UserManagement/GettingStarted/Pages/Account/EnterOtp.cshtml.cs index 1421b1368..b858adc5b 100644 --- a/IdentityServer/v8/UserManagement/UserManagementSample.GettingStarted/Pages/Account/EnterOtp.cshtml.cs +++ b/IdentityServer/v8/UserManagement/GettingStarted/Pages/Account/EnterOtp.cshtml.cs @@ -9,7 +9,7 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; -namespace UserManagementSample.GettingStarted.Pages.Account; +namespace GettingStarted.Pages.Account; public class EnterOtpModel( IOtpAuthenticator otpAuthenticator, diff --git a/IdentityServer/v8/UserManagement/UserManagementSample.GettingStarted/Pages/Account/Login.cshtml b/IdentityServer/v8/UserManagement/GettingStarted/Pages/Account/Login.cshtml similarity index 86% rename from IdentityServer/v8/UserManagement/UserManagementSample.GettingStarted/Pages/Account/Login.cshtml rename to IdentityServer/v8/UserManagement/GettingStarted/Pages/Account/Login.cshtml index 809ed6206..f56f56c5c 100644 --- a/IdentityServer/v8/UserManagement/UserManagementSample.GettingStarted/Pages/Account/Login.cshtml +++ b/IdentityServer/v8/UserManagement/GettingStarted/Pages/Account/Login.cshtml @@ -1,5 +1,5 @@ @page -@model UserManagementSample.GettingStarted.Pages.Account.LoginModel +@model GettingStarted.Pages.Account.LoginModel @{ ViewData["Title"] = "Log in"; } diff --git a/IdentityServer/v8/UserManagement/UserManagementSample.GettingStarted/Pages/Account/Login.cshtml.cs b/IdentityServer/v8/UserManagement/GettingStarted/Pages/Account/Login.cshtml.cs similarity index 96% rename from IdentityServer/v8/UserManagement/UserManagementSample.GettingStarted/Pages/Account/Login.cshtml.cs rename to IdentityServer/v8/UserManagement/GettingStarted/Pages/Account/Login.cshtml.cs index a6b9f7df7..413ad21b9 100644 --- a/IdentityServer/v8/UserManagement/UserManagementSample.GettingStarted/Pages/Account/Login.cshtml.cs +++ b/IdentityServer/v8/UserManagement/GettingStarted/Pages/Account/Login.cshtml.cs @@ -7,7 +7,7 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; -namespace UserManagementSample.GettingStarted.Pages.Account; +namespace GettingStarted.Pages.Account; public class LoginModel(IOtpSender otpSender) : PageModel { diff --git a/IdentityServer/v8/UserManagement/GettingStarted/Pages/Account/Logout.cshtml b/IdentityServer/v8/UserManagement/GettingStarted/Pages/Account/Logout.cshtml new file mode 100644 index 000000000..f1895a9ae --- /dev/null +++ b/IdentityServer/v8/UserManagement/GettingStarted/Pages/Account/Logout.cshtml @@ -0,0 +1,2 @@ +@page +@model GettingStarted.Pages.Account.LogoutModel diff --git a/IdentityServer/v8/UserManagement/UserManagementSample.GettingStarted/Pages/Account/Logout.cshtml.cs b/IdentityServer/v8/UserManagement/GettingStarted/Pages/Account/Logout.cshtml.cs similarity index 93% rename from IdentityServer/v8/UserManagement/UserManagementSample.GettingStarted/Pages/Account/Logout.cshtml.cs rename to IdentityServer/v8/UserManagement/GettingStarted/Pages/Account/Logout.cshtml.cs index 029d8e6bf..9188a8801 100644 --- a/IdentityServer/v8/UserManagement/UserManagementSample.GettingStarted/Pages/Account/Logout.cshtml.cs +++ b/IdentityServer/v8/UserManagement/GettingStarted/Pages/Account/Logout.cshtml.cs @@ -6,7 +6,7 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; -namespace UserManagementSample.GettingStarted.Pages.Account; +namespace GettingStarted.Pages.Account; public class LogoutModel(IIdentityServerInteractionService interaction) : PageModel { diff --git a/IdentityServer/v8/UserManagement/UserManagementSample.GettingStarted/Pages/Error.cshtml b/IdentityServer/v8/UserManagement/GettingStarted/Pages/Error.cshtml similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample.GettingStarted/Pages/Error.cshtml rename to IdentityServer/v8/UserManagement/GettingStarted/Pages/Error.cshtml diff --git a/IdentityServer/v8/UserManagement/UserManagementSample.GettingStarted/Pages/Error.cshtml.cs b/IdentityServer/v8/UserManagement/GettingStarted/Pages/Error.cshtml.cs similarity index 92% rename from IdentityServer/v8/UserManagement/UserManagementSample.GettingStarted/Pages/Error.cshtml.cs rename to IdentityServer/v8/UserManagement/GettingStarted/Pages/Error.cshtml.cs index 1a26f7280..7ee724396 100644 --- a/IdentityServer/v8/UserManagement/UserManagementSample.GettingStarted/Pages/Error.cshtml.cs +++ b/IdentityServer/v8/UserManagement/GettingStarted/Pages/Error.cshtml.cs @@ -5,7 +5,7 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; -namespace UserManagementSample.GettingStarted.Pages; +namespace GettingStarted.Pages; [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] [IgnoreAntiforgeryToken] diff --git a/IdentityServer/v8/UserManagement/UserManagementSample.GettingStarted/Pages/Index.cshtml b/IdentityServer/v8/UserManagement/GettingStarted/Pages/Index.cshtml similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample.GettingStarted/Pages/Index.cshtml rename to IdentityServer/v8/UserManagement/GettingStarted/Pages/Index.cshtml diff --git a/IdentityServer/v8/UserManagement/UserManagementSample.GettingStarted/Pages/Index.cshtml.cs b/IdentityServer/v8/UserManagement/GettingStarted/Pages/Index.cshtml.cs similarity index 85% rename from IdentityServer/v8/UserManagement/UserManagementSample.GettingStarted/Pages/Index.cshtml.cs rename to IdentityServer/v8/UserManagement/GettingStarted/Pages/Index.cshtml.cs index a1ee007fa..c213e6006 100644 --- a/IdentityServer/v8/UserManagement/UserManagementSample.GettingStarted/Pages/Index.cshtml.cs +++ b/IdentityServer/v8/UserManagement/GettingStarted/Pages/Index.cshtml.cs @@ -4,7 +4,7 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc.RazorPages; -namespace UserManagementSample.GettingStarted.Pages; +namespace GettingStarted.Pages; [Authorize] public class IndexModel : PageModel diff --git a/IdentityServer/v8/UserManagement/UserManagementSample.GettingStarted/Pages/Privacy.cshtml b/IdentityServer/v8/UserManagement/GettingStarted/Pages/Privacy.cshtml similarity index 100% rename from IdentityServer/v8/UserManagement/UserManagementSample.GettingStarted/Pages/Privacy.cshtml rename to IdentityServer/v8/UserManagement/GettingStarted/Pages/Privacy.cshtml diff --git a/IdentityServer/v8/UserManagement/UserManagementSample.GettingStarted/Pages/Privacy.cshtml.cs b/IdentityServer/v8/UserManagement/GettingStarted/Pages/Privacy.cshtml.cs similarity index 69% rename from IdentityServer/v8/UserManagement/UserManagementSample.GettingStarted/Pages/Privacy.cshtml.cs rename to IdentityServer/v8/UserManagement/GettingStarted/Pages/Privacy.cshtml.cs index 51170a046..d14abfc6d 100644 --- a/IdentityServer/v8/UserManagement/UserManagementSample.GettingStarted/Pages/Privacy.cshtml.cs +++ b/IdentityServer/v8/UserManagement/GettingStarted/Pages/Privacy.cshtml.cs @@ -1,10 +1,10 @@ -// Copyright (c) Duende Software. All rights reserved. +// Copyright (c) Duende Software. All rights reserved. // Licensed under the MIT License. See LICENSE in the project root for license information. using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; -namespace UserManagementSample.GettingStarted.Pages; +namespace GettingStarted.Pages; public class PrivacyModel : PageModel { diff --git a/IdentityServer/v8/UserManagement/UserManagementSample.GettingStarted/Pages/Shared/_Layout.cshtml b/IdentityServer/v8/UserManagement/GettingStarted/Pages/Shared/_Layout.cshtml similarity index 80% rename from IdentityServer/v8/UserManagement/UserManagementSample.GettingStarted/Pages/Shared/_Layout.cshtml rename to IdentityServer/v8/UserManagement/GettingStarted/Pages/Shared/_Layout.cshtml index e209a5024..b962129a0 100644 --- a/IdentityServer/v8/UserManagement/UserManagementSample.GettingStarted/Pages/Shared/_Layout.cshtml +++ b/IdentityServer/v8/UserManagement/GettingStarted/Pages/Shared/_Layout.cshtml @@ -1,19 +1,19 @@ - + - @ViewData["Title"] - UserManagementSample.GettingStarted + @ViewData["Title"] - GettingStarted - +