Ejemplo n.º 1
0
        public CreateUserPayload CreateUser(
            CreateUserInput input,
            [Service] IUserConductor userConductor,
            CancellationToken cancellationToken)
        {
            if (string.IsNullOrEmpty(input.Email))
            {
                throw new QueryException(
                          ErrorBuilder.New()
                          .SetMessage(EMAIL_EMPTY)
                          .SetCode(nameof(EMAIL_EMPTY))
                          .Build());
            }

            if (string.IsNullOrEmpty(input.Password))
            {
                throw new QueryException(
                          ErrorBuilder.New()
                          .SetMessage(PASSWORD_EMPTY)
                          .SetCode(nameof(PASSWORD_EMPTY))
                          .Build());
            }

            var userResult = userConductor.Create(new User
            {
                FirstName = input.FirstName,
                LastName  = input.LastName,
                Email     = input.Email,
            }, input.Password);

            if (userResult.HasErrorsOrResultIsNull())
            {
                var error = userResult.Errors.First();

                throw new QueryException(
                          ErrorBuilder.New()
                          .SetMessage(error.Message)
                          .SetCode(error.Key)
                          .Build());
            }

            return(new CreateUserPayload(userResult.ResultObject, input.ClientMutationId));
        }
Ejemplo n.º 2
0
        public LoginPayload Login(
            LoginInput input,
            [Service] IUserConductor userConductor,
            CancellationToken cancellationToken)
        {
            if (string.IsNullOrEmpty(input.Email))
            {
                throw new QueryException(
                          ErrorBuilder.New()
                          .SetMessage(EMAIL_EMPTY)
                          .SetCode(nameof(EMAIL_EMPTY))
                          .Build());
            }

            if (string.IsNullOrEmpty(input.Password))
            {
                throw new QueryException(
                          ErrorBuilder.New()
                          .SetMessage(PASSWORD_EMPTY)
                          .SetCode(nameof(PASSWORD_EMPTY))
                          .Build());
            }

            var userResult = userConductor.FindByEmailAndPassword(input.Email, input.Password);

            if (userResult.HasErrorsOrResultIsNull())
            {
                var error = userResult.Errors.First();

                throw new QueryException(
                          ErrorBuilder.New()
                          .SetMessage(error.Message)
                          .SetCode(error.Key)
                          .Build());
            }

            var user = userResult.ResultObject;

            var identity = new ClaimsIdentity(new Claim[]
            {
                new Claim(ClaimTypes.Name, user.Email),
                new Claim(ClaimTypes.Email, user.Email),
                new Claim(WellKnownClaimTypes.UserId, user.Id.ToString()),
            });

            var tokenHandler = new JwtSecurityTokenHandler();

            var tokenDescriptor = new SecurityTokenDescriptor
            {
                Subject            = identity,
                Expires            = DateTime.UtcNow.AddHours(12),
                SigningCredentials = new SigningCredentials(
                    new SymmetricSecurityKey(Startup.SharedSecret),
                    SecurityAlgorithms.HmacSha256Signature)
            };

            var token       = tokenHandler.CreateToken(tokenDescriptor);
            var tokenString = tokenHandler.WriteToken(token);

            return(new LoginPayload(user, tokenString, "bearer", input.ClientMutationId));
        }