private async static Task <Authorization> PostAccessTokenAsync(DataAdapter dataAdapter, string code, CancellationToken cancellationToken = default) { _postAccessTokenParameters = new Dictionary <string, string>() { { "grant_type", "authorization_code" }, { "refresh_token", string.Empty }, { "access_type", "offline" }, { "code", code }, { "client_id", $"{dataAdapter.Settings["ApiKey"]}@AMER.OAUTHAP" }, { "redirect_uri", "https://localhost:44328/api/authorization/postaccesstoken" } }; _json = await Requester.QueueRequestAsync(Enums.HttpVerb.Post, dataAdapter.Settings["AuthenticationUri"], new FormUrlEncodedContent(_postAccessTokenParameters), cancellationToken); _authorizationCode = JsonSerializer.Deserialize <AuthorizationCode>(_json); _authorization = new Authorization() { AccessToken = _authorizationCode.access_token, RefreshToken = _authorizationCode.refresh_token, TokenType = _authorizationCode.token_type, ExpiresIn = _authorizationCode.expires_in, Scope = _authorizationCode.scope, RefreshTokenExpiresIn = _authorizationCode.refresh_token_expires_in, Updated = DateTime.UtcNow }; return(_authorization); }
public async static Task <Authorization> UpdateTokenAsync(this DataAdapter dataAdapter, string code, CancellationToken cancellationToken = default) { if (code == null) { try { _authorization = dataAdapter.StocksDbContext.Authorization.Single(); if (!_authorization.IsRefreshTokenExpired()) { if (_authorization.IsAccessTokenExpired()) { _authorization = await PostRefreshTokenAsync(dataAdapter, cancellationToken); dataAdapter.StocksDbContext.Update(_authorization); } } else { throw new TimeoutException("Refresh Token Expired"); } } catch { throw new NullReferenceException("Token Does Not Exist"); } } else { _authorization = await PostAccessTokenAsync(dataAdapter, code, cancellationToken); dataAdapter.StocksDbContext.Update(_authorization); } await dataAdapter.StocksDbContext.SaveChangesAsync(cancellationToken); return(_authorization); }
private async static Task <Authorization> PostRefreshTokenAsync(DataAdapter dataAdapter, CancellationToken cancellationToken = default) { _authorization = dataAdapter.StocksDbContext.Authorization.Single(); _postAccessTokenParameters = new Dictionary <string, string>() { { "grant_type", "refresh_token" }, { "refresh_token", _authorization.RefreshToken }, { "access_type", string.Empty }, { "code", string.Empty }, { "client_id", $"{dataAdapter.Settings["ApiKey"]}@AMER.OAUTHAP" }, { "redirect_uri", string.Empty } }; _json = await Requester.QueueRequestAsync(Enums.HttpVerb.Post, dataAdapter.Settings["AuthenticationUri"], new FormUrlEncodedContent(_postAccessTokenParameters), cancellationToken); _refreshToken = JsonSerializer.Deserialize <RefreshToken>(_json); _authorization.AccessToken = _refreshToken.access_token; _authorization.Scope = _refreshToken.scope; _authorization.ExpiresIn = _refreshToken.expires_in; _authorization.TokenType = _refreshToken.token_type; _authorization.Updated = DateTime.UtcNow; return(_authorization); }