32 lines
1.0 KiB
C#
32 lines
1.0 KiB
C#
using System.Security.Claims;
|
|
using DBConnection.Repositories.Interfaces;
|
|
using Microsoft.AspNetCore.Mvc.Filters;
|
|
using Treestar.Shared.Models.DBDomain;
|
|
|
|
namespace WebNovelPortalAPI.Middleware;
|
|
|
|
public class EnsureUserCreatedMiddleware : IMiddleware
|
|
{
|
|
private readonly IUserRepository _userRepository;
|
|
public const string UserIdItemName = "userId";
|
|
public EnsureUserCreatedMiddleware(IUserRepository userRepository)
|
|
{
|
|
_userRepository = userRepository;
|
|
}
|
|
|
|
public async Task InvokeAsync(HttpContext context, RequestDelegate next)
|
|
{
|
|
if (!context.User.Identity.IsAuthenticated)
|
|
{
|
|
await next(context);
|
|
return;
|
|
}
|
|
var userEmail = context.User.Claims.FirstOrDefault(i => i.Type == ClaimTypes.Email)?.Value;
|
|
var dbUser = await _userRepository.GetIncluded(u => u.Email == userEmail) ?? await _userRepository.Upsert(new User
|
|
{
|
|
Email = userEmail
|
|
});
|
|
context.Items[UserIdItemName] = dbUser.Id;
|
|
await next(context);
|
|
}
|
|
} |