Add optional email verification and registration control

Implemented email service infrastructure with SMTP support and optional email verification for self-hosted deployments. Registration flow now supports open/closed modes and hardcoded Apocapoc branding.

Key features:
- Email service with SMTP and template rendering
- Optional email verification (auto-verified without SMTP config)
- Registration modes: open/closed for access control
- Hardcoded Apocapoc branding (AppName, AppURL, DefaultFrom)
- Separate registration and login flows (registration no longer returns tokens)
This commit is contained in:
2025-11-28 08:21:51 +01:00
parent a95a703905
commit 00f6b51228
28 changed files with 890 additions and 99 deletions
+9 -6
View File
@@ -3,12 +3,15 @@ package entities
import "time"
type User struct {
ID string
Email string
PasswordHash string
Timezone string
CreatedAt time.Time
UpdatedAt time.Time
ID string
Email string
PasswordHash string
Timezone string
EmailVerified bool
EmailVerificationToken *string
EmailVerificationExpiry *time.Time
CreatedAt time.Time
UpdatedAt time.Time
}
func NewUser(email, passwordHash, timezone string) *User {
@@ -10,5 +10,6 @@ type UserRepository interface {
Create(ctx context.Context, user *entities.User) error
FindByID(ctx context.Context, id string) (*entities.User, error)
FindByEmail(ctx context.Context, email string) (*entities.User, error)
FindByVerificationToken(ctx context.Context, token string) (*entities.User, error)
Update(ctx context.Context, user *entities.User) error
}
+12
View File
@@ -0,0 +1,12 @@
package services
type EmailMessage struct {
To string
Subject string
Body string
IsHTML bool
}
type EmailService interface {
Send(message EmailMessage) error
}