| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
-
- namespace Diligent.WebAPI.Business.Services
- {
-
- public class UserService : IUserService
- {
- private readonly AuthorizationSettings _authSettings;
- private readonly UserManager<User> _userManager;
- private readonly IMapper _mapper;
-
- public UserService(IOptions<AuthorizationSettings> authSettings, UserManager<User> userManager, IMapper mapper)
- {
- _authSettings = authSettings.Value;
- _userManager = userManager;
- _mapper = mapper;
- }
-
- public async Task<IEnumerable<User?>> GetAll() =>
- await _userManager.Users.ToListAsync();
-
- public async Task<User?> GetById(int id) =>
- await _userManager.FindByIdAsync(id.ToString());
-
- public async Task CreateUser(CreateUserRequestDto model)
- {
- var user = _mapper.Map<User>(model);
-
- await _userManager.CreateAsync(user, model.Password);
- }
-
- public async Task<AuthenticateResponseDto?> Authenticate(AuthenticateRequestDto model)
- {
- var user = await _userManager.FindByNameAsync(model.Username);
-
- // return null if user not found
- if (user == null)
- return null;
-
- var result = await _userManager.CheckPasswordAsync(user, model.Password);
-
- if (!result)
- return null;
-
- // authentication successful so generate jwt token
- var token = GenerateJwtToken(user);
-
- return new AuthenticateResponseDto
- {
- Id = user.Id,
- Username = user.UserName,
- FirstName = user.FirstName,
- LastName = user.LastName,
- Token = token
- };
- }
-
- private string GenerateJwtToken(User user)
- {
- // generate token that is valid for 7 days
- var tokenHandler = new JwtSecurityTokenHandler();
- var key = Encoding.ASCII.GetBytes(_authSettings.Secret);
- var tokenDescriptor = new SecurityTokenDescriptor
- {
- Subject = new ClaimsIdentity(new[] { new Claim("id", user.Id.ToString()) }),
- Expires = DateTime.UtcNow.AddMinutes(2),
- SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
- };
- var token = tokenHandler.CreateToken(tokenDescriptor);
- return tokenHandler.WriteToken(token);
- }
- }
- }
|