
    gc'                         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 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 d dlmZ d dlmZ d dlmZ d dlmZ  G d de      Z e       Zy)    )datetime)	timedelta)timezone)JSONEncoder)Iterable)List)Optional)Sequence)Type)Union)current_app)requires_cryptography)get_json_encoder)ExpiresDeltac                      e Zd ZdZedefd       Zedefd       Zedefd       Z	ede
e   fd       Zedefd       Zedefd       Zedefd	       Zedefd
       Zedefd       Zedefd       Zedefd       Zedefd       Zedefd       Zedefd       Zedefd       Zedefd       Zedefd       Zedefd       Zedefd       Zedefd       Zedefd       Zedefd       Zedefd       Zedee   fd       Z edefd       Z!edefd       Z"edefd       Z#edefd       Z$edefd       Z%edefd        Z&edefd!       Z'edefd"       Z(edefd#       Z)edefd$       Z*ede+fd%       Z,ede+fd&       Z-edefd'       Z.ede/e   fd(       Z0edefd)       Z1edefd*       Z2edefd+       Z3ede4e5   fd,       Z6edefd-       Z7edee   fd.       Z8edefd/       Z9ede:e;   fd0       Z<ede=eee   f   fd1       Z>ede=eee   f   fd2       Z?edefd3       Z@edefd4       ZAede5fd5       ZBedefd6       ZCedefd7       ZDy8)9_Configa  
    Helper object for accessing and verifying options in this extension. This
    is meant for internal use of the application; modifying config options
    should be done with flasks ```app.config```.

    Default values for the configuration options are set in the jwt_manager
    object. All of these values are read only. This is simply a loose wrapper
    with some helper functionality for flasks `app.config`.
    returnc                 &    | j                   t        v S N)	algorithmr   selfs    Y/var/www/api/v1/venv_getwork_v1/lib/python3.12/site-packages/flask_jwt_extended/config.pyis_asymmetricz_Config.is_asymmetric   s    ~~!666    c                 J    | j                   r| j                  S | j                  S r   )r   _private_key_secret_keyr   s    r   
