public async Task <OperationResult <AddSecretToClientResult> > AddSecretToClient( int clientRecordId, string description, List <string> authorisedOrgIds) { var isAuthorisedToOrg = await _organisationContext.Organisations .AnyAsync(x => x.OrganisationRoleUserAssignedClients.Any(y => y.RoleUserAssignedClient.Client.Id == clientRecordId) && authorisedOrgIds.Any(y => y.Equals(x.ExternalId))); if (!isAuthorisedToOrg) { _logger.LogError($"Not authorised to add Secret to Client with Id: {clientRecordId}."); return(OperationResult <AddSecretToClientResult> .Error(new AddSecretToClientResult(), OperationErrors.Unauthorised)); } var client = await _organisationContext.Clients .Include(x => x.ClientSecrets) .FirstOrDefaultAsync(x => x.Id == clientRecordId); var result = new AddSecretToClientResult( client.Id, client.ClientId, string.Empty, description); if (client.ClientSecrets.Count() >= 2) { return(OperationResult <AddSecretToClientResult> .Error(result, OperationErrors.ClientSecretCountLimitReached)); } (var plainText, var secret) = GenerateSecret(description); var newSecret = new IdentityServer4.EntityFramework.Entities.ClientSecret { Value = secret.Value, Description = secret.Description, Type = secret.Type, Created = DateTime.UtcNow }; client.ClientSecrets.Add(newSecret); await _organisationContext.SaveChangesAsync(); result.Secret = plainText; return(OperationResult <AddSecretToClientResult> .Success(result)); }
public async Task <OperationResult> DeleteClientSecretByIdAsync(int id, List <string> authorisedOrgIds) { var isAuthorisedToOrg = await _organisationContext.Organisations .AnyAsync(x => x.OrganisationRoleUserAssignedClients.Any(y => y.RoleUserAssignedClient.Client.ClientSecrets.Any(z => z.Id == id)) && authorisedOrgIds.Any(y => y.Equals(x.ExternalId))); if (!isAuthorisedToOrg) { _logger.LogError($"Not authorised to delete Client Secret Id: {id}."); return(OperationResult.Error(OperationErrors.Unauthorised)); } var secret = new IdentityServer4.EntityFramework.Entities.ClientSecret { Id = id }; var clientsDbSet = _organisationContext.Set <IdentityServer4.EntityFramework.Entities.ClientSecret>(); clientsDbSet.Attach(secret); clientsDbSet.Remove(secret); await _organisationContext.SaveChangesAsync(); return(OperationResult.Success()); }