o
    g&                     @   s   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 deZe ZdS )    )datetime)	timedelta)timezone)JSONEncoder)Iterable)List)Optional)Sequence)Type)Union)current_app)requires_cryptography)get_json_encoder)ExpiresDeltac                   @   s  e Zd ZdZedefddZedefddZedefddZ	ede
e fd	d
ZedefddZedefddZedefddZedefddZedefddZedefddZedefddZedefddZedefddZedefddZedefdd Zedefd!d"Zedefd#d$Zedefd%d&Zedefd'd(Zedefd)d*Zedefd+d,Zedefd-d.Zedefd/d0Zedee fd1d2Z edefd3d4Z!edefd5d6Z"edefd7d8Z#edefd9d:Z$edefd;d<Z%edefd=d>Z&edefd?d@Z'edefdAdBZ(edefdCdDZ)edefdEdFZ*ede+fdGdHZ,ede+fdIdJZ-edefdKdLZ.ede/e fdMdNZ0edefdOdPZ1edefdQdRZ2edefdSdTZ3ede4e5 fdUdVZ6edefdWdXZ7edee fdYdZZ8edefd[d\Z9ede:e; fd]d^Z<ede=eee f fd_d`Z>ede=eee f fdadbZ?edefdcddZ@edefdedfZAede5fdgdhZBedefdidjZCdkS )l_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                 C   s
   | j tv S N)	algorithmr   self r   `/home/www/bk.finsightngr.online/venv20/lib/python3.10/site-packages/flask_jwt_extended/config.pyis_asymmetric      
z_Config.is_asymmetricc                 C      | j r| jS | jS r   )r   _private_key_secret_keyr   r   r   r   
encode_key"      z_Config.encode_keyc                 C   r   r   )r   _public_keyr   r   r   r   r   
decode_key&   r   z_Config.decode_keyc                 C   sX   t jd }t|tr|f}nt|tstd|std|D ]
}|dvr)tdq|S )NZ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locationr   r   r   token_location*   s    


z_Config.token_locationc                 C   
   d| j v S )Nr"   r+   r   r   r   r   jwt_in_cookies>   r   z_Config.jwt_in_cookiesc                 C   r,   )Nr!   r-   r   r   r   r   jwt_in_headersB   r   z_Config.jwt_in_headersc                 C   r,   )Nr#   r-   r   r   r   r   jwt_in_query_stringF   r   z_Config.jwt_in_query_stringc                 C   r,   )Nr$   r-   r   r   r   r   jwt_in_jsonJ   r   z_Config.jwt_in_jsonc                 C   s   t jd }|std|S )NZJWT_HEADER_NAMEz&JWT_ACCESS_HEADER_NAME cannot be empty)r   r%   r(   )r   namer   r   r   header_nameN   s   
z_Config.header_namec                 C   
   t jd S )NZJWT_HEADER_TYPEr   r%   r   r   r   r   header_typeU   r   z_Config.header_typec                 C   r4   )NZJWT_QUERY_STRING_NAMEr5   r   r   r   r   query_string_nameY   r   z_Config.query_string_namec                 C   r4   )NZJWT_QUERY_STRING_VALUE_PREFIXr5   r   r   r   r   query_string_value_prefix]   r   z!_Config.query_string_value_prefixc                 C   r4   )NZJWT_ACCESS_COOKIE_NAMEr5   r   r   r   r   access_cookie_namea   r   z_Config.access_cookie_namec                 C   r4   )NZJWT_REFRESH_COOKIE_NAMEr5   r   r   r   r   refresh_cookie_namee   r   z_Config.refresh_cookie_namec                 C   r4   )NZJWT_ACCESS_COOKIE_PATHr5   r   r   r   r   access_cookie_pathi   r   z_Config.access_cookie_pathc                 C   r4   )NZJWT_REFRESH_COOKIE_PATHr5   r   r   r   r   refresh_cookie_pathm   r   z_Config.refresh_cookie_pathc                 C   r4   )NZJWT_COOKIE_SECUREr5   r   r   r   r   cookie_secureq   r   z_Config.cookie_securec                 C   r4   )NZJWT_COOKIE_DOMAINr5   r   r   r   r   cookie_domainu   r   z_Config.cookie_domainc                 C   r4   )NZJWT_SESSION_COOKIEr5   r   r   r   r   session_cookiey   r   z_Config.session_cookiec                 C   r4   )NZJWT_COOKIE_SAMESITEr5   r   r   r   r   cookie_samesite}   r   z_Config.cookie_samesitec                 C   r4   )NZJWT_JSON_KEYr5   r   r   r   r   json_key   r   z_Config.json_keyc                 C   r4   )NZJWT_REFRESH_JSON_KEYr5   r   r   r   r   refresh_json_key   r   z_Config.refresh_json_keyc                 C   r4   )NZJWT_COOKIE_CSRF_PROTECTr5   r   r   r   r   cookie_csrf_protect   r   z_Config.cookie_csrf_protectc                 C   r4   )NZJWT_CSRF_METHODSr5   r   r   r   r   csrf_request_methods   r   z_Config.csrf_request_methodsc                 C   r4   )NZJWT_CSRF_IN_COOKIESr5   r   r   r   r   csrf_in_cookies   r   z_Config.csrf_in_cookiesc                 C   r4   )NZJWT_ACCESS_CSRF_COOKIE_NAMEr5   r   r   r   r   access_csrf_cookie_name   r   z_Config.access_csrf_cookie_namec                 C   r4   )NZJWT_REFRESH_CSRF_COOKIE_NAMEr5   r   r   r   r   refresh_csrf_cookie_name   r   z _Config.refresh_csrf_cookie_namec                 C   r4   )NZJWT_ACCESS_CSRF_COOKIE_PATHr5   r   r   r   r   access_csrf_cookie_path   r   z_Config.access_csrf_cookie_pathc                 C   r4   )NZJWT_REFRESH_CSRF_COOKIE_PATHr5   r   r   r   r   refresh_csrf_cookie_path   r   z _Config.refresh_csrf_cookie_pathc                 C   r4   )NZJWT_ACCESS_CSRF_HEADER_NAMEr5   r   r   r   r   access_csrf_header_name   r   z_Config.access_csrf_header_namec                 C   r4   )NZJWT_REFRESH_CSRF_HEADER_NAMEr5   r   r   r   r   refresh_csrf_header_name   r   z _Config.refresh_csrf_header_namec                 C   r4   )NZJWT_CSRF_CHECK_FORMr5   r   r   r   r   csrf_check_form   r   z_Config.csrf_check_formc                 C   r4   )NZJWT_ACCESS_CSRF_FIELD_NAMEr5   r   r   r   r   access_csrf_field_name   r   z_Config.access_csrf_field_namec                 C   r4   )NZJWT_REFRESH_CSRF_FIELD_NAMEr5   r   r   r   r   refresh_csrf_field_name   r   z_Config.refresh_csrf_field_namec              
   C   j   t jd }t|tu rt|d}|dur3z|ttj  W |S  t	y2 } zd}t
||d }~ww |S )NZ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errr   r   r   access_expires   s   


z_Config.access_expiresc              
   C   rO   )NZJWT_REFRESH_TOKEN_EXPIRESrP   FzBmust be able to add JWT_REFRESH_TOKEN_EXPIRES to datetime.datetimerR   rX   r   r   r   refresh_expires   s   


z_Config.refresh_expiresc                 C   r4   )NZJWT_ALGORITHMr5   r   r   r   r   r      r   z_Config.algorithmc                 C   s0   t jd }|s| jgS | j|vr|| j |S )NZJWT_DECODE_ALGORITHMS)r   r%   r   append)r   Z
algorithmsr   r   r   decode_algorithms   s   

z_Config.decode_algorithmsc                 C   s4   t jd }|st jdd }|std| j|S )NZJWT_SECRET_KEYZ
SECRET_KEYzRJWT_SECRET_KEY or flask SECRET_KEY must be set when using symmetric algorithm "{}")r   r%   getr(   formatr   r   keyr   r   r   r      s   
z_Config._secret_keyc                 C   "   t jd }|std| j|S )NZJWT_PUBLIC_KEYzHJWT_PUBLIC_KEY must be set to use asymmetric cryptography algorithm "{}"r   r%   r(   ra   r   rb   r   r   r   r         
z_Config._public_keyc                 C   rd   )NZJWT_PRIVATE_KEYzIJWT_PRIVATE_KEY must be set to use asymmetric cryptography algorithm "{}"re   rb   r   r   r   r      rf   z_Config._private_keyc                 C   s   | j rd S dS )Ni C)r?   r   r   r   r   cookie_max_age  s   z_Config.cookie_max_agec                 C   r4   )NZJWT_IDENTITY_CLAIMr5   r   r   r   r   identity_claim_key  r   z_Config.identity_claim_keyc                 C   s   dhS )NOPTIONSr   r   r   r   r   exempt_methods  s   z_Config.exempt_methodsc                 C   r4   )NZJWT_ERROR_MESSAGE_KEYr5   r   r   r   r   error_msg_key  r   z_Config.error_msg_keyc                 C   s   t tS r   )r   r   r   r   r   r   json_encoder  s   z_Config.json_encoderc                 C   r4   )NZJWT_DECODE_AUDIENCEr5   r   r   r   r   decode_audience"  r   z_Config.decode_audiencec                 C   r4   )NZJWT_ENCODE_AUDIENCEr5   r   r   r   r   encode_audience&  r   z_Config.encode_audiencec                 C   r4   )NZJWT_ENCODE_ISSUERr5   r   r   r   r   encode_issuer*  r   z_Config.encode_issuerc                 C   r4   )NZJWT_DECODE_ISSUERr5   r   r   r   r   decode_issuer.  r   z_Config.decode_issuerc                 C   r4   )NZJWT_DECODE_LEEWAYr5   r   r   r   r   leeway2  r   z_Config.leewayc                 C   r4   )NZJWT_ENCODE_NBFr5   r   r   r   r   
encode_nbf6  r   z_Config.encode_nbfN)D__name__
__module____qualname____doc__propertyboolr   r'   r   r    r	   r+   r.   r/   r0   r1   r3   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   r   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   r   r\   r]   r   r   r_   r   r   r   r   rT   rg   rh   rj   rk   r
   r   rl   r   rm   rn   ro   rp   rq   rr   r   r   r   r   r      s    


r   N)r   r   r   r$   r   typingr   r   r   r	   r
   r   Zflaskr   Zjwt.algorithmsr   Z!flask_jwt_extended.internal_utilsr   Zflask_jwt_extended.typingr   objectr   r%   r   r   r   r   <module>   s$      
*