Ë
    ¥2Úin8  ã                   óN  — d dl Z d dlmZmZ d dlmZ d dlmZmZ d dlm	Z
 d dlmZ d dlmZ d dlmZ d d	lmZmZmZmZ d d
lmZ d dlmZ d dlmZmZ d dlmZmZ d dlm Z  d dl!m"Z" d dl#m$Z$ d dl%m&Z& d dl'm(Z(m)Z) d dl*m+Z, d dl-m.Z. d dl/m0Z0 d dl1m2Z2 d dl3m4Z4 d dl5m6Z6  e«       Z7 G d„ d«      Z8 G d„ de8e6«      Z9 G d„ de8e4«      Z:d0d„Z;defd „Z< G d!„ d"«      Z= G d#„ d$e=e6«      Z>d%Z? G d&„ d'e=e4«      Z@ G d(„ d)e=e6«      ZA G d*„ d+e=e4«      ZB G d,„ d-e=e6«      ZC G d.„ d/e=e4«      ZDy)1é    N)ÚurlparseÚ
urlunparse)Úsettings)ÚREDIRECT_FIELD_NAMEÚget_user_model)Úlogin)Úlogout)Úupdate_session_auth_hash)Úlogin_required)ÚAuthenticationFormÚPasswordChangeFormÚPasswordResetFormÚSetPasswordForm)Údefault_token_generator)Úget_current_site)ÚImproperlyConfiguredÚValidationError)ÚHttpResponseRedirectÚ	QueryDict)Úresolve_url)Úreverse_lazy)Úmethod_decorator)ÚRemovedInDjango50Warning)Úurl_has_allowed_host_and_schemeÚurlsafe_base64_decode)Úgettext_lazy)Únever_cache)Úcsrf_protect)Úsensitive_post_parameters)ÚTemplateView)ÚFormViewc                   ó:   — e Zd ZdZeZ e«       Zd„ Zd„ Z	d„ Z
d„ Zy)ÚRedirectURLMixinNc                 óF   — | j                  «       xs | j                  «       S ©N)Úget_redirect_urlÚget_default_redirect_url©Úselfs    úP/var/www/html/acx/venv/lib/python3.12/site-packages/django/contrib/auth/views.pyÚget_success_urlz RedirectURLMixin.get_success_url*   s   € Ø×$Ñ$Ó&ÒI¨$×*GÑ*GÓ*IÐIó    c                 ó0  — | j                   j                  j                  | j                  | j                   j                  j                  | j                  «      «      }t        || j                  «       | j                   j                  «       ¬«      }|r|S dS )z6Return the user-originating redirect URL if it's safe.)ÚurlÚallowed_hostsÚrequire_httpsÚ )ÚrequestÚPOSTÚgetÚredirect_field_nameÚGETr   Úget_success_url_allowed_hostsÚ	is_secure)r)   Úredirect_toÚurl_is_safes      r*   r&   z!RedirectURLMixin.get_redirect_url-   s|   € à—l‘l×'Ñ'×+Ñ+Ø×$Ñ$ d§l¡l×&6Ñ&6×&:Ñ&:¸4×;SÑ;SÓ&Tó
ˆô 6ØØ×<Ñ<Ó>ØŸ,™,×0Ñ0Ó2ô
ˆñ
 *ˆ{Ð1¨rÐ1r,   c                 óP   — | j                   j                  «       h| j                  £S r%   )r2   Úget_hostÚsuccess_url_allowed_hostsr(   s    r*   r7   z.RedirectURLMixin.get_success_url_allowed_hosts9   s#   € Ø—‘×%Ñ%Ó'ÐI¨$×*HÑ*HÐIÐIr,   c                 óZ   — | j                   rt        | j                   «      S t        d«      ‚)ú Return the default redirect URL.z+No URL to redirect to. Provide a next_page.)Ú	next_pager   r   r(   s    r*   r'   z)RedirectURLMixin.get_default_redirect_url<   s$   € à�>Š>Ü˜tŸ~™~Ó.Ð.Ü"Ð#PÓQÐQr,   )Ú__name__Ú
__module__Ú__qualname__r@   r   r5   Úsetr=   r+   r&   r7   r'   © r,   r*   r#   r#   %   s,   „ Ø€IØ-ÐÙ #£ÐòJò
2òJóRr,   r#   c                   ó¨   ‡ — e Zd ZdZeZdZdZdZdZ	 e
 e«       «       e
e«       e
e«      ˆ fd„«       «       «       Zd„ Zd„ Zˆ fd„Zd	„ Zˆ fd
„Zˆ xZS )Ú	LoginViewz=
    Display the login form and handle the login action.
    Nzregistration/login.htmlFc                 ó   •— | j                   r_| j                  j                  j                  r?| j	                  «       }|| j                  j
                  k(  rt        d«      ‚t        |«      S t        ‰| �$  |g|¢­i |¤ŽS )NzsRedirection loop for authenticated user detected. Check that your LOGIN_REDIRECT_URL doesn't point to a login page.)
