//==========Zadanie 6 public async Task <LoginResponse> LoginAsync(LoginRequest request) { var isClientExists = await _dbcontext.Clients.AnyAsync(c => c.Login.Equals(request.Login)); if (!isClientExists) { throw new ClientDoesNotExistsException($"Client with login={request.Login} does not exists"); } var client = await _dbcontext.Clients.SingleOrDefaultAsync(c => c.Login.Equals(request.Login)); if (!PasswordHashingHandler.Validate(request.Password, client.Password, client.Salt)) { throw new IncorrectPasswordException("Incorrect Password"); } string refreshToken = Guid.NewGuid().ToString(); client.RefreshToken = refreshToken; _dbcontext.Update(client); await _dbcontext.SaveChangesAsync(); var claims = new[] { new Claim(ClaimTypes.NameIdentifier, client.IdClient.ToString()), new Claim(ClaimTypes.Name, client.Login), new Claim(ClaimTypes.Role, "client") }; var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("jasuaujsuhdyeyrjbsiweuuwhe7t363nuwdnu")); //var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_Configuration["SecretKey"])); var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); var token = new JwtSecurityToken ( issuer: "s19504", audience: "Clients", claims: claims, expires: DateTime.Now.AddMinutes(10), signingCredentials: creds ); return(new LoginResponse { AccessToken = new JwtSecurityTokenHandler().WriteToken(token), RefreshToken = refreshToken }); }
//==========Zadanie 4 public async Task <RegistratedClientResponse> RegistrateClientAsync(RegistrateNewClientRequest newClient) { var isClientExists = await _dbcontext.Clients.AnyAsync(c => c.Login.Equals(newClient.Login)); if (isClientExists) { throw new ClientHasAlreadyExistsException($"Client with login={newClient.Login} has already exists"); } var salt = PasswordHashingHandler.CreateSalt(); var client = new Client { FirstName = newClient.FirstName, LastName = newClient.LastName, Email = newClient.Email, Phone = newClient.Phone, Login = newClient.Login, Password = PasswordHashingHandler.CreateHash(newClient.Password, salt), Salt = salt }; await _dbcontext.AddAsync(client); await _dbcontext.SaveChangesAsync(); var cl = await _dbcontext.Clients .Where(c => c.Login.Equals(newClient.Login)) .SingleOrDefaultAsync(); return(new RegistratedClientResponse { FirstName = cl.FirstName, LastName = cl.LastName, Email = cl.Email, Phone = cl.Phone, Login = cl.Login, }); }