62 lines
2.5 KiB
C#
62 lines
2.5 KiB
C#
using System.Web;
|
|
using Hutopy.Infrastructure.Configuration;
|
|
using Hutopy.Infrastructure.Emailer.Contracts;
|
|
using Hutopy.Modules.Identity.Data;
|
|
using Microsoft.Extensions.Options;
|
|
|
|
namespace Hutopy.Modules.Identity.Services;
|
|
|
|
[PublicAPI]
|
|
public sealed class EmailVerificationService(
|
|
IOptionsSnapshot<WebsiteOptions> options,
|
|
UserManager userManager,
|
|
IEmailSender emailSender)
|
|
{
|
|
public async Task SendVerificationEmailAsync(
|
|
User user)
|
|
{
|
|
// Generate email confirmation token
|
|
string token = await userManager.GenerateEmailConfirmationTokenAsync(user);
|
|
string encodedToken = HttpUtility.UrlEncode(token);
|
|
string verificationLink = $"{options.Value.FrontendBaseUrl}/verify-email?userId={user.Id}&token={encodedToken}";
|
|
|
|
// Send verification email
|
|
await emailSender.SendEmailAsync(
|
|
user.Email!,
|
|
"Verify your email address",
|
|
$"""
|
|
<div style="font-family: Arial, sans-serif; max-width: 600px; margin: 0 auto; padding: 20px; color: #333;">
|
|
<h1 style="color: #2c3e50; margin-bottom: 20px;">Welcome to Hutopy!</h1>
|
|
|
|
<p style="font-size: 16px; line-height: 1.5; margin-bottom: 25px;">
|
|
Please verify your email address by clicking the button below:
|
|
</p>
|
|
|
|
<div style="text-align: center; margin: 30px 0;">
|
|
<a href='{verificationLink}'
|
|
style="background-color: #3498db;
|
|
color: white;
|
|
text-decoration: none;
|
|
padding: 12px 24px;
|
|
border-radius: 4px;
|
|
font-weight: bold;
|
|
display: inline-block;
|
|
box-shadow: 0 2px 5px rgba(0,0,0,0.1);">
|
|
Verify Email Address
|
|
</a>
|
|
</div>
|
|
|
|
<p style="font-size: 14px; color: #7f8c8d; margin-top: 30px;">
|
|
If you did not request this, please ignore this email.
|
|
</p>
|
|
|
|
<p style="font-size: 14px; color: #7f8c8d; margin-top: 20px;">
|
|
If the button doesn't work, you can copy and paste this link into your browser:
|
|
<br>
|
|
<a href='{verificationLink}' style="color: #3498db; word-break: break-all;">{verificationLink}</a>
|
|
</p>
|
|
</div>
|
|
""");
|
|
}
|
|
}
|