Пример #1
0
        //==========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
            });
        }
Пример #2
0
        //==========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,
            });
        }