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, })); }
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 })); }