refactor: distribute the domain folder

This commit is contained in:
nikita
2024-12-26 13:38:43 +03:00
parent 43edab2912
commit 36026b3afb
22 changed files with 98 additions and 67 deletions

View File

@ -1,4 +1,6 @@
namespace Mirea.Api.Security.Common.Domain.Caching;
using Mirea.Api.Security.Common.Model;
namespace Mirea.Api.Security.Common.Domain.Caching;
internal class FirstAuthToken
{

View File

@ -1,29 +0,0 @@
using Microsoft.AspNetCore.Http;
using System;
namespace Mirea.Api.Security.Common.Domain;
public class CookieOptionsParameters
{
public required string Domain { get; set; }
public required string Path { get; set; }
internal void SetCookie(HttpContext context, string name, string value, DateTimeOffset? expires = null)
{
var cookieOptions = new CookieOptions
{
Expires = expires,
Path = Path,
Domain = Domain,
HttpOnly = true,
#if !DEBUG
Secure = true
#endif
};
context.Response.Cookies.Append(name, value, cookieOptions);
}
internal void DropCookie(HttpContext context, string name) =>
SetCookie(context, name, "", DateTimeOffset.MinValue);
}

View File

@ -1,11 +0,0 @@
using System;
namespace Mirea.Api.Security.Common.Domain;
public class LoginOAuthResult
{
public bool Success { get; set; }
public required string Token { get; set; }
public Uri? Callback { get; set; }
public string? ErrorMessage { get; set; }
}

View File

@ -1,12 +0,0 @@
using System.Text.Json.Serialization;
namespace Mirea.Api.Security.Common.Domain.OAuth2;
public class OAuthTokenResponse
{
[JsonPropertyName("access_token")]
public required string AccessToken { get; set; }
[JsonPropertyName("expires_in")]
public int ExpiresIn { get; set; }
}

View File

@ -1,38 +0,0 @@
using Mirea.Api.Security.Common.Interfaces;
using System.Text.Json.Serialization;
namespace Mirea.Api.Security.Common.Domain.OAuth2.UserInfo;
internal class GoogleUserInfo : IUserInfo
{
[JsonPropertyName("id")]
public required string Id { get; set; }
[JsonPropertyName("email")]
public required string Email { get; set; }
[JsonPropertyName("given_name")]
public required string GivenName { get; set; }
[JsonPropertyName("family_name")]
public required string FamilyName { get; set; }
[JsonPropertyName("name")]
public required string Name { get; set; }
[JsonPropertyName("picture")]
public required string Picture { get; set; }
[JsonPropertyName("verified_email")]
public bool? VerifiedEmail { get; set; }
public OAuthUser MapToInternalUser() =>
new()
{
Id = Id,
Email = VerifiedEmail.HasValue && VerifiedEmail.Value ? Email : null,
FirstName = GivenName,
LastName = FamilyName,
IconUri = Picture
};
}

View File

@ -1,36 +0,0 @@
using Mirea.Api.Security.Common.Interfaces;
using System.Text.Json.Serialization;
namespace Mirea.Api.Security.Common.Domain.OAuth2.UserInfo;
internal class MailRuUserInfo : IUserInfo
{
[JsonPropertyName("id")]
public required string Id { get; set; }
[JsonPropertyName("email")]
public required string Email { get; set; }
[JsonPropertyName("first_name")]
public required string FirstName { get; set; }
[JsonPropertyName("last_name")]
public required string LastName { get; set; }
[JsonPropertyName("nickname")]
public required string Username { get; set; }
[JsonPropertyName("image")]
public string? Image { get; set; }
public OAuthUser MapToInternalUser() =>
new()
{
Id = Id,
Email = Email,
FirstName = FirstName,
LastName = LastName,
Username = Username,
IconUri = Image
};
}

View File

@ -1,41 +0,0 @@
using Mirea.Api.Security.Common.Interfaces;
using System.Text.Json.Serialization;
namespace Mirea.Api.Security.Common.Domain.OAuth2.UserInfo;
internal class YandexUserInfo : IUserInfo
{
[JsonPropertyName("id")]
public required string Id { get; set; }
[JsonPropertyName("login")]
public required string Login { get; set; }
[JsonPropertyName("default_email")]
public required string DefaultEmail { get; set; }
[JsonPropertyName("first_name")]
public string? FirstName { get; set; }
[JsonPropertyName("last_name")]
public string? LastName { get; set; }
[JsonPropertyName("is_avatar_empty")]
public bool IsAvatarEmpty { get; set; }
[JsonPropertyName("default_avatar_id")]
public string? DefaultAvatarId { get; set; }
public OAuthUser MapToInternalUser() =>
new()
{
Id = Id,
Email = DefaultEmail,
FirstName = FirstName,
LastName = LastName,
IconUri =
IsAvatarEmpty ? null : $"https://avatars.yandex.net/get-yapic/{DefaultAvatarId}/islands-retina-50",
Username = Login
};
}

View File

@ -1,6 +1,6 @@
namespace Mirea.Api.Security.Common.Domain.OAuth2;
namespace Mirea.Api.Security.Common.Domain;
public class OAuthPayload
internal class OAuthPayload
{
public required OAuthProvider Provider { get; set; }
public required string Callback { get; set; }

View File

@ -1,6 +1,6 @@
using System;
namespace Mirea.Api.Security.Common.Domain.OAuth2;
namespace Mirea.Api.Security.Common.Domain;
internal readonly struct OAuthProviderUrisData
{

View File

@ -1,15 +0,0 @@
namespace Mirea.Api.Security.Common.Domain;
public class PasswordPolicy(
int minimumLength = 8,
bool requireLetter = true,
bool requireLettersDifferentCase = true,
bool requireDigit = true,
bool requireSpecialCharacter = true)
{
public int MinimumLength { get; set; } = minimumLength;
public bool RequireLetter { get; set; } = requireLetter;
public bool RequireLettersDifferentCase { get; set; } = requireLettersDifferentCase;
public bool RequireDigit { get; set; } = requireDigit;
public bool RequireSpecialCharacter { get; set; } = requireSpecialCharacter;
}

View File

@ -7,7 +7,7 @@ namespace Mirea.Api.Security.Common.Domain;
internal class RequestContextInfo
{
public RequestContextInfo(HttpContext context, CookieOptionsParameters cookieOptions)
public RequestContextInfo(HttpContext context, Model.CookieOptions cookieOptions)
{
var ipEntity = context.Connection.RemoteIpAddress;

View File

@ -1,7 +0,0 @@
namespace Mirea.Api.Security.Common.Domain;
public enum TwoFactorAuthenticator
{
None,
Totp
}

View File

@ -1,15 +0,0 @@
using System.Collections.Generic;
namespace Mirea.Api.Security.Common.Domain;
public class User
{
public required string Id { get; set; }
public required string Username { get; set; }
public required string Email { get; set; }
public required string PasswordHash { get; set; }
public required string Salt { get; set; }
public required TwoFactorAuthenticator TwoFactorAuthenticator { get; set; }
public string? SecondFactorToken { get; set; }
public Dictionary<OAuthProvider, OAuthUser>? OAuthProviders { get; set; }
}