public async Task <bool> Execute(string consentId) { if (string.IsNullOrWhiteSpace(consentId)) { throw new ArgumentNullException(consentId); } var consentToBeDeleted = new Common.Models.Consent { Id = consentId }; return(await _consentRepository.DeleteAsync(consentToBeDeleted)); }
/// <summary> /// This method is executed when the user confirm the consent /// 1). If there's already consent confirmed in the past by the resource owner /// 1).* then we generate an authorization code and redirects to the callback. /// 2). If there's no consent then we insert it and the authorization code is returned /// 2°.* to the callback url. /// </summary> /// <param name="authorizationParameter">Authorization code grant-type</param> /// <param name="claimsPrincipal">Resource owner's claims</param> /// <returns>Redirects the authorization code to the callback.</returns> public async Task <ActionResult> Execute( AuthorizationParameter authorizationParameter, ClaimsPrincipal claimsPrincipal) { if (authorizationParameter == null) { throw new ArgumentNullException(nameof(authorizationParameter)); } if (claimsPrincipal == null || claimsPrincipal.Identity == null) { throw new ArgumentNullException(nameof(claimsPrincipal)); } var client = await _clientRepository.GetClientByIdAsync(authorizationParameter.ClientId); if (client == null) { throw new InvalidOperationException(string.Format("the client id {0} doesn't exist", authorizationParameter.ClientId)); } var subject = claimsPrincipal.GetSubject(); Common.Models.Consent assignedConsent = await _consentHelper.GetConfirmedConsentsAsync(subject, authorizationParameter); // Insert a new consent. if (assignedConsent == null) { var claimsParameter = authorizationParameter.Claims; if (claimsParameter.IsAnyIdentityTokenClaimParameter() || claimsParameter.IsAnyUserInfoClaimParameter()) { // A consent can be given to a set of claims assignedConsent = new Common.Models.Consent { Client = client, ResourceOwner = await _authenticateResourceOwnerService.AuthenticateResourceOwnerAsync(subject), Claims = claimsParameter.GetClaimNames() }; } else { // A consent can be given to a set of scopes assignedConsent = new Common.Models.Consent { Client = client, GrantedScopes = (await GetScopes(authorizationParameter.Scope)).ToList(), ResourceOwner = await _authenticateResourceOwnerService.AuthenticateResourceOwnerAsync(subject), }; } // A consent can be given to a set of claims await _consentRepository.InsertAsync(assignedConsent); _simpleIdentityServerEventSource.GiveConsent(subject, authorizationParameter.ClientId, assignedConsent.Id); } var result = _actionResultFactory.CreateAnEmptyActionResultWithRedirectionToCallBackUrl(); await _generateAuthorizationResponse.ExecuteAsync(result, authorizationParameter, claimsPrincipal, client); // If redirect to the callback and the responde mode has not been set. if (result.Type == TypeActionResult.RedirectToCallBackUrl) { var responseMode = authorizationParameter.ResponseMode; if (responseMode == ResponseMode.None) { var responseTypes = _parameterParserHelper.ParseResponseTypes(authorizationParameter.ResponseType); var authorizationFlow = GetAuthorizationFlow(responseTypes, authorizationParameter.State); responseMode = GetResponseMode(authorizationFlow); } result.RedirectInstruction.ResponseMode = responseMode; } return(result); }