From 5e1937d245c66b62aee4cc1c2a83991ecc7c5c6c Mon Sep 17 00:00:00 2001 From: adevopg <133045315+adevopg@users.noreply.github.com> Date: Mon, 18 Nov 2024 09:44:02 +0100 Subject: [PATCH] Se arreglado un peque;o Fallo que al usar el hash se podria usar de nuevoy eso daba un fallo seguridad --- home/__pycache__/models.cpython-313.pyc | Bin 13372 -> 13745 bytes home/__pycache__/views.cpython-313.pyc | Bin 62430 -> 62746 bytes home/models.py | 16 ++++++++++++++-- home/views.py | 17 ++++++++++++----- novawow/__pycache__/settings.cpython-313.pyc | Bin 4569 -> 4593 bytes novawow/settings.py | 4 ++-- 6 files changed, 28 insertions(+), 9 deletions(-) diff --git a/home/__pycache__/models.cpython-313.pyc b/home/__pycache__/models.cpython-313.pyc index eaebdf1e23e8fcdd631f6c8e8a2082feec03afcc..37632d778d3cdf2cbbbf1365aa4c256a62bb7f0a 100644 GIT binary patch delta 948 zcmZvaYe@*N$CO zZX_hI3>i0n7SuQlok|YAk7Z6lfxrk*!W4rDJVUg!L{=;pb_@+M?8Hbuno{PZb^JY|n>azCV??cx zK&TUxqP|9DON^)stEvLc^-YCUO}x3a#-=k-@d@8Ai7L>+WrE%CY zqja?&U*ysjIL9pK7(F(_6--N$7uCBL)RtMbWw>_4|Hwb1-q&9IO$xE4uqA_7_ja}2 z*l5*ai|H$L;Q5SExP?jP(=d*Hb2%HLNhvyT##{rTXlR+m51shJvJ7{zZ%;Ga$K=eB z*w-ZLK87>(5XO~Ed;CkfHH{*S18$C;ppv2!_gnK}BGhPA0Q6v+?Xql=u3g7F>Owqd zcfugn*>AH`)THP^nd1sf(cGaPhYaF}c2>lv_#|r{M(|p8EzIL;wjov=A&ba4^Vm5W zMKOe@oNX|N>#P=6or9!{uAH-^!S$RIe3%9;6O5A?loNC?i%I4iaocwjCjaU!JVTee zBJmRqU7`3)5vH%gE>TGl!dLE-u!Nf2H_6dki}oAsAzH{1{>U}3Yb26>&7cX>^2YeB h6b20M7~=|)O1LTA1?~s3KE*@DCPUP%(B5HMlkxr9&SPek`X0~+S=P-4^h@j6y2ZELkG@>!#UsY;rBbmvri+; zH>HxMq*(vDGkjNngV8{_*z*c#4aHMIt&R%nromJ?(DYE>l!j@wt;89fuzRTeu#LF> zk08ARgwCK`M+vH+LQsd5c4nFNheC<5c*-A2MaPFz(L{WG6sx9PxS9I}M=wbg_SFW>`ShZbuGe&jdFMx|Nu5pM7|wXFI*Yk9+3?nUyk`>`t9e|i7+W@rgO z>17uUkjA&&1(?8$We`gE$#R0uNnU{cQEsE9{WYE*I0#}i>jX@SCZTXfZ zNtMNZyBxFOrfVgE_ko78|R6s~pG~o6+HT0aN(JabEU>$gbfM z>&HT`3ubVo_c~oBO@b*r=ez)A;w>>-WgwsXHxUYGa=nAw_`?-}DxPv1m}SMDL?Sja z9N!lmiJid-x0kLEIl&x0cVB`En&nzN(su{u@n_#jSis|+0Zt^M4-yunOtwn6Le<*4 zvu%QzOhjZkEv|VULmp?h4Q*K^&CdjDf5(TM2D(N{f_Zd$4?+zudMllcYc}rC_)z09 nH9YMz&>NBxq)e)C(pT)LtCSFc8QCqxtfEely3XO?_G5nl@bJ9n diff --git a/home/__pycache__/views.cpython-313.pyc b/home/__pycache__/views.cpython-313.pyc index ee78eb0d1aab0d8ba0166034f3bc49bf8a38ff44..ab5a13463a51ceff059fff7e035768d56016a60e 100644 GIT binary patch delta 3182 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 d_ZJYGsQvaZ3DA;_ self.created_at + timezone.timedelta(hours=1) + def __str__(self): + return f"Activation for {self.username}" + + class SecurityToken(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE) diff --git a/home/views.py b/home/views.py index b4f7d90..aee4310 100644 --- a/home/views.py +++ b/home/views.py @@ -1056,11 +1056,15 @@ def change_email_view(request): def confirm_old_email_view(request): hash = request.GET.get('hash') - activation = AccountActivation.objects.filter(old_email_hash=hash).first() + activation = AccountActivation.objects.filter(old_email_hash=hash, is_used=False).first() - if not activation: + if not activation or activation.is_expired(): return HttpResponse('Enlace no válido o expirado.', status=400) + # Marcar solo el old_email_hash como usado + activation.is_used = True + activation.save() + # Enviar correo al nuevo correo para confirmar el cambio activation_link = f"{settings.URL_PRINCIPAL}/es/confirm-new-email?hash={activation.hash}" context_new_email = { @@ -1080,11 +1084,15 @@ def confirm_old_email_view(request): def confirm_new_email_view(request): hash = request.GET.get('hash') - activation = AccountActivation.objects.filter(hash=hash).first() + activation = AccountActivation.objects.filter(hash=hash, is_new_email_used=False).first() - if not activation: + if not activation or activation.is_expired(): return HttpResponse('Enlace no válido o expirado.', status=400) + # Marcar solo el new_email_hash como usado + activation.is_new_email_used = True + activation.save() + # Actualizar el correo en la base de datos with connections['acore_auth'].cursor() as cursor: cursor.execute(""" @@ -1108,7 +1116,6 @@ def confirm_new_email_view(request): return HttpResponse('El cambio de correo ha sido confirmado y completado con éxito.') - def promo_code_view(request): return render(request, 'account/promo_code.html') diff --git a/novawow/__pycache__/settings.cpython-313.pyc b/novawow/__pycache__/settings.cpython-313.pyc index 3fcba2307484510a552f17e5b31338544c08cb0c..93e06ad8cc88c3bff902eddea1bbefe44394ca63 100644 GIT binary patch delta 117 zcmcbq{85?rGcPX}0}y!ru}WXMkvE-%^A@|Kb9}JBW5DDpmaB~1lLJ^4fMg-736NaI zI*n0cvn^W}qj;5QMoCG5mA-yXesW??Mt*ULm4$(U<>r&@tjvs@o6mD8Gcw9-{>=T1 SnNec$E&kPv>YLjHf*AoJ5hHm3 delta 120 zcmeyUd{deCGcPX}0}xDCuuAXU$eYf>R>h(K1e0r7t}20KZgD2&WTxlkrskF0V$Uxv zNdYm~GV?%m5!d7rRue|9$tzi>F^X??VC!OJy2Y^hAv-HGBgf|FT*{1$(wn(?o-s3u QPX5Hdno(%;Jb_?F0Ht{(x&QzG diff --git a/novawow/settings.py b/novawow/settings.py index 1764d33..29a3463 100644 --- a/novawow/settings.py +++ b/novawow/settings.py @@ -43,7 +43,7 @@ INSTALLED_APPS = [ # Configuración para AC SOAP AC_SOAP_URL = "http://127.0.0.1:2079" -AC_SOAP_USER = " " +AC_SOAP_USER = "AC_SOAP" AC_SOAP_PASSWORD = "Ladyamy89" AC_SOAP_URN = "urn:AC" @@ -102,7 +102,7 @@ MIDDLEWARE = [ ROOT_URLCONF = 'novawow.urls' -URL_PRINCIPAL = '' +URL_PRINCIPAL = 'http://localhost:8009' # Nombre del servidor NOMBRE_SERVIDOR = "Nova WoW"