Example #1
0
        public async Task <IActionResult> Login([FromBody] LoginModel model)
        {
            try
            {
                var validator = new LoginModelValidator();
                if (model == null || !validator.Validate(model))
                {
                    return(BadRequest());
                }

                var user = await userService.GetWhere(new { Email = model.Email });

                if (user == null)
                {
                    return(NotFound());
                }

                if (!BCrypt.Net.BCrypt.Verify(model.Password, user.Password))
                {
                    return(Unauthorized());
                }

                if (user.DeactivatedOn != null)
                {
                    return(Forbid());
                }

                var tokenManager = new JwtManager(config, user.Email, user.Id.ToString(CultureInfo.InvariantCulture));
                if (user.Staff)
                {
                    tokenManager.Claim(ClaimTypes.Role, "Staff");
                }

                tokenManager.Build();

                user.Email    = null;
                user.Password = null;
                return(Ok(new
                {
                    Token = tokenManager.Token.Value,
                    TokenValidTo = tokenManager.Token.ValidTo,
                    User = user
                }));
            }
            catch (Exception e)
            {
                logger.LogError(e, e.Message);
                return(StatusCode(500));
            }
        }