Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

UserService.cs 4.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. namespace Diligent.WebAPI.Business.Services
  2. {
  3. public class UserService : IUserService
  4. {
  5. private readonly FrontEndSettings _frontEndSettings;
  6. private readonly UserManager<User> _userManager;
  7. private readonly IMapper _mapper;
  8. private readonly DatabaseContext _databaseContext;
  9. private readonly IEmailer _emailer;
  10. private readonly ILogger<UserService> _logger;
  11. public UserService(IOptions<FrontEndSettings> frontEndSettings, UserManager<User> userManager, IMapper mapper, DatabaseContext databaseContext, IEmailer emailer, ILogger<UserService> logger)
  12. {
  13. _frontEndSettings = frontEndSettings.Value;
  14. _userManager = userManager;
  15. _mapper = mapper;
  16. _databaseContext = databaseContext;
  17. _emailer = emailer;
  18. _logger = logger;
  19. }
  20. public async Task<IEnumerable<User?>> GetAll()
  21. {
  22. _logger.LogInformation("Start getting all users");
  23. _logger.LogInformation("Getting data from DB");
  24. var fromDb = await _userManager.Users.ToListAsync();
  25. _logger.LogInformation($"Received {fromDb.Count} ads from db.");
  26. return fromDb;
  27. }
  28. #region REFACTORING CODE HERE TO CHECK IF USER IS NULL
  29. public async Task<User?> GetById(int id)
  30. {
  31. _logger.LogInformation($"Start searching Ad with id = {id}");
  32. var result = await _userManager.FindByIdAsync(id.ToString());
  33. return result;
  34. }
  35. public async Task<User?> GetByEmail(string email) =>
  36. await _userManager.FindByEmailAsync(email);
  37. #endregion
  38. public async Task CreateUser(CreateUserRequestDto model)
  39. {
  40. _logger.LogInformation($"Start creating user");
  41. var user = _mapper.Map<User>(model);
  42. _logger.LogInformation($"User created successfully");
  43. _logger.LogInformation($"Saving user to db...");
  44. await _userManager.CreateAsync(user, model.Password);
  45. _logger.LogInformation($"User saved to DB");
  46. }
  47. public async Task RemoveUser(User user)
  48. {
  49. await _userManager.DeleteAsync(user);
  50. await _databaseContext.SaveChangesAsync();
  51. }
  52. public async Task<bool?> ToggleEnable(User user)
  53. {
  54. user.IsEnabled = !user.IsEnabled;
  55. await _databaseContext.SaveChangesAsync();
  56. return user.IsEnabled;
  57. }
  58. public async Task<ServiceResponseDTO<object>> SendRegistrationLink(InviteDTO invite)
  59. {
  60. // check if user exists
  61. var check = await _userManager.FindByEmailAsync(invite.Email);
  62. if (check != null)
  63. return new ServiceResponseDTO<object>()
  64. {
  65. IsError = true,
  66. ErrorMessage = "User already registered."
  67. };
  68. // create template user
  69. // this user is disabled to log in until confirming invitation
  70. var user = new User
  71. {
  72. UserName = invite.Email,
  73. Email = invite.Email,
  74. FirstName = invite.FirstName,
  75. LastName = invite.LastName,
  76. IsEnabled = false
  77. };
  78. await _userManager.CreateAsync(user, StringGenerator.GenerateRandomPassword());
  79. // generate invitation token for user
  80. // encoded for URLs
  81. var token = await _userManager.GeneratePasswordResetTokenAsync(user);
  82. token = HttpUtility.UrlEncode(token);
  83. // send link
  84. await _emailer.SendEmailAndWriteToDbAsync(invite.Email, "Welcome", HTMLHelper.RenderRegisterPage($"{_frontEndSettings.BaseUrl}/register?token={token}&email={invite.Email}"), isHtml: true);
  85. await _databaseContext.SaveChangesAsync();
  86. return new ServiceResponseDTO<object>
  87. {
  88. Data = new { Message = "Link has been sent!" }
  89. };
  90. }
  91. public async Task<bool> VerifyToken(User user, string token)
  92. {
  93. // this method is going to be updated
  94. // curent new password value is static and only used for testing
  95. // method is not complete and is currently only used to check if valid reset token is sent
  96. var result = await _userManager.ResetPasswordAsync(user, token, "Nekasifra123!");
  97. return result.Succeeded;
  98. }
  99. }
  100. }