
    0~h5                     :   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%m&Z& d dl'm(Z) d dl*m+Z+ d dl,m-Z- d dl.m/Z/ d dl0m1Z1 d dl2m3Z3  e       Z4 G d d      Z5 G d de5e3      Z6 G d de5e1      Z7d/dZ8defdZ9 G d  d!      Z: G d" d#e:e3      Z;d$Z< G d% d&e:e1      Z= G d' d(e:e3      Z> G d) d*e:e1      Z? G d+ d,e:e3      Z@ G d- d.e:e1      ZAy)0    )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)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    b/var/www/peopleoo.sandbox-dev.co.uk/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|    ll''++$$dll&6&6&:&:4;S;S&T
 6<<>,,002

 *{1r1r+   c                 P    | j                   j                         h| j                  S r$   )r1   get_hostsuccess_url_allowed_hostsr'   s    r)   r6   z.RedirectURLMixin.get_success_url_allowed_hosts7   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   r4   setr<   r*   r%   r6   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_userr1   useris_authenticatedr*   path
ValueErrorr   superdispatchr(   r1   argskwargsr8   	__class__s        r)   rN   zLoginView.dispatchL   sz     ++0A0A0R0R..0Kdll/// 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_urlZ   s)    >>t~~..x::;;r+   c                 6    | j                   xs | j                  S r$   )authentication_form
form_classr'   s    r)   get_form_classzLoginView.get_form_classa   s    '':4??:r+   c                 B    t         |          }| j                  |d<   |S )Nr1   )rM   get_form_kwargsr1   r(   rQ   rR   s     r)   r[   zLoginView.get_form_kwargsd   s#    (* LLyr+   c                 |    t        | j                  |j                                t        | j	                               S )z)Security check complete. Log the user in.)
auth_loginr1   get_userr   r*   )r(   forms     r)   
form_validzLoginView.form_validi   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_namerD   )	rM   get_context_datar   r1   updater4   r%   nameextra_contextr(   rQ   contextcurrent_siterR   s       r)   re   zLoginView.get_context_datan   st    '*4V4'5(($*?*?*A\.. %%+		
 r+   )r@   rA   rB   __doc__r   rX   rW   template_namerH   rh   r   r   r   r   rN   r&   rY   r[   ra   re   __classcell__rR   s   @r)   rF   rF   A   sx     $J-M"'M/12l#k"	: # $ 3	:<;
<
 r+   rF   c                   x     e Zd ZdZddgZdZdZ ee       ee	       fd              Z
 fdZd Z fd	Z xZS )

