This commit is contained in:
2026-04-29 20:58:36 -04:00
parent 20f8a14bfb
commit 43bcf449fd
126 changed files with 524 additions and 394 deletions

View File

@@ -1,4 +1,4 @@
namespace Socialize.Modules.Identity.Configuration;
namespace Socialize.Api.Modules.Identity.Configuration;
public record JwtOptions
{

View File

@@ -1,4 +1,4 @@
namespace Socialize.Modules.Identity.Contracts;
namespace Socialize.Api.Modules.Identity.Contracts;
public interface IUserLookup
{

View File

@@ -1,4 +1,4 @@
namespace Socialize.Modules.Identity.Contracts;
namespace Socialize.Api.Modules.Identity.Contracts;
public static class KnownRoles
{

View File

@@ -1,4 +1,4 @@
namespace Socialize.Modules.Identity.Contracts;
namespace Socialize.Api.Modules.Identity.Contracts;
public record UserReference(
Guid Id,

View File

@@ -1,8 +1,8 @@
using System.Security.Claims;
using Socialize.Infrastructure.Security;
using Socialize.Modules.Identity.Models;
using Socialize.Api.Infrastructure.Security;
using Socialize.Api.Modules.Identity.Models;
namespace Socialize.Modules.Identity.Data;
namespace Socialize.Api.Modules.Identity.Data;
public class IdentityService(
UserManager userManager,

View File

@@ -1,6 +1,6 @@
using Microsoft.AspNetCore.Identity;
namespace Socialize.Modules.Identity.Data;
namespace Socialize.Api.Modules.Identity.Data;
public class Role : IdentityRole<Guid>
{

View File

@@ -1,7 +1,7 @@
using System.ComponentModel.DataAnnotations;
using Microsoft.AspNetCore.Identity;
namespace Socialize.Modules.Identity.Data;
namespace Socialize.Api.Modules.Identity.Data;
public class User : IdentityUser<Guid>
{

View File

@@ -1,7 +1,7 @@
using Microsoft.AspNetCore.Identity;
using Microsoft.Extensions.Options;
namespace Socialize.Modules.Identity.Data;
namespace Socialize.Api.Modules.Identity.Data;
public sealed class UserManager(
IUserStore<User> store,

View File

@@ -1,11 +1,11 @@
using Socialize.Data;
using Socialize.Modules.Identity.Configuration;
using Socialize.Modules.Identity.Contracts;
using Socialize.Modules.Identity.Data;
using Socialize.Modules.Identity.Services;
using Socialize.Api.Data;
using Socialize.Api.Modules.Identity.Configuration;
using Socialize.Api.Modules.Identity.Contracts;
using Socialize.Api.Modules.Identity.Data;
using Socialize.Api.Modules.Identity.Services;
using Microsoft.AspNetCore.Identity;
namespace Socialize.Modules.Identity;
namespace Socialize.Api.Modules.Identity;
public static class DependencyInjection
{

View File

@@ -1,8 +1,9 @@
using Socialize.Infrastructure.Security;
using Socialize.Modules.Identity.Data;
using FastEndpoints;
using Microsoft.AspNetCore.Identity;
using Socialize.Api.Infrastructure.Security;
using Socialize.Api.Modules.Identity.Data;
namespace Socialize.Modules.Identity.Handlers;
namespace Socialize.Api.Modules.Identity.Handlers;
[PublicAPI]
public record ChangeAddressRequest(

View File

@@ -1,8 +1,9 @@
using Socialize.Infrastructure.Security;
using Socialize.Modules.Identity.Data;
using FastEndpoints;
using Microsoft.AspNetCore.Identity;
using Socialize.Api.Infrastructure.Security;
using Socialize.Api.Modules.Identity.Data;
namespace Socialize.Modules.Identity.Handlers;
namespace Socialize.Api.Modules.Identity.Handlers;
[PublicAPI]
public record ChangeAliasRequest(

View File

@@ -1,8 +1,9 @@
using Socialize.Infrastructure.Security;
using Socialize.Modules.Identity.Data;
using FastEndpoints;
using Microsoft.AspNetCore.Identity;
using Socialize.Api.Infrastructure.Security;
using Socialize.Api.Modules.Identity.Data;
namespace Socialize.Modules.Identity.Handlers;
namespace Socialize.Api.Modules.Identity.Handlers;
[PublicAPI]
public record ChangeBirthDateRequest(

View File

@@ -1,8 +1,9 @@
using Socialize.Infrastructure.Security;
using Socialize.Modules.Identity.Data;
using FastEndpoints;
using Socialize.Api.Infrastructure.Security;
using Socialize.Api.Modules.Identity.Data;
using Microsoft.AspNetCore.Identity;
namespace Socialize.Modules.Identity.Handlers;
namespace Socialize.Api.Modules.Identity.Handlers;
[PublicAPI]
public record ChangeEmailRequest(

View File

@@ -1,8 +1,9 @@
using Socialize.Infrastructure.Security;
using Socialize.Modules.Identity.Data;
using FastEndpoints;
using Microsoft.AspNetCore.Identity;
using Socialize.Api.Infrastructure.Security;
using Socialize.Api.Modules.Identity.Data;
namespace Socialize.Modules.Identity.Handlers;
namespace Socialize.Api.Modules.Identity.Handlers;
[PublicAPI]
public record ChangeFullnameRequest(

View File

@@ -1,8 +1,9 @@
using Socialize.Infrastructure.Security;
using Socialize.Modules.Identity.Data;
using FastEndpoints;
using Microsoft.AspNetCore.Identity;
using Socialize.Api.Infrastructure.Security;
using Socialize.Api.Modules.Identity.Data;
namespace Socialize.Modules.Identity.Handlers;
namespace Socialize.Api.Modules.Identity.Handlers;
[PublicAPI]
public record ChangePhoneRequest(

View File

@@ -1,9 +1,10 @@
using Socialize.Infrastructure.BlobStorage.Contracts;
using Socialize.Infrastructure.Security;
using Socialize.Modules.Identity.Data;
using FastEndpoints;
using Microsoft.AspNetCore.Identity;
using Socialize.Api.Infrastructure.BlobStorage.Contracts;
using Socialize.Api.Infrastructure.Security;
using Socialize.Api.Modules.Identity.Data;
namespace Socialize.Modules.Identity.Handlers;
namespace Socialize.Api.Modules.Identity.Handlers;
[PublicAPI]
public record ChangePortraitRequest(

View File

@@ -1,10 +1,11 @@
using System.Web;
using Socialize.Infrastructure.Configuration;
using Socialize.Infrastructure.Emailer.Contracts;
using Socialize.Modules.Identity.Data;
using FastEndpoints;
using Microsoft.Extensions.Options;
using System.Web;
using Socialize.Api.Infrastructure.Configuration;
using Socialize.Api.Infrastructure.Emailer.Contracts;
using Socialize.Api.Modules.Identity.Data;
namespace Socialize.Modules.Identity.Handlers;
namespace Socialize.Api.Modules.Identity.Handlers;
[PublicAPI]
public record ForgotPasswordRequest(
@@ -53,29 +54,29 @@ public class ForgotPasswordHandler(
string message = $"""
<div style="font-family: Arial, sans-serif; max-width: 600px; margin: 0 auto; padding: 20px; color: #333;">
<h1 style="color: #2c3e50; margin-bottom: 20px;">Reset Your Socialize Password</h1>
<p style="font-size: 16px; line-height: 1.5; margin-bottom: 25px;">
Please click the button below to reset your password:
</p>
<div style="text-align: center; margin: 30px 0;">
<a href='{resetLink}'
style="background-color: #3498db;
color: white;
text-decoration: none;
padding: 12px 24px;
border-radius: 4px;
font-weight: bold;
display: inline-block;
<a href='{resetLink}'
style="background-color: #3498db;
color: white;
text-decoration: none;
padding: 12px 24px;
border-radius: 4px;
font-weight: bold;
display: inline-block;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);">
Reset Password
</a>
</div>
<p style="font-size: 14px; color: #7f8c8d; margin-top: 30px;">
If you did not request a password reset, please ignore this email.
</p>
<p style="font-size: 14px; color: #7f8c8d; margin-top: 20px;">
If the button doesn't work, you can copy and paste this link into your browser:
<br>

View File

@@ -1,9 +1,10 @@
using FastEndpoints;
using System.Security.Claims;
using Socialize.Modules.Identity.Data;
using Socialize.Modules.Identity.Models;
using Socialize.Infrastructure.Security;
using Socialize.Api.Modules.Identity.Data;
using Socialize.Api.Modules.Identity.Models;
using Socialize.Api.Infrastructure.Security;
namespace Socialize.Modules.Identity.Handlers;
namespace Socialize.Api.Modules.Identity.Handlers;
[PublicAPI]
public class GetCurrentUserQueryHandler(

View File

@@ -1,8 +1,9 @@
using Socialize.Infrastructure.BlobStorage.Contracts;
using Socialize.Modules.Identity.Data;
using Socialize.Modules.Identity.Models;
using FastEndpoints;
using Socialize.Api.Infrastructure.BlobStorage.Contracts;
using Socialize.Api.Modules.Identity.Data;
using Socialize.Api.Modules.Identity.Models;
namespace Socialize.Modules.Identity.Handlers;
namespace Socialize.Api.Modules.Identity.Handlers;
[PublicAPI]
public class GetCurrentUserPortraitHandler(

View File

@@ -1,10 +1,11 @@
using Socialize.Infrastructure.Security;
using Socialize.Modules.Identity.Data;
using Socialize.Modules.Identity.Configuration;
using Socialize.Modules.Identity.Services;
using FastEndpoints;
using Microsoft.Extensions.Options;
using Socialize.Api.Infrastructure.Security;
using Socialize.Api.Modules.Identity.Data;
using Socialize.Api.Modules.Identity.Configuration;
using Socialize.Api.Modules.Identity.Services;
namespace Socialize.Modules.Identity.Handlers;
namespace Socialize.Api.Modules.Identity.Handlers;
[PublicAPI]
public record LoginRequest(

View File

@@ -1,13 +1,14 @@
using System.Text.Json;
using System.Text.Json.Serialization;
using Socialize.Infrastructure.Security;
using Socialize.Modules.Identity.Configuration;
using Socialize.Modules.Identity.Data;
using Socialize.Modules.Identity.Services;
using FastEndpoints;
using Microsoft.AspNetCore.Identity;
using Microsoft.Extensions.Options;
using System.Text.Json;
using System.Text.Json.Serialization;
using Socialize.Api.Infrastructure.Security;
using Socialize.Api.Modules.Identity.Configuration;
using Socialize.Api.Modules.Identity.Data;
using Socialize.Api.Modules.Identity.Services;
namespace Socialize.Modules.Identity.Handlers;
namespace Socialize.Api.Modules.Identity.Handlers;
[PublicAPI]
public class FacebookUserInfo

View File

@@ -1,13 +1,14 @@
using System.Text.Json;
using System.Text.Json.Serialization;
using Socialize.Infrastructure.Security;
using Socialize.Modules.Identity.Configuration;
using Socialize.Modules.Identity.Data;
using Socialize.Modules.Identity.Services;
using FastEndpoints;
using Microsoft.AspNetCore.Identity;
using Microsoft.Extensions.Options;
using System.Text.Json;
using System.Text.Json.Serialization;
using Socialize.Api.Infrastructure.Security;
using Socialize.Api.Modules.Identity.Configuration;
using Socialize.Api.Modules.Identity.Data;
using Socialize.Api.Modules.Identity.Services;
namespace Socialize.Modules.Identity.Handlers;
namespace Socialize.Api.Modules.Identity.Handlers;
internal class GoogleToken
{

View File

@@ -1,10 +1,12 @@
using Socialize.Infrastructure.Security;
using Socialize.Modules.Identity.Configuration;
using Socialize.Modules.Identity.Data;
using Socialize.Modules.Identity.Services;
using FastEndpoints;
using Microsoft.Extensions.Options;
using Microsoft.EntityFrameworkCore;
using Socialize.Api.Infrastructure.Security;
using Socialize.Api.Modules.Identity.Configuration;
using Socialize.Api.Modules.Identity.Data;
using Socialize.Api.Modules.Identity.Services;
namespace Socialize.Modules.Identity.Handlers;
namespace Socialize.Api.Modules.Identity.Handlers;
[PublicAPI]
public record RefreshTokenRequest(

View File

@@ -1,8 +1,9 @@
using Socialize.Modules.Identity.Data;
using Socialize.Modules.Identity.Services;
using FastEndpoints;
using Microsoft.AspNetCore.Identity;
using Socialize.Api.Modules.Identity.Data;
using Socialize.Api.Modules.Identity.Services;
namespace Socialize.Modules.Identity.Handlers;
namespace Socialize.Api.Modules.Identity.Handlers;
[PublicAPI]
public record RegisterRequest(

View File

@@ -1,7 +1,8 @@
using Socialize.Modules.Identity.Data;
using Socialize.Modules.Identity.Services;
using FastEndpoints;
using Socialize.Api.Modules.Identity.Data;
using Socialize.Api.Modules.Identity.Services;
namespace Socialize.Modules.Identity.Handlers;
namespace Socialize.Api.Modules.Identity.Handlers;
[PublicAPI]
public record ResendVerificationRequest(

View File

@@ -1,7 +1,8 @@
using Socialize.Modules.Identity.Data;
using FastEndpoints;
using Microsoft.AspNetCore.Identity;
using Socialize.Api.Modules.Identity.Data;
namespace Socialize.Modules.Identity.Handlers;
namespace Socialize.Api.Modules.Identity.Handlers;
[PublicAPI]
public record ResetPasswordRequest(

View File

@@ -1,8 +1,9 @@
using Socialize.Infrastructure.Security;
using Socialize.Modules.Identity.Data;
using FastEndpoints;
using Microsoft.AspNetCore.Identity;
using Socialize.Api.Infrastructure.Security;
using Socialize.Api.Modules.Identity.Data;
namespace Socialize.Modules.Identity.Handlers;
namespace Socialize.Api.Modules.Identity.Handlers;
[PublicAPI]
public record SetPasswordRequest(

View File

@@ -1,8 +1,9 @@
using System.Web;
using Socialize.Modules.Identity.Data;
using FastEndpoints;
using Microsoft.AspNetCore.Identity;
using System.Web;
using Socialize.Api.Modules.Identity.Data;
namespace Socialize.Modules.Identity.Handlers;
namespace Socialize.Api.Modules.Identity.Handlers;
[PublicAPI]
public record VerifyEmailRequest(

View File

@@ -1,7 +1,7 @@
using Socialize.Modules.Identity.Models;
using Socialize.Api.Modules.Identity.Models;
using Microsoft.AspNetCore.Identity;
namespace Socialize.Modules.Identity;
namespace Socialize.Api.Modules.Identity;
public static class IdentityResultExtensions
{

View File

@@ -1,4 +1,4 @@
namespace Socialize.Modules.Identity.Models;
namespace Socialize.Api.Modules.Identity.Models;
public class Result(
bool succeeded,

View File

@@ -1,4 +1,4 @@
namespace Socialize.Modules.Identity.Models;
namespace Socialize.Api.Modules.Identity.Models;
public class RoleModel
{

View File

@@ -1,4 +1,4 @@
namespace Socialize.Modules.Identity.Models;
namespace Socialize.Api.Modules.Identity.Models;
public class UserDto
{

View File

@@ -1,4 +1,4 @@
namespace Socialize.Modules.Identity.Models;
namespace Socialize.Api.Modules.Identity.Models;
public class UserModel
{

View File

@@ -1,11 +1,11 @@
using System.Security.Claims;
using Socialize.Infrastructure.Security;
using Socialize.Modules.Identity.Configuration;
using Socialize.Modules.Identity.Contracts;
using Socialize.Modules.Identity.Data;
using Socialize.Api.Infrastructure.Security;
using Socialize.Api.Modules.Identity.Configuration;
using Socialize.Api.Modules.Identity.Contracts;
using Socialize.Api.Modules.Identity.Data;
using Microsoft.Extensions.Options;
namespace Socialize.Modules.Identity.Services;
namespace Socialize.Api.Modules.Identity.Services;
public sealed class AccessTokenFactory(
UserManager userManager,

View File

@@ -1,10 +1,10 @@
using System.Web;
using Socialize.Infrastructure.Configuration;
using Socialize.Infrastructure.Emailer.Contracts;
using Socialize.Modules.Identity.Data;
using Socialize.Api.Infrastructure.Configuration;
using Socialize.Api.Infrastructure.Emailer.Contracts;
using Socialize.Api.Modules.Identity.Data;
using Microsoft.Extensions.Options;
namespace Socialize.Modules.Identity.Services;
namespace Socialize.Api.Modules.Identity.Services;
[PublicAPI]
public sealed class EmailVerificationService(

View File

@@ -1,7 +1,7 @@
using Socialize.Modules.Identity.Contracts;
using Socialize.Modules.Identity.Data;
using Socialize.Api.Modules.Identity.Contracts;
using Socialize.Api.Modules.Identity.Data;
namespace Socialize.Modules.Identity.Services;
namespace Socialize.Api.Modules.Identity.Services;
public sealed class UserLookup(
UserManager userManager)