From c5bc5fc63e90f19a5a5b78201d03420a4e4a9ef4 Mon Sep 17 00:00:00 2001 From: Jamshidbek <161879703+jamshidbekbahtiyorivich@users.noreply.github.com> Date: Sat, 11 Jan 2025 21:11:21 +0500 Subject: [PATCH] changed GetCallbackUrl has been moved to a separate static class, and used where necessary. --- .../Extensions/Helper.cs | 18 ++++++++++++++++++ .../Services/AuthService.cs | 8 ++++---- .../Services/CurrentUserService.cs | 1 + .../Services/JwtTokenHandler.cs | 10 +++++----- .../Services/NewUserService.cs | 18 +++--------------- 5 files changed, 31 insertions(+), 24 deletions(-) create mode 100644 ExpenseTracker.Api/ExpenseTracker.Application/Extensions/Helper.cs diff --git a/ExpenseTracker.Api/ExpenseTracker.Application/Extensions/Helper.cs b/ExpenseTracker.Api/ExpenseTracker.Application/Extensions/Helper.cs new file mode 100644 index 0000000..e9d5331 --- /dev/null +++ b/ExpenseTracker.Api/ExpenseTracker.Application/Extensions/Helper.cs @@ -0,0 +1,18 @@ +using Microsoft.AspNetCore.WebUtilities; + +namespace ExpenseTracker.Application.Extensions; +public static class Helper +{ + public static string GetCallbackUrl(string clientUrl, string token, string email) + { + Dictionary queryParams = new Dictionary + { + { "email", email }, + { "token", token } + }; + + var callbackUrl = QueryHelpers.AddQueryString(clientUrl, queryParams); + + return callbackUrl; + } +} diff --git a/ExpenseTracker.Api/ExpenseTracker.Application/Services/AuthService.cs b/ExpenseTracker.Api/ExpenseTracker.Application/Services/AuthService.cs index aa53547..7f566a4 100644 --- a/ExpenseTracker.Api/ExpenseTracker.Application/Services/AuthService.cs +++ b/ExpenseTracker.Api/ExpenseTracker.Application/Services/AuthService.cs @@ -1,3 +1,4 @@ +using ExpenseTracker.Application.Extensions; using ExpenseTracker.Application.Interfaces; using ExpenseTracker.Application.Models; using ExpenseTracker.Application.Requests.Auth; @@ -122,18 +123,17 @@ private async Task SendWelcomeEmailAsync(IdentityUser user) { var emailMessage = new EmailMessage(user.Email!, user.UserName!, "Welcome to Expense Tracker!", null); - _backgroundJobClient.Enqueue("email_welcome", () => _emailService.SendWelcome(emailMessage)); + _backgroundJobClient.Enqueue(() => _emailService.SendWelcome(emailMessage)); } private async Task SendPasswordResetEmailAsync(IdentityUser user, ResetPasswordRequest request) { var token = await _userManager.GeneratePasswordResetTokenAsync(user); - var redirectUrl = $"{request.RedirectUrl}?token={token}&email={request.Email}"; - + var redirectUrl = Helper.GetCallbackUrl(request.RedirectUrl, token, request.Email); var emailMessage = new EmailMessage(user.Email!, user.UserName!, "Password Reset", redirectUrl); var userInfo = new UserInfo(request.Browser, request.OS); - _backgroundJobClient.Enqueue("email_reset-password", () => _emailService.SendResetPassword(emailMessage, userInfo)); + _backgroundJobClient.Enqueue(() => _emailService.SendResetPassword(emailMessage, userInfo)); } private async Task> GetAndValidateUserAsync(string email) diff --git a/ExpenseTracker.Api/ExpenseTracker.Application/Services/CurrentUserService.cs b/ExpenseTracker.Api/ExpenseTracker.Application/Services/CurrentUserService.cs index 8bc93ba..ad30965 100644 --- a/ExpenseTracker.Api/ExpenseTracker.Application/Services/CurrentUserService.cs +++ b/ExpenseTracker.Api/ExpenseTracker.Application/Services/CurrentUserService.cs @@ -31,6 +31,7 @@ public Guid GetUserId() public string GetUserName() { + return ""; var user = _httpContextAccessor.HttpContext?.User ?? throw new InvalidOperationException($"Unable to get user info from HttpContext."); diff --git a/ExpenseTracker.Api/ExpenseTracker.Application/Services/JwtTokenHandler.cs b/ExpenseTracker.Api/ExpenseTracker.Application/Services/JwtTokenHandler.cs index de6b9d0..c9f7468 100644 --- a/ExpenseTracker.Api/ExpenseTracker.Application/Services/JwtTokenHandler.cs +++ b/ExpenseTracker.Api/ExpenseTracker.Application/Services/JwtTokenHandler.cs @@ -1,11 +1,11 @@ -using System.IdentityModel.Tokens.Jwt; -using System.Security.Claims; -using System.Text; using ExpenseTracker.Application.Configurations; using ExpenseTracker.Application.Interfaces; using Microsoft.AspNetCore.Identity; using Microsoft.Extensions.Options; using Microsoft.IdentityModel.Tokens; +using System.IdentityModel.Tokens.Jwt; +using System.Security.Claims; +using System.Text; namespace ExpenseTracker.Application.Services; @@ -29,7 +29,7 @@ public string GenerateToken(IdentityUser user, IEnumerable roles) signingCredentials: signingKey, expires: DateTime.UtcNow.AddHours(_options.ExpiresInHours)); - var token = new JwtSecurityTokenHandler().WriteToken(securityToken); + var token = new JwtSecurityTokenHandler().WriteToken(securityToken); return token; } @@ -50,7 +50,7 @@ private static List GetClaims(IdentityUser user, IEnumerable user, RegisterR { var token = await _userManager.GenerateEmailConfirmationTokenAsync(user); - var redirectUrl = GetCallbackUrl(request.ConfirmUrl, token, request.Email); + var redirectUrl = Helper.GetCallbackUrl(request.ConfirmUrl, token, request.Email); var userInfo = new UserInfo(request.Browser ?? "Unknown browser", request.OS ?? "Unknown operating system"); var emailMessage = new EmailMessage(user.Email!, user.UserName!, "Email confirmation", redirectUrl); _emailService.SendEmailConfirmation(emailMessage, userInfo); } - private static string GetCallbackUrl(string clientUrl, string token, string email) - { - Dictionary queryParams = new Dictionary - { - { "email", email }, - { "token", token } - }; - - var callbackUrl = QueryHelpers.AddQueryString(clientUrl, queryParams); - - return callbackUrl; - } }