Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2020
226
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.90 KB | None | 0 0
  1.     public class UserRepository : RepositoryBase<User>, IUserRepository
  2.     {
  3.         private IPasswordHasher _passwordHasher;
  4.  
  5.         public UserRepository(ApplicationDbContext dbContext, IPasswordHasher passwordHasher) : base(dbContext)
  6.         {
  7.             _passwordHasher = passwordHasher;
  8.         }
  9.  
  10.         public async Task<UserAuthenticatedDto> Authenticate(string email, string password)
  11.         {
  12.             var user = await FindByCondition(x => x.Email == email).FirstOrDefaultAsync();
  13.  
  14.             if (user is null)
  15.             {
  16.                 return null;
  17.             }
  18.  
  19.             var authenticated = _passwordHasher.Check(user.Password, password, user.Salt);
  20.  
  21.             if (!authenticated)
  22.             {
  23.                 return null;
  24.             }
  25.  
  26.             // authentication successful so generate jwt token
  27.             var token = GenerateToken(user);
  28.  
  29.             var authUser = new UserAuthenticatedDto
  30.             {
  31.                 Email = user.Email,
  32.                 ProfilePicture = user.ProfilePicture,
  33.                 Username = user.Username,
  34.                 Token = token
  35.             };
  36.  
  37.             return authUser;
  38.         }
  39.  
  40.         public async Task<UserAuthenticatedDto> Register(UserRegisterDto dto)
  41.         {
  42.             var salt = _passwordHasher.CreateSalt();
  43.             var hashedPassword = _passwordHasher.Hash(dto.Password, salt);
  44.  
  45.             var user = new User
  46.             {
  47.                 Email = dto.Email,
  48.                 Password = hashedPassword,
  49.                 Salt = salt,
  50.                 Username = dto.Username,
  51.                 ProfilePicture = $"https://api.adorable.io/avatars/231/{dto.Email}.png"
  52.             };
  53.  
  54.             await DbContext.Users.AddAsync(user);
  55.             await DbContext.SaveChangesAsync();
  56.  
  57.             var token = GenerateToken(user);
  58.  
  59.             var authUser = new UserAuthenticatedDto
  60.             {
  61.                 Email = user.Email,
  62.                 ProfilePicture = user.ProfilePicture,
  63.                 Username = user.Username,
  64.                 Token = token
  65.             };
  66.  
  67.             return authUser;
  68.         }
  69.  
  70.         private string GenerateToken(User user)
  71.         {
  72.             var tokenHandler = new JwtSecurityTokenHandler();
  73.  
  74.             var key = Encoding.ASCII.GetBytes("here is my temporary secret");
  75.             var tokenDescriptor = new SecurityTokenDescriptor
  76.             {
  77.                 Subject = new ClaimsIdentity(new Claim[]
  78.                 {
  79.                     new Claim(ClaimTypes.Name, user.Id.ToString())
  80.                 }),
  81.                 Expires = DateTime.UtcNow.AddDays(7),
  82.                 SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
  83.             };
  84.  
  85.             var token = tokenHandler.CreateToken(tokenDescriptor);
  86.  
  87.             return tokenHandler.WriteToken(token);
  88.         }
  89.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement