Implementado Logs de Pagos de Stripe y Historial de conexiones de seguridad

This commit is contained in:
adevopg
2025-02-18 11:42:46 +01:00
parent e94915e667
commit 0a650eb161
5 changed files with 136 additions and 91 deletions
+30 -10
View File
@@ -8,7 +8,8 @@ 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, StripeLog
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, LoginAttempt
from django.views.decorators.csrf import csrf_exempt
from datetime import datetime, timedelta
from .zone_definitions import get_zone_name
@@ -196,20 +197,26 @@ def login_view(request):
if form.is_valid():
username = form.cleaned_data['username']
password = form.cleaned_data['password']
ip_address = request.META.get('REMOTE_ADDR') # Obtener la IP del cliente
# Llamar a la función de autenticación
# Llamar a la funci¨®n de autenticaci¨®n
if authenticate(username, password):
# Guardar el nombre de usuario en mayúsculas en la sesión
# Guardar el intento exitoso
log_login_attempt(username, "Exito", ip_address)
# Guardar el nombre de usuario en may¨²sculas en la sesi¨®n
request.session['username'] = username.upper()
return JsonResponse({'success': True})
else:
return JsonResponse({'success': False, 'error': "Usuario o contraseña incorrectos"})
# Guardar el intento fallido
log_login_attempt(username, "Fracaso", ip_address)
return JsonResponse({'success': False, 'error': "Usuario o contrase?a incorrectos"})
else:
return JsonResponse({'success': False, 'error': "Formulario no válido"})
return JsonResponse({'success': False, 'error': "Formulario no valido"})
form = LoginForm()
return render(request, 'auth/login.html', {'form': form})
# Función para contar los personajes en línea
def get_online_characters_count():
with connections['acore_characters'].cursor() as cursor:
@@ -2320,10 +2327,23 @@ def ban_history_view(request):
return render(request, 'account/ban_history.html')
def security_history_view(request):
"""
Vista para mostrar el historial de seguridad del usuario.
"""
return render(request, 'account/security_history.html')
username = request.session.get('username')
if not username:
return redirect('login') # Si no est¨¢ autenticado, redirigir al login
# Obtener los ¨²ltimos 20 intentos de inicio de sesi¨®n
login_attempts = LoginAttempt.objects.filter(username=username).order_by('-timestamp')[:20]
return render(request, 'account/security_history.html', {'login_attempts': login_attempts})
def log_login_attempt(username, status, ip_address):
# Registrar intento de inicio de sesi¨®n en el historial
LoginAttempt.objects.create(
username=username,
status=status,
ip_address=ip_address,
timestamp=timezone.now()
)
def trade_points_view(request):