encode_keyz_Config.encode_key"   s!    $($6$6t  LD<L<LLr   c                 J    | j                   r| j                  S | j                  S r   )r   _public_keyr   r   s    r   
decode_keyz_Config.decode_key&   s!    #'#5#5tK4;K;KKr   c                     t         j                  d   }t        |t              r|f}n(t        |t              st        d      |st        d      |D ]  }|dvst        d       |S )NJWT_TOKEN_LOCATIONz.JWT_TOKEN_LOCATION must be a sequence or a setz_JWT_TOKEN_LOCATION must contain at least one of "headers", "cookies", "query_string", or "json")headerscookiesquery_stringjsonzSJWT_TOKEN_LOCATION can only contain "headers", "cookies", "query_string", or "json")r   config
isinstancestrr   RuntimeError)r   	locationslocations      r   token_locationz_Config.token_location*   s    &&';<	i%"IIx0OPPE  "HMM"F  " r   c                     d| j                   v S )Nr&   r/   r   s    r   jwt_in_cookiesz_Config.jwt_in_cookies>       D////r   c                     d| j                   v S )Nr%   r1   r   s    r   jwt_in_headersz_Config.jwt_in_headersB   r3   r   c                     d| j                   v S )Nr'   r1   r   s    r   jwt_in_query_stringz_Config.jwt_in_query_stringF   s    !4!444r   c                     d| j                   v S )Nr(   r1   r   s    r   jwt_in_jsonz_Config.jwt_in_jsonJ   s    ,,,,r   c                 F    t         j                  d   }|st        d      |S )NJWT_HEADER_NAMEz&JWT_ACCESS_HEADER_NAME cannot be empty)r   r)   r,   )r   names     r   header_namez_Config.header_nameN   s'    !!"34GHHr   c                 (    t         j                  d   S )NJWT_HEADER_TYPEr   r)   r   s    r   header_typez_Config.header_typeU   s    !!"344r   c                 (    t         j                  d   S )NJWT_QUERY_STRING_NAMEr@   r   s    r   query_string_namez_Config.query_string_nameY       !!"9::r   c                 (    t         j                  d   S )NJWT_QUERY_STRING_VALUE_PREFIXr@   r   s    r   query_string_value_prefixz!_Config.query_string_value_prefix]   s    !!"ABBr   c                 (    t         j                  d   S )NJWT_ACCESS_COOKIE_NAMEr@   r   s    r   access_cookie_namez_Config.access_cookie_namea       !!":;;r   c                 (    t         j                  d   S )NJWT_REFRESH_COOKIE_NAMEr@   r   s    r   refresh_cookie_namez_Config.refresh_cookie_namee       !!";<<r   c                 (    t         j                  d   S )NJWT_ACCESS_COOKIE_PATHr@   r   s    r   access_cookie_pathz_Config.access_cookie_pathi   rL   r   c                 (    t         j                  d   S )NJWT_REFRESH_COOKIE_PATHr@   r   s    r   refresh_cookie_pathz_Config.refresh_cookie_pathm   rP   r   c                 (    t         j                  d   S )NJWT_COOKIE_SECUREr@   r   s    r   cookie_securez_Config.cookie_secureq       !!"566r   c                 (    t         j                  d   S )NJWT_COOKIE_DOMAINr@   r   s    r   cookie_domainz_Config.cookie_domainu   rZ   r   c                 (    t         j                  d   S )NJWT_SESSION_COOKIEr@   r   s    r   session_cookiez_Config.session_cookiey       !!"677r   c                 (    t         j                  d   S )NJWT_COOKIE_SAMESITEr@   r   s    r   cookie_samesitez_Config.cookie_samesite}       !!"788r   c                 (    t         j                  d   S )NJWT_JSON_KEYr@   r   s    r   json_keyz_Config.json_key   s    !!.11r   c                 (    t         j                  d   S )NJWT_REFRESH_JSON_KEYr@   r   s    r   refresh_json_keyz_Config.refresh_json_key   s    !!"899r   c                 (    t         j                  d   S )NJWT_COOKIE_CSRF_PROTECTr@   r   s    r   cookie_csrf_protectz_Config.cookie_csrf_protect   rP   r   c                 (    t         j                  d   S )NJWT_CSRF_METHODSr@   r   s    r   csrf_request_methodsz_Config.csrf_request_methods   s    !!"455r   c                 (    t         j                  d   S )NJWT_CSRF_IN_COOKIESr@   r   s    r   csrf_in_cookiesz_Config.csrf_in_cookies   re   r   c                 (    t         j                  d   S )NJWT_ACCESS_CSRF_COOKIE_NAMEr@   r   s    r   access_csrf_cookie_namez_Config.access_csrf_cookie_name       !!"?@@r   c                 (    t         j                  d   S )NJWT_REFRESH_CSRF_COOKIE_NAMEr@   r   s    r   refresh_csrf_cookie_namez _Config.refresh_csrf_cookie_name       !!"@AAr   c                 (    t         j                  d   S )NJWT_ACCESS_CSRF_COOKIE_PATHr@   r   s    r   access_csrf_cookie_pathz_Config.access_csrf_cookie_path   rx   r   c                 (    t         j                  d   S )NJWT_REFRESH_CSRF_COOKIE_PATHr@   r   s    r   refresh_csrf_cookie_pathz _Config.refresh_csrf_cookie_path   r|   r   c                 (    t         j                  d   S )NJWT_ACCESS_CSRF_HEADER_NAMEr@   r   s    r   access_csrf_header_namez_Config.access_csrf_header_name   rx   r   c                 (    t         j                  d   S )NJWT_REFRESH_CSRF_HEADER_NAMEr@   r   s    r   refresh_csrf_header_namez _Config.refresh_csrf_header_name   r|   r   c                 (    t         j                  d   S )NJWT_CSRF_CHECK_FORMr@   r   s    r   csrf_check_formz_Config.csrf_check_form   re   r   c                 (    t         j                  d   S )NJWT_ACCESS_CSRF_FIELD_NAMEr@   r   s    r   access_csrf_field_namez_Config.access_csrf_field_name   s    !!">??r   c                 (    t         j                  d   S )NJWT_REFRESH_CSRF_FIELD_NAMEr@   r   s    r   refresh_csrf_field_namez_Config.refresh_csrf_field_name   rx   r   c                     t         j                  d   }t        |      t        u rt	        |      }|dur)	 |t        j                  t        j                        z    |S |S # t        $ r}d}t        |      |d }~ww xY w)NJWT_ACCESS_TOKEN_EXPIRESsecondsFzAmust be able to add JWT_ACCESS_TOKEN_EXPIRES to datetime.datetimer   r)   typeintr   r   nowr   utc	TypeErrorr,   r   deltaeerrs       r   access_expiresz_Config.access_expires   s    ""#=>;#e,E/ X\\22 u  /W  #3'Q.	/   &A   	A<)A77A<c                     t         j                  d   }t        |      t        u rt	        |      }|dur)	 |t        j                  t        j                        z    |S |S # t        $ r}d}t        |      |d }~ww xY w)NJWT_REFRESH_TOKEN_EXPIRESr   FzBmust be able to add JWT_REFRESH_TOKEN_EXPIRES to datetime.datetimer   r   s       r   refresh_expiresz_Config.refresh_expires   s    ""#>?;#e,E/X\\22 u  /X  #3'Q.	/r   c                 (    t         j                  d   S )NJWT_ALGORITHMr@   r   s    r   r   z_Config.algorithm   s    !!/22r   c                     t         j                  d   }|s| j                  gS | j                  |vr|j                  | j                         |S )NJWT_DECODE_ALGORITHMS)r   r)   r   append)r   
algorithmss     r   decode_algorithmsz_Config.decode_algorithms   sG     ''(?@
NN##>>+dnn-r   c                     t         j                  d   }|sFt         j                  j                  dd       }|s$t        dj	                  | j
                              |S )NJWT_SECRET_KEY
