
    <#(i4                     j   d dl Z d dlZd dlZd dlZd dlmZ d dlZd dlZd dl	Zd dl
mZ d dlmZ ddlmZ ddlmZ d Zd	 Z G d
 deej        j                  Z G d de          Z G d deej        j                  Z G d deej        j                  Z G d deej        j                  ZdS )    N)	urlencode)instantiate)options   )BaseHandler)NotFoundErrorHandlerc                     d| v r||                      d          v S d| v r=t          j        |                               dd          } t          j        | |          S | |k    S )N|*z\.\*z![A-Za-z0-9!#$%&'*+/=?^_`{|}~.\-]*)splitreescapereplace	fullmatch)patternemails     Q/var/www/html/auto_sub_bot/venv/lib/python3.11/site-packages/flower/views/auth.pyauthenticater      sh    
g~~c****
g~~)G$$,,W6Z[[|GU+++e    c                     |                      d          dk    rdS d| v rd| v rdS d|                     dd          d         v rdS dS )Nr      Fr
   @T)countrsplit)r   s    r   validate_auth_optionr      s\    }}SAu
g~~#..u
gnnS!$$R(((u4r   c                       e Zd ZdZd Zd ZdS )GoogleAuth2LoginHandleroauthc                 h  K   | j         | j                 d         }|                     dd          rM|                     ||                     d                     d {V }|                     |           d {V  d S |                     || j         | j                 d         ddgddd	i
           d S )Nredirect_uricodeFr!   r"   keyprofiler   approval_prompt r!   	client_idscoperesponse_typeextra_paramssettings_OAUTH_SETTINGS_KEYget_argumentget_authenticated_user_on_authauthorize_redirectselfr!   users      r   getzGoogleAuth2LoginHandler.get)   s      }T%=>~NVU++ 	44)&&v.. 5        D --%%%%%%%%%%%##)-(@A%H '*$/4 $     r   c                 $  K   |s t           j                            dd          |d         }	 |                                                     ddd| i           d {V }n5# t
          $ r(}t           j                            dd|           d }~ww xY wt          j        |j        	                    d	                    d
         }t          | j        j        j        |          s&d| d}t           j                            d|          |                     dt          |                     |                     d| j        j        j        pd          }| j        j        j        r|d         dk    rd|z   }|                     |           d S )N  zGoogle auth failedaccess_tokenz)https://www.googleapis.com/userinfo/v2/meAuthorizationBearer headerszGoogle auth failed: utf-8r   zAccess denied to 'zS'. Please use another account or ask your admin to add your email to flower --auth.r6   next/r   )tornadoweb	HTTPErrorget_auth_http_clientfetch	Exceptionjsonloadsbodydecoder   applicationr   authset_secure_cookiestrr0   
url_prefixredirect)r5   r6   r:   responseer   messagenext_s           r   r2   z GoogleAuth2LoginHandler._on_auth:   s      	C+''-ABBBN+	I!6688>>;(*BL*B*BC ? E E E E E E E EHH  	I 	I 	I+''-GA-G-GHHH	I 
8=//8899'BD,495AA 	6 F5  F  F  FG+''W555vs5zz222!!&$*:*B*M*TQTUU#. 	 58s??%KEes   4A# #
B-#BBN)__name__
__module____qualname__r/   r7   r2    r   r   r   r   &   s8        !  "    r   r   c                       e Zd Zd ZdS )LoginHandlerc                 D    t          t          j        pt          g|R i |S )N)r   r   auth_providerr   )clsargskwargss      r   __new__zLoginHandler.__new__U   s*    70H4HZ4ZZZSYZZZr   N)rV   rW   rX   ra   rY   r   r   r[   r[   T   s(        [ [ [ [ [r   r[   c                   b    e Zd Z ej        dd          Zde dZde dZdZdZ	d Z
d	 Zd
 ZdS )GithubLoginHandlerFLOWER_GITHUB_OAUTH_DOMAINz
github.comhttps://z/login/oauth/authorizez/login/oauth/access_tokenFr   c                   K   t          ||| j        | j                 d         | j        | j                 d         dd          }|                                                     | j        dddd|	           d {V }|j        r"t          j        	                    d
|           t          j        |j                            d                    S Nr$   secretauthorization_coder!   r"   r)   client_secret
grant_typePOST!application/x-www-form-urlencodedapplication/jsonzContent-TypeAcceptmethodr>   rJ   OAuth authenticator error: r?   r   r.   r/   rE   rF   _OAUTH_ACCESS_TOKEN_URLerrorrB   rM   	AuthErrorrH   rI   rJ   rK   r5   r!   r"   rJ   rR   s        r   r1   z)GithubLoginHandler.get_authenticated_userb         (t'?@G!]4+CDXN.
 
   2244::(%H13 39=	 ; ? ? ? ? ? ? ? ? > 	S,(()Qx)Q)QRRRz(-..w77888r   c                 f  K   | j         | j                 d         }|                     dd          rM|                     ||                     d                     d {V }|                     |           d {V  d S |                     || j         | j                 d         dgdddi	           d S )
