§
    iÝ[fã  ã                   óž   — d dl mZ d dlmZ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mZ dd	lmZmZ  G d
„ de	¦  «        Zdd„Zdd„ZdS )é    )Úimport_string)ÚResponseÚjson)Úrequest)ÚAuthorizationServer)ÚBearerTokenGenerator©Úgenerate_tokené   )ÚFlaskOAuth2RequestÚFlaskJsonRequest)Úclient_authenticatedÚtoken_revokedc                   ó\   ‡ — e Zd ZdZdˆ fd„	Zdd„Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zˆ xZS )r   an  Flask implementation of :class:`authlib.oauth2.rfc6749.AuthorizationServer`.
    Initialize it with ``query_client``, ``save_token`` methods and Flask
    app instance::

        def query_client(client_id):
            return Client.query.filter_by(client_id=client_id).first()

        def save_token(token, request):
            if request.user:
                user_id = request.user.id
            else:
                user_id = None
            client = request.client
            tok = Token(
                client_id=client.client_id,
                user_id=user.id,
                **token
            )
            db.session.add(tok)
            db.session.commit()

        server = AuthorizationServer(app, query_client, save_token)
        # or initialize lazily
        server = AuthorizationServer()
        server.init_app(app, query_client, save_token)
    Nc                 ó¤   •— t          ¦   «                              ¦   «          || _        || _        d | _        |�|                      |¦  «         d S d S ©N)ÚsuperÚ__init__Ú_query_clientÚ_save_tokenÚ_error_urisÚinit_app)ÚselfÚappÚquery_clientÚ
save_tokenÚ	__class__s       €új/var/www/piapp/venv/lib/python3.11/site-packages/authlib/integrations/flask_oauth2/authorization_server.pyr   zAuthorizationServer.__init__)   sU   ø€ Ý‰Œ×ÒÑÔÐØ)ˆÔØ%ˆÔØˆÔØˆ?Ø�MŠM˜#ÑÔÐÐÐð ˆ?ó    c                 ó  — |�|| _         |�|| _        |                      d|                      |j        ¦  «        ¦  «         |j                             d¦  «        | _        |j                             d¦  «        | _        dS )z)Initialize later with Flask app instance.NÚdefaultÚOAUTH2_SCOPES_SUPPORTEDÚOAUTH2_ERROR_URIS)r   r   Úregister_token_generatorÚcreate_bearer_token_generatorÚconfigÚgetÚscopes_supportedr   )r   r   r   r   s       r   r   zAuthorizationServer.init_app1   sz   € àÐ#Ø!-ˆDÔØÐ!Ø)ˆDÔà×%Ò% i°×1SÒ1SÐTWÔT^Ñ1_Ô1_Ñ`Ô`Ð`Ø #¤
§¢Ð/HÑ IÔ IˆÔØœ:Ÿ>š>Ð*=Ñ>Ô>ˆÔÐÐr   c                 ó,   — |                       |¦  «        S r   )r   )r   Ú	client_ids     r   r   z AuthorizationServer.query_client<   s   € Ø×!Ò! )Ñ,Ô,Ð,r   c                 ó.   — |                       ||¦  «        S r   )r   )r   Útokenr   s      r   r   zAuthorizationServer.save_token?   s   € Ø×Ò  wÑ/Ô/Ð/r   c                 óp   — | j         r.t          | j         ¦  «        }|                     |j        ¦  «        S d S r   )r   Údictr'   Úerror)r   r   r/   Úuriss       r   Úget_error_uriz!AuthorizationServer.get_error_uriB   s;   € ØÔð 	)Ý˜Ô(Ñ)Ô)ˆDØ—8’8˜EœKÑ(Ô(Ð(ð	)ð 	)r   c                 ó*   — t          t          ¦  «        S r   )r   Ú	flask_req©r   r   s     r   Úcreate_oauth2_requestz)AuthorizationServer.create_oauth2_requestG   s   € Ý!¥)Ñ,Ô,Ð,r   c                 ó*   — t          t          ¦  «        S r   )r   r3   r4   s     r   Úcreate_json_requestz'AuthorizationServer.create_json_requestJ   s   € Ý¥	Ñ*Ô*Ð*r   c                 óx   — t          |t          ¦  «        rt          j        |¦  «        }t	          |||¬¦  «        S )N)ÚstatusÚheaders)Ú
isinstancer.   r   Údumpsr   )r   Ústatus_codeÚpayloadr:   s       r   Úhandle_responsez#AuthorizationServer.handle_responseM   s8   € Ý�g�tÑ$Ô$ð 	*Ý”j Ñ)Ô)ˆGÝ˜¨¸WÐEÑEÔEÐEr   c                 óz   — |dk    rt          j        | g|¢R i |¤Ž d S |dk    rt          j        | g|¢R i |¤Ž d S d S )NÚafter_authenticate_clientÚafter_revoke_token)r   Úsendr   )r   ÚnameÚargsÚkwargss       r   Úsend_signalzAuthorizationServer.send_signalR   sp   € ØÐ.Ò.Ð.Ý Ô% dÐ<¨TÐ<Ð<Ð<°VÐ<Ð<Ð<Ð<Ð<ØÐ)Ò)Ð)ÝÔ˜tÐ5 dÐ5Ð5Ð5¨fÐ5Ð5Ð5Ð5Ð5ð *Ð)r   c                 ó  — |                      dd¦  «        }t          |d¦  «        }|                      dd¦  «        }t          |d¦  «        }|                      d¦  «        }t          |¦  «        }t          |||¦  «        S )aö  Create a generator function for generating ``token`` value. This
        method will create a Bearer Token generator with
        :class:`authlib.oauth2.rfc6750.BearerToken`.

        Configurable settings:

        1. OAUTH2_ACCESS_TOKEN_GENERATOR: Boolean or import string, default is True.
        2. OAUTH2_REFRESH_TOKEN_GENERATOR: Boolean or import string, default is False.
        3. OAUTH2_TOKEN_EXPIRES_IN: Dict or import string, default is None.

        By default, it will not generate ``refresh_token``, which can be turn on by
        configure ``OAUTH2_REFRESH_TOKEN_GENERATOR``.

        Here are some examples of the token generator::

            OAUTH2_ACCESS_TOKEN_GENERATOR = 'your_project.generators.gen_token'

            # and in module `your_project.generators`, you can define:

            def gen_token(client, grant_type, user, scope):
                # generate token according to these parameters
                token = create_random_token()
                return f'{client.id}-{user.id}-{token}'

        Here is an example of ``OAUTH2_TOKEN_EXPIRES_IN``::

            OAUTH2_TOKEN_EXPIRES_IN = {
                'authorization_code': 864000,
                'urn:ietf:params:oauth:grant-type:jwt-bearer': 3600,
            }
        ÚOAUTH2_ACCESS_TOKEN_GENERATORTé*   ÚOAUTH2_REFRESH_TOKEN_GENERATORFé0   ÚOAUTH2_TOKEN_EXPIRES_IN)r'   Úcreate_token_generatorÚ!create_token_expires_in_generatorr   )r   r&   ÚconfÚaccess_token_generatorÚrefresh_token_generatorÚexpires_confÚexpires_generators          r   r%   z1AuthorizationServer.create_bearer_token_generatorX   sˆ   € ð@ �zŠzÐ9¸4Ñ@Ô@ˆÝ!7¸¸bÑ!AÔ!AÐà�zŠzÐ:¸EÑBÔBˆÝ"8¸¸rÑ"BÔ"BÐà—z’zÐ";Ñ<Ô<ˆÝ=¸lÑKÔKÐÝ#Ø"Ø#Øñ
