Format: application/x-python-code
1 o
2
3 G'h5 � @ s� d dl m Z d dl mZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm Z d dlm
4 Z
5 d d lmZ d d
6 lm
7 Z
8 d dlmZ d dlmZ d d
9 lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm Z d dl!m"Z" d dl!m#Z# ee$e df Z%de&de&ddfd d!�Z' " " " # "d:d$e(d%e(d&e(d'ee% d(e(d)e(dee
10 e&e&f fd*d+�Z) " " " # "d:d$e(d%e(d&e(d'ee% d(e(d)e(defd,d-�Z*de&de&dee& fd.d/�Z+de
11 e$df fd0d1�Z,d&e(de
12 e$ee$ f fd2d3�Z-de
13 e$df fd4d5�Z.d&e(de
14 e$df fd6d7�Z/ " # "d;d'e%d%e(d&e(d(e(d)e(de
15 e&e&e$f fd8d9�Z0dS )<� )�datetime)�timezone��wraps��split)�Any)�Optional)�Sequence)�Tuple)�Union)�current_app)�g)�request)�
16 BadRequest)�config)� CSRFError)�FreshTokenRequired)�InvalidHeaderError)�InvalidQueryParamError)�NoAuthorizationError)�UserLookupError)�custom_verification_for_token)�has_user_lookup)�user_lookup)�verify_token_not_blocklisted)�verify_token_type)�decode_token)�get_unverified_jwt_headersN�
17 jwt_header�jwt_data�returnc C sP |d }t |t�r|std| |��d S t�t�tj��}||k r&td| |��d S )N�freshzFresh token required)�
18 isinstance�boolr r � timestamp�nowr �utc)r r r"