diff --git a/.gitignore b/.gitignore index 2330325..a4c6b38 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ venv/ home/__pycache__ -home/migrations/__pycache__ \ No newline at end of file +home/migrations/__pycache__ +**/__pycache__/*.pyc \ No newline at end of file diff --git a/home/migrations/0009_stripelog.py b/home/migrations/0009_stripelog.py new file mode 100644 index 0000000..187eb4b --- /dev/null +++ b/home/migrations/0009_stripelog.py @@ -0,0 +1,30 @@ +# Generated by Django 5.1.4 on 2025-02-16 18:16 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('home', '0008_category_remove_storecategory_parent_category_and_more'), + ] + + operations = [ + migrations.CreateModel( + name='StripeLog', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('account_id', models.IntegerField()), + ('username', models.CharField(max_length=100)), + ('email', models.EmailField(max_length=254)), + ('acore_ip', models.GenericIPAddressField()), + ('stripe_ip', models.GenericIPAddressField(blank=True, null=True)), + ('product_name', models.TextField()), + ('amount', models.DecimalField(decimal_places=2, max_digits=10)), + ('session_id', models.CharField(max_length=255)), + ('mode', models.CharField(choices=[('test', 'Test'), ('live', 'Live')], max_length=10)), + ('character_name', models.CharField(max_length=100)), + ('timestamp', models.DateTimeField(auto_now_add=True)), + ], + ), + ] diff --git a/home/models.py b/home/models.py index 91adf0e..2bd828c 100644 --- a/home/models.py +++ b/home/models.py @@ -271,4 +271,20 @@ class HomeApiPoints(models.Model): def __str__(self): return f"Cuenta {self.accountID} - PV: {self.vp}, DP: {self.dp}" - \ No newline at end of file + + +class StripeLog(models.Model): + account_id = models.IntegerField() # ID de la cuenta en acore_auth + username = models.CharField(max_length=100) # Nombre de la cuenta + email = models.EmailField() # Correo electrónico + acore_ip = models.GenericIPAddressField() # IP de acore_auth + stripe_ip = models.GenericIPAddressField(blank=True, null=True) # IP detectada por Stripe + product_name = models.TextField() # Producto comprado + amount = models.DecimalField(max_digits=10, decimal_places=2) # Precio total + session_id = models.CharField(max_length=255) # ID de la sesión de Stripe + mode = models.CharField(max_length=10, choices=[("test", "Test"), ("live", "Live")]) # Modo de Stripe + character_name = models.CharField(max_length=100) # Nombre del personaje que compró + timestamp = models.DateTimeField(auto_now_add=True) # Fecha y hora + + def __str__(self): + return f"{self.username} compró {self.product_name} por {self.amount}€ ({self.mode})" \ No newline at end of file diff --git a/home/pagos_stripe.py b/home/pagos_stripe.py index d4b9522..debec79 100644 --- a/home/pagos_stripe.py +++ b/home/pagos_stripe.py @@ -1,10 +1,12 @@ import stripe from django.conf import settings - +from .models import StripeLog +from django.utils.timezone import now stripe.api_key = settings.STRIPE_SECRET_KEY -def create_checkout_session(amount, currency="eur", success_url=None, cancel_url=None, product_name=""): +def create_checkout_session(account_id, username, email, acore_ip, amount, character_name, currency="eur", success_url=None, cancel_url=None, product_name=""): try: + # 🔹 Crear sesión de pago en Stripe session = stripe.checkout.Session.create( payment_method_types=["card"], line_items=[{ @@ -19,6 +21,26 @@ def create_checkout_session(amount, currency="eur", success_url=None, cancel_url success_url=success_url, cancel_url=cancel_url, ) + + # 🔹 Determinar si Stripe está en modo TEST o LIVE + mode = "live" if settings.STRIPE_SECRET_KEY.startswith("sk_live") else "test" + + # 🔹 Guardar el log en la base de datos + StripeLog.objects.create( + account_id=account_id, + username=username, + email=email, + acore_ip=acore_ip, + stripe_ip=None, # Se actualizará cuando llegue el webhook + product_name=product_name, + amount=amount, + session_id=session.id, + mode=mode, + character_name=character_name, + timestamp=now() + ) + return {"success": True, "session_id": session.id} + except Exception as e: - return {"success": False, "error": str(e)} + return {"success": False, "error": str(e)} \ No newline at end of file diff --git a/home/urls.py b/home/urls.py index 86844ab..ff1b669 100644 --- a/home/urls.py +++ b/home/urls.py @@ -1,6 +1,6 @@ from django.urls import path from . import views -from .views import home_view, download_client_view, content_creators_view +from .views import home_view, download_client_view, content_creators_view, stripe_webhook urlpatterns = [ path('', views.home_view, name='index'), # Ruta para la página principal @@ -71,7 +71,9 @@ urlpatterns = [ path('restore-character/', views.restore_character_view, name='restore-character'), path('restore-items/', views.restore_items_view, name='restore-items'), path('quest-character/', views.quest_character_view, name='quest-character'), - path('send-gift/', views.send_gift_view, name='send-gift'), + path('send-gift/', views.send_gift_view, name='send-gift'), + path("webhook/stripe/", stripe_webhook, name="stripe-webhook"), + ] handler404 = 'home.views.not_found' diff --git a/home/views.py b/home/views.py index 0a446c6..f3d95eb 100644 --- a/home/views.py +++ b/home/views.py @@ -6,8 +6,9 @@ from django.db import connections from django.contrib import messages from django.contrib.auth import logout from django import forms +import stripe from .pagos_stripe import create_checkout_session -from .models import Noticia, ClienteCategoria, ServerSelection, RecruitAFriend, DownloadClientPage, ContentCreator, RecruitReward, ClaimedReward, AccountActivation, SecurityToken, GuildRenameSettings, VoteSite, VoteLog, HomeApiPoints, UnstuckHistory, ReviveHistory, RenamePrice, CustomizePrice, ChangeRacePrice, ChangeFactionPrice, LevelUpPrice, GoldPrice, TransferPrice, Category, Item +from .models import Noticia, ClienteCategoria, ServerSelection, RecruitAFriend, DownloadClientPage, ContentCreator, RecruitReward, ClaimedReward, AccountActivation, SecurityToken, GuildRenameSettings, VoteSite, VoteLog, HomeApiPoints, UnstuckHistory, ReviveHistory, RenamePrice, CustomizePrice, ChangeRacePrice, ChangeFactionPrice, LevelUpPrice, GoldPrice, TransferPrice, Category, Item, StripeLog from django.views.decorators.csrf import csrf_exempt from datetime import datetime, timedelta from .zone_definitions import get_zone_name @@ -22,6 +23,27 @@ from decimal import Decimal, ROUND_HALF_UP # Configuración del logger logger = logging.getLogger(__name__) +@csrf_exempt +def stripe_webhook(request): + payload = request.body + sig_header = request.META.get("HTTP_STRIPE_SIGNATURE") + + try: + event = stripe.Webhook.construct_event(payload, sig_header, settings.STRIPE_WEBHOOK_SECRET) + + if event["type"] == "checkout.session.completed": + session = event["data"]["object"] + session_id = session["id"] + stripe_ip = request.META.get("REMOTE_ADDR") # IP detectada + + # 🔹 Actualizar la IP de Stripe en el log + StripeLog.objects.filter(session_id=session_id).update(stripe_ip=stripe_ip, timestamp=now()) + + return JsonResponse({"success": True}) + + except stripe.error.SignatureVerificationError: + return JsonResponse({"success": False, "message": "Firma de webhook no válida."}, status=400) + def get_class_css(class_id): class_map = { 1: 'warrior', @@ -1141,45 +1163,60 @@ def rename_character_view(request): if not username: return redirect('login') - # Obtener personajes del usuario desde la base de datos `acore_characters` + # 🔹 Obtener información de la cuenta desde acore_auth + with connections['acore_auth'].cursor() as cursor: + cursor.execute(""" + SELECT id, email, last_ip FROM account WHERE username = %s + """, [username]) + account_info = cursor.fetchone() + + if not account_info: + return JsonResponse({'success': False, 'message': 'Error: Cuenta no encontrada.'}) + + account_id, email, acore_ip = account_info + client_ip = request.META.get('REMOTE_ADDR', '') + + # 🔹 Obtener personajes del usuario desde la base de datos `acore_characters` with connections['acore_characters'].cursor() as cursor: cursor.execute(""" - SELECT name - FROM characters - WHERE account = ( - SELECT id - FROM acore_auth.account - WHERE username = %s - ) - """, [username]) + SELECT name FROM characters WHERE account = %s + """, [account_id]) characters = [row[0] for row in cursor.fetchall()] - # Obtener el precio del renombrado + # 🔹 Obtener el precio del renombrado price_obj = RenamePrice.objects.first() price = price_obj.price if price_obj else 2.00 - - # Ejecutar el comando SOAP De prueba haber si el servidor funciona antes de proceder al pago + + # 🔹 Ejecutar el comando SOAP para verificar el servidor command = f".server info" response = execute_soap_command(command) if request.method == 'POST': character_name = request.POST.get('character') - + if response is None: return JsonResponse({'success': False, 'message': 'Error de comunicación con el servidor. Intente nuevamente más tarde.'}) - # Validar si el personaje fue seleccionado if not character_name: return JsonResponse({'success': False, 'message': 'Por favor, seleccione un personaje.'}) - # Verificar si el personaje pertenece al usuario if character_name not in characters: return JsonResponse({'success': False, 'message': 'No tienes permiso para renombrar este personaje.'}) - # Crear sesión de pago con Stripe + # 🔹 Crear sesión de pago con Stripe success_url = request.build_absolute_uri(reverse('rename-success')) cancel_url = request.build_absolute_uri(reverse('rename-cancel')) - stripe_response = create_checkout_session(price, success_url=success_url, cancel_url=cancel_url, product_name=f"Renombrar personaje: {character_name}") + stripe_response = create_checkout_session( + account_id=account_id, + username=username, + email=email, + acore_ip=acore_ip, + amount=price, + character_name=character_name, + success_url=success_url, + cancel_url=cancel_url, + product_name=f"Renombrar personaje: {character_name}" + ) if stripe_response["success"]: request.session['rename_character'] = character_name @@ -1244,17 +1281,25 @@ def customize_character_view(request): if not username: return redirect('login') - # Obtener personajes del usuario desde la base de datos `acore_characters` + # ?? Obtener informaci��n de la cuenta desde acore_auth + with connections['acore_auth'].cursor() as cursor: + cursor.execute(""" + SELECT id, email, last_ip FROM account WHERE username = %s + """, [username]) + account_info = cursor.fetchone() + + if not account_info: + return JsonResponse({'success': False, 'message': 'Error: Cuenta no encontrada.'}) + + account_id, email, acore_ip = account_info + client_ip = request.META.get('REMOTE_ADDR', '') + + # ?? Obtener personajes del usuario desde la base de datos `acore_characters` with connections['acore_characters'].cursor() as cursor: cursor.execute(""" - SELECT name - FROM characters - WHERE account = ( - SELECT id - FROM acore_auth.account - WHERE username = %s - ) - """, [username]) + SELECT name FROM characters WHERE account = %s + """, [account_id]) + characters = [row[0] for row in cursor.fetchall()] # Obtener el precio de la personalización (si se gestiona desde el admin) @@ -1275,7 +1320,17 @@ def customize_character_view(request): # Crear sesión de pago con Stripe success_url = request.build_absolute_uri(reverse('customize-success')) cancel_url = request.build_absolute_uri(reverse('customize-cancel')) - stripe_response = create_checkout_session(price, success_url=success_url, cancel_url=cancel_url, product_name=f"Personalizar personaje: {character_name}") + stripe_response = create_checkout_session( + account_id=account_id, + username=username, + email=email, + acore_ip=acore_ip, + amount=price, + character_name=character_name, + success_url=success_url, + cancel_url=cancel_url, + product_name=f"Personalizar personaje: {character_name}" + ) if stripe_response["success"]: @@ -1319,16 +1374,23 @@ def change_race_character_view(request): return redirect('login') # Obtener personajes del usuario desde la base de datos `acore_characters` + with connections['acore_auth'].cursor() as cursor: + cursor.execute(""" + SELECT id, email, last_ip FROM account WHERE username = %s + """, [username]) + account_info = cursor.fetchone() + + if not account_info: + return JsonResponse({'success': False, 'message': 'Error: Cuenta no encontrada.'}) + + account_id, email, acore_ip = account_info + client_ip = request.META.get('REMOTE_ADDR', '') + + # ?? Obtener personajes del usuario desde la base de datos `acore_characters` with connections['acore_characters'].cursor() as cursor: cursor.execute(""" - SELECT name - FROM characters - WHERE account = ( - SELECT id - FROM acore_auth.account - WHERE username = %s - ) - """, [username]) + SELECT name FROM characters WHERE account = %s + """, [account_id]) characters = [row[0] for row in cursor.fetchall()] # Obtener el precio del cambio de raza @@ -1349,7 +1411,17 @@ def change_race_character_view(request): # Crear sesión de pago con Stripe success_url = request.build_absolute_uri(reverse('change-race-success')) cancel_url = request.build_absolute_uri(reverse('change-race-cancel')) - stripe_response = create_checkout_session(price, success_url=success_url, cancel_url=cancel_url, product_name=f"Cambio de Raza del personaje: {character_name}") + stripe_response = create_checkout_session( + account_id=account_id, + username=username, + email=email, + acore_ip=acore_ip, + amount=price, + character_name=character_name, + success_url=success_url, + cancel_url=cancel_url, + product_name=f"Cambio de Raza del personaje: {character_name}" + ) if stripe_response["success"]: # Guardar el personaje en la sesión para el cambio @@ -1392,16 +1464,23 @@ def change_faction_character_view(request): return redirect('login') # Obtener personajes del usuario desde la base de datos `acore_characters` + with connections['acore_auth'].cursor() as cursor: + cursor.execute(""" + SELECT id, email, last_ip FROM account WHERE username = %s + """, [username]) + account_info = cursor.fetchone() + + if not account_info: + return JsonResponse({'success': False, 'message': 'Error: Cuenta no encontrada.'}) + + account_id, email, acore_ip = account_info + client_ip = request.META.get('REMOTE_ADDR', '') + + # ?? Obtener personajes del usuario desde la base de datos `acore_characters` with connections['acore_characters'].cursor() as cursor: cursor.execute(""" - SELECT name - FROM characters - WHERE account = ( - SELECT id - FROM acore_auth.account - WHERE username = %s - ) - """, [username]) + SELECT name FROM characters WHERE account = %s + """, [account_id]) characters = [row[0] for row in cursor.fetchall()] # Obtener el precio del cambio de facción @@ -1422,7 +1501,17 @@ def change_faction_character_view(request): # Crear sesión de pago con Stripe success_url = request.build_absolute_uri(reverse('change-faction-success')) cancel_url = request.build_absolute_uri(reverse('change-faction-cancel')) - stripe_response = create_checkout_session(price, success_url=success_url, cancel_url=cancel_url, product_name=f"Cambiar Faccion del personaje: {character_name}") + stripe_response = create_checkout_session( + account_id=account_id, + username=username, + email=email, + acore_ip=acore_ip, + amount=price, + character_name=character_name, + success_url=success_url, + cancel_url=cancel_url, + product_name=f"Cambiar Faccion del personaje: {character_name}" + ) if stripe_response["success"]: # Guardar el personaje seleccionado en la sesión @@ -1466,16 +1555,23 @@ def level_up_character_view(request): return redirect('login') # Obtener personajes del usuario desde la base de datos `acore_characters` + with connections['acore_auth'].cursor() as cursor: + cursor.execute(""" + SELECT id, email, last_ip FROM account WHERE username = %s + """, [username]) + account_info = cursor.fetchone() + + if not account_info: + return JsonResponse({'success': False, 'message': 'Error: Cuenta no encontrada.'}) + + account_id, email, acore_ip = account_info + client_ip = request.META.get('REMOTE_ADDR', '') + + # ?? Obtener personajes del usuario desde la base de datos `acore_characters` with connections['acore_characters'].cursor() as cursor: cursor.execute(""" - SELECT name - FROM characters - WHERE account = ( - SELECT id - FROM acore_auth.account - WHERE username = %s - ) - """, [username]) + SELECT name FROM characters WHERE account = %s + """, [account_id]) characters = [row[0] for row in cursor.fetchall()] # Obtener el precio de subir a nivel 80 @@ -1496,7 +1592,17 @@ def level_up_character_view(request): # Crear sesión de pago con Stripe success_url = request.build_absolute_uri(reverse('level-up-success')) cancel_url = request.build_absolute_uri(reverse('level-up-cancel')) - stripe_response = create_checkout_session(price, success_url=success_url, cancel_url=cancel_url, product_name=f"Subir el Nivel 80 del personaje: {character_name}") + stripe_response = create_checkout_session( + account_id=account_id, + username=username, + email=email, + acore_ip=acore_ip, + amount=price, + character_name=character_name, + success_url=success_url, + cancel_url=cancel_url, + product_name=f"Subir el Nivel 80 del personaje: {character_name}" + ) if stripe_response["success"]: # Guardar el personaje en la sesión para usarlo después del pago @@ -1542,19 +1648,30 @@ def gold_character_view(request): return redirect('login') # Obtener personajes y estado de conexión del usuario - with connections['acore_characters'].cursor() as cursor: - cursor.execute(""" - SELECT name, online, money - FROM characters - WHERE account = ( - SELECT id - FROM acore_auth.account - WHERE username = %s - ) - """, [username]) - characters_data = cursor.fetchall() + try: + with connections['acore_auth'].cursor() as cursor: + cursor.execute(""" + SELECT id, email, last_ip FROM account WHERE username = %s + """, [username]) + account_info = cursor.fetchone() - characters = {row[0]: {'online': row[1], 'money': row[2]} for row in characters_data} + if not account_info: + return JsonResponse({'success': False, 'message': 'Error: Cuenta no encontrada.'}) + + account_id, email, acore_ip = account_info + client_ip = request.META.get('REMOTE_ADDR', '') + + # Obtener personajes del usuario desde la base de datos `acore_characters` + with connections['acore_characters'].cursor() as cursor: + cursor.execute(""" + SELECT name, online, money FROM characters WHERE account = %s + """, [account_id]) + characters_data = cursor.fetchall() + + characters = {row[0]: {'online': row[1], 'money': row[2]} for row in characters_data} + + except Exception as e: + return JsonResponse({'success': False, 'message': f'Error al obtener los personajes: {str(e)}'}) # Obtener precios del oro gold_prices = GoldPrice.objects.all().order_by('gold_amount') @@ -1588,7 +1705,19 @@ def gold_character_view(request): # Crear sesión de pago con Stripe success_url = request.build_absolute_uri(reverse('gold-success')) cancel_url = request.build_absolute_uri(reverse('gold-cancel')) - stripe_response = create_checkout_session(price, success_url=success_url, cancel_url=cancel_url, product_name=f"Aumentar el Oro: {gold_amount} al Personaje: {character_name}") + + # Llamada corregida a create_checkout_session con todos los parámetros requeridos + stripe_response = create_checkout_session( + account_id=account_id, + username=username, + email=email, + acore_ip=acore_ip, + amount=stripe_price, # El precio calculado + character_name=character_name, + success_url=success_url, + cancel_url=cancel_url, + product_name=f"Aumentar el Oro: {gold_amount} al Personaje: {character_name}" + ) if stripe_response["success"]: # Guardar en sesión los datos para el callback tras el pago @@ -1645,12 +1774,12 @@ def transfer_character_view(request): # Obtener el ID de usuario desde acore_auth.account with connections['acore_auth'].cursor() as cursor: - cursor.execute("SELECT id FROM account WHERE username = %s", [username]) + cursor.execute("SELECT id, email, last_ip FROM account WHERE username = %s", [username]) user_data = cursor.fetchone() if not user_data: return JsonResponse({'success': False, 'message': 'Cuenta no encontrada. Por favor, inicie sesión nuevamente.'}) - user_id = user_data[0] # ID de la cuenta + user_id, email, acore_ip = user_data # ID de la cuenta, email y la última IP # Obtener personajes de la cuenta de origen with connections['acore_characters'].cursor() as cursor: @@ -1722,7 +1851,19 @@ def transfer_character_view(request): # Crear sesión de pago con Stripe success_url = request.build_absolute_uri(reverse('transfer-success')) cancel_url = request.build_absolute_uri(reverse('transfer-cancel')) - stripe_response = create_checkout_session(price, success_url=success_url, cancel_url=cancel_url, product_name=f"Trasnferir el personaje: {character_name} a la cuenta de destino: {destination_account}") + + # Llamada corregida a create_checkout_session con todos los parámetros requeridos + stripe_response = create_checkout_session( + username=username, + email=email, + acore_ip=acore_ip, + account_id=user_id, # Pasar el account_id + amount=price, # El precio de la transferencia + character_name=character_name, + success_url=success_url, + cancel_url=cancel_url, + product_name=f"Transferir el personaje: {character_name} a la cuenta de destino: {destination_account}" + ) if stripe_response["success"]: # Guardar los datos de la transferencia en la sesión para usarlos después del pago @@ -1805,7 +1946,7 @@ def store_novawow_view(request): # Obtener carrito desde la sesión carrito = request.session.get('carrito', []) - # ✅ Calcular el precio total con 2 decimales + # Calcular el precio total con 2 decimales total_price = sum(Decimal(item['precio']) for item in carrito) total_price_with_iva = (total_price * Decimal('1.21')).quantize(Decimal('0.01'), rounding=ROUND_HALF_UP) @@ -1818,11 +1959,11 @@ def store_novawow_view(request): if not character_name: return JsonResponse({'success': False, 'message': 'Por favor, selecciona un personaje.'}) - # ✅ ACTUALIZAR EL CARRITO Y FORZAR LA SESIÓN + # ACTUALIZAR EL CARRITO Y FORZAR LA SESIÓN request.session['carrito'] = carrito request.session.modified = True # Forzar que Django guarde la sesión inmediatamente - # ✅ RECALCULAR EL PRECIO CON EL CARRITO ACTUALIZADO + # RECALCULAR EL PRECIO CON EL CARRITO ACTUALIZADO total_price = sum(Decimal(item['precio']) for item in carrito) total_price_with_iva = (total_price * Decimal('1.21')).quantize(Decimal('0.01'), rounding=ROUND_HALF_UP) @@ -1830,15 +1971,36 @@ def store_novawow_view(request): if character_name not in characters: return JsonResponse({'success': False, 'message': 'No tienes permiso para renombrar este personaje.'}) - # ✅ Definir siempre `product_description` antes de usarlo + # Definir siempre `product_description` antes de usarlo product_description = ", ".join([f"{item.get('nombre', 'Ítem desconocido')} x{item.get('cantidad', 1)}" for item in carrito]) + # Obtener detalles del usuario + with connections['acore_auth'].cursor() as cursor: + cursor.execute("SELECT id, email, last_ip FROM account WHERE username = %s", [username]) + user_data = cursor.fetchone() + + if not user_data: + return JsonResponse({'success': False, 'message': 'Cuenta no encontrada.'}) + + user_id, email, acore_ip = user_data # ID de la cuenta, email y la última IP # Crear sesión de pago con Stripe success_url = request.build_absolute_uri(reverse('store-novawow/success')) cancel_url = request.build_absolute_uri(reverse('store-novawow/cancel')) - stripe_response = create_checkout_session(total_price_with_iva, success_url=success_url, cancel_url=cancel_url, product_name=f"Compra de items del personaje: {character_name} : {product_description}") + # Llamada corregida a create_checkout_session con todos los parámetros requeridos + stripe_response = create_checkout_session( + username=username, + email=email, + acore_ip=acore_ip, + account_id=user_id, # Pasar el account_id + amount=total_price_with_iva, # El precio con IVA + character_name=character_name, + success_url=success_url, + cancel_url=cancel_url, + product_name=f"Compra de ítems para el personaje: {character_name} : {product_description}" + ) + if stripe_response["success"]: request.session['store_novawow'] = character_name return JsonResponse({ @@ -1854,8 +2016,9 @@ def store_novawow_view(request): 'store_data': store_data, 'categories': categories, 'total_price': total_price_with_iva - }) - + }) + + from collections import Counter def store_novawow_success_view(request): diff --git a/novawow/__pycache__/__init__.cpython-313.pyc b/novawow/__pycache__/__init__.cpython-313.pyc deleted file mode 100644 index 575c101..0000000 Binary files a/novawow/__pycache__/__init__.cpython-313.pyc and /dev/null differ diff --git a/novawow/__pycache__/__init__.cpython-39.pyc b/novawow/__pycache__/__init__.cpython-39.pyc deleted file mode 100644 index 7186450..0000000 Binary files a/novawow/__pycache__/__init__.cpython-39.pyc and /dev/null differ diff --git a/novawow/__pycache__/middleware.cpython-313.pyc b/novawow/__pycache__/middleware.cpython-313.pyc deleted file mode 100644 index be44c57..0000000 Binary files a/novawow/__pycache__/middleware.cpython-313.pyc and /dev/null differ diff --git a/novawow/__pycache__/middleware.cpython-39.pyc b/novawow/__pycache__/middleware.cpython-39.pyc deleted file mode 100644 index edddc50..0000000 Binary files a/novawow/__pycache__/middleware.cpython-39.pyc and /dev/null differ diff --git a/novawow/__pycache__/settings.cpython-313.pyc b/novawow/__pycache__/settings.cpython-313.pyc deleted file mode 100644 index 4cf9b79..0000000 Binary files a/novawow/__pycache__/settings.cpython-313.pyc and /dev/null differ diff --git a/novawow/__pycache__/settings.cpython-39.pyc b/novawow/__pycache__/settings.cpython-39.pyc deleted file mode 100644 index 5ff7f72..0000000 Binary files a/novawow/__pycache__/settings.cpython-39.pyc and /dev/null differ diff --git a/novawow/__pycache__/urls.cpython-313.pyc b/novawow/__pycache__/urls.cpython-313.pyc deleted file mode 100644 index 4adb62d..0000000 Binary files a/novawow/__pycache__/urls.cpython-313.pyc and /dev/null differ diff --git a/novawow/__pycache__/urls.cpython-39.pyc b/novawow/__pycache__/urls.cpython-39.pyc deleted file mode 100644 index 24c0e55..0000000 Binary files a/novawow/__pycache__/urls.cpython-39.pyc and /dev/null differ diff --git a/novawow/__pycache__/views.cpython-313.pyc b/novawow/__pycache__/views.cpython-313.pyc deleted file mode 100644 index 4e7bc9b..0000000 Binary files a/novawow/__pycache__/views.cpython-313.pyc and /dev/null differ diff --git a/novawow/__pycache__/views.cpython-39.pyc b/novawow/__pycache__/views.cpython-39.pyc deleted file mode 100644 index c87e8fd..0000000 Binary files a/novawow/__pycache__/views.cpython-39.pyc and /dev/null differ diff --git a/novawow/__pycache__/wsgi.cpython-313.pyc b/novawow/__pycache__/wsgi.cpython-313.pyc deleted file mode 100644 index 84bf3a8..0000000 Binary files a/novawow/__pycache__/wsgi.cpython-313.pyc and /dev/null differ diff --git a/novawow/__pycache__/wsgi.cpython-39.pyc b/novawow/__pycache__/wsgi.cpython-39.pyc deleted file mode 100644 index 226e99d..0000000 Binary files a/novawow/__pycache__/wsgi.cpython-39.pyc and /dev/null differ diff --git a/novawow/settings.py b/novawow/settings.py index c1b42a7..c1ecc9e 100644 --- a/novawow/settings.py +++ b/novawow/settings.py @@ -37,7 +37,7 @@ if not DEBUG: CSRF_COOKIE_SECURE = True else: # Modo desarrollo, no se aplican configuraciones de seguridad - ALLOWED_HOSTS = ['localhost', '127.0.0.1'] + ALLOWED_HOSTS = ['localhost', '127.0.0.1', 'e37b-95-23-174-224.ngrok-free.app'] SECURE_SSL_REDIRECT = False SECURE_PROXY_SSL_HEADER = None SECURE_HSTS_SECONDS = 0 @@ -159,7 +159,7 @@ TEMPLATES = [ STRIPE_PUBLIC_KEY = "pk_test_51QQrdMI3Vazamytgfb8046k0AwaRR3Cu8ni80b8iglZMUlUZVJarW1azXGXl3qV5VZtr2S7Xmpgr43Zcg73Pd8eT00C8CPOnja" # Cambia según tu configuración STRIPE_SECRET_KEY = "sk_test_51QQrdMI3VazamytgcKpxF9cQcUfZYOam8b3IYgpJnpUBdY4xYOorTHRE0AbArfZbRT4nSbY2DEAMEvgxJl6gmgjJ00OaZgiryS" - +STRIPE_WEBHOOK_SECRET = "" WSGI_APPLICATION = 'novawow.wsgi.application'