└──DipontCommunity/ ├──.github/ │ └──workflows/ ├──.idea/ │ ├──.idea.DipontCommunity/ │ │ └──.idea/ │ └──.idea.KCSCommunity/ │ └──.idea/ │ ├──dataSources/ │ └──httpRequests/ ├──KCSCommunity.Abstractions/ │ ├──bin/ │ │ └──Debug/ │ │ └──net8.0/ │ ├──Interfaces/ │ │ ├──IApplicationDbContext.cs │ │ ├──IAuthTokenSettings.cs │ │ └──ISessionStore.cs │ │ ├──Services/ │ │ │ ├──IJwtService.cs │ │ │ ├──IPasskeyService.cs │ │ │ └──IResourceLockService.cs │ │ └──Validators/ │ │ ├──IPasskeyOptionsValidator.cs │ │ └──IUserStatusValidator.cs │ └──Models/ │ ├──Configuration/ │ │ ├──JwtSettings.cs │ │ ├──PasscodeSettings.cs │ │ └──PasswordPolicySettings.cs │ └──Dtos/ │ ├──Fido2SessionDto.cs │ ├──PasskeyDto.cs │ ├──RoleDto.cs │ └──UserDto.cs ├──KCSCommunity.Access/ │ └──Program.cs │ ├──bin/ │ │ └──Debug/ │ │ └──net8.0/ │ │ ├──cs/ │ │ ├──de/ │ │ ├──en-US/ │ │ ├──es/ │ │ ├──fr/ │ │ ├──it/ │ │ ├──ja/ │ │ ├──ko/ │ │ ├──pl/ │ │ ├──pt-BR/ │ │ ├──ru/ │ │ ├──runtimes/ │ │ │ ├──browser/ │ │ │ │ └──lib/ │ │ │ │ └──net8.0/ │ │ │ ├──linux-arm/ │ │ │ │ └──native/ │ │ │ ├──linux-arm64/ │ │ │ │ └──native/ │ │ │ ├──linux-musl-x64/ │ │ │ │ └──native/ │ │ │ ├──linux-x64/ │ │ │ │ └──native/ │ │ │ ├──osx-arm64/ │ │ │ │ └──native/ │ │ │ ├──osx-x64/ │ │ │ │ └──native/ │ │ │ ├──win/ │ │ │ │ └──lib/ │ │ │ │ └──net8.0/ │ │ │ ├──win-x64/ │ │ │ │ └──native/ │ │ │ └──win-x86/ │ │ │ └──native/ │ │ ├──tr/ │ │ ├──zh-CN/ │ │ ├──zh-Hans/ │ │ ├──zh-Hant/ │ │ └──zh-TW/ │ ├──Controllers/ │ │ ├──ApiControllerBase.cs │ │ ├──AuthController.cs │ │ ├──PasskeyController.cs │ │ ├──RolesController.cs │ │ └──UsersController.cs │ ├──Extensions/ │ │ └──SessionExtensions.cs │ ├──Filters/ │ │ └──ApiExceptionFilterAttribute.cs │ ├──Middleware/ │ │ └──ApiSignatureVerificationMiddleware.cs │ ├──Properties/ │ ├──Security/ │ │ └──ApiSignature/ │ │ └──ApiSignatureSettings.cs │ └──wwwroot/ ├──KCSCommunity.Application/ │ └──DependencyInjection.cs │ ├──bin/ │ │ └──Debug/ │ │ └──net8.0/ │ │ ├──en-US/ │ │ ├──zh-CN/ │ │ └──zh-TW/ │ └──Features/ │ ├──Roles/ │ │ ├──Commands/ │ │ │ ├──CreateRole/ │ │ │ │ ├──CreateRoleCommand.cs │ │ │ │ ├──CreateRoleCommandHandler.cs │ │ │ │ └──CreateRoleCommandValidator.cs │ │ │ ├──DeleteRole/ │ │ │ │ ├──DeleteRoleCommand.cs │ │ │ │ ├──DeleteRoleCommandHandler.cs │ │ │ │ └──DeleteRoleCommandValidator.cs │ │ │ └──UpdateUsersInRole/ │ │ │ ├──UpdateUsersInRoleCommand.cs │ │ │ ├──UpdateUsersInRoleCommandHandler.cs │ │ │ └──UpdateUsersInRoleCommandValidator.cs │ │ └──Queries/ │ │ └──GetAllRoles/ │ │ ├──GetAllRolesQuery.cs │ │ └──GetAllRolesQueryHandler.cs │ └──Users/ │ ├──Commands/ │ │ ├──ActivateUser/ │ │ │ ├──ActivateUserCommand.cs │ │ │ ├──ActivateUserCommandHandler.cs │ │ │ └──ActivateUserCommandValidator.cs │ │ ├──CreateUser/ │ │ │ ├──CreateUserCommand.cs │ │ │ ├──CreateUserCommandHandler.cs │ │ │ ├──CreateUserCommandValidator.cs │ │ │ └──CreateUserResponse.cs │ │ └──DeleteUserPasskey/ │ │ ├──DeleteUserPasskeyCommand.cs │ │ ├──DeleteUserPasskeyCommandHandler.cs │ │ └──DeleteUserPasskeyCommandValidator.cs │ └──Queries/ │ ├──GetUser/ │ │ ├──GetUserByIdQuery.cs │ │ ├──GetUserByIdQueryHandler.cs │ │ └──GetUserByIdQueryValidator.cs │ └──GetUserPasskeys/ │ ├──GetUserPasskeysQuery.cs │ ├──GetUserPasskeysQueryHandler.cs │ └──GetUserPasskeysQueryValidator.cs ├──KCSCommunity.Application.Auth/ │ └──DependencyInjection.cs │ ├──bin/ │ │ └──Debug/ │ │ └──net8.0/ │ │ ├──en-US/ │ │ ├──zh-CN/ │ │ └──zh-TW/ │ └──Features/ │ ├──Authorization/ │ │ └──Commands/ │ │ ├──Login/ │ │ │ ├──LoginCommand.cs │ │ │ ├──LoginCommandHandler.cs │ │ │ ├──LoginCommandValidator.cs │ │ │ └──LoginResponse.cs │ │ ├──RefreshToken/ │ │ │ ├──RefreshTokenCommand.cs │ │ │ ├──RefreshTokenCommandHandler.cs │ │ │ └──RefreshTokenCommandValidator.cs │ │ └──RevokeToken/ │ │ ├──RevokeTokenCommand.cs │ │ ├──RevokeTokenCommandHandler.cs │ │ └──RevokeTokenCommandValidator.cs │ ├──Passkey/ │ │ ├──Commands/ │ │ │ ├──AddDevice/ │ │ │ │ ├──Begin/ │ │ │ │ │ ├──BeginAddDeviceCommand.cs │ │ │ │ │ ├──BeginAddDeviceCommandHandler.cs │ │ │ │ │ └──BeginAddDeviceCommandValidator.cs │ │ │ │ └──Complete/ │ │ │ │ ├──CompleteAddDeviceCommand.cs │ │ │ │ ├──CompleteAddDeviceCommandHandler.cs │ │ │ │ └──CompleteAddDeviceCommandValidator.cs │ │ │ ├──DeleteMyPasskey/ │ │ │ │ ├──DeleteMyPasskeyCommand.cs │ │ │ │ ├──DeleteMyPasskeyCommandHandler.cs │ │ │ │ └──DeleteMyPasskeyCommandValidator.cs │ │ │ ├──Login/ │ │ │ │ ├──Begin/ │ │ │ │ │ ├──BeginPasskeyLoginCommand.cs │ │ │ │ │ └──BeginPasskeyLoginCommandHandler.cs │ │ │ │ └──Complete/ │ │ │ │ ├──CompletePasskeyLoginCommand.cs │ │ │ │ ├──CompletePasskeyLoginCommandHandler.cs │ │ │ │ └──CompletePasskeyLoginCommandValidator.cs │ │ │ └──PasskeyActivation/ │ │ │ ├──Begin/ │ │ │ │ ├──BeginPasskeyActivationCommand.cs │ │ │ │ ├──BeginPasskeyActivationCommandHandler.cs │ │ │ │ └──BeginPasskeyActivationCommandValidator.cs │ │ │ └──Complete/ │ │ │ ├──CompletePasskeyActivationCommand.cs │ │ │ ├──CompletePasskeyActivationCommandHandler.cs │ │ │ └──CompletePasskeyActivationCommandValidator.cs │ │ └──Queries/ │ │ └──GetMyPasskeys/ │ │ ├──GetMyPasskeysQuery.cs │ │ └──GetMyPasskeysQueryHandler.cs │ └──Users/ │ └──Commands/ │ └──ChangePassword/ │ ├──ChangePasswordCommand.cs │ ├──ChangePasswordCommandHandler.cs │ └──ChangePasswordCommandValidator.cs ├──KCSCommunity.Application.Shared/ │ ├──Behaviors/ │ │ ├──UnhandledExceptionBehaviour.cs │ │ └──ValidationBehaviour.cs │ ├──bin/ │ │ └──Debug/ │ │ └──net8.0/ │ │ ├──en-US/ │ │ ├──zh-CN/ │ │ └──zh-TW/ │ ├──Exceptions/ │ │ ├──NotFoundException.cs │ │ ├──UserValidationException.cs │ │ └──ValidationException.cs │ ├──Mappings/ │ │ └──MappingProfile.cs │ ├──Resources/ │ │ ├──SharedValidationMessages.cs │ │ ├──SharedValidationMessages.en-US.Designer.cs │ │ ├──SharedValidationMessages.zh-CN.Designer.cs │ │ └──SharedValidationMessages.zh-TW.Designer.cs │ └──Validators/ │ ├──PasskeyOptionsValidator.cs │ ├──PasswordValidators.cs │ └──UserStatusValidator.cs ├──KCSCommunity.Domain/ │ ├──bin/ │ │ └──Debug/ │ │ └──net8.0/ │ ├──Constants/ │ │ ├──FidoConstants.cs │ │ ├──PolicyConstants.cs │ │ └──RoleConstants.cs │ ├──Entities/ │ │ ├──ApplicationUser.cs │ │ ├──OneTimePasscode.cs │ │ ├──PasskeyCredential.cs │ │ └──RefreshToken.cs │ └──Enums/ │ ├──Gender.cs │ └──UserRoleType.cs └──KCSCommunity.Infrastructure/ └──DependencyInjection.cs ├──bin/ │ └──Debug/ │ └──net8.0/ ├──Migrations/ │ ├──20250704141159_InitialCreate.cs │ ├──20250704141159_InitialCreate.Designer.cs │ ├──20250705063340_RefreshTokenUpdate.cs │ ├──20250705063340_RefreshTokenUpdate.Designer.cs │ ├──20250713063446_AddPasskeyCredentials.cs │ ├──20250713063446_AddPasskeyCredentials.Designer.cs │ ├──20250714060512_RefreshUserInfo.cs │ ├──20250714060512_RefreshUserInfo.Designer.cs │ └──ApplicationDbContextModelSnapshot.cs ├──Persistence/ │ ├──ApplicationDbContext.cs │ └──DbInitializer.cs │ └──Configurations/ │ ├──ApplicationUserConfiguration.cs │ ├──OneTimePasscodeConfiguration.cs │ ├──PasskeyCredentialConfiguration.cs │ └──RefreshTokenConfiguration.cs ├──Security/ │ ├──Hashing/ │ │ └──Argon2PasswordHasher.cs │ ├──Jwt/ │ │ └──JwtService.cs │ └──Passcode/ └──Services/ ├──Fido2PasskeyService.cs ├──HttpSessionStore.cs └──InMemoryLockService.cs
public static class DependencyInjection
public static IServiceCollection AddApplicationServices(this IServiceCollection services);public static class DependencyInjection
public static IServiceCollection AddApplicationAuthServices(this IServiceCollection services);public static class DependencyInjection
public static IServiceCollection AddInfrastructureServices(this IServiceCollection services, IConfiguration configuration);
public static async Task InitializeDatabaseAsync(this IServiceProvider serviceProvider);public static class FidoConstantspublic static class RoleConstantspublic static class PolicyConstantspublic class RefreshToken
public static string GenerateTokenValue(int numberOfBytes = 64);public class OneTimePasscode
private OneTimePasscode();
public static OneTimePasscode Create(Guid userId, int lifespanMinutes = 1440); // /// Factory method for creating a new one-time passcode. ///
public void MarkAsUsed(); // /// Marks the passcode as used, enforcing business rules (not expired, not already used). ///
private static string GenerateUniqueCode(); // /// Generates a cryptographically-strong, human-readable code. ///public class ApplicationUser // /// 拓展内置的IdentityUser<Guid>,加入新的字段 /// 这是一个Aggregate Root聚合根 /// </summary>
private ApplicationUser();
public static ApplicationUser CreateNewUser(string userName, string realName, string? englishName, UserRoleType roleType, string? grade, string? house, string? staffTitle); // /// Factory method for creating a new, unactivated user. This is the only public way to create a user instance. ///
public void ActivateAccount(); // /// Domain method to activate a user's account, enforcing business rules. ///
public void UpdateInformation(string realName, string? englishName, Gender gender, DateTime dateOfBirth, UserRoleType roleType, string? grade, string? house, string? staffTitle); // /// Domain method for an administrator to update a user's core information. ///
public void SetTimeout(DateTime endDate); // /// Domain method to set a timeout period for a user. ///
public void ClearTimeout(); // /// Domain method to clear a user's timeout. ///public class PasskeyCredential
public Fido2NetLib.Objects.PublicKeyCredentialDescriptor GetDescriptor();partial class AddPasskeyCredentials
protected override void BuildTargetModel(ModelBuilder modelBuilder);partial class RefreshTokenUpdate
protected override void BuildTargetModel(ModelBuilder modelBuilder);partial class ApplicationDbContextModelSnapshot
protected override void BuildModel(ModelBuilder modelBuilder);public partial class InitialCreate
protected override void Up(MigrationBuilder migrationBuilder);
protected override void Down(MigrationBuilder migrationBuilder);partial class RefreshUserInfo
protected override void BuildTargetModel(ModelBuilder modelBuilder);partial class InitialCreate
protected override void BuildTargetModel(ModelBuilder modelBuilder);public partial class RefreshUserInfo
protected override void Up(MigrationBuilder migrationBuilder);
protected override void Down(MigrationBuilder migrationBuilder);public partial class AddPasskeyCredentials
protected override void Up(MigrationBuilder migrationBuilder);
protected override void Down(MigrationBuilder migrationBuilder);public partial class RefreshTokenUpdate
protected override void Up(MigrationBuilder migrationBuilder);
protected override void Down(MigrationBuilder migrationBuilder);public static class DbInitializer
public static async Task InitializeAsync(IServiceProvider serviceProvider);
private static async Task SeedRolesAsync(RoleManager<IdentityRole<Guid>> roleManager, ILogger logger);
private static async Task SeedOwnerUserAsync(UserManager<ApplicationUser> userManager, IConfiguration configuration, ILogger logger);public class ApplicationDbContext
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options);
protected override void OnModelCreating(ModelBuilder builder);
public override Task<int> SaveChangesAsync(CancellationToken cancellationToken = new CancellationToken());public class InMemoryLockService // /// 锁,后期考虑Redis-based ///
public InMemoryLockService(IMemoryCache cache);
public async Task<IDisposable?> AcquireLockAsync(string resourceKey, TimeSpan timeout, CancellationToken cancellationToken = default);
private sealed class SemaphoreReleaser
public SemaphoreReleaser(SemaphoreSlim semaphore);
public void Dispose();public class HttpSessionStore
public HttpSessionStore(IHttpContextAccessor httpContextAccessor);
public void Set(string key, T value);
public T? Get(string key);
public void Remove(string key);public class Fido2PasskeyService
public Fido2PasskeyService(IApplicationDbContext context, IConfiguration configuration);
public CredentialCreateOptions GenerateRegistrationOptions(ApplicationUser user, string deviceName, List<PasskeyCredential> existingCredentials);
public async Task<PasskeyCredential> CompleteRegistrationAsync(AuthenticatorAttestationRawResponse attestationResponse, CredentialCreateOptions originalOptions, Guid userId, string deviceName);
public AssertionOptions GenerateLoginOptions(string? userName = null);
public async Task<Guid> CompleteLoginAsync(AuthenticatorAssertionRawResponse clientResponse, AssertionOptions originalOptions);public interface IAuthTokenSettings
string GetSecret();
string GetIssuer();
string GetAudience();
int GetAccessTokenExpiryMinutes();
int GetRefreshTokenExpiryDays();public interface ISessionStore
void Set(string key, T value);
T? Get(string key);
void Remove(string key);public interface IApplicationDbContext
Task<int> SaveChangesAsync(CancellationToken cancellationToken);internal class SharedValidationMessages_zh_TW
internal SharedValidationMessages_zh_TW();internal class SharedValidationMessages_en_US
internal SharedValidationMessages_en_US();public class SharedValidationMessagesinternal class SharedValidationMessages_zh_CN
internal SharedValidationMessages_zh_CN();public class UserValidationException
public UserValidationException(string message);public class NotFoundException
public NotFoundException();
public NotFoundException(string message);
public NotFoundException(string message, Exception innerException);
public NotFoundException(string name, object key);public class ValidationException
public ValidationException();
public ValidationException(IEnumerable<ValidationFailure> failures);public class ValidationBehaviour
public ValidationBehaviour(IEnumerable<IValidator<TRequest>> validators);
public async Task<TResponse> Handle(TRequest request, RequestHandlerDelegate<TResponse> next, CancellationToken cancellationToken);public class UnhandledExceptionBehaviour
public UnhandledExceptionBehaviour(ILogger<TRequest> logger);
public async Task<TResponse> Handle(TRequest request, RequestHandlerDelegate<TResponse> next, CancellationToken cancellationToken);public class MappingProfile
public MappingProfile();public class UserStatusValidator
public UserStatusValidator(UserManager<ApplicationUser> userManager, IStringLocalizer<SharedValidationMessages> localizer);
public async Task ValidateAsync(ApplicationUser user);public class PasskeyOptionsValidator
public PasskeyOptionsValidator(IStringLocalizer<SharedValidationMessages> localizer);
public void Validate(Fido2SessionData? options);public static class PasswordValidators
public static IRuleBuilderOptions<T, string> ApplyPasswordPolicy(this IRuleBuilder<T, string> ruleBuilder, PasswordPolicySettings policy);public class ApiExceptionFilterAttribute
public ApiExceptionFilterAttribute();
public override void OnException(ExceptionContext context);
private void HandleException(ExceptionContext context);
private void HandleValidationException(ExceptionContext context);
private void HandleNotFoundException(ExceptionContext context);
private void HandleUnauthorizedAccessException(ExceptionContext context);
private void HandleInvalidOperationException(ExceptionContext context);
private void HandleUnknownException(ExceptionContext context);
private void HandleUserValidationException(ExceptionContext context);
private void HandleFido2VerificationException(ExceptionContext context);public class ApiSignatureVerificationMiddleware
public ApiSignatureVerificationMiddleware(RequestDelegate next, IOptions<ApiSignatureSettings> settings, IMemoryCache cache, ILogger<ApiSignatureVerificationMiddleware> logger);
public async Task InvokeAsync(HttpContext context);
private static bool IsPublicPath(PathString path);
private static async Task<string> GenerateServerSignature(HttpRequest request, string timestamp, string nonce, string apiSecret);
private static Task WriteUnauthorizedResponse(HttpContext context, string message);public static class SessionExtensions
public static void Set(this ISession session, string key, T value);
public static T? Get(this ISession session, string key);public class PasskeyController
public async Task<ActionResult<CredentialCreateOptions>> BeginActivationRegistration(BeginPasskeyActivationCommand command);
public async Task<IActionResult> CompleteActivationRegistration([FromBody] AuthenticatorAttestationRawResponse attestationResponse);
public async Task<ActionResult<AssertionOptions>> BeginLogin(BeginPasskeyLoginCommand command);
public async Task<ActionResult<LoginResponse>> CompleteLogin([FromBody] AuthenticatorAssertionRawResponse clientResponse);
public async Task<ActionResult<IEnumerable<PasskeyDto>>> GetMyCredentials();
public async Task<IActionResult> DeleteMyCredential([FromRoute] string passkeyId);
public async Task<ActionResult<CredentialCreateOptions>> BeginAddDevice(BeginAddDeviceCommand command);
public async Task<IActionResult> CompleteAddDevice([FromBody] AuthenticatorAttestationRawResponse attestationResponse);public class RolesController
public async Task<IActionResult> GetAllRoles();
public async Task<IActionResult> CreateRole([FromBody] CreateRoleCommand command);
public async Task<IActionResult> DeleteRole(Guid id);
public async Task<IActionResult> UpdateUsersInRole(Guid id, [FromBody] List<Guid> userIds);public class AuthController
public async Task<ActionResult<LoginResponse>> Login(LoginCommand command);
public async Task<ActionResult<LoginResponse>> Refresh(RefreshTokenCommand command);
public async Task<IActionResult> Revoke(Guid userId);public abstract class ApiControllerBasepublic class UsersController
public async Task<ActionResult<UserDto>> GetUserById(Guid id);
public async Task<ActionResult<CreateUserResponse>> CreateUser(CreateUserCommand command);
public async Task<IActionResult> ActivateUser(ActivateUserCommand command);
public async Task<IActionResult> ChangePassword(ChangePasswordCommand command);
public async Task<ActionResult<IEnumerable<PasskeyDto>>> GetUserPasskeys(Guid userId);
public async Task<IActionResult> DeleteUserPasskey(Guid userId, string passkeyId);public class JwtService
public JwtService(IAuthTokenSettings tokenSettings);
public string GenerateToken(ApplicationUser user, IEnumerable<string> roles);public class Argon2PasswordHasher
public string HashPassword(ApplicationUser user, string password);
public PasswordVerificationResult VerifyHashedPassword(ApplicationUser user, string hashedPassword, string providedPassword);public class PasskeyCredentialConfiguration
public void Configure(EntityTypeBuilder<PasskeyCredential> builder);public class ApplicationUserConfiguration
public void Configure(EntityTypeBuilder<ApplicationUser> builder);public class RefreshTokenConfiguration
public void Configure(EntityTypeBuilder<RefreshToken> builder);public class OneTimePasscodeConfiguration
public void Configure(EntityTypeBuilder<OneTimePasscode> builder);public class PasswordPolicySettingspublic class JwtSettings
public string GetSecret();
public string GetIssuer();
public string GetAudience();
public int GetAccessTokenExpiryMinutes();
public int GetRefreshTokenExpiryDays();public class PasscodeSettingspublic record UserDto
public UserDto();public class Fido2SessionDatapublic record RoleDto
public RoleDto();public record PasskeyDtopublic interface IPasskeyOptionsValidator
void Validate(Fido2SessionData? user);public interface IUserStatusValidator
Task ValidateAsync(ApplicationUser user);public interface IJwtService
string GenerateToken(ApplicationUser user, IEnumerable<string> roles); // /// Generates a JWT for a given user and their roles. ///public interface IPasskeyService
CredentialCreateOptions GenerateRegistrationOptions(ApplicationUser user, string deviceName, List<PasskeyCredential> existingCredentials);
Task<PasskeyCredential> CompleteRegistrationAsync(AuthenticatorAttestationRawResponse attestationResponse, CredentialCreateOptions originalOptions, Guid userId, string deviceName);
AssertionOptions GenerateLoginOptions(string? userName = null);
Task<Guid> CompleteLoginAsync(AuthenticatorAssertionRawResponse clientResponse, AssertionOptions originalOptions);public interface IResourceLockService
Task<IDisposable?> AcquireLockAsync(string resourceKey, TimeSpan timeout, CancellationToken cancellationToken = default); // /// Attempts to acquire a lock on a specified resource. ///public class ApiSignatureSettings
public class ApiKeySecretPairpublic class GetAllRolesQueryHandler
public GetAllRolesQueryHandler(RoleManager<IdentityRole<Guid>> roleManager, IMapper mapper);
public async Task<IEnumerable<RoleDto>> Handle(GetAllRolesQuery request, CancellationToken cancellationToken);public record GetAllRolesQuerypublic record CreateRoleCommandpublic class CreateRoleCommandHandler
public CreateRoleCommandHandler(RoleManager<IdentityRole<Guid>> roleManager, IStringLocalizer<SharedValidationMessages> localizer);
public async Task<Guid> Handle(CreateRoleCommand request, CancellationToken cancellationToken);public class CreateRoleCommandValidator
public CreateRoleCommandValidator();文件: KCSCommunity.Application/Features/Roles/Commands/UpdateUsersInRole/UpdateUsersInRoleCommandValidator.cs
public class UpdateUsersInRoleCommandValidator
public UpdateUsersInRoleCommandValidator();文件: KCSCommunity.Application/Features/Roles/Commands/UpdateUsersInRole/UpdateUsersInRoleCommandHandler.cs
public class UpdateUsersInRoleCommandHandler
public UpdateUsersInRoleCommandHandler(RoleManager<IdentityRole<Guid>> roleManager, UserManager<ApplicationUser> userManager, IHttpContextAccessor httpContextAccessor, IResourceLockService lockService, ILogger<UpdateUsersInRoleCommandHandler> logger, IStringLocalizer<SharedValidationMessages> localizer);
public async Task Handle(UpdateUsersInRoleCommand request, CancellationToken cancellationToken);public record UpdateUsersInRoleCommandpublic class DeleteRoleCommandHandler
public DeleteRoleCommandHandler(RoleManager<IdentityRole<Guid>> roleManager, UserManager<ApplicationUser> userManager, IStringLocalizer<SharedValidationMessages> localizer);
public async Task Handle(DeleteRoleCommand request, CancellationToken cancellationToken);public class DeleteRoleCommandValidator
public DeleteRoleCommandValidator();public record DeleteRoleCommandpublic class GetUserByIdQueryHandler
public GetUserByIdQueryHandler(UserManager<ApplicationUser> userManager, IMapper mapper);
public async Task<UserDto> Handle(GetUserByIdQuery request, CancellationToken cancellationToken);public record GetUserByIdQuerypublic class GetUserByIdQueryValidator
public GetUserByIdQueryValidator();文件: KCSCommunity.Application/Features/Users/Queries/GetUserPasskeys/GetUserPasskeysQueryValidator.cs
public class GetUserPasskeysQueryValidator
public GetUserPasskeysQueryValidator();public class GetUserPasskeysQueryHandler
public GetUserPasskeysQueryHandler(IApplicationDbContext context, IMapper mapper);
public async Task<IEnumerable<PasskeyDto>> Handle(GetUserPasskeysQuery request, CancellationToken cancellationToken);public record GetUserPasskeysQuerypublic class CreateUserCommandHandler
public CreateUserCommandHandler(UserManager<ApplicationUser> userManager, IApplicationDbContext context, ILogger<CreateUserCommandHandler> logger, PasscodeSettings passcodeSettings, IStringLocalizer<SharedValidationMessages> localizer);
public async Task<CreateUserResponse> Handle(CreateUserCommand request, CancellationToken cancellationToken);
private static string GenerateRandomPassword();
private static char GetRandomChar(string source);
private static int GetRandomInt(int min, int max);public class CreateUserCommandValidator
public CreateUserCommandValidator();public record CreateUserCommandpublic record CreateUserResponsepublic record DeleteUserPasskeyCommand文件: KCSCommunity.Application/Features/Users/Commands/DeleteUserPasskey/DeleteUserPasskeyCommandValidator.cs
public class DeleteUserPasskeyCommandValidator
public DeleteUserPasskeyCommandValidator();文件: KCSCommunity.Application/Features/Users/Commands/DeleteUserPasskey/DeleteUserPasskeyCommandHandler.cs
public class DeleteUserPasskeyCommandHandler
public DeleteUserPasskeyCommandHandler(IApplicationDbContext context);
public async Task Handle(DeleteUserPasskeyCommand request, CancellationToken cancellationToken);public class ActivateUserCommandValidator
public ActivateUserCommandValidator(PasswordPolicySettings passwordPolicy);public class ActivateUserCommandHandler
public ActivateUserCommandHandler(IApplicationDbContext context, UserManager<ApplicationUser> userManager, IResourceLockService lockService, ILogger<ActivateUserCommandHandler> logger, IStringLocalizer<SharedValidationMessages> localizer);
public async Task Handle(ActivateUserCommand request, CancellationToken cancellationToken);public record ActivateUserCommand文件: KCSCommunity.Application.Auth/Features/Passkey/Queries/GetMyPasskeys/GetMyPasskeysQueryHandler.cs
public class GetMyPasskeysQueryHandler
public GetMyPasskeysQueryHandler(IApplicationDbContext context, IHttpContextAccessor httpContextAccessor, IMapper mapper);
public async Task<IEnumerable<PasskeyDto>> Handle(GetMyPasskeysQuery request, CancellationToken cancellationToken);public record GetMyPasskeysQuery文件: KCSCommunity.Application.Auth/Features/Passkey/Commands/DeleteMyPasskey/DeleteMyPasskeyCommandHandler.cs
public class DeleteMyPasskeyCommandHandler
public DeleteMyPasskeyCommandHandler(IApplicationDbContext context, IHttpContextAccessor httpContextAccessor);
public async Task Handle(DeleteMyPasskeyCommand request, CancellationToken cancellationToken);文件: KCSCommunity.Application.Auth/Features/Passkey/Commands/DeleteMyPasskey/DeleteMyPasskeyCommandValidator.cs
public class DeleteMyPasskeyCommandValidator
public DeleteMyPasskeyCommandValidator();文件: KCSCommunity.Application.Auth/Features/Passkey/Commands/DeleteMyPasskey/DeleteMyPasskeyCommand.cs
public record DeleteMyPasskeyCommand文件: KCSCommunity.Application.Auth/Features/Users/Commands/ChangePassword/ChangePasswordCommandHandler.cs
public class ChangePasswordCommandHandler
public ChangePasswordCommandHandler(UserManager<ApplicationUser> userManager, IHttpContextAccessor httpContextAccessor);
public async Task Handle(ChangePasswordCommand request, CancellationToken cancellationToken);public record ChangePasswordCommand文件: KCSCommunity.Application.Auth/Features/Users/Commands/ChangePassword/ChangePasswordCommandValidator.cs
public class ChangePasswordCommandValidator
public ChangePasswordCommandValidator(PasswordPolicySettings passwordPolicy, IStringLocalizer<SharedValidationMessages> localizer);文件: KCSCommunity.Application.Auth/Features/Authorization/Commands/RefreshToken/RefreshTokenCommandHandler.cs
public class RefreshTokenCommandHandler
public RefreshTokenCommandHandler(IApplicationDbContext context, UserManager<ApplicationUser> userManager, IJwtService jwtService, IAuthTokenSettings tokenSettings, IStringLocalizer<SharedValidationMessages> localizer);
public async Task<LoginResponse> Handle(RefreshTokenCommand request, CancellationToken cancellationToken);
private ClaimsPrincipal GetPrincipalFromExpiredToken(string token);
private async Task InvalidateUserTokensAsync(Guid userId);文件: KCSCommunity.Application.Auth/Features/Authorization/Commands/RefreshToken/RefreshTokenCommand.cs
public record RefreshTokenCommand文件: KCSCommunity.Application.Auth/Features/Authorization/Commands/RefreshToken/RefreshTokenCommandValidator.cs
public class RefreshTokenCommandValidator
public RefreshTokenCommandValidator();public record LoginCommandpublic record LoginResponsepublic class LoginCommandHandler
public LoginCommandHandler(UserManager<ApplicationUser> userManager, IJwtService jwtService, IPasswordHasher<ApplicationUser> passwordHasher, IApplicationDbContext context, IAuthTokenSettings tokenSettings, IStringLocalizer<SharedValidationMessages> localizer, IUserStatusValidator userStatusValidator);
public async Task<LoginResponse> Handle(LoginCommand request, CancellationToken cancellationToken);public class LoginCommandValidator
public LoginCommandValidator();文件: KCSCommunity.Application.Auth/Features/Authorization/Commands/RevokeToken/RevokeTokenCommandValidator.cs
public class RevokeTokenCommandValidator
public RevokeTokenCommandValidator();文件: KCSCommunity.Application.Auth/Features/Authorization/Commands/RevokeToken/RevokeTokenCommandHandler.cs
public class RevokeTokenCommandHandler
public RevokeTokenCommandHandler(IApplicationDbContext context);
public async Task Handle(RevokeTokenCommand request, CancellationToken cancellationToken);public record RevokeTokenCommand文件: KCSCommunity.Application.Auth/Features/Passkey/Commands/PasskeyActivation/Complete/CompletePasskeyActivationCommandValidator.cs
public class CompletePasskeyActivationCommandValidator
public CompletePasskeyActivationCommandValidator();文件: KCSCommunity.Application.Auth/Features/Passkey/Commands/PasskeyActivation/Complete/CompletePasskeyActivationCommand.cs
public record CompletePasskeyActivationCommand文件: KCSCommunity.Application.Auth/Features/Passkey/Commands/PasskeyActivation/Complete/CompletePasskeyActivationCommandHandler.cs
public class CompletePasskeyActivationCommandHandler
public CompletePasskeyActivationCommandHandler(IApplicationDbContext context, IPasskeyService passkeyService, UserManager<ApplicationUser> userManager, ISessionStore sessionStore, IStringLocalizer<SharedValidationMessages> localizer, IResourceLockService lockService, ILogger<CompletePasskeyActivationCommandHandler> logger, IPasskeyOptionsValidator passkeyOptionsValidator);
public async Task Handle(CompletePasskeyActivationCommand request, CancellationToken cancellationToken);文件: KCSCommunity.Application.Auth/Features/Passkey/Commands/PasskeyActivation/Begin/BeginPasskeyActivationCommandValidator.cs
public class BeginPasskeyActivationCommandValidator
public BeginPasskeyActivationCommandValidator();文件: KCSCommunity.Application.Auth/Features/Passkey/Commands/PasskeyActivation/Begin/BeginPasskeyActivationCommandHandler.cs
public class BeginPasskeyActivationCommandHandler
public BeginPasskeyActivationCommandHandler(IApplicationDbContext context, IPasskeyService passkeyService, ISessionStore sessionStore, IStringLocalizer<SharedValidationMessages> localizer, UserManager<ApplicationUser> userManager);
public async Task<CredentialCreateOptions> Handle(BeginPasskeyActivationCommand request, CancellationToken cancellationToken);文件: KCSCommunity.Application.Auth/Features/Passkey/Commands/PasskeyActivation/Begin/BeginPasskeyActivationCommand.cs
public record BeginPasskeyActivationCommand文件: KCSCommunity.Application.Auth/Features/Passkey/Commands/AddDevice/Complete/CompleteAddDeviceCommandHandler.cs
public class CompleteAddDeviceCommandHandler
public CompleteAddDeviceCommandHandler(IApplicationDbContext context, IPasskeyService passkeyService, UserManager<ApplicationUser> userManager, ISessionStore sessionStore, IStringLocalizer<SharedValidationMessages> localizer, IHttpContextAccessor httpContextAccessor);
public async Task Handle(CompleteAddDeviceCommand request, CancellationToken cancellationToken);文件: KCSCommunity.Application.Auth/Features/Passkey/Commands/AddDevice/Complete/CompleteAddDeviceCommandValidator.cs
public class CompleteAddDeviceCommandValidator
public CompleteAddDeviceCommandValidator();文件: KCSCommunity.Application.Auth/Features/Passkey/Commands/AddDevice/Complete/CompleteAddDeviceCommand.cs
public record CompleteAddDeviceCommand文件: KCSCommunity.Application.Auth/Features/Passkey/Commands/AddDevice/Begin/BeginAddDeviceCommandValidator.cs
public class BeginAddDeviceCommandValidator
public BeginAddDeviceCommandValidator();文件: KCSCommunity.Application.Auth/Features/Passkey/Commands/AddDevice/Begin/BeginAddDeviceCommand.cs
public record BeginAddDeviceCommand文件: KCSCommunity.Application.Auth/Features/Passkey/Commands/AddDevice/Begin/BeginAddDeviceCommandHandler.cs
public class BeginAddDeviceCommandHandler
public BeginAddDeviceCommandHandler(IApplicationDbContext context, IPasskeyService passkeyService, ISessionStore sessionStore, UserManager<ApplicationUser> userManager, IHttpContextAccessor httpContextAccessor);
public async Task<CredentialCreateOptions> Handle(BeginAddDeviceCommand request, CancellationToken cancellationToken);文件: KCSCommunity.Application.Auth/Features/Passkey/Commands/Login/Complete/CompletePasskeyLoginCommandHandler.cs
public class CompletePasskeyLoginCommandHandler
public CompletePasskeyLoginCommandHandler(IApplicationDbContext context, IPasskeyService passkeyService, UserManager<ApplicationUser> userManager, IJwtService jwtService, IAuthTokenSettings tokenSettings, ISessionStore sessionStore, IStringLocalizer<SharedValidationMessages> localizer, IUserStatusValidator userStatusValidator);
public async Task<LoginResponse> Handle(CompletePasskeyLoginCommand request, CancellationToken cancellationToken);文件: KCSCommunity.Application.Auth/Features/Passkey/Commands/Login/Complete/CompletePasskeyLoginCommand.cs
public record CompletePasskeyLoginCommand文件: KCSCommunity.Application.Auth/Features/Passkey/Commands/Login/Complete/CompletePasskeyLoginCommandValidator.cs
public class CompletePasskeyLoginCommandValidator
public CompletePasskeyLoginCommandValidator();public record BeginPasskeyLoginCommand文件: KCSCommunity.Application.Auth/Features/Passkey/Commands/Login/Begin/BeginPasskeyLoginCommandHandler.cs
public class BeginPasskeyLoginCommandHandler
public BeginPasskeyLoginCommandHandler(IApplicationDbContext context, IPasskeyService passkeyService, ISessionStore sessionStore);
public Task<AssertionOptions> Handle(BeginPasskeyLoginCommand request, CancellationToken cancellationToken);