- home/bnet.py: SRP6 v2 (PBKDF2-HMAC-SHA512) para battlenet_accounts y SRP6 Grunt (SHA1) para las cuentas de juego, con helpers bnet<->game account - login por email contra battlenet_accounts; selector de cuenta de juego cuando la cuenta bnet tiene varias (my_account redirige al selector) - registro/activación crean battlenet_accounts + account enlazada (<bnetId>#1, battlenet_account/battlenet_index) - cambio de contraseña sobre battlenet_accounts; cambio de email recalcula salt/verifier (el usuario SRP depende del email) - AccountActivation: identidad por email (username/salt/verifier opcionales) + migración - plantillas login/register por email + nueva plantilla del selector - docs/MIGRACION_3.4.3.md con el detalle y los pasos de verificación Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
4.8 KiB
Migración del portal 3.3.5a → 3.4.3 (cuentas Battle.net)
Este documento describe los cambios hechos para adaptar el portal (antes AzerothCore 3.3.5a) a un servidor TrinityCore 3.4.3 con cuentas Battle.net (login por email + cuentas de juego + selector).
Resumen del cambio de modelo
| Concepto | 3.3.5a (antes) | 3.4.3 (ahora) |
|---|---|---|
| Login | username en account |
email en battlenet_accounts |
| Contraseña | SRP6 Grunt (SHA1) | SRP6 v2 (PBKDF2-HMAC-SHA512) para bnet |
| Cuenta de juego | la propia account |
1..N filas en account enlazadas por battlenet_account + battlenet_index |
| Nombre de cuenta de juego | elegido por el usuario | generado: <bnetId>#<index> (p.ej. 5#1) |
| Selector | — | sí, si la cuenta bnet tiene varias cuentas de juego |
Un registro crea dos filas: una en battlenet_accounts y otra en account.
Algoritmos SRP6 (home/bnet.py)
battlenet_accounts(SRP6 v2) — replicaBnetSRP6v2<SHA256>del source:Nde 2048 bits,g = 2, salt de 32 bytes.- usuario SRP =
HEX(SHA256(UPPER(email))). x = PBKDF2-HMAC-SHA512(usuario + ":" + password, salt, 15000, 64), con ajuste del bit alto yx %= (N-1).verifier = g^x mod N, almacenado en little-endian de longitud mínima.srp_version = 2,emailen MAYÚSCULAS.
account(SRP6 Grunt/SHA1) — el clásico de 3.3.5a, reutilizado para la cuenta de juego. Username<bnetId>#<index>y password (16, mayúsculas).
⚠️ Verificación pendiente (requiere el servidor real): el orden de bytes del
verifierde bnet se ha fijado a little-endian según el source. El login del PORTAL funciona siempre (registra y verifica igual). Para confirmar que el CLIENTE 3.4.3 puede conectar con una cuenta creada por el portal, crea una cuenta desde la web y prueba a entrar en el juego. Si fallara, cambia_BNET_VERIFIER_LITTLE_ENDIAN = Falseenhome/bnet.py. Alternativa: compara los bytes desalt/verifierde una cuenta creada con.bnetaccount createfrente a una creada por el portal con el mismo email+password.
Cambios en el código
home/bnet.py(NUEVO): SRP6 v2 + Grunt y helpers bnet↔cuentas de juego.home/views.py:login_view: login por email contrabattlenet_accounts; resuelve las cuentas de juego (autoselecciona si hay una, deja pendiente si hay varias).select_account_view(NUEVO) +auth/select_account.html: selector.my_account: si hay login bnet sin cuenta de juego elegida → selector.register_view/activate_account_view: crean bnet + cuenta de juego.change_password_view: cambia la contraseña enbattlenet_accounts.change_email_view/confirm_new_email_view: cambian el email enbattlenet_accountsrecalculando salt/verifier (dependen del email).logout_view: limpiausername,account_id,bnet_id,bnet_email.
home/models.py:AccountActivationconusername/salt/verifieropcionales (la identidad es el email). Migración0012_*.- Plantillas:
partials/login.html(campo email) ypartials/register.html(registro por email, sin username).
Sesión
Tras elegir cuenta de juego se guardan en sesión, igual que antes:
request.session['username'] (= <bnetId>#<index>) y account_id. Por eso las
~60 vistas de tienda/personajes/puntos siguen funcionando sin cambios. Además se
guardan bnet_id y bnet_email para cambios de contraseña/email.
Requisitos de esquema (BD auth)
battlenet_accounts:id, email, srp_version, salt, verifier, ...(columnas base de TrinityCore). Custom del source:battletag,trial_expiry,tournament_expiry,game_time_expiry,battlePayCredits,voteCredits.account: debe tenerbattlenet_accountybattlenet_index(además deusername, salt, verifier, email, reg_mail, expansion, recruiter, ...).
Pasos para desplegar
- Aplicar la migración del portal:
python manage.py migrate home - Apuntar
DB_NAME_AUTHalauthdel servidor 3.4.3. - Registrar una cuenta desde la web y comprobar el email de activación.
- Activar y probar login en el cliente 3.4.3 (ver nota de verificación).
Pendiente / opcional
- Battlepay/SumUp: el source trae
battlePayCredits(enbattlenet_accounts) y las tablasbattlepay_orders/battlepay_price(sql/custom/battlepay_sumup.sql). Ojo:battlepay_orders.account_ides el id de cuenta de juego (account.id), mientras quebattlePayCreditsestá en la cuenta bnet (battlenet_accounts.id); se unen poraccount.battlenet_account. La integración de la pasarela con estas tablas se puede abordar como paso siguiente. - Mostrar el email (en lugar de
<bnetId>#1) como nombre visible en «Mi cuenta» es un retoque cosmético opcional.