Úredirect_authenticated_userr2   ÚuserÚis_authenticatedr+   ÚpathÚ
ValueErrorr   ÚsuperÚdispatch©r)   r2   ÚargsÚkwargsr9   Ú	__class__s        €r*   rO   zLoginView.dispatchN   sz   ø€ ð ×+Ò+°·±×0AÑ0A×0RÒ0RØ×.Ñ.Ó0ˆKØ˜dŸl™l×/Ñ/Ò/Ü ðMóð ô (¨Ó4Ð4Ü‰wÑ Ð9¨$Ò9°&Ñ9Ð9r,   c                 óv   — | j                   rt        | j                   «      S t        t        j                  «      S ©r?   )r@   r   r   ÚLOGIN_REDIRECT_URLr(   s    r*   r'   z"LoginView.get_default_redirect_url\   s)   € à�>Š>Ü˜tŸ~™~Ó.Ð.äœx×:Ñ:Ó;Ð;r,   c                 ó6   — | j                   xs | j                  S r%   )Úauthentication_formÚ
form_classr(   s    r*   Úget_form_classzLoginView.get_form_classc   s   € Ø×'Ñ'Ò:¨4¯?©?Ð:r,   c                 óB   •— t         ‰| �  «       }| j                  |d<   |S )Nr2   )rN   Úget_form_kwargsr2   ©r)   rR   rS   s     €r*   r\   zLoginView.get_form_kwargsf   s#   ø€ Ü‘Ñ(Ó*ˆØ ŸL™LˆˆyÑØˆr,   c                 ó|   — t        | j                  |j                  «       «       t        | j	                  «       «      S )z)Security check complete. Log the user in.)Ú
auth_loginr2   Úget_userr   r+   )r)   Úforms     r*   Ú
form_validzLoginView.form_validk   s*   € ä�4—<‘< §¡£Ô1Ü# D×$8Ñ$8Ó$:Ó;Ð;r,   c                 óâ   •— t        ‰| �  di |¤Ž}t        | j                  «      }|j	                  | j
                  | j                  «       d|d|j                  i| j                  xs i ¥«       |S )NÚsiteÚ	site_namerE   )	rN   Úget_context_datar   r2   Úupdater5   r&   ÚnameÚextra_context©r)   rR   ÚcontextÚcurrent_siterS   s       €r*   rf   zLoginView.get_context_datap   st   ø€ Ü‘'Ñ*Ñ4¨VÑ4ˆÜ'¨¯©Ó5ˆØ�‰à×(Ñ(¨$×*?Ñ*?Ó*AØ˜Ø˜\×.Ñ.ðð ×%Ñ%Ò+¨ð	ô	
ð ˆr,   )rA   rB   rC   Ú__doc__r   rY   rX   Útemplate_namerI   ri   r   r   r   r   rO   r'   rZ   r\   rb   rf   Ú__classcell__©rS   s   @r*   rG   rG   C   sx   ø„ ñð $€JØÐØ-€MØ"'ÐØ€MáÑ/Ó1Ó2Ù�lÓ#Ù�kÓ"ó	:ó #ó $ó 3ð	:ò<ò;ôò
<÷
ð r,   rG   c                   ó|   ‡ — e Zd ZdZg d¢ZdZdZ ee«      ˆ fd„«       Z	 ee
«      ˆ fd„«       ZeZd„ Zˆ fd„Zˆ xZS )	Ú
LogoutViewzH
    Log out the user and display the 'You are logged out' message.
    )r4   ÚheadÚpostÚoptionszregistration/logged_out.htmlNc                 ó˜   •— |j                   j                  «       dk(  rt        j                  dt        «       t        ‰| �  |g|¢­i |¤ŽS )Nr4   zlLog out via GET requests is deprecated and will be removed in Django 5.0. Use POST requests for logging out.)ÚmethodÚlowerÚwarningsÚwarnr   rN   rO   )r)   r2   rQ   rR   rS   s       €r*   rO   zLogoutView.dispatch‹   sH   ø€ à�>‰>×ÑÓ! UÒ*Ü�M‰Mð:ä(ôô
 ‰wÑ Ð9¨$Ò9°&Ñ9Ð9r,   c                 óœ   •— t        |«       | j                  «       }||j                  «       k7  rt        |«      S t	        ‰| �  |g|¢­i |¤ŽS )zLogout may be done via POST.)Úauth_logoutr+   Úget_full_pathr   rN   r4   rP   s        €r*   rt   zLogoutView.post•   sP   ø€ ô 	�GÔØ×*Ñ*Ó,ˆØ˜'×/Ñ/Ó1Ò1ä'¨Ó4Ð4Ü‰w‰{˜7Ð4 TÒ4¨VÑ4Ð4r,   c                 óÂ   — | j                   rt        | j                   «      S t        j                  rt        t        j                  «      S | j                  j
                  S rU   )r@   r   r   ÚLOGOUT_REDIRECT_URLr2   rL   r(   s    r*   r'   z#LogoutView.get_default_redirect_url¢   sB   € à�>Š>Ü˜tŸ~™~Ó.Ð.Ü×)Ò)Üœx×;Ñ;Ó<Ð<à—<‘<×$Ñ$Ð$r,   c                 óÂ   •— t        ‰| �  di |¤Ž}t        | j                  «      }|j	                  ||j
                  t        d«      d dœ| j                  xs i ¥«       |S )Nz
