diff --git a/BTCPayServer/Controllers/AccountController.cs b/BTCPayServer/Controllers/AccountController.cs index 118e83ab1..c60ac7713 100644 --- a/BTCPayServer/Controllers/AccountController.cs +++ b/BTCPayServer/Controllers/AccountController.cs @@ -463,7 +463,7 @@ namespace BTCPayServer.Controllers _eventAggregator.Publish(new UserRegisteredEvent() { - Request = Request, + RequestUri = Request.GetAbsoluteRootUri(), User = user, Admin = RegisteredAdmin }); diff --git a/BTCPayServer/Controllers/GreenField/UsersController.cs b/BTCPayServer/Controllers/GreenField/UsersController.cs index 9e56d5dd6..c31bf4ed6 100644 --- a/BTCPayServer/Controllers/GreenField/UsersController.cs +++ b/BTCPayServer/Controllers/GreenField/UsersController.cs @@ -148,7 +148,7 @@ namespace BTCPayServer.Controllers.GreenField } } } - _eventAggregator.Publish(new UserRegisteredEvent() {Request = Request, User = user, Admin = request.IsAdministrator is true }); + _eventAggregator.Publish(new UserRegisteredEvent() {RequestUri = Request.GetAbsoluteRootUri(), User = user, Admin = request.IsAdministrator is true }); return CreatedAtAction(string.Empty, user); } diff --git a/BTCPayServer/Controllers/ManageController.cs b/BTCPayServer/Controllers/ManageController.cs index 6949f5480..b17778875 100644 --- a/BTCPayServer/Controllers/ManageController.cs +++ b/BTCPayServer/Controllers/ManageController.cs @@ -159,7 +159,7 @@ namespace BTCPayServer.Controllers } var code = await _userManager.GenerateEmailConfirmationTokenAsync(user); - var callbackUrl = _linkGenerator.EmailConfirmationLink(user.Id, code, Request.Scheme, Request.HttpContext); + var callbackUrl = _linkGenerator.EmailConfirmationLink(user.Id, code, Request.Scheme, Request.Host, Request.PathBase); var email = user.Email; _EmailSenderFactory.GetEmailSender().SendEmailConfirmation(email, callbackUrl); TempData[WellKnownTempData.SuccessMessage] = "Verification email sent. Please check your email."; diff --git a/BTCPayServer/Events/UserRegisteredEvent.cs b/BTCPayServer/Events/UserRegisteredEvent.cs index 0b14857c6..0c4ea21c7 100644 --- a/BTCPayServer/Events/UserRegisteredEvent.cs +++ b/BTCPayServer/Events/UserRegisteredEvent.cs @@ -1,3 +1,4 @@ +using System; using BTCPayServer.Data; using Microsoft.AspNetCore.Http; @@ -6,7 +7,7 @@ namespace BTCPayServer.Events public class UserRegisteredEvent { public ApplicationUser User { get; set; } - public HttpRequest Request { get; set; } public bool Admin { get; set; } + public Uri RequestUri { get; set; } } } diff --git a/BTCPayServer/Extensions/UrlHelperExtensions.cs b/BTCPayServer/Extensions/UrlHelperExtensions.cs index 02b543c9d..39a56140b 100644 --- a/BTCPayServer/Extensions/UrlHelperExtensions.cs +++ b/BTCPayServer/Extensions/UrlHelperExtensions.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; + using BTCPayServer.Controllers; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Routing; @@ -10,10 +7,10 @@ namespace Microsoft.AspNetCore.Mvc { public static class UrlHelperExtensions { - public static string EmailConfirmationLink(this LinkGenerator urlHelper, string userId, string code, string scheme, HttpContext context) + public static string EmailConfirmationLink(this LinkGenerator urlHelper, string userId, string code, string scheme, HostString host, string pathbase) { - return urlHelper.GetUriByAction(context, nameof(AccountController.ConfirmEmail), "Account", - new {userId, code}, scheme); + return urlHelper.GetUriByAction( nameof(AccountController.ConfirmEmail), "Account", + new {userId, code}, scheme, host, pathbase); } public static string ResetPasswordCallbackLink(this IUrlHelper urlHelper, string userId, string code, string scheme) diff --git a/BTCPayServer/HostedServices/UserEventHostedService.cs b/BTCPayServer/HostedServices/UserEventHostedService.cs index 246370562..b29d1f893 100644 --- a/BTCPayServer/HostedServices/UserEventHostedService.cs +++ b/BTCPayServer/HostedServices/UserEventHostedService.cs @@ -5,6 +5,7 @@ using BTCPayServer.Events; using BTCPayServer.Logging; using BTCPayServer.Services; using BTCPayServer.Services.Mails; +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Routing; @@ -40,8 +41,9 @@ namespace BTCPayServer.HostedServices Logs.PayServer.LogInformation($"A new user just registered {userRegisteredEvent.User.Email} {(userRegisteredEvent.Admin ? "(admin)" : "")}"); if (!userRegisteredEvent.User.EmailConfirmed && userRegisteredEvent.User.RequiresEmailConfirmation) { + var code = await _userManager.GenerateEmailConfirmationTokenAsync(userRegisteredEvent.User); - var callbackUrl = _generator.EmailConfirmationLink(userRegisteredEvent.User.Id, code, userRegisteredEvent.Request.Scheme, userRegisteredEvent.Request.HttpContext); + var callbackUrl = _generator.EmailConfirmationLink(userRegisteredEvent.User.Id, code, userRegisteredEvent.RequestUri.Scheme, new HostString(userRegisteredEvent.RequestUri.Host, userRegisteredEvent.RequestUri.Port), userRegisteredEvent.RequestUri.PathAndQuery); _emailSenderFactory.GetEmailSender() .SendEmailConfirmation(userRegisteredEvent.User.Email, callbackUrl);