using Grpc.Net.Client; using GrpcShared.DTO.Auth; using GrpcShared.Interfaces; using NemAnBlazor.Services.Interfaces; using ProtoBuf.Grpc.Client; using GrpcShared; using GrpcShared.DTO.User; using GrpcShared.DTO; using System.Security.Claims; using Microsoft.AspNetCore.Components.Authorization; using Blazored.SessionStorage; namespace NemAnBlazor.Services { public class AuthClientService : AuthenticationStateProvider, IAuthClientService { private IAuthService _serviceClient; private ISessionStorageService _sessionStorage; public AuthClientService(GrpcChannel grpcChannel, ISessionStorageService sessionStorage) { _serviceClient = grpcChannel.CreateGrpcService(); _sessionStorage = sessionStorage; } public async Task GetAccessToken(TokenRequest request) { return await _serviceClient.GetAccessToken(request); } public async Task GetAuthParams() { return await _serviceClient.GetAuthParams(); } public async Task GetUserInfo(TokenMessage token) { return await _serviceClient.GetUserInfo(token); } public override async Task GetAuthenticationStateAsync() { await Task.Delay(1500); string token = await _sessionStorage.GetItemAsync("token"); //token = "BQBMgFm6jnFNWWeZEMGIRP_f-ENPid7Kw8JubAyuWAe4JK0S1DPFGlaAdZ_Fey6ePkCnz8-cqC0oyRmrciWUy5ISUTQKDe8PTQn4iBRMYCgM0n4GnS1xAErHJcm4Vpu2TAngk-4vQUOfTQRcedNTfCaHKP4uFJgTlTI7JHGrtB-_EZLnFcZ2OQe31oFQIJ1wM3ZtvwnN"; if (token == null) return new AuthenticationState(new ClaimsPrincipal(new ClaimsIdentity())); var userInfo = await _serviceClient.GetUserInfo(new TokenMessage { Token = token }); List claims = new(); claims.Add(new Claim("email", userInfo.email!)); claims.Add(new Claim("id", userInfo.id!)); claims.Add(new Claim("name", userInfo.display_name!)); ClaimsIdentity identity = new(claims, "jwt"); //ClaimsIdentity identity = new(); ClaimsPrincipal user = new(identity); AuthenticationState state = new(user); NotifyAuthenticationStateChanged(Task.FromResult(state)); return state; } } }