public async Task SaveTokenSet(string athleteId, string accessToken, string refreshToken, DateTime accessTokenExpiresAtUtc) { AccessTokenTableEntity byAthelete = new AccessTokenTableEntity { AccessToken = accessToken, AccessTokenExpiryUtc = accessTokenExpiresAtUtc, AthleteId = athleteId, PartitionKey = AccessTokenTableEntity.GetPartitionKeyByAthleteId(athleteId), RefreshToken = refreshToken, RefreshTokenObtainedAtUtc = DateTime.UtcNow, RowKey = AccessTokenTableEntity.GetRowKeyByAthleteId() }; AccessTokenTableEntity byAccessToken = new AccessTokenTableEntity { AccessToken = accessToken, AccessTokenExpiryUtc = accessTokenExpiresAtUtc, AthleteId = athleteId, PartitionKey = AccessTokenTableEntity.GetPartitionKeyByAccessToken(accessToken), RefreshToken = refreshToken, RefreshTokenObtainedAtUtc = DateTime.UtcNow, RowKey = AccessTokenTableEntity.GetRowKeyByAccessToken() }; await Task.WhenAll( _byAtheleteIdTable.ExecuteAsync(TableOperation.InsertOrReplace(byAthelete)), _byAccessTokenTable.ExecuteAsync(TableOperation.InsertOrReplace(byAccessToken)) ); }
private static RepositoryEnrichedTokenSet CreatedEnrichedTokenSet(AccessTokenTableEntity tableEntity) { return(new RepositoryEnrichedTokenSet { AthleteId = tableEntity.AthleteId, AccessToken = tableEntity.AccessToken, ExpiresAtUtc = tableEntity.AccessTokenExpiryUtc, RefreshToken = tableEntity.RefreshToken }); }
public void Read_NotThrowsException_StateIsValid() { var accessTokenKey = new AccessTokenTableEntity { TokenId = "normal", }; var accessTokenRepository = new AccessTokenRepository(TestEnvironment.DBSettings); var accessToken = accessTokenRepository.Read(accessTokenKey); Assert.IsNotNull(accessToken); }
public void Update_NotThrowsException_StateIsValid() { var accessTokenKey = new AccessTokenTableEntity { TokenId = "normal", }; var accessTokenRepository = new AccessTokenRepository(TestEnvironment.DBSettings); var accessToken = accessTokenRepository.Read(accessTokenKey); accessToken.UpdateTime = DateUtil.Now; Assert.IsTrue(accessTokenRepository.Update(accessToken)); }
public async Task <RepositoryEnrichedTokenSet> GetForAccessToken(string accessToken) { TableResult tableResult = await _byAccessTokenTable.ExecuteAsync(TableOperation.Retrieve <AccessTokenTableEntity>( AccessTokenTableEntity.GetPartitionKeyByAccessToken(accessToken), AccessTokenTableEntity.GetRowKeyByAccessToken())); if (tableResult != null) { AccessTokenTableEntity tableEntity = (AccessTokenTableEntity)tableResult.Result; return(CreatedEnrichedTokenSet(tableEntity)); } return(null); }
public void Create_NotThrowsException_StateIsValid() { var now = DateUtil.Now; var accessToken = new AccessTokenTableEntity { TokenId = new string('X', 100), Name = new string('X', 100), Description = new string('X', 400), ApplicationId = Guid.NewGuid(), PrincipalType = PrincipalType.Application.ToString(), PrincipalId = Guid.NewGuid(), Scopes = new string('X', 8000), Status = AccessTokenStatus.NORMAL.ToString(), ExpiryTime = DateTimeOffset.MaxValue, CreateTime = DateTimeOffset.MaxValue, UpdateTime = DateTimeOffset.MaxValue, }; var accessTokenRepository = new AccessTokenRepository(TestEnvironment.DBSettings); accessTokenRepository.Create(accessToken); }
public async Task DeleteTokenSetForAccessToken(string existingAccessToken) { TableResult byAccessTokenTableResult = await _byAtheleteIdTable.ExecuteAsync(TableOperation.Retrieve <AccessTokenTableEntity>( AccessTokenTableEntity.GetPartitionKeyByAccessToken(existingAccessToken), AccessTokenTableEntity.GetRowKeyByAccessToken())); if (byAccessTokenTableResult != null) { AccessTokenTableEntity byAccessTokenTableEntity = (AccessTokenTableEntity)byAccessTokenTableResult.Result; TableResult byAthleteTableResult = await _byAtheleteIdTable.ExecuteAsync(TableOperation.Retrieve <AccessTokenTableEntity>( AccessTokenTableEntity.GetPartitionKeyByAthleteId(byAccessTokenTableEntity.AthleteId), AccessTokenTableEntity.GetRowKeyByAthleteId())); if (byAthleteTableResult != null) { AccessTokenTableEntity byAthleteTableEntity = (AccessTokenTableEntity)byAthleteTableResult.Result; await _byAtheleteIdTable.ExecuteAsync(TableOperation.Delete(byAthleteTableEntity)); } await _byAccessTokenTable.ExecuteAsync(TableOperation.Delete(byAccessTokenTableEntity)); } }
/// <inheritdoc/> public AccessToken CreateAccessToken(Guid applicationId, Guid accountId, IList <string> scopes) { if (applicationId == null || applicationId == Guid.Empty) { throw new ArgumentNullException(nameof(applicationId)); } if (accountId == null || accountId == Guid.Empty) { throw new ArgumentNullException(nameof(accountId)); } var application = _applicationRepository.Read(new ApplicationTableEntity { ApplicationId = applicationId }); if (application == null || application.Status != ApplicationStatus.NORMAL.ToString()) { throw new InvalidOperationException($"Application '{applicationId}' was not found."); } var account = _accountService.GetAccount(accountId); if (account == null) { throw new InvalidOperationException($"Account '{accountId}' was not found."); } if (account.Person == null || account.Person.Status != PersonStatus.NORMAL) { throw new InvalidOperationException($"Account '{accountId}' was not valid."); } var roleScopes = GetAccountRoleScopes(account.Roles); IList <string> accessTokenScopes = scopes; if (scopes == null || scopes.Count() == 0) { accessTokenScopes = roleScopes; } else { foreach (string scope in scopes) { if (!roleScopes.Contains(scope)) { throw new InvalidOperationException($"Scope '{scope}' was not included in the account role scope."); } } } var now = DateUtil.Now; var accessToken = new AccessTokenTableEntity { TokenId = StringUtil.CreateCode(), ApplicationId = applicationId, PrincipalType = PrincipalType.User.ToString(), PrincipalId = accountId, Name = accountId + " - " + now.ToISO8601(), Description = string.Empty, Scopes = JsonUtil.Serialize(accessTokenScopes), Status = AccessTokenStatus.NORMAL.ToString(), ExpiryTime = now.AddSeconds(_appSettings.AccessTokenExpiresIn), CreateTime = now, UpdateTime = now, }; _accessTokenRepository.Create(accessToken); var result = new AccessToken { Name = accessToken.Name, Description = accessToken.Description, Roles = account.Roles, Scopes = JsonUtil.Deserialize <List <string> >(accessToken.Scopes), TokenId = accessToken.TokenId, ApplicationId = accessToken.ApplicationId, PrincipalType = accessToken.PrincipalType, PrincipalId = accessToken.PrincipalId, ExpiryTime = accessToken.ExpiryTime, Status = (AccessTokenStatus)Enum.Parse(typeof(AccessTokenStatus), accessToken.Status), CreateTime = accessToken.CreateTime, UpdateTime = accessToken.UpdateTime, }; return(result); }