public RegisterResponse Register(RegisterRequest request) { var userExists = _context.Client.Any(c => c.Login.Equals(request.Login)); if (userExists) { throw new UserAlreadyExistsException("User already Exists!"); } var salt = SaltGenerator.CreateSalt(); var newClient = new Client() { FirstName = request.FirstName, LastName = request.LastName, Email = request.Email, Phone = request.Phone, Login = request.Login, Password = HashGenerator.CreateHashForPassword(request.Password, salt), Salt = salt, RefreshToken = RefreshTokenGenerator.CreateRefreshToken(), TokenExpirationDate = DateTime.Now.AddDays(7) }; var newClientClaims = new[] { new Claim(ClaimTypes.NameIdentifier, Convert.ToString(newClient.IdClient)), new Claim(ClaimTypes.Name, newClient.Login), new Claim(ClaimTypes.Role, "Client") }; var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["SecretKey"])); var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); var token = new JwtSecurityToken( issuer: "*****@*****.**", audience: "Clients", claims: newClientClaims, expires: DateTime.Now.AddMinutes(10), signingCredentials: credentials ); _context.Client.Add(newClient); _context.SaveChanges(); return(new RegisterResponse() { FirstName = newClient.FirstName, LastName = newClient.LastName, Email = newClient.Email, Phone = newClient.Phone, Login = newClient.Login, AccessToken = new JwtSecurityTokenHandler().WriteToken(token), RefreshToken = newClient.RefreshToken }); }
public LoginResponse Login(LoginRequest request) { var client = _context.Client.SingleOrDefault(p => p.Login == request.Login); if (client == null) { throw new UserDoesntExistExcetion($"User with {request.Login} login doesn't exist"); } if (!client.Password.Equals(HashGenerator.CreateHashForPassword(request.Password, client.Salt))) { throw new WrongPasswordException("Wrong Password!"); } var clientClaims = new[] { new Claim(ClaimTypes.NameIdentifier, Convert.ToString(client.IdClient)), new Claim(ClaimTypes.Name, client.Login), new Claim(ClaimTypes.Role, "Client") }; var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["SecretKey"])); var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); var token = new JwtSecurityToken( issuer: "*****@*****.**", audience: "Clients", claims: clientClaims, expires: DateTime.Now.AddMinutes(10), signingCredentials: credentials ); client.RefreshToken = RefreshTokenGenerator.CreateRefreshToken(); client.TokenExpirationDate = DateTime.Now.AddDays(7); _context.SaveChanges(); return(new LoginResponse() { AccessToken = new JwtSecurityTokenHandler().WriteToken(token), RefreshToken = client.RefreshToken }); }