U
    àôg  ã                   @   s2  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 dlmZ d dlm	Z	 d dlm
Z
 d d	lmZ zd d
lmZ dZW n ek
r”   dZY nX er¦d dlmZ ddœdd„Zedœdd„Zedœdd„Zeeddœdd„Zeeddœdd„Zeeddœdd„ZG dd„ de jƒZeee j d œd!d"„ZdS )#é    N)ÚAny)ÚType)ÚTYPE_CHECKING)Úcurrent_app)ÚFlask)ÚRevokedTokenError)ÚUserClaimsVerificationError©ÚWrongTokenError)ÚDefaultJSONProviderTF)Ú
JWTManagerr   )Úreturnc                   C   s0   zt jd W S  tk
r*   tdƒd ‚Y nX d S )Nzflask-jwt-extendedzUYou must initialize a JWTManager with this flask application before using this method)r   Ú
extensionsÚKeyErrorÚRuntimeError© r   r   úE/tmp/pip-unpacked-wheel-qm6yk1_p/flask_jwt_extended/internal_utils.pyÚget_jwt_manager   s    ÿýr   c                  C   s   t ƒ } | jd k	S ©N©r   Z_user_lookup_callback)Újwt_managerr   r   r   Úhas_user_lookup%   s    r   c                  O   s   t ƒ }|jo|j| |ŽS r   r   )ÚargsÚkwargsr   r   r   r   Úuser_lookup*   s
    
 ÿr   )Údecoded_tokenÚrefreshr   c                 C   s6   |s| d dkrt dƒ‚n|r2| d dkr2t dƒ‚d S )NÚtyper   z#Only non-refresh tokens are allowedzOnly refresh tokens are allowedr	   )r   r   r   r   r   Úverify_token_type1   s    
r   )Ú
jwt_headerÚjwt_datar   c                 C   s    t ƒ }| | |¡rt| |ƒ‚d S r   )r   Z_token_in_blocklist_callbackr   )r   r    r   r   r   r   Úverify_token_not_blocklisted8   s    r!   c                 C   s&   t ƒ }| | |¡s"d}t|| |ƒ‚d S )NzUser claims verification failed)r   Z_token_verification_callbackr   )r   r    r   Ú	error_msgr   r   r   Úcustom_verification_for_token>   s    r#   c                   @   s    e Zd ZdZeedœdd„ZdS )ÚJSONEncoderzEA JSON encoder which uses the app.json_provider_class for the default)Úor   c                 C   s   t tjdtjƒ}||ƒS )NÚdefault)Úgetattrr   Zjson_provider_classr   r&   )Úselfr%   r&   r   r   r   r&   H   s      ÿzJSONEncoder.defaultN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r&   r   r   r   r   r$   E   s   r$   )Úappr   c                 C   s   t s
| jS tS )aé  Get the JSON Encoder for the provided flask app

    Starting with flask version 2.2 the flask application provides a
    interface to register a custom JSON Encoder/Decoder under the json_provider_class.
    As this interface is not compatible with the standard JSONEncoder, the `default`
    method of the class is wrapped.

    Lookup Order:
      - app.json_encoder - For Flask < 2.2
      - app.json_provider_class.default
      - flask.json.provider.DefaultJSONProvider.default

    )ÚHAS_JSON_PROVIDERZjson_encoderr$   )r-   r   r   r   Úget_json_encoderQ   s    r/   )ÚjsonÚtypingr   r   r   Zflaskr   r   Zflask_jwt_extended.exceptionsr   r   r
   Zflask.json.providerr   r.   ÚModuleNotFoundErrorZflask_jwt_extendedr   r   Úboolr   r   Údictr   r!   r#   r$   r/   r   r   r   r   Ú<module>   s.   

