public async Task DeleteIntegrationAsync(string id) { Integration integration = await _integrationRepository.GetIntegrationAsync(id, _operationContext.UserId); if (integration != null) { IIntegrationSystemService integrationSystemService = _integrationSystemServices.GetService(integration.Provider); await integrationSystemService.DeleteIntegrationAsync(_operationContext.UserId); await _integrationRepository.DeleteIntegrationAsync(id, _operationContext.UserId); await _eventPublisher.PublishAsync(CreateIntegrationDeletedEvent(integration)); } }
public async Task ProcessUpdateNotification(StravaUpdateNotification updateNotification) { StravaSubscription subscription = await _stravaSubscriptionService.GetSubscriptionAsync(); if (updateNotification.SubscriptionId != subscription.Id) { _logger.LogWarning($"Received Strava update for unrecognised subscription ID: {updateNotification.SubscriptionId}."); return; } Integration integration = await _integrationRepository.GetIntegrationAsync(Provider.Strava, updateNotification.OwnerId.ToString()); if (integration is null) { _logger.LogWarning($"Received Strava update for owner ID with no integration '{updateNotification.OwnerId}'."); return; } await _eventPublisher.PublishAsync( new IntegrationProviderUpdateEvent( id : Guid.NewGuid().ToString(), subject : updateNotification.OwnerId.ToString(), eventTime : _dateTimeProvider.UtcNow, dataVersion : EventConstants.EventDataVersion, data : new IntegrationProviderEventData { OperationId = _operationContext.OperationId, SourceSystem = EventConstants.IntegrationsApi, SubjectSystem = Provider.Strava.ToString(), Provider = Provider.Strava, ProviderData = updateNotification, UserId = integration.UserId })); }
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); }
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); }