18fe2489d0398e24a0e557b1e5c13795545aa00b
Ponía "Compra en la tienda (1 objeto)", que no identifica nada. Ahora: Tienda · BNet inna@inna.cl · Cuenta 15#1 · Innadin · Grito de la sirena (45327) x2 Cuenta Battle.net, cuenta de juego, personaje, y el nombre de cada ítem con su id. Es lo único que Stripe/SumUp enseñan en su panel, así que es lo que hay para identificar un pago cuando toca reclamar o devolver algo a mano. Se recorta a 200 caracteres porque las dos pasarelas limitan el campo (~250) y un carrito grande se pasaría. Se recortan solo los ÍTEMS ("+37 más"), nunca la cabecera: quién ha pagado importa más que el listado, que además queda entero en home_store_order. El recorte quita ítems hasta que quepa TODO con el sufijo incluido; comprobarlo antes de añadir el "+N más" se pasaba igual (206 chars con 12 ítems, visto en un checkout real). priceStoreCart trae ahora también el nombre del ítem, que no leía. Verificado contra checkouts reales de Stripe (test) con 1, 12 y 40 ítems: 82, 167 y 168 caracteres. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Nova WoW
Portal web (Django) para un servidor de World of Warcraft basado en AzerothCore.
- Python: 3.14
- Framework: Django 6.0
- Base de datos: MySQL (4 bases: la del portal
django_wow+ las de AzerothCoreacore_auth,acore_characters,acore_world)
1. Requisitos
- Python 3.14 y
venv - MySQL/MariaDB accesible
- Librerías de sistema para compilar algunas dependencias:
sudo apt install python3.14-venv python3.14-dev build-essential pkg-config \
default-libmysqlclient-dev libgmp-dev libmpfr-dev libmpc-dev libjpeg-dev zlib1g-dev
2. Puesta en marcha (desarrollo)
git clone https://git.nightspire.gg/Inna/NovaWoW.git
cd NovaWoW
# Entorno virtual
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt
# Variables de entorno
cp .env.example .env
# edita .env con tus credenciales reales (ver sección 3)
# Migraciones y arranque
python manage.py migrate
python manage.py createsuperuser # opcional
python manage.py runserver
La app queda en http://127.0.0.1:8000
3. Configuración (.env)
Toda la configuración sensible se lee de variables de entorno mediante
python-dotenv. Copia .env.example
a .env y rellena los valores. El .env no se versiona.
| Variable | Descripción |
|---|---|
DJANGO_SECRET_KEY |
Clave secreta de Django. Genera una nueva (ver abajo). |
DJANGO_DEBUG |
True en desarrollo, False en producción. |
DB_USER / DB_PASSWORD |
Credenciales MySQL (compartidas por las 4 BBDD). |
DB_HOST / DB_PORT |
Host y puerto de MySQL. |
DB_NAME_DEFAULT |
BD del portal (por defecto django_wow). |
DB_NAME_AUTH / DB_NAME_CHARACTERS / DB_NAME_WORLD |
BBDD de AzerothCore. |
AC_SOAP_* |
Conexión SOAP a AzerothCore (crear cuentas, etc.). |
SUMUP_* / STRIPE_* |
Pasarelas de pago. |
EMAIL_HOST_USER / EMAIL_HOST_PASSWORD |
SMTP de Gmail (App Password). |
Generar una SECRET_KEY nueva:
python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"
4. Producción
# Recopilar estáticos
python manage.py collectstatic --noinput
# Servir con gunicorn (4 workers)
gunicorn novawow.wsgi:application --bind 0.0.0.0:8000 --workers 4
Recomendaciones:
DJANGO_DEBUG=Falsey unaDJANGO_SECRET_KEYpropia y secreta.- Poner Nginx delante como proxy inverso y para servir
staticfiles/. - Revisar
ALLOWED_HOSTSyCSRF_TRUSTED_ORIGINSennovawow/settings.py.
5. Docker
Alternativamente, se puede levantar todo con Docker (web + MySQL):
cp .env.example .env # ajusta los secretos (no las variables DB_*, las fija compose)
docker compose up --build
- La web queda en http://127.0.0.1:8000
- El servicio
dbcrea automáticamente las 4 bases de datos. - El
entrypointespera a MySQL, aplica migraciones y recopila estáticos antes de arrancar gunicorn.
Ver docker-compose.yml y Dockerfile para los detalles.
6. Notas de seguridad
- Los secretos que estuvieron hardcodeados en el historial de git deben rotarse (contraseña MySQL/SOAP, App Password de Gmail, claves de Stripe/SumUp).
- Nunca subas el archivo
.enval repositorio.
Description
Languages
Macaulay2
97.3%
TypeScript
2.3%
CSS
0.3%