private DiscourseSignInResult BuildResult(User user) { var discourse = new DiscourseSignInRequest { Nonce = "123", Redirect = _discourseUrl, User = user }; var discourseSignInResult = new DiscourseSignInResult(discourse); DiscourseSignInResult.CalculateHash(discourseSignInResult, _discourseSsoToken); return(discourseSignInResult); }
public async Task <UserSignInResult> Handle(UserSignInCommand request, CancellationToken cancellationToken) { AuthenticationResultType result; try { result = await _mediator.Send(new CognitoSignInCommand { Email = request.Email.ToLower().Trim(), Password = request.Password }, cancellationToken); } catch (AmazonCognitoIdentityProviderException e) { if (e is UserNotFoundException || e.Message.Contains("Incorrect username or password")) { throw new UserException("Incorrect username or password."); } throw; } if (result == null || string.IsNullOrEmpty(result.IdToken)) { return(null); } var email = await _mediator.Send(new CognitoDecodeTokenCommand { Token = result.IdToken }, cancellationToken); var user = await _mediator.Send(new GetUserByEmailQuery { Email = email, IncludeGroups = true }, cancellationToken); if (user == null) { throw new NotFoundException("User", request.Email); } if (request.Type == LoginType.Forums) { var discourse = ValidateForumsSignature(request); discourse.User = user; var secret = _configuration.GetValue <string>("Forums:Token"); var discourseSignInResult = new DiscourseSignInResult(discourse); DiscourseSignInResult.CalculateHash(discourseSignInResult, secret); return(discourseSignInResult); } var payload = await _mediator.Send(new GetSignInPayloadQuery { User = user }, cancellationToken); return(await _mediator.Send(new UserCreateSignInJwtCommand { Payload = payload }, cancellationToken)); }