public async Task <IActionResult> Index(ConfirmConsentsViewModel confirmConsentsViewModel, CancellationToken token) { try { var unprotectedUrl = _dataProtector.Unprotect(confirmConsentsViewModel.ReturnUrl); var query = unprotectedUrl.GetQueries().ToJObj(); var nameIdentifier = GetNameIdentifier(); var user = await _oauthUserRepository.FindOAuthUserByLogin(nameIdentifier, token); var consent = _userConsentFetcher.FetchFromAuthorizationRequest(user, query); if (consent == null) { consent = _userConsentFetcher.BuildFromAuthorizationRequest(query); var scopes = await _oauthScopeRepository.FindOAuthScopesByNames(consent.Scopes.Select(s => s.Name), token); consent.Scopes = scopes; user.Consents.Add(consent); await _oauthUserRepository.Update(user, token); await _oauthUserRepository.SaveChanges(token); } return(Redirect(unprotectedUrl)); } catch (CryptographicException) { ModelState.AddModelError("invalid_request", "invalid_request"); return(View(confirmConsentsViewModel)); } }
public async Task <IActionResult> Index(ConfirmConsentsViewModel confirmConsentsViewModel, CancellationToken token) { try { var unprotectedUrl = _dataProtector.Unprotect(confirmConsentsViewModel.ReturnUrl); var query = unprotectedUrl.GetQueries().ToJObj(); var claimName = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.NameIdentifier); var user = await _oauthUserRepository.FindOAuthUserByLogin(claimName.Value, token); var consent = _userConsentFetcher.FetchFromAuthorizationRequest(user, query); if (consent == null) { consent = _userConsentFetcher.BuildFromAuthorizationRequest(query); user.Consents.Add(consent); await _oAuthUserCommandRepository.Update(user, token); await _oAuthUserCommandRepository.SaveChanges(token); } return(Redirect(unprotectedUrl)); } catch (CryptographicException) { ModelState.AddModelError("invalid_request", "invalid_request"); return(View(confirmConsentsViewModel)); } }