Logged out)rd   re   ÚtitleÚsubtitlerE   )rN   rf   r   r2   rg   rh   Ú_ri   rj   s       €r*   rf   zLogoutView.get_context_data«   sf   ø€ Ü‘'Ñ*Ñ4¨VÑ4ˆÜ'¨¯©Ó5ˆØ�‰à$Ø)×.Ñ.Ü˜<›Ø ñ	ð
 ×%Ñ%Ò+¨ðô	
ð ˆr,   )rA   rB   rC   rm   Úhttp_method_namesrn   ri   r   r   rO   r   rt   r4   r'   rf   ro   rp   s   @r*   rr   rr   ~   sb   ø„ ñò ;ÐØ2€MØ€Mñ �kÓ"ó:ó #ð:ñ �lÓ#ó5ó $ð5ð €Cò%÷ð r,   rr   c                 ór   — t        |xs t        j                  «      }t        j	                  |¬«      | «      S )zR
    Log out the user if they are logged in. Then redirect to the login page.
    )r@   )r   r   Ú	LOGIN_URLrr   Úas_view)r2   Ú	login_urls     r*   Úlogout_then_loginr‰   º   s2   € ô ˜IÒ;¬×);Ñ);Ó<€IÜ×Ñ¨	ÐÓ2°7Ó;Ð;r,   c                 óä   — t        |xs t        j                  «      }t        t	        |«      «      }|r*t        |d   d¬«      }| ||<   |j                  d¬«      |d<   t        t        |«      «      S )zM
    Redirect the user to the login page, passing the given 'next' page.
    é   T)Úmutableú/)Úsafe)	r   r   r†   Úlistr   r   Ú	urlencoder   r   )Únextrˆ   r5   Úresolved_urlÚlogin_url_partsÚquerystrings         r*   Úredirect_to_loginr•   Â   so   € ô ˜yÒ>¬H×,>Ñ,>Ó?€Läœ8 LÓ1Ó2€OÙÜ °Ñ 2¸DÔAˆØ+/ˆÐ'Ñ(Ø(×2Ñ2¸Ð2Ó<ˆ˜Ñä¤
