o
    G'h'  ã                   @   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   úOC:\Users\shubh\Videos\agent\nova\Lib\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   s   | j otjd S )NZJWT_COOKIE_CSRF_PROTECT)r.   r   r%   r   r   r   r   Úcsrf_protect‰   s   z_Config.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$      
*