| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- //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<AuthService> _logger;
- private readonly CodeRequest _params;
- private readonly IHttpClientFactory _httpClientFactory;
- //private ISessionStorageService _sessionStorageService;
- public AuthService(ILogger<AuthService> logger, IOptions<CodeRequest> options, IHttpClientFactory httpClientFactory)
- {
- _logger = logger;
- _params = options.Value;
- _httpClientFactory = httpClientFactory;
- }
-
-
- public async Task<TokenResponse> 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.redirect_uri = 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<string, string>();
- requestBody["grant_type"] = tokenRequest.grant_type;
- requestBody["code"] = tokenRequest.code!;
- requestBody["redirect_uri"] = tokenRequest.redirect_uri!;
-
- //REQUEST
- var response = await http.PostAsync(url, new FormUrlEncodedContent(requestBody));
-
- var contents = JsonConvert.DeserializeObject<TokenResponse>(await response.Content.ReadAsStringAsync());
- return new TokenResponse
- {
- access_token = contents!.access_token,
- refresh_token = contents!.refresh_token,
- expires_in = contents!.expires_in
- };
- }
-
- public async Task<CodeRequest> 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<UserInfoResponse> GetUserInfo(TokenMessage tokenM)
- {
- //var des = JsonConvert.DeserializeObject<TokenMessage>(tokenM);
- //var tokenStorage = _sessionStorageService.GetItemAsync<string>("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<UserInfoResponse>(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<UserInfoResponse>(await response.Content.ReadAsStringAsync());
-
- //return await Task.FromResult(user!);
- }
- }
- }
|