
    ^h"                        S SK JrJrJrJrJrJrJr  S SKJ	r	J
r
JrJrJr  S SKJrJr  S SKJrJrJr  S SKrS SKr\" S\5      rS rS r\R7                  S	S
S/S9S 5       r\R7                  SS
S/S9S 5       r\R7                  S5      \S 5       5       r\R7                  SS
S/S9S 5       r\R7                  SS
S/S9S 5       r S r!g)    )	Blueprintrender_templaterequestredirecturl_forflashsession)LoginManager
login_userlogout_userlogin_requiredcurrent_user)generate_password_hashcheck_password_hash)dbUserOrganizationNauthc                 6    Sn[         R                  " X5      S L$ )Nz0^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$)rematch)emailpatterns     %/home/kali/devsecops-assessor/auth.pyis_valid_emailr      s    AG88G#4//    c                     [        U 5      S:  a  g[        R                  " SU 5      (       d  g[        R                  " SU 5      (       d  g[        R                  " SU 5      (       d  gg	)
N   )Fz+Password must be at least 8 characters longz[A-Z])Fz3Password must contain at least one uppercase letterz[a-z])Fz3Password must contain at least one lowercase letterz[0-9])Fz)Password must contain at least one number)TzPassword is strong)lenr   search)passwords    r   is_strong_passwordr"      sP    
8}qC99Xx((K99Xx((K99Xx((A%r   z/loginGETPOST)methodsc                     [         R                  (       a  [        [        S5      5      $ [        R
                  S:X  Ga  [        R                  R                  SS5      R                  5       R                  5       n [        R                  R                  SS5      n[        R                  R                  S5      S:H  nU (       a  U(       d  [        SS	5        [        S
5      $ [        U 5      (       d  [        SS	5        [        S
5      $ [        R                  R                  U SS9R!                  5       nU(       a  [#        UR$                  U5      (       a  UR&                  R(                  S:w  a   [        SS5        [        [        S5      5      $ [+        X2S9  [,        R/                  5       Ul        [2        R4                  R7                  5         [        R8                  R                  S5      nU(       a$  [;        U5      R<                  S:X  a  [        U5      $ [        [        S5      5      $ [        SS	5        [        S
5      $ )N	dashboardr$   r    r!   rememberonzPlease fill in all fieldserrorzauth/login.html"Please enter a valid email addressTr   	is_activeactivezCYour organization subscription has expired. Please contact support.warningzbilling.billing)r)   nextdashboard.indexzInvalid email or password)r   is_authenticatedr   r   r   methodformgetstriplowerr   r   r   r   query	filter_byfirstr   password_hashorganizationsubscription_statusr   datetimeutcnowlast_login_atr   r	   commitargs	url_parsenetloc)r   r!   r)   user	next_pages        r   loginrH      s   $$,--~~  "-335;;=<<##J3<<##J/47 H-w7"#455e$$6@"#455 zz##%4#@FFH'(:(:HEE  44@[]fg(9 :;;t/!)!2DJJ  ((0IYy188B>	**G$5677-w7,--r   z	/registerc                  v   [         R                  (       a  [        [        S5      5      $ [        R
                  S:X  Ga  [        R                  R                  SS5      R                  5       n [        R                  R                  SS5      R                  5       n[        R                  R                  SS5      R                  5       R                  5       n[        R                  R                  SS5      n[        R                  R                  SS5      R                  5       n[        R                  R                  S	S5      n[        R                  R                  S
S5      n[        R                  R                  SS5      n/ n[        XX#XEU/5      (       d  UR                  S5        [        U5      (       d  UR                  S5        [        U5      u  pU	(       d  UR                  U
5        [        R                  R!                  US9R#                  5       nU(       a  UR                  S5        U(       a   U H  n[%        US5        M     ['        S5      $  [)        UUUUS9n[*        R,                  R/                  U5        [*        R,                  R1                  5         [        U UU[3        U5      UR4                  S[6        R8                  " S5      S9n[*        R,                  R/                  U5        [*        R,                  R;                  5         [%        SS5        [=        U5        [        [        S5      5      $ ['        S5      $ ! [>         a_  n[*        R,                  RA                  5         [%        SS5        [B        RD                  RG                  S[I        U5       35         S nANoS nAff = f)Nr2   r$   	firstNamer(   lastNamer   r!   orgNameorgSizeindustryplanfreez"Please fill in all required fieldsr,   )r   z)An account with this email already existsr+   zauth/register.html)namesizerN   subscription_planadmin    )
first_name	last_namer   r<   organization_idroleverification_tokenz7Account created successfully! Please verify your email.successzonboarding.startz@An error occurred while creating your account. Please try again.zRegistration error: )%r   r3   r   r   r   r4   r5   r6   r7   r8   allappendr   r"   r   r9   r:   r;   r   r   r   r   r	   addflushr   idsecretstoken_urlsaferB   r   	Exceptionrollbackapploggerr+   str)rV   rW   r   r!   org_nameorg_sizerN   rO   errors	is_strongpassword_msgexisting_userr+   r=   rF   es                   r   registerro   F   s   $$ 1233~~\\%%k26<<>
LL$$Z4::<	  "-335;;=<<##J3<<##Ir288:<<##Ir2<<##J3||/ J5HPXYZZMM>?e$$MM>?"4X">	MM,' 

,,5,9??AMMEFeW%  "#788%	>'!"&	L JJNN<(JJ %#4X> ,#*#8#8#<D JJNN4 JJ
 KYW tG$6788 /00  	>JJ!TV]^JJ3CF8<==	>s   C&M 
N8AN33N8z/logoutc                  V    [        5         [        SS5        [        [        S5      5      $ )Nz%You have been logged out successfullyinfo
auth.login)r   r   r   r    r   r   logoutrt      s$     M	
16:GL)**r   z/forgot-passwordc                  h   [         R                  S:X  Ga  [         R                  R                  SS5      R	                  5       R                  5       n [        U 5      (       d  [        SS5        [        S5      $ [        R                  R                  U SS9R                  5       nU(       a]  [        R                  " S	5      nX!l        [         R#                  5       [%        S
S9-   Ul        [(        R*                  R-                  5         [        SS5        [/        [1        S5      5      $ [        S5      $ )Nr$   r   r(   r,   r+   zauth/forgot_password.htmlTr-   rU      )hourszGIf an account with that email exists, we've sent a password reset link.rq   rr   )r   r4   r5   r6   r7   r8   r   r   r   r   r9   r:   r;   ra   rb   reset_tokenr?   r@   	timedeltareset_token_expiresr   r	   rB   r   r   )r   rF   rx   s      r   forgot_passwordr{      s    ~~  "-335;;=e$$6@"#>??zz##%4#@FFH!//3K*'/'891;M'MD$JJ 	XZ`a-..677r   z/reset-password/<token>c                    [         R                  R                  U SS9R                  5       nU(       a"  UR                  [
        R                  5       :  a   [        SS5        [        [        S5      5      $ [        R                  S:X  a  [        R                  R                  SS5      n[        R                  R                  S	S5      nX#:w  a  [        S
S5        [        SU S9$ [        U5      u  pEU(       d  [        US5        [        SU S9$ [!        U5      Ul        S Ul        S Ul        [&        R(                  R+                  5         [        SS5        [        [        S5      5      $ [        SU S9$ )NT)rx   r.   zInvalid or expired reset tokenr+   zauth.forgot_passwordr$   r!   r(   confirmPasswordzPasswords do not matchzauth/reset_password.html)tokenz+Your password has been updated successfullyr[   rr   )r   r9   r:   r;   rz   r?   r@   r   r   r   r   r4   r5   r6   r   r"   r   r<   rx   r   r	   rB   )r~   rF   r!   confirm_passwordrk   rl   s         r   reset_passwordr      s;   ::    eg 	
 4++hoo.??.8 6788~~<<##J3"<<++,=rB'*G4"#=UKK"4X">	,("#=UKK 4H=#' 


;YG-..5UCCr   c                     [        5       nUR                  U 5        SUl        SUl        SUl        UR
                  S 5       nU R                  [        SS9  g )Nrr   z"Please log in to access this page.rq   c                 R    [         R                  R                  [        U 5      5      $ )N)r   r9   r6   int)user_ids    r   	load_userinit_auth.<locals>.load_user   s    zz~~c'l++r   z/auth)
url_prefix)r
   init_app
login_viewlogin_messagelogin_message_categoryuser_loaderregister_blueprintauth_bp)re   login_managerr   s      r   	init_authr      s\     NM3+M"FM+1M(, , 7w7r   )"flaskr   r   r   r   r   r   r	   flask_loginr
   r   r   r   r   werkzeug.securityr   r   modelsr   r   r   ra   r   __name__r   r   r"   routerH   ro   rt   r{   r   r   rs   r   r   <module>r      s   X X X [ [ I ) )  	
FH
%0
	& 	x%1'. 2'.R 	{UFO4M1 5M1^ 	y+  +
 	!E6?;8 <82 	(5&/B D C DF8r   