chore(encryptid): brand verification email as rIdentity + footer links

- From address: rIdentity <noreply@ridentity.online>
- Callback URL uses auth.ridentity.online
- Footer links to rIdentity, rStack, rSpace

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Jeff Emmett 2026-03-10 13:03:00 -07:00
parent e37044f599
commit 61c735cabd
1 changed files with 20 additions and 7 deletions

View File

@ -276,7 +276,7 @@ async function sendRecoveryEmail(to: string, token: string, username: string): P
}
async function sendVerificationEmail(to: string, token: string, username: string, appName: string): Promise<boolean> {
const verifyLink = `https://auth.rspace.online/oidc/verify-email-callback?token=${encodeURIComponent(token)}`;
const verifyLink = `https://auth.ridentity.online/oidc/verify-email-callback?token=${encodeURIComponent(token)}`;
if (!smtpTransport) {
console.log(`EncryptID: [NO SMTP] Verification link for ${to}: ${verifyLink}`);
@ -284,9 +284,9 @@ async function sendVerificationEmail(to: string, token: string, username: string
}
await smtpTransport.sendMail({
from: CONFIG.smtp.from,
from: 'rIdentity <noreply@ridentity.online>',
to,
subject: 'rStack — Verify your email address',
subject: 'rIdentity — Verify your email address',
text: [
`Hi ${username},`,
'',
@ -298,7 +298,11 @@ async function sendVerificationEmail(to: string, token: string, username: string
'This link expires in 30 minutes.',
'If you did not request this, you can safely ignore this email.',
'',
'— rStack Identity',
'— rIdentity',
'',
'rIdentity: https://ridentity.online',
'rStack: https://rstack.online',
'rSpace: https://rspace.online',
].join('\n'),
html: `
<!DOCTYPE html>
@ -309,8 +313,8 @@ async function sendVerificationEmail(to: string, token: string, username: string
<tr><td align="center">
<table width="480" cellpadding="0" cellspacing="0" style="background:#16213e;border-radius:12px;border:1px solid rgba(255,255,255,0.1);">
<tr><td style="padding:32px 32px 24px;text-align:center;">
<div style="font-size:36px;margin-bottom:8px;">&#9993;</div>
<h1 style="margin:0;font-size:24px;background:linear-gradient(90deg,#00d4ff,#7c3aed);-webkit-background-clip:text;-webkit-text-fill-color:transparent;">rStack Identity</h1>
<div style="font-size:36px;margin-bottom:8px;">&#128274;</div>
<h1 style="margin:0;font-size:24px;background:linear-gradient(90deg,#00d4ff,#7c3aed);-webkit-background-clip:text;-webkit-text-fill-color:transparent;">rIdentity</h1>
</td></tr>
<tr><td style="padding:0 32px 24px;color:#e2e8f0;font-size:15px;line-height:1.6;">
<p>Hi <strong>${username}</strong>,</p>
@ -319,7 +323,7 @@ async function sendVerificationEmail(to: string, token: string, username: string
<tr><td style="padding:0 32px 32px;text-align:center;">
<a href="${verifyLink}" style="display:inline-block;padding:12px 32px;background:linear-gradient(90deg,#00d4ff,#7c3aed);color:#fff;text-decoration:none;border-radius:8px;font-weight:600;font-size:15px;">Verify Email</a>
</td></tr>
<tr><td style="padding:0 32px 32px;color:#94a3b8;font-size:13px;line-height:1.5;">
<tr><td style="padding:0 32px 24px;color:#94a3b8;font-size:13px;line-height:1.5;">
<p>This link expires in <strong>30 minutes</strong>.</p>
<p>If you didn't request this, you can safely ignore this email.</p>
<p style="margin-top:16px;padding-top:16px;border-top:1px solid rgba(255,255,255,0.1);font-size:12px;color:#64748b;">
@ -327,6 +331,15 @@ async function sendVerificationEmail(to: string, token: string, username: string
<span style="color:#94a3b8;word-break:break-all;">${verifyLink}</span>
</p>
</td></tr>
<tr><td style="padding:16px 32px 24px;text-align:center;border-top:1px solid rgba(255,255,255,0.06);">
<p style="margin:0;font-size:12px;color:#64748b;">
<a href="https://ridentity.online" style="color:#7c3aed;text-decoration:none;">rIdentity</a>
&nbsp;&middot;&nbsp;
<a href="https://rstack.online" style="color:#7c3aed;text-decoration:none;">rStack</a>
&nbsp;&middot;&nbsp;
<a href="https://rspace.online" style="color:#7c3aed;text-decoration:none;">rSpace</a>
</p>
</td></tr>
</table>
</td></tr>
</table>