Changelogs
Servicios de personaje de pago (Stripe): patrón + rename
12 de julio de 2026 a las 23:21adevopg · e7cff56
- lib/stripe.ts: createCheckoutSession (crea sesión Stripe + StripeLog en home_stripelog, success_url con {CHECKOUT_SESSION_ID}), isSessionPaid, claimPaidCheckout (verifica pagado + no entregado, marca fulfilled -> evita re-entregas; port de require_paid_stripe). - lib/prices.ts: precios desde home_*price (rename/customize/race/faction/level). - components/PaidServiceForm.tsx: selector + botón de pago -> redirige a la URL de Checkout de Stripe (session.url, sin stripe.js). - Rename: route /api/character/rename/checkout (guard + valida personaje + crea checkout), página /rename (PaidServiceForm) y /rename/success (verifica pago y ejecuta SOAP .char rename, i18n). STRIPE_* + NEXT_PUBLIC_STRIPE_PUBLIC_KEY en .env.local. Namespace Rename. Verificado: checkout sin sesión 401, /rename redirige a login, /rename/success con session_id inválido no entrega el servicio (muestra error). Patrón para los demás servicios de pago (cambiar precio + comando SOAP).
Cliente SOAP + servicios de personaje SOAP (revive/unstuck) en Next.js
12 de julio de 2026 a las 23:16adevopg · 96e996e
- lib/soap.ts: executeSoapCommand (port de ac_soap.py; POST SOAP + basic auth al worldserver, timeout 5s, null si inaccesible). AC_SOAP_* en .env.local. - lib/characters.ts: getGameCharacters / characterIsOfflineAndOwned (acore_characters). - lib/character-services.ts: soapCharacterAction genérico (valida propiedad+offline, cooldown 12h vía home_revive/unstuckhistory, SOAP, registra historial) -> reviveCharacter / unstuckCharacter. - components/CharacterActionForm.tsx (cliente reutilizable: select + botón). - Routes /api/character/revive|unstuck (guard de sesión) y páginas app/[locale]/revive|unstuck (SSR, guardas, i18n). Namespace Services. Verificado: API sin sesión 401, páginas redirigen a login, cliente SOAP devuelve null limpio sin worldserver. Patrón base para el resto de servicios de personaje.
Dashboard de /account: info, puntos, créditos, token y personajes
12 de julio de 2026 a las 23:11adevopg · a0a64bc
- lib/account.ts: getAccountDashboard(session) lee puntos (home_api_points), créditos battlepay (battlenet_accounts), estado del token de seguridad (home_securitytoken) y personajes (acore_characters). Resiliente si las BD de AzerothCore no están pobladas (devuelve vacíos/0). - app/[locale]/account: página protegida enriquecida (tarjetas de cuenta + puntos + rejilla de personajes con oro), i18n. Namespace Account ampliado. Verificado: build OK, guarda sigue redirigiendo a login sin sesión.
Recuperación de cuenta en Next.js (3 flujos + reset), con Turnstile
12 de julio de 2026 a las 23:07adevopg · 3573b7e
- lib/recover.ts: requestRecovery(type,email) -> password (crea token en home_passwordreset + email), accountname (email con las cuentas), activation (reenvía enlace); respuesta genérica anti-enumeración. resetPassword(token,pass) re-deriva el verifier SRP6 v2 (bnetMakeRegistration) y actualiza battlenet_accounts, marca el token usado. - Routes /api/auth/recover (Turnstile) y /api/auth/reset-password. - Páginas app/[locale]/recover (RecoverForm: selector de tipo + email + Turnstile) y reset-password (ResetForm con token de la URL). Catálogos Recover, Reset. Verificado: recover sin captcha -> captchaFailed; reset token inválido -> invalidLink; páginas 200. Reutiliza home_passwordreset de Django. Crypto de reset ya validada.
Cloudflare Turnstile en login y registro (Next.js)
12 de julio de 2026 a las 23:04adevopg · aa61f79
- lib/turnstile.ts: verifyTurnstile(token, ip) contra siteverify (fail-closed). - components/Turnstile.tsx: widget cliente (carga el script de Cloudflare, callback con el token). Site key por NEXT_PUBLIC_TURNSTILE_SITE_KEY; secreto server-only. - LoginForm/RegisterForm: widget + token en el POST; submit deshabilitado hasta resolver el captcha (si hay site key). - Routes login/register: verifican el token antes de continuar (error captchaFailed). - Catálogos: captchaFailed. Verificado: POST sin token -> captchaFailed en login y registro (enforcement server).


