Beispiel #1
0
        public async Task <IActionResult> Register([FromBody] RegisterUserDto model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(new ResponseModel()
                {
                    Message = "Model State is not valid",
                    Result = false,
                    Status = 400
                }));
            }

            if (!IsValidEmail(model.Email))
            {
                return(BadRequest(new ResponseModel()
                {
                    Message = "Please provide a valid email",
                    Result = false,
                    Status = 404
                }));
            }


            if (_userService.IsEmailExist(model.Email))
            {
                return(BadRequest(new ResponseModel()
                {
                    Message = "This email address has been take it please try another one",
                    Status = 404,
                    Result = false
                }));
            }


            // Hash Password
            byte[] passwordHash, passwordSalt;
            HashingHelper.CreatePasswordHash(model.Password, out passwordHash, out passwordSalt);

            User user = new User()
            {
                Email        = model.Email,
                PasswordHash = passwordHash,
                PasswordSalt = passwordSalt,
                Address      = model.Address,
                IsActive     = false,
                Name         = model.Name,
                Surname      = model.Surname,
                Phone        = model.Phone,
                Role         = Role.User,
                ImageUrl     = "profile.png"
            };

            await _userService.CreateAsync(user);



            // send Email

            TokenHelpers tokenHelpers = new TokenHelpers(_configuration);

            string VerificationToken = tokenHelpers.GenerateVerificationToken(model.Email);

            string url = _configuration.Value.FrontUrl + "/verifyAccount?token=" + VerificationToken;

            string body = $"Please click <a href = {url} >link</a> link to verify YourAccount";


            await _emailService.SendMail("Verify Account", body, model.Email);

            //
            return(Ok(new
            {
                Message = "User has been created successfully",
                Result = true,
                Status = 200,
            }));
        }
Beispiel #2
0
        public async Task <IActionResult> Login([FromBody] LoginUserDto model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(new ResponseModel()
                {
                    Message = "Model State is not valid",
                    Result = false,
                    Status = 400
                }));
            }


            if (!IsValidEmail(model.Email))
            {
                return(BadRequest(new ResponseModel()
                {
                    Message = "Please provide a valid email",
                    Result = false,
                    Status = 404
                }));
            }

            var user = _userService.GetByEmail(model.Email);

            if (user == null)
            {
                return(BadRequest(new ResponseModel()
                {
                    Message = "User Not Found",
                    Status = 404,
                    Result = false
                }));
            }
            TokenHelpers tokenHelpers = new TokenHelpers(_configuration);

            if (!user.IsActive)
            {
                string VerificationToken = tokenHelpers.GenerateVerificationToken(model.Email);

                string url = _configuration.Value.FrontUrl + "/token=" + VerificationToken;

                string body = $"Please click <a href = {url} >link</a> link to verify YourAccount";


                await _emailService.SendMail("Verify Account", body, model.Email);

                return(BadRequest(new ResponseModel()
                {
                    Message = "Account is not active please active your account. New Activation link has been sent",
                    Status = 404,
                    Result = false
                }));
            }

            if (!HashingHelper.VerifyPasswordHash(model.Password, user.PasswordHash, user.PasswordSalt))
            {
                return(BadRequest(new ResponseModel()
                {
                    Message = "Password is wrong. Try Again.",
                    Result = false,
                    Status = 404
                }));
            }


            TokenResultModel token = tokenHelpers.GenerateToken(user);

            user.LastLoggedInDate = DateTime.Now;

            await _userService.UpdateAsync(user);

            return(Ok(new
            {
                user = new
                {
                    user.Id,
                    user.Name,
                    user.Surname,
                    user.Email,
                    user.Address,
                    role = user.Role.ToString(),
                    user.Phone,
                    user.ImageUrl,
                    user.LastLoggedInDate
                },
                token
            }));
        }