Ë
    ùuj1  ã            
       ó¤  — d dl Z d dlZd dlZd dlZd dl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 d dlmZ  ee«      j*                  Zedz  d	z  Zd
Z ej2                  dd«      Z ej2                  dd«      Z ej2                  dd«      ZdZdZdZdZ  ejB                  d«      Z" e#h d£«      Z$de%dee%e&f   fd„Z'de%dee&e	e%   f   fd„Z(de%de)de%fd„Z*de
ee%e%e)f      fd„Z+de%fd„Z,de%de%fd „Z-de%de%dee&e
e%   f   fd!„Z.de%de%de&fd"„Z/d#e%d$e%d%e%dee&e%f   fd&„Z0d'ede&fd(„Z1d)e%dz  de%fd*„Z2d+e%d,e%de&fd-„Z3 G d.„ d/e«      Z4y)0é    N)ÚPath)ÚDictÚListÚOptionalÚTuple)Úquote)ÚBaseHTTPMiddleware)ÚRequest)ÚRedirectResponseÚdatazadmin_credentials.jsoniÀÔ ÚADMIN_USERNAMEzadmin123@gmail.comÚADMIN_PASSWORDÚadmin123ÚSESSION_SECRETzmanjet-change-me-in-productionz/admin/loginz/admin/change-passwordé   é€   z'[!@#$%^&*()_+\-=\[\]{};':\"\\|,.<>/?`~]>   ÚadminÚletmeinÚwelcomeÚ12345678r   ÚbaseballÚchangemeÚfootballÚiloveyouÚpasswordÚtrustno1Ú	123456789Ú	admin1234Ú	monkey123Ú	password1Ú	qwerty123Ú
1234567890Ú
password12Úpassword123r   Úreturnc                 óª  — t         t        | «      cxk  xr	 t        k  nc t        t	        j
                  d| «      «      t        t	        j
                  d| «      «      t        t	        j
                  d| «      «      t        t        j                  | «      «      t        t	        j
                  d| «      «       | r| j                  «       t        vdœS ddœS )Nz[A-Z]z[a-z]z\dz\sF)ÚlengthÚupperÚlowerÚdigitÚspecialÚno_spaceÚ
not_common)	ÚPASSWORD_MIN_LENGTHÚlenÚPASSWORD_MAX_LENGTHÚboolÚreÚsearchÚSPECIAL_CHAR_PATTERNr)   ÚCOMMON_PASSWORDS)r   s    ú'/var/www/html/newmanjeet/manjet/auth.pyÚpassword_rule_statusr7   6   s¤   € ä%¬¨X«ÖMÔ:MÔMÜ”b—i‘i ¨(Ó3Ó4Ü”b—i‘i ¨(Ó3Ó4Ü”b—i‘i  xÓ0Ó1ÜÔ,×3Ñ3°HÓ=Ó>ÜœRŸY™Y u¨hÓ7Ó8Ð8ÙBJ�h—n‘nÓ&Ô.>Ð>ñð ð QVñð ó    c                 ó’  — g }t        | «      }|d   s |j                  dt        › dt        › d�«       |d   s|j                  d«       |d   s|j                  d«       |d	   s|j                  d
«       |d   s|j                  d«       |d   s|j                  d«       | r|d   s|j                  d«       t	        |«      dk(  |fS )Nr'   zUse between z and z characters.r(   z,Include at least one uppercase letter (A-Z).r)   z,Include at least one lowercase letter (a-z).r*   z"Include at least one number (0-9).r+   z7Include at least one special character (!@#$%^&* etc.).r,   zPassword cannot contain spaces.r-   z;This password is too common. Choose a more unique password.r   )r7   Úappendr.   r0   r/   )r   ÚerrorsÚruless      r6   Úvalidate_new_passwordr=   B   sÍ   € Ø€FÜ  Ó*€Eà�Š?Ø�‰ØÔ.Ð/¨uÔ5HÐ4IÈÐVô	
ð �Š>Ø�‰ÐDÔEØ�Š>Ø�‰ÐDÔEØ�Š>Ø�‰Ð:Ô;Ø�ÒØ�‰ÐOÔPØ�ÒØ�‰Ð7Ô8Ù˜˜lÒ+Ø�‰ÐSÔTäˆv‹;˜!Ñ˜VÐ#Ð#r8   Úsaltc                 óx   — t        j                  d| j                  d«      |t        «      }|j	                  «       S )NÚsha256úutf-8)ÚhashlibÚpbkdf2_hmacÚencodeÚPBKDF2_ITERATIONSÚhex)r   r>   Údigests      r6   Ú_hash_passwordrH   Z   s5   € Ü× Ñ ØØ�‰˜Ó ØÜó	€Fð �:‰:‹<Ðr8   c                  ó   — t         j                  «       sy 	 t        j                  t         j	                  d¬«      «      } | d   }| d   }t
        j                  | d   «      }|||fS # t        t        j                  t        t        f$ r Y y w xY w)NrA   ©ÚencodingÚusernameÚpassword_hashr>   )ÚCREDENTIALS_PATHÚexistsÚjsonÚloadsÚ	read_textÚbytesÚfromhexÚOSErrorÚJSONDecodeErrorÚKeyErrorÚ
