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.LocalStorage; namespace NemAnBlazor.Services { public class AuthClientService : AuthenticationStateProvider, IAuthClientService { private IAuthService _serviceClient; private ILocalStorageService _localStorage; public AuthClientService(GrpcChannel grpcChannel, ILocalStorageService sessionStorage) { _serviceClient = grpcChannel.CreateGrpcService(); _localStorage = sessionStorage; } public async Task GetAccessToken(TokenRequest request) { return await _serviceClient.GetAccessToken(request); } //public override async Task GetAuthenticationStateAsync() //{ // string token = await _localStorage.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; //} public async Task GetAuthParams() { return await _serviceClient.GetAuthParams(); } public async Task GetUserInfo(TokenMessage token) { return await _serviceClient.GetUserInfo(token); } public override async Task GetAuthenticationStateAsync() { //return new AuthenticationState(new ClaimsPrincipal(new ClaimsIdentity())); await Task.Delay(500); string token = await _localStorage.GetItemAsync("token"); string refreshT = await _localStorage.GetItemAsync("refresh_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, RefreshToken = refreshT }); List claims = new(); claims.Add(new Claim("email", userInfo.Email!)); claims.Add(new Claim("id", userInfo.Id!)); claims.Add(new Claim("name", userInfo.DisplayName!)); ClaimsIdentity identity = new(claims, "jwt"); //ClaimsIdentity identity = new(); ClaimsPrincipal user = new(identity); AuthenticationState state = new(user); // NotifyAuthenticationStateChanged(Task.FromResult(state)); return state; } public async Task RefreshAccessToken(TokenMessage token) { return await _serviceClient.RefreshAccessToken(token); } } }