< Summary

Information
Class: Anichron.API.Endpoints.AdminEndpoints
Assembly: Anichron.API
File(s): /home/runner/work/anichron/anichron/src/Anichron.API/Endpoints/AdminEndpoints.cs
Tag: 228_36821334185
Line coverage
66%
Covered lines: 40
Uncovered lines: 20
Coverable lines: 60
Total lines: 138
Line coverage: 66.6%
Branch coverage
100%
Covered branches: 4
Total branches: 4
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
MapAdminEndpoints(...)100%210%
CreateUserAsync()100%11100%
ResetUserPasswordAsync()100%11100%
GetUsersAsync()100%11100%
GetUserAsync()100%11100%
PatchUserAsync()100%22100%
DeleteUserAsync()100%22100%
GetStorageConfigsAsync()100%11100%
CreateStorageConfigAsync()100%11100%
DeleteStorageConfigAsync()100%11100%

File(s)

/home/runner/work/anichron/anichron/src/Anichron.API/Endpoints/AdminEndpoints.cs

#LineLine coverage
 1using Anichron.API.Infrastructure;
 2using Anichron.API.Services;
 3using System.Security.Claims;
 4
 5namespace Anichron.API.Endpoints;
 6
 7public static class AdminEndpoints
 8{
 9    public static IEndpointRouteBuilder MapAdminEndpoints(this IEndpointRouteBuilder app)
 010    {
 011        var group = app.MapGroup(ApiPaths.Users.Group).WithTags("Users")
 012                       .RequireAuthorization(AuthPolicies.Admin);
 013        group.MapPost(string.Empty, CreateUserAsync)
 014             .RequireRateLimiting(AuthRateLimitPolicies.Sensitive);
 015        group.MapPost(ApiPaths.Users.PasswordReset, ResetUserPasswordAsync)
 016             .RequireRateLimiting(AuthRateLimitPolicies.Sensitive);
 017        group.MapGet(string.Empty, GetUsersAsync);
 018        group.MapGet(ApiPaths.Users.ById, GetUserAsync);
 019        group.MapPatch(ApiPaths.Users.ById, PatchUserAsync)
 020             .RequireRateLimiting(AuthRateLimitPolicies.Sensitive);
 021        group.MapDelete(ApiPaths.Users.ById, DeleteUserAsync)
 022             .RequireRateLimiting(AuthRateLimitPolicies.Sensitive);
 023        group.MapGet(ApiPaths.Users.UserStorageConfigs, GetStorageConfigsAsync);
 024        group.MapPost(ApiPaths.Users.UserStorageConfigs, CreateStorageConfigAsync)
 025             .RequireRateLimiting(AuthRateLimitPolicies.Sensitive);
 026        group.MapDelete(ApiPaths.Users.UserStorageConfigById, DeleteStorageConfigAsync)
 027             .RequireRateLimiting(AuthRateLimitPolicies.Sensitive);
 028        return app;
 029    }
 30
 31    internal static async Task<IResult> CreateUserAsync(
 32        CreateAdminUserRequest request,
 33        IAuthService auth,
 34        IAuthResponseMapper mapper,
 35        CancellationToken ct)
 236    {
 237        var result = await auth.AdminCreateUserAsync(request.Username, request.Email, ct);
 238        return mapper.GetAdminCreateUserResult(result);
 239    }
 40
 41    internal static async Task<IResult> ResetUserPasswordAsync(
 42        Guid userId,
 43        IAdminResetService adminReset,
 44        IAuthResponseMapper mapper,
 45        CancellationToken ct)
 146    {
 147        var result = await adminReset.ResetUserPasswordAsync(userId, ct);
 148        return mapper.GetAdminResetPasswordResult(result);
 149    }
 50
 51    internal static async Task<IResult> GetUsersAsync(
 52        IAdminUserService adminUsers,
 53        IAuthResponseMapper mapper,
 54        CancellationToken ct)
 155    {
 156        var users = await adminUsers.GetAllAsync(ct);
 157        return mapper.GetAdminGetUsersResult(users);
 158    }
 59
 60    internal static async Task<IResult> GetUserAsync(
 61        Guid userId,
 62        IAdminUserService adminUsers,
 63        IAuthResponseMapper mapper,
 64        CancellationToken ct)
 165    {
 166        var user = await adminUsers.GetByIdAsync(userId, ct);
 167        return mapper.GetAdminGetUserResult(user);
 168    }
 69
 70    internal static async Task<IResult> PatchUserAsync(
 71        Guid userId,
 72        PatchAdminUserRequest request,
 73        ClaimsPrincipal caller,
 74        IAdminUserService adminUsers,
 75        IAuthResponseMapper mapper,
 76        CancellationToken ct)
 277    {
 278        if (!Guid.TryParse(caller.FindFirstValue(ClaimTypes.NameIdentifier), out var callerId))
 179            return Results.Unauthorized();
 80
 181        var result = await adminUsers.UpdateAsync(callerId, userId, request.IsAdmin, request.IsDisabled, ct);
 182        return mapper.GetAdminPatchUserResult(result);
 283    }
 84
 85    internal static async Task<IResult> DeleteUserAsync(
 86        Guid userId,
 87        ClaimsPrincipal caller,
 88        IAdminUserService adminUsers,
 89        IAuthResponseMapper mapper,
 90        CancellationToken ct)
 291    {
 292        if (!Guid.TryParse(caller.FindFirstValue(ClaimTypes.NameIdentifier), out var callerId))
 193            return Results.Unauthorized();
 94
 195        var result = await adminUsers.DeleteAsync(callerId, userId, ct);
 196        return mapper.GetAdminDeleteUserResult(result);
 297    }
 98
 99    internal static async Task<IResult> GetStorageConfigsAsync(
 100        Guid userId,
 101        IAdminStorageConfigService adminStorageConfigs,
 102        IAuthResponseMapper mapper,
 103        CancellationToken ct)
 1104    {
 1105        var result = await adminStorageConfigs.GetByUserIdAsync(userId, ct);
 1106        return mapper.GetAdminGetStorageConfigsResult(result);
 1107    }
 108
 109    internal static async Task<IResult> CreateStorageConfigAsync(
 110        Guid userId,
 111        CreateStorageConfigRequest request,
 112        IAdminStorageConfigService adminStorageConfigs,
 113        IAuthResponseMapper mapper,
 114        CancellationToken ct)
 1115    {
 1116        var result = await adminStorageConfigs.AddAsync(userId, request.RootPath, ct);
 1117        return mapper.GetAdminCreateStorageConfigResult(result);
 1118    }
 119
 120    internal static async Task<IResult> DeleteStorageConfigAsync(
 121        Guid userId,
 122        Guid configId,
 123        IAdminStorageConfigService adminStorageConfigs,
 124        IAuthResponseMapper mapper,
 125        CancellationToken ct)
 1126    {
 1127        var result = await adminStorageConfigs.DeleteAsync(userId, configId, ct);
 1128        return mapper.GetAdminDeleteStorageConfigResult(result);
 1129    }
 130}
 131
 132public sealed record CreateAdminUserRequest(string Username, string Email);
 133public sealed record AdminCreatedUserResponse(Guid Id, string Username, string Email, string TemporaryPassword);
 134public sealed record AdminPasswordResetResponse(string TemporaryPassword);
 135public sealed record AdminUserResponse(Guid Id, string Username, string Email, bool IsAdmin, bool IsDisabled, int Storag
 136public sealed record PatchAdminUserRequest(bool? IsAdmin, bool? IsDisabled);
 137public sealed record CreateStorageConfigRequest(string RootPath);
 138public sealed record AdminStorageConfigResponse(Guid Id, Guid UserId, string RootPath, bool IsActive);