Los correos de cambio de correo saludan con la cuenta, no con «15#1»

Decían «Hola 15#1»: el username interno, que no le dice nada a nadie. Ahora
«Hola INNA@INNA.CL (WOW1)» — el correo, que es la cuenta con Battle.net, y la
cuenta de juego con su nombre visible. Si no se sabe cuál es, va el correo solo,
sin paréntesis vacío.

Afecta a las 3 plantillas del cambio de correo. En la que va al correo NUEVO se
saluda con `old_email`: el cambio aún no ha terminado, así que la cuenta se sigue
identificando con el correo viejo (hay que añadirlo al SELECT).

El original de Django también decía «Hola {{ username }}», así que esto es un
arreglo, no una copia.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-15 19:26:46 +00:00
parent 4a7a970206
commit 4303e9fc88
2 changed files with 38 additions and 9 deletions
+5 -3
View File
@@ -43,14 +43,16 @@ export async function requestEmailChange(
await sendMail(
current,
`Confirma el cambio de correo - NightSpire`,
confirmOldEmailHtml(session.username ?? current, newEmail, link),
confirmOldEmailHtml(current, session.username ?? null, newEmail, link),
)
return { success: true }
}
export async function confirmOldEmail(hash: string): Promise<Result> {
// `old_email` es el correo con el que la cuenta se identifica AHORA: el cambio
// aún no ha terminado, así que es con ese con el que hay que saludar.
const [rows] = await db(DB.default).query<RowDataPacket[]>(
'SELECT id, email, hash, username FROM accountactivation WHERE old_email_hash = ? AND is_used = 0',
'SELECT id, email, old_email, hash, username FROM accountactivation WHERE old_email_hash = ? AND is_used = 0',
[hash],
)
const act = rows[0]
@@ -62,7 +64,7 @@ export async function confirmOldEmail(hash: string): Promise<Result> {
await sendMail(
act.email,
`Confirma tu nuevo correo - NightSpire`,
confirmNewEmailHtml(act.username ?? act.email, link),
confirmNewEmailHtml(act.old_email || act.email, act.username ?? null, link),
)
return { success: true }
}
+33 -6
View File
@@ -291,10 +291,27 @@ export function accountNamesEmailHtml(email: string, accounts: string[], locale
}
/** `confirm_old_email.html` — se confirma desde el correo ACTUAL. */
export function confirmOldEmailHtml(username: string, newEmail: string, link: string, locale = 'es'): string {
/**
* Cómo se saluda a alguien: «INNA@INNA.CL (WOW1)». Antes se saludaba con el
* username interno («Hola 15#1»), que no le dice nada a nadie: la cuenta es el
* correo, y el «15#1» solo tiene sentido como WOW1. Si no se sabe la cuenta de
* juego, va el correo a secas.
*/
function saludo(email: string, gameAccount?: string | null): string {
const wow = gameAccount ? gameAccountDisplayName(gameAccount) : ''
return wow ? `${esc(email)} (${esc(wow)})` : esc(email)
}
export function confirmOldEmailHtml(
email: string,
gameAccount: string | null,
newEmail: string,
link: string,
locale = 'es',
): string {
return layout('CAMBIO DE CORREO', 'Confirmación de Cambio de Correo', [
p(
`Hola ${esc(username)}, has solicitado cambiar tu correo en ${SERVER_NAME} a ${esc(newEmail)}.<br>Para confirmar el cambio, pulsa el botón.`,
`Hola ${saludo(email, gameAccount)}, has solicitado cambiar tu correo en ${SERVER_NAME} a ${esc(newEmail)}.<br>Para confirmar el cambio, pulsa el botón.`,
),
button(link, 'CONFIRMAR CAMBIO'),
fallbackLink(link),
@@ -304,10 +321,15 @@ export function confirmOldEmailHtml(username: string, newEmail: string, link: st
}
/** `confirm_new_email.html` — se confirma desde el correo NUEVO. */
export function confirmNewEmailHtml(username: string, link: string, locale = 'es'): string {
export function confirmNewEmailHtml(
email: string,
gameAccount: string | null,
link: string,
locale = 'es',
): string {
return layout('NUEVO CORREO', 'Activación de Nuevo Correo', [
p(
`Hola ${esc(username)}, tu solicitud para cambiar el correo en ${SERVER_NAME} ha sido recibida.<br>Pulsa el botón para confirmar este correo como el nuevo de tu cuenta.`,
`Hola ${saludo(email, gameAccount)}, tu solicitud para cambiar el correo en ${SERVER_NAME} ha sido recibida.<br>Pulsa el botón para confirmar este correo como el nuevo de tu cuenta.`,
),
button(link, 'ACTIVAR NUEVO CORREO'),
fallbackLink(link),
@@ -317,10 +339,15 @@ export function confirmNewEmailHtml(username: string, link: string, locale = 'es
}
/** `old_email_notification.html` — aviso al correo antiguo, ya sin enlaces. */
export function oldEmailNotificationHtml(username: string, newEmail: string, locale = 'es'): string {
export function oldEmailNotificationHtml(
email: string,
gameAccount: string | null,
newEmail: string,
locale = 'es',
): string {
return layout('CAMBIO DE CORREO', 'Cambio de Correo Realizado', [
p(
`Hola ${esc(username)}, te avisamos de que el correo de tu cuenta en ${SERVER_NAME} se ha cambiado correctamente al siguiente:`,
`Hola ${saludo(email, gameAccount)}, te avisamos de que el correo de tu cuenta en ${SERVER_NAME} se ha cambiado correctamente al siguiente:`,
),
pData(`Nuevo correo: ${esc(newEmail)}<br><br>`),
divider(),