SECRET_KEYzRJWT_SECRET_KEY or flask SECRET_KEY must be set when using symmetric algorithm "{}")r   r)   getr,   formatr   r   keys     r   r   z_Config._secret_key   sX      !12$$((t<C"%%+VDNN%; 
 
r   c                 x    t         j                  d   }|s$t        dj                  | j                              |S )NJWT_PUBLIC_KEYzHJWT_PUBLIC_KEY must be set to use asymmetric cryptography algorithm "{}"r   r)   r,   r   r   r   s     r   r!   z_Config._public_key   s=      !12vdnn- 
 
r   c                 x    t         j                  d   }|s$t        dj                  | j                              |S )NJWT_PRIVATE_KEYzIJWT_PRIVATE_KEY must be set to use asymmetric cryptography algorithm "{}"r   r   s     r   r   z_Config._private_key   s=      !23vdnn- 
 
r   c                 "    | j                   rd S dS )Ni C)r`   r   s    r   cookie_max_agez_Config.cookie_max_age  s    
 **t88r   c                 (    t         j                  d   S )NJWT_IDENTITY_CLAIMr@   r   s    r   identity_claim_keyz_Config.identity_claim_key  ra   r   c                     dhS )NOPTIONS r   s    r   exempt_methodsz_Config.exempt_methods  s
    {r   c                 (    t         j                  d   S )NJWT_ERROR_MESSAGE_KEYr@   r   s    r   error_msg_keyz_Config.error_msg_key  rE   r   c                      t        t              S r   )r   r   r   s    r   json_encoderz_Config.json_encoder  s    ,,r   c                 (    t         j                  d   S )NJWT_DECODE_AUDIENCEr@   r   s    r   decode_audiencez_Config.decode_audience"  re   r   c                 (    t         j                  d   S )NJWT_ENCODE_AUDIENCEr@   r   s    r   encode_audiencez_Config.encode_audience&  re   r   c                 (    t         j                  d   S )NJWT_ENCODE_ISSUERr@   r   s    r   encode_issuerz_Config.encode_issuer*  rZ   r   c                 (    t         j                  d   S )NJWT_DECODE_ISSUERr@   r   s    r   decode_issuerz_Config.decode_issuer.  rZ   r   c                 (    t         j                  d   S )NJWT_DECODE_LEEWAYr@   r   s    r   leewayz_Config.leeway2  rZ   r   c                 (    t         j                  d   S )NJWT_VERIFY_SUBr@   r   s    r   
verify_subz_Config.verify_sub6      !!"233r   c                 (    t         j                  d   S )NJWT_ENCODE_NBFr@   r   s    r   
encode_nbfz_Config.encode_nbf:  r   r   N)E__name__
__module____qualname____doc__propertyboolr   r+   r   r"   r
   r/   r2   r5   r7   r9   r=   rA   rD   rH   rK   rO   rS   rV   rY   r]   r`   rd   rh   rk   rn   r   rq   rt   rw   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r!   r   r	   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s    7t 7 7 MC M M LC L L   & 0 0 0 0 0 0 5T 5 5 -T - - S   5S 5 5 ;3 ; ; C3 C C <C < < =S = = <C < < =S = = 7t 7 7 7s 7 7 8 8 8 9 9 9 2# 2 2 :# : : =T = = 6hsm 6 6 9 9 9 A A A B# B B A A A B# B B A A A B# B B 9 9 9 @ @ @ A A A         33 3 3 49   
S 
 
 S   c   9 9 9 8C 8 8    ;s ; ; -d;/ - - 9sHSM'9!: 9 9 9sHSM'9!: 9 9 7s 7 7 7s 7 7 7 7 7 4D 4 4 4D 4 4r   r   N)r   r   r   r(   r   typingr   r   r	   r
   r   r   flaskr   jwt.algorithmsr   !flask_jwt_extended.internal_utilsr   flask_jwt_extended.typingr   objectr   r)   r   r   r   <module>r      sG               0 > 2i4f i4X	 
r   