ô 
ð 	
r   )NNN)NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r1   r5   r7   r?   rG   r%   Ú__classcell__)r   s   @r   r   r      sÖ   ø€ € € € € ðð ð6ð ð ð ð ð ð	?ð 	?ð 	?ð 	?ð-ð -ð -ð0ð 0ð 0ð)ð )ð )ð
-ð -ð -ð+ð +ð +ðFð Fð Fð
6ð 6ð 6ð,
ð ,
ð ,
ð ,
ð ,
ð ,
ð ,
r   r   Nc                 óð   ‡— t          | t          ¦  «        rt          | ¦  «        S i Š‰                     t          j        ¦  «         t          | t          ¦  «        r‰                     | ¦  «         ˆfd„}|S )Nc                 óD   •— ‰                      |t          j        ¦  «        S r   )r'   r   ÚDEFAULT_EXPIRES_IN)ÚclientÚ
grant_typeÚdatas     €r   Ú
expires_inz5create_token_expires_in_generator.<locals>.expires_in�   s   ø€ Ø�xŠx˜
Õ$8Ô$KÑLÔLÐLr   )r;   Ústrr   Úupdater   ÚGRANT_TYPES_EXPIRES_INr.   )Úexpires_in_confr`   r_   s     @r   rO   rO   ‡   sˆ   ø€ Ý�/¥3Ñ'Ô'ð .Ý˜_Ñ-Ô-Ð-à€DØ‡K‚KÕ$Ô;Ñ<Ô<Ð<Ý�/¥4Ñ(Ô(ð %Ø�Š�OÑ$Ô$Ð$ðMð Mð Mð Mð Mð Ðr   rJ   c                 óˆ   ‡— t          | ¦  «        r| S t          | t          ¦  «        rt          | ¦  «        S | du rˆfd„}|S d S )NTc                  ó"   •— t          ‰¦  «        S r   r	   )rE   rF   Úlengths     €r   Útoken_generatorz/create_token_generator.<locals>.token_generator�   s   ø€ Ý! &Ñ)Ô)Ð)r   )Úcallabler;   ra   r   )Útoken_generator_confrg   rh   s    ` r   rN   rN   –   sn   ø€ ÝÐ$Ñ%Ô%ð $Ø#Ð#åÐ&­Ñ,Ô,ð ÝÐ1Ñ2Ô2Ð2Ø	 Ð	%Ð	%ð	*ð 	*ð 	*ð 	*ð 	*àÐð 
&Ð	%r   r   )rJ   )Úwerkzeug.utilsr   Úflaskr   r   r   r3   Úauthlib.oauth2r   Ú_AuthorizationServerÚauthlib.oauth2.rfc6750r   Úauthlib.common.securityr
   Úrequestsr   r   Úsignalsr   r   rO   rN   © r   r   ú<module>rt      s  ðØ (Ð (Ð (Ð (Ð (Ð (Ø  Ð  Ð  Ð  Ð  Ð  Ð  Ð  Ø &Ð &Ð &Ð &Ð &Ð &ðð ð ð ð ð ð 8Ð 7Ð 7Ð 7Ð 7Ð 7Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8ðw
ð w
ð w
ð w
ð w
Ð.ñ w
ô w
ð w
ðtð ð ð ð	ð 	ð 	ð 	ð 	ð 	r   