ValueError)r   rL   rM   r>   s       r6   Ú_load_stored_credentialsrY   d   s‡   € Ü×"Ñ"Ô$ØðÜ�z‰zÔ*×4Ñ4¸gÐ4ÓFÓGˆØ˜
Ñ#ˆØ˜_Ñ-ˆÜ�}‰}˜T &™\Ó*ˆØ˜¨Ð,Ð,øÜ”T×)Ñ)¬8´ZÐ@ò Ùðús   —AA' Á'#BÂBc                  ó0   — t        «       } | r| d   S t        S )Nr   )rY   r   )Ústoreds    r6   Úget_admin_usernamer\   q   s   € Ü%Ó'€FÙØ�a‰yÐÜÐr8   rL   c                 óF   — | xs dj                  «       j                  «       S )NÚ )Ústripr)   )rL   s    r6   Únormalize_login_usernamer`   x   s   € ØŠN˜×!Ñ!Ó#×)Ñ)Ó+Ð+r8   c                 ó(  — t        | «      }|xs d}|syt        t        «       «      }t        j                  ||«      sy|syt	        «       }|r*|\  }}}t        ||«      }t        j                  ||«      syyt        j                  |t        «      syy)Nr^   )FÚwrong_username)FÚwrong_password)TN)r`   r\   ÚsecretsÚcompare_digestrY   rH   r   )	rL   r   Únormalized_usernameÚexpected_usernamer[   Ú_rM   r>   Úcandidate_hashs	            r6   Úcheck_admin_loginrj   |   s•   € Ü2°8Ó<ÐØŠ~˜2€HáØ&ä0Ô1CÓ1EÓFÐÜ×!Ñ!Ð"5Ð7HÔIØ&áØ&ä%Ó'€FÙØ!'Ñˆˆ=˜$Ü'¨°$Ó7ˆÜ×%Ñ% n°mÔDØ*Øä×!Ñ! (¬NÔ;Ø&Ør8   c                 ó$   — t        | |«      \  }}|S )N)rj   )rL   r   Úsuccessrh   s       r6   Úverify_adminrm   —   s   € Ü" 8¨XÓ6�J€GˆQØ€Nr8   Úcurrent_passwordÚnew_passwordÚconfirm_passwordc                 ó:  — | xs d} |xs d}|xs d}t        t        «       | «      syt        |«      \  }}|sd|d   fS ||k7  ryt        j                  | |«      ryt        «       }t        j                  d«      }t        ||«      }||j                  «       |dœ}	 t        j                  j                  d	d	¬
«       t        j                  d«      }	|	j                  t        j                  |«      d¬«       |	j!                  t        «       y# t"        $ r Y yw xY w)Nr^   )FzCurrent password is incorrect.Fr   )Fz+New password and confirmation do not match.)Fz9New password must be different from the current password.é   )rL   r>   rM   T)ÚparentsÚexist_okz.tmprA   rJ   )Fz@Could not save the new password. Check server write permissions.)TzPassword updated successfully.)rm   r\   r=   rd   re   ÚosÚurandomrH   rF   rN   ÚparentÚmkdirÚwith_suffixÚ
write_textrP   ÚdumpsÚreplacerU   )
rn   ro   rp   Úis_validÚvalidation_errorsrL   r>   rM   ÚpayloadÚ	temp_paths
             r6   Úchange_admin_passwordr�   œ   s&  € ð
 (Ò-¨2ÐØÒ% 2€LØ'Ò-¨2ÐäÔ*Ó,Ð.>Ô?Ø6ä"7¸Ó"EÑ€HÐÙØÐ'¨Ñ*Ð*Ð*àÐ'Ò'ØCä×ÑÐ.°Ô=ØQä!Ó#€HÜ�:‰:�b‹>€DÜ" <°Ó6€MàØ—‘“
Ø&ñ€GðYÜ×Ñ×%Ñ%¨d¸TÐ%ÔBÜ$×0Ñ0°Ó8ˆ	Ø×ÑœTŸZ™Z¨Ó0¸7ÐÔCØ×ÑÔ*Ô+ð 2øô ò YÙXðYús   ÂA1D Ä	DÄDÚrequestc                 óJ   — t        | j                  j                  d«      «      S )NÚis_admin)r1   ÚsessionÚget)r‚   s    r6   Úis_authenticatedr‡   Æ   s   € Ü�—‘×#Ñ# JÓ/Ó0Ð0r8   Ú	next_pathc                 ó.   — | r| j                  d«      sy| S )Nú
/dashboardz/dashboard/spam)Ú
startswith)rˆ   s    r6   Úsafe_next_pathrŒ   Ê   s   € Ù˜I×0Ñ0°Ô>Ø ØÐr8   ÚpathÚmethodc                 óz   — | t         k(  s| j                  t         › d�«      ry| dk(  r|j                  «       dk(  ryy)NÚ/Tz/admin/logoutÚPOSTF)Ú
LOGIN_PATHr‹   r(   )r�   rŽ   s     r6   Ú_is_public_admin_pathr“   Ð   s:   € ØŒzÒ˜TŸ_™_´
¨|¸1Ð-=Ô>ØØˆÒ 6§<¡<£>°VÒ#;ØØr8   c                   ó   — e Zd Zdefd„Zy)ÚAdminAuthMiddlewarer‚   c              ƒ   óØ  K  — |j                   j                  }|j                  d«      r@t        ||j                  «      s*t        |«      st        t        › dt        |«      › �d¬«      S |j                  d«      r]t        |«      sR|}|j                   j                  r|› d|j                   j                  › �}t        t        › dt        |«      › �d¬«      S  ||«      ƒ d {  –—† S 7 Œ­w)Nz/adminz?next=i/  )Ústatus_coderŠ   Ú?)
Úurlr�   r‹   r“   rŽ   r‡   r   r’   r   Úquery)Úselfr‚   Ú	call_nextr�   Únext_urls        r6   ÚdispatchzAdminAuthMiddleware.dispatchÙ   sÒ   è ø€ Ø�{‰{×Ñˆà�?‰?˜8Ô$Ô-BÀ4ÈÏÉÔ-XÜ# GÔ,Ü'Ü!�l &¬¨t«¨Ð6Ø #ôð ð
 �?‰?˜<Ô(Ü# GÔ,Ø�Ø—;‘;×$Ò$Ø"&  q¨¯©×):Ñ):Ð(;Ð<�HÜ'Ü!�l &¬¨x«Ð(9Ð:Ø #ôð ñ
 ˜wÓ'×'Ð'Ð'ús   ‚C!C*Ã#C(Ã$C*N)Ú__name__Ú
__module__Ú__qualname__r
   rž   © r8   r6   r•   r•   Ø   s   „ ð( gô (r8   r•   )5rB   rP   ru   r2   rd   Úpathlibr   Útypingr   r   r   r   Úurllib.parser   Ústarlette.middleware.baser	   Ústarlette.requestsr
   Ústarlette.responsesr   Ú__file__rw   ÚBASE_DIRrN   rE   Úgetenvr   r   r   r’   ÚCHANGE_PASSWORD_PATHr.   r0   Úcompiler4   Ú	frozensetr5   Ústrr1   r7   r=   rS   rH   rY   r\   r`   rj   rm   r�   r‡   rŒ   r“   r•   r¢   r8   r6   Ú<module>r°      s  ðÛ Û Û 	Û 	Û Ý ß .Ó .Ý å 8Ý &Ý 0á�‹>× Ñ €Ø˜fÑ$Ð'?Ñ?Ð ØÐ à�—‘Ð+Ð-AÓB€Ø�—‘Ð+¨ZÓ8€Ø�—‘Ð+Ð-MÓN€à€
Ø/Ð àÐ ØÐ Ø!�r—z‘zÐ"LÓMÐ áòóÐ ð2	 3ð 	¨4°°T°	©?ó 	ð$ Cð $¨E°$¸¸S¹	°/Ñ,Bó $ð0˜Sð ¨ð °#ó ð
 (¨5°°c¸5°Ñ+AÑ"Bó 
ð˜Có ð, sð ,¨só ,ð ð ¨sð °u¸TÀ8ÈCÁ=Ð=PÑ7Qó ð6˜3ð ¨#ð °$ó ð
'2Øð'2àð'2ð ð'2ð ˆ4�ˆ9Ñó	'2ðT1˜gð 1¨$ó 1ð˜c D™jð ¨Só ð ð ¨Sð °Tó ô(Ð,õ (r8   