¨?Ó ;Ó<Ð<r,   c                   ó"   ‡ — e Zd ZdZˆ fd„Zˆ xZS )ÚPasswordContextMixinNc                 ó‚   •— t        ‰| �  di |¤Ž}|j                  | j                  d dœ| j                  xs i ¥«       |S )N)r�   r‚   rE   )rN   rf   rg   r�   ri   ©r)   rR   rk   rS   s      €r*   rf   z%PasswordContextMixin.get_context_dataÜ   sD   ø€ Ü‘'Ñ*Ñ4¨VÑ4ˆØ�‰Ø—j‘j¨dÑQ°t×7IÑ7IÒ7OÈRÐQô	
ð ˆr,   )rA   rB   rC   ri   rf   ro   rp   s   @r*   r—   r—   Ù   s   ø„ Ø€M÷ð r,   r—   c                   ó~   ‡ — e Zd ZdZdZeZdZdZdZ	 e
d«      ZdZ ed«      ZeZ ee«      ˆ fd„«       Zˆ fd„Zˆ xZS )	ÚPasswordResetViewz&registration/password_reset_email.htmlNz'registration/password_reset_subject.txtÚpassword_reset_donez%registration/password_reset_form.htmlzPassword resetc                 ó"   •— t        ‰| �  |i |¤ŽS r%   ©rN   rO   ©r)   rQ   rR   rS   s      €r*   rO   zPasswordResetView.dispatchð   ó   ø€ ä‰wÑ Ð0¨Ñ0Ð0r,   c           	      ó  •— | j                   j                  «       | j                  | j                  | j                  | j
                  | j                   | j                  | j                  dœ} |j                  di |¤Ž t        ‰| �)  |«      S )N)Ú	use_httpsÚtoken_generatorÚ
from_emailÚemail_template_nameÚsubject_template_namer2   Úhtml_email_template_nameÚextra_email_contextrE   )r2   r8   r£   r¤   r¥   r¦   r§   r¨   ÚsaverN   rb   )r)   ra   ÚoptsrS   s      €r*   rb   zPasswordResetView.form_validô   sx   ø€ àŸ™×/Ñ/Ó1Ø#×3Ñ3ØŸ/™/Ø#'×#;Ñ#;Ø%)×%?Ñ%?Ø—|‘|Ø(,×(EÑ(EØ#'×#;Ñ#;ñ	
ˆð 	ˆ�	‰	Ñ�DÒÜ‰wÑ! $Ó'Ð'r,   )rA   rB   rC   r¥   r¨   r   rY   r¤   r§   r¦   r   Úsuccess_urlrn   rƒ   r�   r   r£   r   r   rO   rb   ro   rp   s   @r*   r›   r›   ä   sf   ø„ ØBÐØÐØ"€JØ€JØ#ÐØEÐÙÐ4Ó5€KØ;€MÙÐÓ€EØ-€Oá�lÓ#ó1ó $ð1÷(ð (r,   r›   Ú_password_reset_tokenc                   ó    — e Zd ZdZ ed«      Zy)ÚPasswordResetDoneViewz%registration/password_reset_done.htmlzPassword reset sentN)rA   rB   rC   rn   rƒ   r�   rE   r,   r*   r®   r®     s   „ Ø;€MÙÐ#Ó$�Er,   r®   c                   ó°   ‡ — e Zd ZeZdZdZdZ ed«      Z	dZ
 ed«      ZeZ e e«       «       ee«      ˆ fd„«       «       Zd„ Zˆ fd	„Zˆ fd
