コード例 #1
0
        public async Task <string> GetAccessTokenAsync(long ownerId)
        {
            Integration integration = await _integrationRepository.GetIntegrationAsync(Provider.Strava, ownerId.ToString());

            if (integration is null)
            {
                return(null);
            }

            var stravaIntegrationData = (StravaIntegrationData)integration.Data;

            if (stravaIntegrationData.AccessTokenExpiresUtc > _dateTimeProvider.UtcNow.AddMinutes(1))
            {
                return(stravaIntegrationData.AccessToken);
            }

            TokenResponse tokenResponse = await _stravaClient.RefreshTokenAsync(stravaIntegrationData.RefreshToken);

            stravaIntegrationData.AccessToken           = tokenResponse.AccessToken;
            stravaIntegrationData.AccessTokenExpiresUtc = _dateTimeProvider.UtcNow.AddSeconds(tokenResponse.ExpiresIn);
            stravaIntegrationData.RefreshToken          = tokenResponse.RefreshToken;

            await _integrationRepository.UpdateIntegrationAsync(
                integration.UserId,
                Provider.Strava,
                stravaIntegrationData);

            return(tokenResponse.AccessToken);
        }
コード例 #2
0
        public async Task <string> GetAccessTokenAsync(string userId)
        {
            Integration fitbitIntegration = await _integrationsRepository.GetIntegrationAsync(userId, Provider.Fitbit);

            if (fitbitIntegration == null)
            {
                throw new ArgumentException($"Fitbit integration not found for userId '{userId}'");
            }

            var fitbitIntegrationData = (FitbitIntegrationData)fitbitIntegration.Data;

            if (fitbitIntegrationData.AccessTokenExpiresUtc > _dateTimeProvider.UtcNow.AddMinutes(1))
            {
                return(fitbitIntegrationData.AccessToken);
            }

            TokenResponse tokenResponse = await _fitbitAuthenticationClient.RefreshTokenAsync(fitbitIntegrationData.RefreshToken);

            if (tokenResponse.IsError)
            {
                throw new Exception($"Failed to refresh Fitbit token: {tokenResponse.Error} - {tokenResponse.ErrorDescription}");
            }

            fitbitIntegrationData.AccessToken           = tokenResponse.AccessToken;
            fitbitIntegrationData.AccessTokenExpiresUtc = _dateTimeProvider.UtcNow.AddSeconds(tokenResponse.ExpiresIn);
            fitbitIntegrationData.RefreshToken          = tokenResponse.RefreshToken;
            await _integrationsRepository.UpdateIntegrationAsync(userId, Provider.Fitbit, fitbitIntegrationData);

            return(tokenResponse.AccessToken);
        }