Added skoruba api integration

This commit is contained in:
2026-10-04 14:31:06 +02:00
parent b3957f4af4
commit 06539236a1
151 changed files with 317 additions and 242 deletions
@@ -0,0 +1,30 @@
using PostFundManagement.Domain.Attributes;
using PostFundManagement.Domain.Models.Security;
namespace PostFundManagement.Domain.Abstractions;
public interface ISkorubaUserService
{
[Log]
[Audit]
Task<Result<string>> CreateUserAsync(CreateUserRequest request, CancellationToken cancellationToken = default);
[Log]
Task<Result<UserResponse>> GetUserAsync(string userId, CancellationToken cancellationToken = default);
[Log]
[Audit]
Task<Result> UpdateUserAsync(UpdateUserRequest request, CancellationToken cancellationToken = default);
[Log]
[Audit]
Task<Result> SetUserLockoutAsync(string userId, bool disabled, CancellationToken cancellationToken = default);
[Log]
[Audit]
Task<Result> AddClaimAsync(string userId, string claimType, string claimValue, CancellationToken cancellationToken = default);
[Log]
[Audit]
Task<Result> RemoveClaimAsync(string userId, int claimId, CancellationToken cancellationToken = default);
}
@@ -1,4 +1,4 @@
namespace PostFundManagement.Domain.Security;
namespace PostFundManagement.Domain.Attributes;
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]
public sealed class ApiVersionTargetAttribute(int majorVersion) : Attribute
@@ -0,0 +1,12 @@
namespace PostFundManagement.Domain.Configuration.Security;
public sealed class MachineIdentitySettings
{
public string? Authority { get; set; }
public string? Scope { get; set; }
public string? ClientId { get; set; }
public string? ClientSecret { get; set; }
}
@@ -1,4 +1,4 @@
namespace PostFundManagement.Domain.Security.Configuration;
namespace PostFundManagement.Domain.Configuration.Security;
public sealed class SecurityClientSettings
{
@@ -1,4 +1,4 @@
namespace PostFundManagement.Domain.Security.Configuration;
namespace PostFundManagement.Domain.Configuration.Security;
public sealed class SecuritySettings
{
@@ -4,38 +4,28 @@ public static class Constants
{
public const string ServiceCachingFeature = "EnableServiceCaching";
public const string SkorubaCredentialClient = nameof(SkorubaCredentialClient);
public const string SkorubaHttpClient = nameof(SkorubaHttpClient);
public const string MainScope = "ApiScope";
public const string CorsPolicy = "AllowConfiguredOrigins";
public const string CachePolicy = "DefaultCachePolicy";
public const string EmailtemKey = "UserEmail";
public const string UserRoleItemKey = "UserRole";
public const string UserIdItemKey = "UserId";
public const string DefaultSchedulerName = "pfm-scheduler";
public const string GeneralS3SettingsSection = "GeneralS3Settings";
public const string EvidenceS3SettingsSection = "EvidenceS3Settings";
public const string ContractS3SettingsSection = "ContractS3Settings";
public const string GeneralBucketName = "pfm";
public const string DatabaseConfigName = "PfmDatabase";
public const string DefaultSchedulerName = "pfm-scheduler";
public const string SchedulerDatabaseConfigName = "PfmSchedulerDatabase";
public const int LabelLength = 256;
public const int ShortLabelLength = 100;
public const int TextLength = 1024;
public const int MediumTextLength = 2048;
public const int LargeTextLength = 4096;
}
@@ -0,0 +1,9 @@
namespace PostFundManagement.Domain.Models.Security;
public sealed record CreateUserRequest(string UserName, string Email, string Password, bool EmailConfirmed = true, string? PhoneNumber = null, bool PhoneNumberConfirmed = false);
public sealed record UpdateUserRequest(string Id, string UserName, string Email, bool EmailConfirmed, string? PhoneNumber, bool PhoneNumberConfirmed, bool LockoutEnabled, DateTimeOffset? LockoutEnd, int AccessFailedCount, bool TwoFactorEnabled);
public sealed record UserClaim(string ClaimType, string ClaimValue, int? ClaimId = null);
public sealed record UserResponse(string Id, string UserName, string Email, bool IsLockedOut, bool LockoutEnabled);
@@ -1,4 +1,4 @@
namespace PostFundManagement.Domain.Security.Models;
namespace PostFundManagement.Domain.Models.Security;
public sealed class TokenErrorResponse
{
@@ -1,4 +1,4 @@
namespace PostFundManagement.Domain.Security.Models;
namespace PostFundManagement.Domain.Models.Security;
public sealed class TokenRequest
{
@@ -1,4 +1,4 @@
namespace PostFundManagement.Domain.Security.Models;
namespace PostFundManagement.Domain.Models.Security;
public sealed class TokenResponse
{
@@ -1,12 +0,0 @@
namespace PostFundManagement.Domain.Security.Configuration;
public sealed class MachineIdentity
{
public string? Authority { get; set; }
public string? Audience { get; set; }
public string? ClientId { get; set; }
public string? ClientSecret { get; set; }
}
@@ -1,16 +0,0 @@
namespace PostFundManagement.Domain.Security;
public sealed class OpenApiBearerSecuritySchemeTransformer : IOpenApiDocumentTransformer
{
public async Task TransformAsync(OpenApiDocument document, OpenApiDocumentTransformerContext context, CancellationToken cancellationToken)
{
var bearerScheme = new OpenApiSecurityScheme
{
Type = SecuritySchemeType.Http,
Scheme = "bearer",
Description = "JWT Authorization header using the Bearer scheme",
};
document.AddComponent("Bearer", bearerScheme);
}
}
@@ -1,7 +0,0 @@
namespace PostFundManagement.Domain.Security.Sdk;
public interface ISecurityConnectApi
{
[Post("/connect/token")]
ValueTask<HttpResponseMessage> GetToken([Body(BodySerializationMethod.UrlEncoded)] Models.TokenRequest request, CancellationToken cancellationToken = default);
}