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> { 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) { if (!smtpTransport) {
console.log(`EncryptID: [NO SMTP] Verification link for ${to}: ${verifyLink}`); 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({ await smtpTransport.sendMail({
from: CONFIG.smtp.from, from: 'rIdentity <noreply@ridentity.online>',
to, to,
subject: 'rStack — Verify your email address', subject: 'rIdentity — Verify your email address',
text: [ text: [
`Hi ${username},`, `Hi ${username},`,
'', '',
@ -298,7 +298,11 @@ async function sendVerificationEmail(to: string, token: string, username: string
'This link expires in 30 minutes.', 'This link expires in 30 minutes.',
'If you did not request this, you can safely ignore this email.', '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'), ].join('\n'),
html: ` html: `
<!DOCTYPE html> <!DOCTYPE html>
@ -309,8 +313,8 @@ async function sendVerificationEmail(to: string, token: string, username: string
<tr><td align="center"> <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);"> <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;"> <tr><td style="padding:32px 32px 24px;text-align:center;">
<div style="font-size:36px;margin-bottom:8px;">&#9993;</div> <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;">rStack Identity</h1> <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> </td></tr>
<tr><td style="padding:0 32px 24px;color:#e2e8f0;font-size:15px;line-height:1.6;"> <tr><td style="padding:0 32px 24px;color:#e2e8f0;font-size:15px;line-height:1.6;">
<p>Hi <strong>${username}</strong>,</p> <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;"> <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> <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> </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>This link expires in <strong>30 minutes</strong>.</p>
<p>If you didn't request this, you can safely ignore this email.</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;"> <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> <span style="color:#94a3b8;word-break:break-all;">${verifyLink}</span>
</p> </p>
</td></tr> </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> </table>
</td></tr> </td></tr>
</table> </table>