o 3a4@sddlmZmZddlmZddlmZmZmZ m Z m Z ddl mZddlmZmZmZmZddlmZddlmZddlmZdd lmZmZdd lmZdd lm Z dd l!m"Z"dd l#m$Z$m%Z%ddl&m'Z(ddl)m*Z*ddl+m,Z,ddl-m.Z.ddl/m0Z0ddl1m2Z2eZ3GdddZ4Gddde4e2Z5Gddde4e0Z6d.ddZ7defddZ8Gdd d Z9Gd!d"d"e9e2Z:d#Z;Gd$d%d%e9e0ZGd*d+d+e9e2Z?Gd,d-d-e9e0Z@dS)/)urlparse urlunparse)settings)REDIRECT_FIELD_NAMEget_user_modelloginlogoutupdate_session_auth_hash)login_required)AuthenticationFormPasswordChangeFormPasswordResetFormSetPasswordForm)default_token_generator)get_current_site)ValidationError)HttpResponseRedirect QueryDict) resolve_url) reverse_lazy)method_decorator)url_has_allowed_host_and_schemeurlsafe_base64_decode) gettext_lazy) never_cache) csrf_protect)sensitive_post_parameters) TemplateView)FormViewc@seZdZeZddZdS)SuccessURLAllowedHostsMixincCs|jh|jSN)requestget_hostsuccess_url_allowed_hostsselfr&;/usr/lib/python3/dist-packages/django/contrib/auth/views.pyget_success_url_allowed_hosts$sz9SuccessURLAllowedHostsMixin.get_success_url_allowed_hostsN)__name__ __module__ __qualname__setr#r(r&r&r&r'r!s rcseZdZdZeZdZeZdZ dZ dZ e e e ee efddZddZd d Zd d Zfd dZddZfddZZS) LoginViewz= Display the login form and handle the login action. Nzregistration/login.htmlFcsN|jr|jjjr|}||jjkrtdt|Stj |g|Ri|S)NzsRedirection loop for authenticated user detected. Check that your LOGIN_REDIRECT_URL doesn't point to a login page.) redirect_authenticated_userr!useris_authenticatedget_success_urlpath ValueErrorrsuperdispatch)r%r!argskwargs redirect_to __class__r&r'r53s zLoginView.dispatchcCs|}|p ttjSr )get_redirect_urlrrLOGIN_REDIRECT_URL)r%urlr&r&r'r1AszLoginView.get_success_urlcCsD|jj|j|jj|jd}t|||jd}|r |SdS)z6Return the user-originating redirect URL if it's safe.r= allowed_hosts require_https)r!POSTgetredirect_field_nameGETrr( is_secure)r%r8 url_is_safer&r&r'r;Es zLoginView.get_redirect_urlcCs |jp|jSr )authentication_form form_classr$r&r&r'get_form_classRs zLoginView.get_form_classct}|j|d<|S)Nr!)r4get_form_kwargsr!r%r7r9r&r'rLU  zLoginView.get_form_kwargscCst|j|t|S)z)Security check complete. Log the user in.) auth_loginr!get_userrr1r%formr&r&r' form_validZs zLoginView.form_validc sHtjdi|}t|j}||j|d|d|ji|jpi|S)Nsite site_namer&) r4get_context_datarr!updaterDr;name extra_contextr%r7context current_siter9r&r'rV_s  zLoginView.get_context_data)r)r*r+__doc__r rIrHrrD template_namer.rYrrrrr5r1r;rJrLrSrV __classcell__r&r&r9r'r-(s$  r-csTeZdZdZdZeZdZdZe e fddZ ddZ dd Z fd d ZZS) LogoutViewzH Log out the user and display the 'You are logged out' message. Nzregistration/logged_out.htmlcs6t||}|rt|Stj|g|Ri|Sr ) auth_logout get_next_pagerr4r5)r%r!r6r7 next_pager9r&r'r5ts zLogoutView.dispatchcOs|j|g|Ri|S)zLogout may be done via POST.)rC)r%r!r6r7r&r&r'post}szLogoutView.postcCs|jdur t|j}n tjrttj}n|j}|j|jjvs%|j|jjvrF|jj|j|jj|j}t || |j d}|sF|jj }|S)Nr?) rcrrLOGOUT_REDIRECT_URLrDr!rBrErCrr(rFr2)r%rcrGr&r&r'rbs&   zLogoutView.get_next_pagec sBtjdi|}t|j}|||jtdd|jpi|S)Nz Logged out)rTrUtitler&)r4rVrr!rWrX_rYrZr9r&r'rVs zLogoutView.get_context_data)r)r*r+r]rcrrDr^rYrrr5rdrbrVr_r&r&r9r'r`ksr`NcCst|ptj}tj|d|S)zR Log out the user if they are logged in. Then redirect to the login page. )rc)rr LOGIN_URLr`as_view)r! login_urlr&r&r'logout_then_loginsrkcCsRt|ptj}tt|}|r#t|ddd}|||<|jdd|d<tt|S)zM Redirect the user to the login page, passing the given 'next' page. T)mutable/)safe) rrrhlistrr urlencoderr)nextrjrD resolved_urllogin_url_parts querystringr&r&r'redirect_to_logins  rvcs eZdZdZfddZZS)PasswordContextMixinNc s0tjdi|}|d|ji|jpi|S)Nrfr&)r4rVrWrfrYr%r7r[r9r&r'rVsz%PasswordContextMixin.get_context_data)r)r*r+rYrVr_r&r&r9r'rwsrwcs`eZdZdZdZeZdZdZdZ e dZ dZ e dZeZeefddZfd d ZZS) PasswordResetViewz®istration/password_reset_email.htmlNz'registration/password_reset_subject.txtpassword_reset_donez%registration/password_reset_form.htmlzPassword resetctj|i|Sr r4r5r%r6r7r9r&r'r5zPasswordResetView.dispatchc sF|j|j|j|j|j|j|j|jd}|jdi|t |S)N) use_httpstoken_generator from_emailemail_template_namesubject_template_namer!html_email_template_nameextra_email_contextr&) r!rFrrrrrrsaver4rS)r%rRoptsr9r&r'rSs zPasswordResetView.form_valid)r)r*r+rrr rIrrrr success_urlr^rgrfrrrrr5rSr_r&r&r9r'rysry_password_reset_tokenc@seZdZdZedZdS)PasswordResetDoneViewz%registration/password_reset_done.htmlzPassword reset sentN)r)r*r+r^rgrfr&r&r&r'rs rcseZdZeZdZdZdZedZ dZ e dZ e ZeeeefddZd d Zfd d Zfd dZfddZZS)PasswordResetConfirmViewFNz set-passwordpassword_reset_completez(registration/password_reset_confirm.htmlzEnter new passwordcsd|vrd|vs Jd|_||d|_|jdurZ|d}||jkr?|jjt}|j |j|r>d|_t j |i|Sn|j |j|rZ||jjt<|jj ||j}t|S||S)Nuidb64tokenFT) validlinkrPr/reset_url_tokenr!sessionrCINTERNAL_RESET_SESSION_TOKENr check_tokenr4r5r2replacerrender_to_responserV)r%r6r7r session_token redirect_urlr9r&r'r5s    z!PasswordResetConfirmView.dispatchc CsFzt|}tjj|d}W|Sttttjt fy"d}Y|Sw)N)pk) rdecode UserModel_default_managerrC TypeErrorr3 OverflowError DoesNotExistr)r%ruidr/r&r&r'rPs z!PasswordResetConfirmView.get_usercrKNr/)r4rLr/rMr9r&r'rL'rNz(PasswordResetConfirmView.get_form_kwargscs4|}|jjt=|jrt|j||jt|Sr ) rr!rrpost_reset_loginrOpost_reset_login_backendr4rS)r%rRr/r9r&r'rS,s   z#PasswordResetConfirmView.form_validc s>tjdi|}|jrd|d<|S|dtddd|S)NTrzPassword reset unsuccessfulF)rRrfrr&)r4rVrrWrgrxr9r&r'rV3sz)PasswordResetConfirmView.get_context_data)r)r*r+rrIrrrrrr^rgrfrrrrrr5rPrLrSrVr_r&r&r9r'rs  rcs(eZdZdZedZfddZZS)PasswordResetCompleteViewz)registration/password_reset_complete.htmlzPassword reset completec s$tjdi|}ttj|d<|S)Nrjr&)r4rVrrrhrxr9r&r'rVDsz*PasswordResetCompleteView.get_context_data)r)r*r+r^rgrfrVr_r&r&r9r'r@srcsfeZdZeZedZdZedZ e e e e e e fddZfddZfdd ZZS) PasswordChangeViewpassword_change_donez®istration/password_change_form.htmlzPassword changecr{r r|r}r9r&r'r5PszPasswordChangeView.dispatchcst}|jj|d<|Sr)r4rLr!r/rMr9r&r'rLVs  z"PasswordChangeView.get_form_kwargscs"|t|j|jt|Sr )rr r!r/r4rSrQr9r&r'rS[s zPasswordChangeView.form_valid)r)r*r+r rIrrr^rgrfrrrr r5rLrSr_r&r&r9r'rJs rcs0eZdZdZedZeefddZZ S)PasswordChangeDoneViewz®istration/password_change_done.htmlzPassword change successfulcr{r r|r}r9r&r'r5gr~zPasswordChangeDoneView.dispatch) r)r*r+r^rgrfrr r5r_r&r&r9r'rcs rr )A urllib.parserr django.confrdjango.contrib.authrrrrOrrar django.contrib.auth.decoratorsr django.contrib.auth.formsr r r rdjango.contrib.auth.tokensrdjango.contrib.sites.shortcutsrdjango.core.exceptionsr django.httprrdjango.shortcutsr django.urlsrdjango.utils.decoratorsrdjango.utils.httprrdjango.utils.translationrrgdjango.views.decorators.cacherdjango.views.decorators.csrfrdjango.views.decorators.debugrdjango.views.generic.baserdjango.views.generic.editrrrr-r`rkrvrwryrrrrrrr&r&r&r'sB              C ; I