„Zˆ fd„Zˆ xZS )ÚPasswordResetConfirmViewFNzset-passwordÚpassword_reset_completez(registration/password_reset_confirm.htmlzEnter new passwordc                 ó®  •— d|vsd|vrt        d«      ‚d| _        | j                  |d   «      | _        | j                  �÷|d   }|| j                  k(  re| j
                  j                  j                  t        «      }| j                  j                  | j                  |«      r”d| _        t        ‰| �0  |i |¤ŽS | j                  j                  | j                  |«      rX|| j
                  j                  t        <   | j
                  j                  j                  || j                  «      }t        |«      S | j!                  | j#                  «       «      S )NÚuidb64Útokenz:The URL path must contain 'uidb64' and 'token' parameters.FT)r   Ú	validlinkr`   rJ   Úreset_url_tokenr2   Úsessionr4   ÚINTERNAL_RESET_SESSION_TOKENr£   Úcheck_tokenrN   rO   rL   Úreplacer   Úrender_to_responserf   )r)   rQ   rR   r´   Úsession_tokenÚredirect_urlrS   s         €r*   rO   z!PasswordResetConfirmView.dispatch  s5  ø€ ð ˜6Ñ! W°FÑ%:Ü&ØLóð ð ˆŒØ—M‘M &¨Ñ"2Ó3ˆŒ	à�9‰9Ð Ø˜7‘OˆEØ˜×,Ñ,Ò,Ø $§¡× 4Ñ 4× 8Ñ 8Ô9UÓ V�Ø×'Ñ'×3Ñ3°D·I±I¸}ÔMà%)�D”NÜ ™7Ñ+¨TÐ<°VÑ<Ð<à×'Ñ'×3Ñ3°D·I±I¸uÔEð
 JO�D—L‘L×(Ñ(Ô)EÑFØ#'§<¡<×#4Ñ#4×#<Ñ#<Ø˜t×3Ñ3ó$�Lô 0°Ó=Ð=ð ×&Ñ& t×'<Ñ'<Ó'>Ó?Ð?r,   c                 óÜ   — 	 t        |«      j                  «       }t        j                  j	                  |¬«      }|S # t
        t        t        t        j                  t        f$ r d }Y |S w xY w)N)Úpk)
r   ÚdecodeÚ	UserModelÚ_default_managerr4   Ú	TypeErrorrM   ÚOverflowErrorÚDoesNotExistr   )r)   r³   ÚuidrJ   s       r*   r`   z!PasswordResetConfirmView.get_user7  sn   € ð	ä'¨Ó/×6Ñ6Ó8ˆCÜ×-Ñ-×1Ñ1°SÐ1Ó9ˆDð ˆøô ÜÜÜ×"Ñ"Üð
ò 	ð ‰DØˆð	ús   ‚9= ½*A+Á*A+c                 óB   •— t         ‰| �  «       }| j                  |d<   |S ©NrJ   )rN   r\   rJ   r]   s     €r*   r\   z(PasswordResetConfirmView.get_form_kwargsF  s"   ø€ Ü‘Ñ(Ó*ˆØŸ™ˆˆv‰Øˆr,   c                 óÒ   •— |j                  «       }| j                  j                  t        = | j                  r!t        | j                  || j                  «       t        ‰| �!  |«      S r%   )	r©   r2   r·   r¸   Úpost_reset_loginr_   Úpost_reset_login_backendrN   rb   )r)   ra   rJ   rS   s      €r*   rb   z#PasswordResetConfirmView.form_validK  sP   ø€ Ø�y‰y‹{ˆØ�L‰L× Ñ Ô!=Ð>Ø× Ò Ü�t—|‘| T¨4×+HÑ+HÔIÜ‰wÑ! $Ó'Ð'r,   c                 óˆ   •— t        ‰| �  di |¤Ž}| j                  rd|d<   |S |j                  d t	        d«      ddœ«       |S )NTrµ   zPassword reset unsuccessfulF)ra   r�   rµ   rE   )rN   rf   rµ   rg   rƒ   r™   s      €r*   rf   z)PasswordResetConfirmView.get_context_dataR  sV   ø€ Ü‘'Ñ*Ñ4¨VÑ4ˆØ�>Š>Ø#'ˆG�KÑ ð ˆð �N‰Nà ÜÐ<Ó=Ø!&ñôð ˆr,   )rA   rB   rC   r   rY   rÊ   rË   r¶   r   r«   rn   rƒ   r�   r   r£   r   r   r   rO   r`   r\   rb   rf   ro   rp   s   @r*   r°   r°     s}   ø„ Ø €JØÐØ#ÐØ$€OÙÐ8Ó9€KØ>€MÙÐ"Ó#€EØ-€OáÑ/Ó1Ó2Ù�kÓ"ó@ó #ó 3ð@ò@ôô
(÷ð r,   r°   c                   ó2   ‡ — e Zd ZdZ ed«      Zˆ fd„Zˆ xZS )ÚPasswordResetCompleteViewz)registration/password_reset_complete.htmlzPassword reset completec                 ó^   •— t        ‰| �  di |¤Ž}t        t        j                  «      |d<   |S )Nrˆ   rE   )rN   rf   r   r   r†   r™   s      €r*   rf   z*PasswordResetCompleteView.get_context_datae  s/   ø€ Ü‘'Ñ*Ñ4¨VÑ4ˆÜ*¬8×+=Ñ+=Ó>ˆ�ÑØˆr,   )rA   rB   rC   rn   rƒ   r�   rf   ro   rp   s   @r*   rÎ   rÎ   a  s   ø„ Ø?€MÙÐ'Ó(€E÷ð r,   rÎ   c                   ó¦   ‡ — e Zd ZeZ ed«      ZdZ ed«      Z	 e
 e«       «       e
e«       e
e«      ˆ fd„«       «       «       Zˆ fd„Zˆ fd„Zˆ xZS )ÚPasswordChangeViewÚpassword_change_donez&registration/password_change_form.htmlzPassword changec                 ó"   •— t        ‰| �  |i |¤ŽS r%   rž   rŸ   s      €r*   rO   zPasswordChangeView.dispatchq  s   ø€ ô ‰wÑ Ð0¨Ñ0Ð0r,   c                 óV   •— t         ‰| �  «       }| j                  j                  |d<   |S rÈ   )rN   r\   r2   rJ   r]   s     €r*   r\   z"PasswordChangeView.get_form_kwargsw  s(   ø€ Ü‘Ñ(Ó*ˆØŸ™×*Ñ*ˆˆv‰Øˆr,   c                 ó‚   •— |j                  «        t        | j                  |j                  «       t        ‰| �  |«      S r%   )r©   r
   r2   rJ   rN   rb   )r)   ra   rS   s     €r*   rb   zPasswordChangeView.form_valid|  s0   ø€ Ø�	‰	Œô 	! §¡¨t¯y©yÔ9Ü‰wÑ! $Ó'Ð'r,   )rA   rB   rC   r   rY   r   r«   rn   rƒ   r�   r   r   r   r   rO   r\   rb   ro   rp   s   @r*   rÑ   rÑ   k  sg   ø„ Ø#€JÙÐ5Ó6€KØ<€MÙÐÓ €EáÑ/Ó1Ó2Ù�lÓ#Ù�nÓ%ó1ó &ó $ó 3ð1ô÷