Nr!   r"   Fr#   r$   z
user:emailr&   r'   r(   r-   r4   s      r   r7   zGithubLoginHandler.getv   s      }T%=>~NVU++ 	44)&&v.. 5        D --%%%%%%%%%%%##)-(@A%H#n$/4 $     r   c                    K   |s t           j                            dd          |d         }                                                     d j         dd|z   dd	           d {V } fd
t          j        |j        	                    d                    D             }|s"d}t           j                            d|           
                    dt          |                                                                          d j        j        j        pd          } j        j        j        r|d         dk    rd|z   }                     |           d S )N  OAuth authentication failedr:   zhttps://api.z/user/emailsztoken Tornado authr;   z
User-agentr=   c                     g | ]I}|d          
t          j        j        j        |d                   /|d                                         JS )verifiedr   )r   rL   r   rM   lower).0r   r5   s     r   
<listcomp>z/GithubLoginHandler._on_auth.<locals>.<listcomp>   sl     h h hU:&h+78H8P8UW\]dWe+f+fh%.&&(( h h hr   r?   _Access denied. Please use another account or ask your admin to add your email to flower --auth.r9   r6   r@   rA   r   )rB   rC   rD   rE   rF   _OAUTH_DOMAINrH   rI   rJ   rK   rN   rO   popr0   rL   r   rP   rQ   )r5   r6   r:   rR   emailsrT   rU   s   `      r   r2   zGithubLoginHandler._on_auth   s      	L+''-JKKKN+2244::;4-;;;&.&=#13 3 ; 4 4 4 4 4 4 4 4
h h h hdjAUAUV]A^A^6_6_ h h h  	6E  +''W555vs6::<<'8'8999!!&$*:*B*M*TQTUU#. 	 58s??%KEer   N)rV   rW   rX   osgetenvr   _OAUTH_AUTHORIZE_URLrv   _OAUTH_NO_CALLBACKSr/   r1   r7   r2   rY   r   r   rc   rc   Y   s        BI$l4 4MKmKKKQQQQ!9 9 9(  "    r   rc   c                   ^    e Zd Z ej        dd          Zde dZde dZdZd Z	d Z
d	 Zd
S )GitLabLoginHandlerFLOWER_GITLAB_OAUTH_DOMAINz
gitlab.comre   z/oauth/authorizez/oauth/tokenFc                   K   t          ||| j        d         d         | j        d         d         dd          }|                                                     | j        dddd	|
           d {V }|j        r"t          j                            d|           t          j
        |j                            d                    S )Nr   r$   rh   ri   rj   rm   rn   ro   rp   rr   rt   r?   )r   r.   rE   rF   rv   rw   rB   rM   rx   rH   rI   rJ   rK   ry   s        r   r1   z)GitLabLoginHandler.get_authenticated_user   s      (w/6!]73H=.
 
   2244::(%H13 3 ; 
 
 
 
 
 
 
 
 > 	S,(()Qx)Q)QRRRz(-..w77888r   c                 R  K   | j         d         d         }|                     dd          rM|                     ||                     d                     d {V }|                     |           d {V  d S |                     || j         d         d         dgddd	i
           d S )Nr   r!   r"   Fr#   r$   read_apir&   r'   r(   )r.   r0   r1   r2   r3   r4   s      r   r7   zGitLabLoginHandler.get   s      }W-n=VU++ 	44)&&v.. 5        D --%%%%%%%%%%%##)-07!l$/4 $     r   c                   K   |s t           j                            dd          |d         }t          j                            dd          d                     d          D             	 |                                                     d| j	         d	d
|z   dd           d {V }n5# t          $ r(}t           j                            dd|           d }~ww xY wt          j        |j                            d                    d         }t          | j        j        j        |          }g }rt          j                            dd          }|                                                     d| j	         d| d
|z   dd           d {V }fdt          j        |j                            d                    D             }|rr5t'          |          dk    r"d}	t           j                            d|	          |                     dt+          |                     |                     d| j        j        j        pd          }
| j        j        j        r|
d         dk    rd|
z   }
|                     |
           d S )Nr}   r~   r:   !FLOWER_GITLAB_AUTH_ALLOWED_GROUPSr'   c                 :    g | ]}||                                 S rY   )strip)r   groups     r   r   z/GitLabLoginHandler._on_auth.<locals>.<listcomp>   s&    XXXERWX%++--XXXr   ,re   z/api/v4/userr<   r   r   r=   r9   zGitLab auth failed: r?   r   FLOWER_GITLAB_MIN_ACCESS_LEVEL20z /api/v4/groups?min_access_level=c                 4    g | ]}|d          v |d         S )	full_pathidrY   )r   r   allowed_groupss     r   r   z/GitLabLoginHandler._on_auth.<locals>.<listcomp>   s7       %77 d777r   r   z@Access denied. Please use another account or contact your admin.r6   r@   rA   )rB   rC   rD   r   environr7   r   rE   rF   _OAUTH_GITLAB_DOMAINrG   rH   rI   rJ   rK   r   rL   r   rM   lenrN   rO   r0   rP   rQ   )r5   r6   r:   rR   rS   
user_emailemail_allowedmatching_groupsmin_access_levelrT   rU   r   s              @r   r2   zGitLabLoginHandler._on_auth   s      	L+''-JKKKN+(KRPPXX^5I5I#5N5NXXX	I!6688>>B44BBB*3l*B'57 7 ?        HH
  	I 	I 	I+''-GA-G-GHHH	I Z 4 4W = =>>wG
$T%5%=%BJOO  	!z~~.NPTUU!6688>>h44hhVfhh%.%="0  ?        H   !Z(<(<W(E(EFF  O  	6 	6C4H4HA4M4MXG+''W555vs:777!!&$*:*B*M*TQTUU#. 	 58s??%KEes   .>B- -
C7#CCN)rV   rW   rX   r   r   r   r   rv   r   r1   r7   r2   rY   r   r   r   r      s        $29$l4 4L&:LLLK)=KKK9 9 9&  "- - - - -r   r   c                       e Zd ZdZdZed             Zed             Zed             Zed             Z	d Z
d Zd	 Zd
S )OktaLoginHandlerFr   c                 @    t           j                            d          S )NFLOWER_OAUTH2_OKTA_BASE_URL)r   r   r7   r5   s    r   base_urlzOktaLoginHandler.base_url  s    z~~;<<<r   c                     | j          dS )Nz/v1/authorizer   r   s    r   r   z%OktaLoginHandler._OAUTH_AUTHORIZE_URL  s    -....r   c                     | j          dS )Nz	/v1/tokenr   r   s    r   rv   z(OktaLoginHandler._OAUTH_ACCESS_TOKEN_URL  s    -****r   c                     | j          dS )Nz/v1/userinfor   r   s    r   _OAUTH_USER_INFO_URLz%OktaLoginHandler._OAUTH_USER_INFO_URL  s    -----r   c                   K   t          ||| j        | j                 d         | j        | j                 d         dd          }|                                                     | j        dddd|	           d {V }|j        r"t          j        	                    d
|           t          j        |j                            d                    S rg   ru   ry   s        r   get_access_tokenz!OktaLoginHandler.get_access_token  rz   r   c                   K   | j         | j                 d         }|                     dd          r|                     d          pd                    d          }|                     d          }|||k    rt
          j                            d          |                     ||                     d          	           d {V }| 	                    |           d {V  d S t          t          j                              }|                     d|           |                     || j         | j                 d
         dgdd|i           d S )Nr!   r"   Foauth_stater   r?   statez4OAuth authenticator error: State tokens do not matchr#   r$   zopenid emailr(   )r.   r/   r0   get_secure_cookierK   rB   rM   rx   r   r2   rO   uuiduuid4rN   r3   )r5   r!   expected_statereturned_stateaccess_token_responser   s         r   r7   zOktaLoginHandler.get'  s     }T%=>~NVU++ 	"44]CCJsRRSZ[[N!..w77N%>)I)Il,,JL L L +/*?*?)&&v.. +@ + + % % % % % %! -- 566666666666
%%E""=%888##)-(@A%H%&$%u- $     r   c                 X  K   |s t           j                            dd          |d         }|                                                     | j        d|z   dd           d {V }t          j        |j        	                    d                    }|
                    d	          pd
                                }|
                    d          ot          | j        j        j        |          }|s"d}t           j                            d|          |                     dt#          |                     |                     d           |                     d| j        j        j        pd          }| j        j        j        r|d         dk    rd|z   }|                     |           d S )Nr}   r~   r:   r<   r   r   r=   r?   r   r'   email_verifiedr   r9   r6   r   r@   rA   r   )rB   rC   rD   rE   rF   r   rH   rI   rJ   rK   r7   r   r   rL   r   rM   rN   rO   clear_cookier0   rP   rQ   )	r5   r   r:   rR   decoded_bodyr   r   rT   rU   s	            r   r2   zOktaLoginHandler._on_authA  s     $ 	L+''-JKKK,^<2244::%&/,&>#13 3 ; 4 4 4 4 4 4 4 4
 z(-"6"6w"?"?@@!!'**0b7799-.. ?)16>> 	
  	6E  +''W555vs5zz222-(((!!&$*:*B*M*TQTUU#. 	 58s??%KEer   N)rV   rW   rX   r   r/   propertyr   r   rv   r   r   r7   r2   rY   r   r   r   r      s        != = X= / / X/ + + X+ . . X.9 9 9(  4    r   r   )rH   r   r   r   urllib.parser   tornado.authrB   tornado.gentornado.webcelery.utils.importsr   tornado.optionsr   viewsr   views.errorr   r   r   rM   GoogleOAuth2Mixinr   r[   OAuth2Mixinrc   r   r   rY   r   r   <module>r      s    				 				  " " " " " "             , , , , , , # # # # # #       . . . . . .
    + + + + +k7<+I + + +\[ [ [ [ [; [ [ [
G G G G Ggl&> G G GTY Y Y Y Ygl&> Y Y Yx` ` ` ` `{GL$< ` ` ` ` `r   