feat(backend): email registration

This commit is contained in:
sam 2024-09-10 02:39:07 +02:00
parent c77ee660ca
commit 13a0cac663
Signed by: sam
GPG key ID: B4EF20DDE721CAA1
15 changed files with 120 additions and 82 deletions

View file

@ -1,6 +1,7 @@
using Foxnouns.Backend.Database;
using Foxnouns.Backend.Services;
using Foxnouns.Backend.Utils;
using Newtonsoft.Json;
using NodaTime;
namespace Foxnouns.Backend.Extensions;
@ -25,7 +26,8 @@ public static class KeyCacheExtensions
public static async Task<string> GenerateRegisterEmailStateAsync(this KeyCacheService keyCacheService, string email,
Snowflake? userId = null, CancellationToken ct = default)
{
var state = AuthUtils.RandomToken();
// This state is used in links, not just as JSON values, so make it URL-safe
var state = AuthUtils.RandomToken().Replace('+', '-').Replace('/', '_');
await keyCacheService.SetKeyAsync($"email_state:{state}", new RegisterEmailState(email, userId),
Duration.FromDays(1), ct);
return state;
@ -36,4 +38,7 @@ public static class KeyCacheExtensions
await keyCacheService.GetKeyAsync<RegisterEmailState>($"email_state:{state}", delete: true, ct);
}
public record RegisterEmailState(string Email, Snowflake? ExistingUserId);
public record RegisterEmailState(
string Email,
[property: JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
Snowflake? ExistingUserId);

View file

@ -79,7 +79,7 @@ public static class WebApplicationExtensions
{
services
.AddQueue()
.AddMailer(ctx.Configuration)
.AddSmtpMailer(ctx.Configuration)
.AddDbContext<DatabaseContext>()
.AddMetricServer(o => o.Port = config.Logging.MetricsPort)
.AddMinio(c =>