(ð (r,   rÑ   c                   óH   ‡ — e Zd ZdZ ed«      Z ee«      ˆ fd„«       Zˆ xZ	S )ÚPasswordChangeDoneViewz&registration/password_change_done.htmlzPassword change successfulc                 ó"   •— t        ‰| �  |i |¤ŽS r%   rž   rŸ   s      €r*   rO   zPasswordChangeDoneView.dispatchˆ  r    r,   )
rA   rB   rC   rn   rƒ   r�   r   r   rO   ro   rp   s   @r*   r×   r×   „  s*   ø„ Ø<€MÙÐ*Ó+€Eá�nÓ%ó1ó &ô1r,   r×   r%   )Ery   Úurllib.parser   r   Údjango.confr   Údjango.contrib.authr   r   r   r_   r	   r|   r
   Údjango.contrib.auth.decoratorsr   Údjango.contrib.auth.formsr   r   r   r   Údjango.contrib.auth.tokensr   Údjango.contrib.sites.shortcutsr   Údjango.core.exceptionsr   r   Údjango.httpr   r   Údjango.shortcutsr   Údjango.urlsr   Údjango.utils.decoratorsr   Údjango.utils.deprecationr   Údjango.utils.httpr   r   Údjango.utils.translationr   rƒ   Údjango.views.decorators.cacher   Údjango.views.decorators.csrfr   Údjango.views.decorators.debugr   Údjango.views.generic.baser    Údjango.views.generic.editr!   rÁ   r#   rG   rr   r‰   r•   r—   r›   r¸   r®   r°   rÎ   rÑ   r×   rE   r,   r*   ú<module>rí      s  ðÛ ß -å  ÷ DÝ 3Ý 5Ý 8Ý 9÷ó õ ?Ý ;ß Hß 7Ý (Ý $Ý 4Ý =ß TÝ 6Ý 5Ý 5Ý CÝ 2Ý .áÓ€	÷Rñ Rô<8Ð  (ô 8ôv9Ð! <ô 9óx<ð '+Ð@Só =÷.ñ ô(Ð,¨hô (ð>  7Ð ô%Ð0°,ô %ô
SÐ3°Xô SôlÐ 4°lô ô(Ð-¨xô (ô21Ð1°<õ 1r,   