feat: sync configurable OTP delivery providers

This commit is contained in:
A 2026-07-17 17:04:39 +08:00
parent c18f773701
commit 6af61f26ba
28 changed files with 2100 additions and 118 deletions

View file

@ -0,0 +1,36 @@
package otpdelivery
import (
"strings"
"testing"
"time"
)
func TestNewDeliveryIDIsOpaqueAndUnique(t *testing.T) {
first, err := NewDeliveryID()
if err != nil {
t.Fatalf("first id: %v", err)
}
second, err := NewDeliveryID()
if err != nil {
t.Fatalf("second id: %v", err)
}
if first == second || !strings.HasPrefix(first, "otp_") || len(first) != len("otp_")+32 {
t.Fatalf("ids = %q / %q", first, second)
}
}
func TestRequestRejectsExpiredCode(t *testing.T) {
now := time.Now()
err := (Request{
DeliveryID: "otp_expired",
Purpose: PurposeLoginEmail,
Channel: ChannelEmail,
Recipient: "a@example.test",
Code: "123456",
ExpiresAt: now,
}).Validate(now)
if err == nil {
t.Fatal("expired request accepted")
}
}