public async Task <GetProfileResponse> Handle(GetProfileRequest request, CancellationToken cancellationToken) { var user = await _userAccountRepository.GetUserAccountAsync(request.User); var userFeeds = await _userFeedRepository.GetAsync(user); var apiAccesses = await _userAccountApiAccessRepository.GetAsync(user); var externalApiAccessModels = new List <ExternalApiAccessModel>(); foreach (var apiAccess in apiAccesses) { var mostRecentToken = await _userAccountTokenRepository.GetLatestAsync(apiAccess); var lastAccessed = mostRecentToken?.CreatedDateTime ?? apiAccess.CreatedDateTime; externalApiAccessModels.Add(new ExternalApiAccessModel(apiAccess.UserAccountApiAccessId, apiAccess.ApiClient.DisplayName, apiAccess.CreatedDateTime, lastAccessed, apiAccess.RevokedDateTime)); } var externalApiClients = await _apiClientRepository.GetAsync(user); return(new GetProfileResponse( userFeeds.Select(uf => new FeedModel(uf.UserFeedId, uf.UserFeedIdentifier, uf.CreatedDateTime, uf.FeedType, uf.ItemDisplay)), externalApiAccessModels.OrderByDescending(a => a.RevokedDateTime ?? DateTime.MaxValue).ThenByDescending(a => a.LastAccessedDateTime), externalApiClients.OrderBy(a => a.DisplayName).Select(a => new ExternalApiClientModel( a.ApiClientId, a.DisplayName, a.AppKey, a.RedirectUri, a.IsEnabled )))); }
public async Task <UserAccount> GetUserAccountAsync(ClaimsPrincipal user) { var userAccountToken = await _userAccountTokenRepository.GetAsync(user.Identity.Name); if (userAccountToken == null) { _logger.LogInformation($"No user account token found for: {user.Identity.Name}"); return(null); } var userAccountApiAccess = await _userAccountApiAccessRepository.GetAsync(userAccountToken.UserAccountApiAccessId); if (userAccountApiAccess == null) { _logger.LogInformation($"No user account api access found with id {userAccountToken.UserAccountApiAccessId}"); return(null); } if (userAccountApiAccess.RevokedDateTime != null) { _logger.LogInformation($"User account api access {userAccountToken.UserAccountApiAccessId} has been revoked"); return(null); } return(await _userAccountRepository.GetAsync(userAccountApiAccess.UserAccountId)); }
public async Task <bool> Handle(RevokeExternalApiAccessRequest request, CancellationToken cancellationToken) { var user = await _userAccountRepository.GetUserAccountAsync(request.User); var userAccountApiAccess = await _userAccountApiAccessRepository.GetAsync(request.UserAccountApiAccessId); if (userAccountApiAccess == null) { _logger.LogInformation($"Could not find user account api access {request.UserAccountApiAccessId}"); return(false); } if (userAccountApiAccess.UserAccountId != user.UserAccountId) { _logger.LogInformation($"User account on api access {userAccountApiAccess.UserAccountId} does not match request user {user.UserAccountId}"); return(false); } userAccountApiAccess.RevokedDateTime = DateTime.UtcNow; await _userAccountApiAccessRepository.UpdateAsync(userAccountApiAccess); return(true); }