using Gameboard.ShogiUI.Sockets.Extensions; using Gameboard.ShogiUI.Sockets.Repositories; using Microsoft.AspNetCore.Authentication; using System.Security.Claims; namespace Gameboard.ShogiUI.Sockets { /// /// Standardizes the claims from third party issuers. Also registers new msal users in the database. /// public class ShogiUserClaimsTransformer : IClaimsTransformation { private readonly IGameboardRepository gameboardRepository; public ShogiUserClaimsTransformer(IGameboardRepository gameboardRepository) { this.gameboardRepository = gameboardRepository; } public async Task TransformAsync(ClaimsPrincipal principal) { var id = principal.UserId(); if (!string.IsNullOrWhiteSpace(id)) { var user = await gameboardRepository.ReadUser(id); if (user == null) { var newUser = principal.IsMicrosoft() ? Models.User.CreateMsalUser(id) : Models.User.CreateGuestUser(id); await gameboardRepository.CreateUser(newUser); user = newUser; } if (user != null) { return new ClaimsPrincipal(user.CreateClaimsIdentity()); } } return principal; } } }