//using IdentityProvider.Protos.AuthService; using Blazored.SessionStorage; using Grpc.Net.Client; using GrpcShared; using GrpcShared.DTO; using GrpcShared.DTO.Auth; using GrpcShared.DTO.User; using GrpcShared.Interfaces; using Microsoft.Extensions.Options; using Microsoft.Net.Http.Headers; using Newtonsoft.Json; using System.Diagnostics; using System.IdentityModel.Tokens.Jwt; using System.IO; using System.Net.Http.Headers; using System.Text; using System.Text.Json; namespace IdentityProvider.Services { public class AuthService : IAuthService { private readonly ILogger _logger; private readonly CodeRequest _params; private readonly IHttpClientFactory _httpClientFactory; //private ISessionStorageService _sessionStorageService; public AuthService(ILogger logger, IOptions options, IHttpClientFactory httpClientFactory) { _logger = logger; _params = options.Value; _httpClientFactory = httpClientFactory; } public async Task GetAccessToken(TokenRequest tokenRequest) { var http = _httpClientFactory.CreateClient(); string url = "https://accounts.spotify.com/api/token"; http.BaseAddress = new Uri(url); //get client id and secret, and redirect uri from appsettings, convert to base64 and set as header var secrets = await GetAuthParams(); byte[] contentType = Encoding.UTF8.GetBytes($"{secrets.ClientId}:{secrets.ClientSecret}"); tokenRequest.RedirectUri = secrets.RedirectURI; //AUTHORIZATION HEADER http.DefaultRequestHeaders.Add(HeaderNames.Authorization, "Basic " + Convert.ToBase64String(contentType)); ////ACCEPT HEADER //http.DefaultRequestHeaders.Accept.Add( // new MediaTypeWithQualityHeaderValue("application/json")); //BODY PARAMS var requestBody = new Dictionary(); requestBody["grant_type"] = tokenRequest.GrantType; requestBody["code"] = tokenRequest.Code!; requestBody["redirect_uri"] = tokenRequest.RedirectUri!; //REQUEST var response = await http.PostAsync(url, new FormUrlEncodedContent(requestBody)); var contents = JsonConvert.DeserializeObject(await response.Content.ReadAsStringAsync()); return contents; } public async Task GetAuthParams() { var authParams = new CodeRequest { ClientId = _params.ClientId, RedirectURI = _params.RedirectURI, Scope = _params.Scope, ClientSecret = _params.ClientSecret }; return await Task.FromResult(authParams); } public async Task GetUserInfo(TokenMessage tokenM) { //var des = JsonConvert.DeserializeObject(tokenM); //var tokenStorage = _sessionStorageService.GetItemAsync("token"); //hc.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", authToken); //var response = hc.GetAsync(userInfoUrl).Result; //dynamic userInfo = response.Content.ReadAsAsync().Result; //return userInfo; var http = _httpClientFactory.CreateClient(); http.BaseAddress = new Uri("https://api.spotify.com/v1/me"); http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", tokenM.Token); var response = http.GetAsync(http.BaseAddress).Result; var userInfo = JsonConvert.DeserializeObject(await response.Content.ReadAsStringAsync())!; return userInfo; //http.DefaultRequestHeaders.Add(HeaderNames.Authorization, "Bearer " + token.Token); //var response = await http.GetAsync(http.BaseAddress + "me"); //var user = JsonConvert.DeserializeObject(await response.Content.ReadAsStringAsync()); //return await Task.FromResult(user!); } } }