fbc17f2cf8ab36828cd390c66a76684cd6336fe0
`oldEmailNotificationHtml` estaba portada del Django original pero NO la llamaba nadie: `confirmNewEmail` cambiaba el correo de la cuenta y al antiguo no le llegaba nada. Importa porque al entrar se usa el correo: quien secuestrara una sesión podía cambiarlo y el dueño se quedaba sin cuenta en silencio, sin ningún aviso en ninguna parte. Se envía DESPUÉS de que el cambio haya cuajado (si el UPDATE falla, no hay nada que avisar) y sin enlaces: solo informa, y dice a quién contactar. `sendMail` nunca lanza (devuelve false), así que un fallo de correo no puede tumbar un cambio ya hecho. Verificado ejecutando confirmNewEmail() contra la BD con el SMTP interceptado y cuentas de usar y tirar: 1 correo al antiguo (antes 0), la cuenta cambia, y las filas de prueba quedan borradas. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Nova WoW
Portal web para un servidor de World of Warcraft 3.4.3 basado en AzerothCore.
- Framework: Next.js 16 (App Router) + Tailwind, en
web-next/ - Idiomas: ES/EN con next-intl
- Bases de datos (MySQL):
django_wow(la del portal),acore_auth,acore_characters,acore_worldyacore_web(el foro)
La base del portal se sigue llamando
django_wowpor motivos históricos: el portal era una app Django, jubilada el 2026-07-15. Sus tablas llevaban el prefijohome_(el nombre de la app) y se renombraron sin él (home_stripelog→stripelog). Next las consulta con SQL directo, sin ORM.
1. Puesta en marcha (desarrollo)
git clone https://git.nightspire.gg/Inna/NovaWoW.git
cd NovaWoW/web-next
npm install
# crear .env.local con las variables de la sección 2
npm run dev # http://127.0.0.1:3000
2. Configuración (web-next/.env.local)
No se versiona (contiene secretos).
| Variable | Descripción |
|---|---|
DB_USER / DB_PASSWORD / DB_HOST / DB_PORT |
Credenciales MySQL (compartidas por las 5 BBDD) |
DB_NAME_DEFAULT |
BD del portal (django_wow) |
DB_NAME_AUTH / DB_NAME_CHARACTERS / DB_NAME_WORLD / DB_NAME_WEB |
BBDD de AzerothCore y del foro |
SESSION_SECRET |
Firma de la sesión |
SITE_URL |
Raíz pública del sitio. De aquí cuelgan todos los enlaces e imágenes de los correos, así que cambiar de dominio es tocar solo esta variable |
EMAIL_* |
SMTP (hoy Proton Mail, smtp.protonmail.ch:587 con STARTTLS). EMAIL_HOST_USER es además el remitente, y Proton exige que coincida con la dirección del token |
AC_SOAP_* |
Conexión SOAP a AzerothCore (envío de ítems, etc.) |
STRIPE_* / SUMUP_* |
Pasarelas de pago |
NEXT_PUBLIC_TURNSTILE_SITE_KEY / TURNSTILE_SECRET_KEY |
Captcha de Cloudflare |
ADMIN_EMAILS / ADMIN_GMLEVEL |
Acceso al panel de administración |
CRON_SECRET |
Protege el endpoint de reconciliación de SumUp |
3. Producción
- Servicio:
novawow-next.service→next start -p 3001 - Proxy: Caddy.
nightspire.ggredirige awww.nightspire.gg, que va a127.0.0.1:3001;next.nightspire.ggapunta al mismo sitio. - Timer:
novawow-dpoints-reconcile.timerllama cada 2 min a/api/dpoints/reconcile(SumUp no manda webhooks, así que se reconcilia sondeando).
cd web-next && npm run build && systemctl restart novawow-next
4. Estructura
web-next/
app/[locale]/ páginas (una carpeta por ruta)
components/ componentes React
lib/ acceso a datos y lógica (SQL directo, sin ORM)
messages/ traducciones ES/EN
public/ estáticos, incluido el tema nw-ryu
sql/db2/ utilidades para leer los DB2 del cliente 3.4.3
docs/ documentación (foro, migración a 3.4.3)
sql/ esquemas y semillas (foro, precios, etc.)
5. Notas
- En 3.4.3 no existe
item_template: los datos de ítems salen de los.db2del cliente (verweb-next/sql/db2/). - La tienda vive en
/store-<realm>en minúsculas (p. ej./store-trinity);/storea secas da 404. - Los correos se construyen en
web-next/lib/emails.ts: una sola maqueta compartida por las 8 plantillas, con todas las URLs derivadas deSITE_URL.
6. Seguridad
- Los secretos que estuvieron hardcodeados en el historial de git deben rotarse: contraseña de MySQL/SOAP, credenciales SMTP y claves de Stripe/SumUp.
- Ni
.env.localni ningún fichero con secretos se versionan.
Description
Languages
Macaulay2
97.3%
TypeScript
2.3%
CSS
0.3%