/// <inheritdoc /> /// <summary> /// Authorize /// </summary> /// <returns></returns> public async Task <ResultModel> AuthorizeAsync(Guid?userId, bool reset = false) { var response = new ResultModel(); var shouldRevokeToken = false; try { using (var stream = new FileStream(Path.Combine(AppContext.BaseDirectory, "googleCredentials.json"), FileMode.Open, FileAccess.Read)) { if (reset) { var dbToken = await _tokenProvider.GetTokenAsync <TokenResponse>(nameof(GoogleCalendarProvider), userId); shouldRevokeToken = dbToken.IsSuccess; } _credential = await GoogleWebAuthorizationBroker.AuthorizeAsync( GoogleClientSecrets.Load(stream).Secrets, Scopes, userId.ToString(), CancellationToken.None, new GoogleDataStore(_tokenProvider)); if (_credential.Token.IsExpired(_credential.Flow.Clock)) { await _credential.RefreshTokenAsync(CancellationToken.None); } if (shouldRevokeToken) { var revokeResponse = await _credential.RevokeTokenAsync(CancellationToken.None); if (revokeResponse) { return(await AuthorizeAsync(userId)); } } response.IsSuccess = true; } InitServices(); Authorized = true; } catch (Exception e) { response.Errors.Add(new ErrorModel(string.Empty, e.Message)); } return(response); }
/// <summary> /// Get token /// </summary> /// <returns></returns> public async Task <string> GetTokenAsync() { //TODO: Check if token is expired if (_tokens.Any()) { return(_tokens.FirstOrDefault(x => x.Name.Equals("access_token"))?.Value); } var dbTokens = await _externalTokenProvider.GetTokenAsync <IEnumerable <AuthenticationToken> >(nameof(OutlookCalendarProvider), _userId); if (!dbTokens.IsSuccess) { return(null); } var tokenRequest = dbTokens.Result.FirstOrDefault(x => x.Name.Equals("access_token")); if (dbTokens.Result.Any()) { _tokens = dbTokens.Result; } return(tokenRequest?.Value); }
/// <inheritdoc /> /// <summary> /// Get token /// </summary> /// <typeparam name="T"></typeparam> /// <param name="key"></param> /// <returns></returns> public async Task <T> GetAsync <T>(string key) { var tokenRequest = await _tokenProvider.GetTokenAsync <TokenResponse>(nameof(GoogleCalendarProvider), key.ToGuid()); return(tokenRequest.IsSuccess ? tokenRequest.Result.Adapt <T>() : default);