LogoutViewzH
    Log out the user and display the 'You are logged out' message.
    postoptionszregistration/logged_out.htmlNc                 *    t        |   |g|i |S r$   rM   rN   )r(   r1   rP   rQ   rR   s       r)   rN   zLogoutView.dispatch   s     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   rM   r3   rO   s        r)   rr   zLogoutView.post   sN    G**,'//11'44w{74T4V44r+   c                     | j                   rt        | j                         S t        j                  rt        t        j                        S | j                  j
                  S rT   )r?   r   r   LOGOUT_REDIRECT_URLr1   rK   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)rc   rd   titlesubtitlerD   )rM   re   r   r1   rf   rg   _rh   ri   s       r)   re   zLogoutView.get_context_data   sf    '*4V4'5$)..< 	
 %%+	
 r+   )r@   rA   rB   rl   http_method_namesrm   rh   r   r   r   rN   rr   r&   re   rn   ro   s   @r)   rq   rq   |   sW      +2MMl#k": # $:5% r+   rq   Nc                 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_URLrq   as_view)r1   	login_urls     r)   logout_then_loginr      s2     I;););<I	27;;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   r4   resolved_urllogin_url_partsquerystrings         r)   redirect_to_loginr      so     y>H,>,>?L8L12O 2D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}   rD   )rM   re   rf   r|   rh   r(   rQ   rj   rR   s      r)   re   z%PasswordContextMixin.get_context_data   sD    '*4V4jjdQt7I7I7ORQ	
 r+   )r@   rA   rB   rh   re   rn   ro   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$   ru   r(   rP   rQ   rR   s      r)   rN   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_namer1   html_email_template_nameextra_email_contextrD   )r1   r7   r   r   r   r   r   r   saverM   ra   )r(   r`   optsrR   s      r)   ra   zPasswordResetView.form_valid   sx    //1#33//#'#;#;%)%?%?||(,(E(E#'#;#;	
 			Dw!$''r+   )r@   rA   rB   r   r   r   rX   r   r   r   r   success_urlrm   r~   r|   r   r   r   r   rN   ra   rn   ro   s   @r)   r   r      sf    B"JJ#E45K;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)r@   rA   rB   rm   r~   r|   rD   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                  |      rd| _        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_   rI   reset_url_tokenr1   sessionr3   INTERNAL_RESET_SESSION_TOKENr   check_tokenrM   rN   rK   replacer   render_to_responsere   )r(   rP   rQ   r   session_tokenredirect_urlrR   s         r)   rN   z!PasswordResetConfirmView.dispatch  s5    6!WF%:&L  MM&"23	99 7OE,,, $ 4 4 8 89U V''33DII}M%)DN 7+T<V<<''33DIIuE
 JODLL(()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_managerr3   	TypeErrorrL   OverflowErrorDoesNotExistr   )r(   r   uidrI   s       r)   r_   z!PasswordResetConfirmView.get_user(  sn    	'/668C--11S19D  ""
 	 D	s   9= *A+*A+c                 B    t         |          }| j                  |d<   |S NrI   )rM   r[   rI   r\   s     r)   r[   z(PasswordResetConfirmView.get_form_kwargs7  s"    (*vr+   c                     |j                         }| j                  j                  t        = | j                  r!t        | j                  || j                         t        | !  |      S r$   )	r   r1   r   r   post_reset_loginr^   post_reset_login_backendrM   ra   )r(   r`   rI   rR   s      r)   ra   z#PasswordResetConfirmView.form_valid<  sP    yy{LL  !=>  t||T4+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)r`   r|   r   rD   )rM   re   r   rf   r~   r   s      r)   re   z)PasswordResetConfirmView.get_context_dataC  sV    '*4V4>>#'GK   NN <=!& r+   )r@   rA   rB   r   rX   r   r   r   r   r   rm   r~   r|   r   r   r   r   r   rN   r_   r[   ra   re   rn   ro   s   @r)   r   r      s}     J#$O89K>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   rD   )rM   re   r   r   r   r   s      r)   re   z*PasswordResetCompleteView.get_context_dataV  s/    '*4V4*8+=+=>r+   )r@   rA   rB   rm   r~   r|   re   rn   ro   s   @r)   r   r   R  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$   ru   r   s      r)   rN   zPasswordChangeView.dispatchb  s     w000r+   c                 V    t         |          }| j                  j                  |d<   |S r   )rM   r[   r1   rI   r\   s     r)   r[   z"PasswordChangeView.get_form_kwargsh  s(    (***vr+   c                     |j                          t        | j                  |j                         t        |   |      S r$   )r   r
   r1   rI   rM   ra   )r(   r`   rR   s     r)   ra   zPasswordChangeView.form_validm  s0    		 	!tyy9w!$''r+   )r@   rA   rB   r   rX   r   r   rm   r~   r|   r   r   r   r   rN   r[   ra   rn   ro   s   @r)   r   r   \  sg    #J56K<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$   ru   r   s      r)   rN   zPasswordChangeDoneView.dispatchy  r   r+   )
r@   rA   rB   rm   r~   r|   r   r   rN   rn   ro   s   @r)   r   r   u  s*    <M*+En%1 &1r+   r   r$   )Burllib.parser   r   django.confr   django.contrib.authr   r   r   r^   r	   rw   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.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"   rF   rq   r   r   r   r   r   r   r   r   r   r   rD   r+   r)   <module>r      s   -   D 3 5 8 9  ? ; H 7 ( $ 4 T 6 5 5 C 2 .	R R<8 ( 8v,!< ,^< '+@S =. (,h (>  7 %0, %
S3X Sl 4l (-x (211< 1r+   