Ë
    ”Âi÷1  ã                   ó   — d dl Z 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  e j                  e«      Z G d	„ d
«      Z G d„ d«      Z G d„ d«      Z G d„ dee«      Z G d„ d«      Z G d„ dee«      Zy)é    N)Úgenerate_token)Úurlparse)Údefault_user_agenté   )ÚMismatchingStateError)ÚMissingRequestTokenError)ÚMissingTokenErrorc                   ó:   — e Zd ZdZdZdd„Zd„ Zd„ Zd„ Zd„ Z	d„ Z
y)	ÚBaseAppNc                 ó   — t        «       ‚©N©ÚNotImplementedError)ÚselfÚmethodÚurlÚtokenÚkwargss        úa/var/www/timesheet/venv/lib/python3.12/site-packages/authlib/integrations/base_client/sync_app.pyÚrequestzBaseApp.request   ó   € Ü!Ó#Ð#ó    c                 ó*   —  | j                   d|fi |¤ŽS )z‹Invoke GET http request.

        If ``api_base_url`` configured, shortcut is available::

            client.get("users/lepture")
        ÚGET©r   ©r   r   r   s      r   ÚgetzBaseApp.get   ó   € ð ˆt�|‰|˜E 3Ñ1¨&Ñ1Ð1r   c                 ó*   —  | j                   d|fi |¤ŽS )z�Invoke POST http request.

        If ``api_base_url`` configured, shortcut is available::

            client.post("timeline", json={"text": "Hi"})
        ÚPOSTr   r   s      r   ÚpostzBaseApp.post   s   € ð ˆt�|‰|˜F CÑ2¨6Ñ2Ð2r   c                 ó*   —  | j                   d|fi |¤ŽS )zªInvoke PATCH http request.

        If ``api_base_url`` configured, shortcut is available::

            client.patch("profile", json={"name": "Hsiaoming Yang"})
        ÚPATCHr   r   s      r   ÚpatchzBaseApp.patch(   s   € ð ˆt�|‰|˜G SÑ3¨FÑ3Ð3r   c                 ó*   —  | j                   d|fi |¤ŽS )z¦Invoke PUT http request.

        If ``api_base_url`` configured, shortcut is available::

            client.put("profile", json={"name": "Hsiaoming Yang"})
        ÚPUTr   r   s      r   ÚputzBaseApp.put1   r   r   c                 ó*   —  | j                   d|fi |¤ŽS )z�Invoke DELETE http request.

        If ``api_base_url`` configured, shortcut is available::

            client.delete("posts/123")
        ÚDELETEr   r   s      r   ÚdeletezBaseApp.delete:   s   € ð ˆt�|‰|˜H cÑ4¨VÑ4Ð4r   r   )Ú__name__Ú
__module__Ú__qualname__Ú
client_clsÚOAUTH_APP_CONFIGr   r   r!   r$   r'   r*   © r   r   r   r      s+   „ Ø€JØÐó$ò2ò3ò4ò2ó5r   r   c                   ó   — e Zd Zd„ Zd„ Zy)Ú_RequestMixinc                 óD   — | j                   r|r| j                  |«      S y y r   )Ú_fetch_token)r   r   s     r   Ú_get_requested_tokenz"_RequestMixin._get_requested_tokenE   s&   € Ø×Ò¡Ø×$Ñ$ WÓ-Ð-ð ")Ðr   c                 ób  — |j                  dd «      }|j                  d«      }| j                  r1|j                  d«      s t	        j
                  | j                  |«      }|r |j                  ||fi |¤ŽS |€| j                  |«      }|€
t        «       ‚||_	         |j                  ||fi |¤ŽS )Nr   Úwithhold_token)zhttps://zhttp://)
Úpopr   Úapi_base_urlÚ
startswithr   Úurljoinr   r5   r	   r   )r   Úsessionr   r   r   r   r   r7   s           r   Ú_send_token_requestz!_RequestMixin._send_token_requestI   s«   € Ø—*‘*˜Y¨Ó-ˆØŸ™Ð$4Ó5ˆØ×Ò S§^¡^Ð4KÔ%LÜ×"Ñ" 4×#4Ñ#4°cÓ:ˆCáØ"�7—?‘? 6¨3Ñ9°&Ñ9Ð9àˆ=Ø×-Ñ-¨gÓ6ˆEàˆ=Ü#Ó%Ð%àˆŒØˆw�‰˜v sÑ5¨fÑ5Ð5r   N)r+   r,   r-   r5   r=   r0   r   r   r2   r2   D   s   „ ò.ó6r   r2   c                   ó8   — e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zd„ Zy)Ú
OAuth1BaseNc                 óî   — || _         || _        || _        || _        || _        || _        || _        |	| _        |
| _        || _	        || _
        |xs i | _        || _        |xs t        | _        || _        y r   )Ú	frameworkÚnameÚ	client_idÚclient_secretÚrequest_token_urlÚrequest_token_paramsÚaccess_token_urlÚaccess_token_paramsÚauthorize_urlÚauthorize_paramsr9   Úclient_kwargsr4   r   Ú_user_agentÚ_kwargs)r   rA   rB   Úfetch_tokenrC   rD   rE   rF   rG   rH   rI   rJ   r9   rK   Ú
user_agentr   s                   r   Ú__init__zOAuth1Base.__init___   sƒ   € ð$ #ˆŒØˆŒ	Ø"ˆŒØ*ˆÔØ!2ˆÔØ$8ˆÔ!Ø 0ˆÔØ#6ˆÔ Ø*ˆÔØ 0ˆÔØ(ˆÔØ*Ò0¨bˆÔà'ˆÔØ%Ò;Ô);ˆÔØˆ�r   c                 óœ   —  | j                   | j                  | j                  fi | j                  ¤Ž}| j                  |j
                  d<   |S )Nú
User-Agent)r.   rC   rD   rK   rL   Úheaders)r   r<   s     r   Ú_get_oauth_clientzOAuth1Base._get_oauth_client‚   sJ   € Ø!�$—/‘/Ø�N‰N˜D×.Ñ.ñ
Ø26×2DÑ2Dñ
ˆð )-×(8Ñ(8ˆ�‰˜Ñ%Øˆr   )NNNNNNNNNNNNN)r+   r,   r-   r.   rP   rT   r0   r   r   r?   r?   \   s;   „ Ø€Jð
 ØØØØØ!ØØ ØØØØØó!óFr   r?   c                   ó$   — e Zd Zdd„Zdd„Zdd„Zy)ÚOAuth1MixinNc                 óx   — | j                  «       5 }| j                  |||||«      cd d d «       S # 1 sw Y   y xY wr   )rT   r=   )r   r   r   r   r   r<   s         r   r   zOAuth1Mixin.request‹   s?   € Ø×#Ñ#Ó%ð 	Q¨Ø×+Ñ+¨G°V¸SÀ%ÈÓP÷	Q÷ 	Qò 	Qús   ‘0°9c                 ó°  — | j                   st        d«      ‚| j                  r|j                  | j                  «       | j	                  «       5 }||_        | j                  xs i } |j                  | j                  fi |¤Ž}t        j                  d|›�«        |j                  | j                   fi |¤Ž}|d   }ddd«       dœS # 1 sw Y   ŒxY w)úØGenerate the authorization url and state for HTTP redirect.

        :param redirect_uri: Callback or redirect URI for authorization.
        :param kwargs: Extra parameters to include.
        :return: dict
        úMissing "authorize_url" valuezFetch request token: Úoauth_tokenN)r   Úrequest_tokenÚstate)rI   ÚRuntimeErrorrJ   ÚupdaterT   Úredirect_urirF   Úfetch_request_tokenrE   ÚlogÚdebugÚcreate_authorization_url)r   r`   r   ÚclientÚparamsr\   r   r]   s           r   rd   z$OAuth1Mixin.create_authorization_url�   sØ   € ð ×!Ò!ÜÐ>Ó?Ð?à× Ò Ø�M‰M˜$×/Ñ/Ô0à×#Ñ#Ó%ð 	1¨Ø".ˆFÔØ×.Ñ.Ò4°"ˆFØ6˜F×6Ñ6°t×7MÑ7MÑXÐQWÑXˆMÜ�I‰IÐ-¨mÐ->Ð?Ô@Ø1�&×1Ñ1°$×2DÑ2DÑOÈÑOˆCØ! -Ñ0ˆE÷	1ð ¨]ÀUÑKÐK÷	1ð 	1ús   ÁA/CÃCc                 ó  — | j                  «       5 }|€
t        «       ‚i }|j                  |«       |j                  |«       ||_        | j                  xs i } |j
                  | j                  fi |¤Ž}ddd«       |S # 1 sw Y   S xY w)zËFetch access token in one step.

        :param request_token: A previous request token for OAuth 1.
        :param kwargs: Extra parameters to fetch access token.
        :return: A token dict.
        N)rT   r   r_   r   rH   Úfetch_access_tokenrG   )r   r\   r   re   r   rf   s         r   rh   zOAuth1Mixin.fetch_access_token¥   s“   € ð ×#Ñ#Ó%ð 		O¨ØÐ$Ü.Ó0Ð0àˆEØ�L‰L˜Ô'Ø�L‰L˜Ô Ø ˆFŒLØ×-Ñ-Ò3°ˆFØ-�F×-Ñ-¨d×.CÑ.CÑNÀvÑNˆE÷		Oð ˆ÷		Oð ˆús   ‘A%B Â B
r   )r+   r,   r-   r   rd   rh   r0   r   r   rV   rV   Š   s   „ óQóLô,r   rV   c                   ód   — e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zdd„Zd„ Zed„ «       Zed„ «       Z	y)	Ú
OAuth2BaseNc                 ó
  — || _         || _        || _        || _        || _        || _        |	| _        |
| _        || _        |xs i | _	        || _
        || _        || _        || _        |xs t        | _        || _        || _        y r   )rA   rB   rC   rD   rG   rH   rI   rJ   r9   rK   Úcompliance_fixÚclient_auth_methodsr4   Ú_update_tokenr   rL   Ú_server_metadata_urlÚserver_metadata)r   rA   rB   rN   Úupdate_tokenrC   rD   rG   rH   rI   rJ   r9   rK   Úserver_metadata_urlrl   rm   rO   r   s                     r   rP   zOAuth2Base.__init__¼   s”   € ð( #ˆŒØˆŒ	Ø"ˆŒØ*ˆÔØ 0ˆÔØ#6ˆÔ Ø*ˆÔØ 0ˆÔØ(ˆÔØ*Ò0¨bˆÔà,ˆÔØ#6ˆÔ Ø'ˆÔØ)ˆÔØ%Ò;Ô);ˆÔà$7ˆÔ!Ø%ˆÕr   c                 ó   — t        «       ‚r   r   ©r   r   Úrefresh_tokenÚaccess_tokens       r   Ú_on_update_tokenzOAuth2Base._on_update_tokenä   r   r   c                 óþ  — i }|j                  | j                  «       |j                  |«       | j                  r| j                  |d<   | j                  r| j                  |d<    | j                  d| j
                  | j                  | j                  dœ|¤Ž}| j                  r"| j                  D ]  }|j                  |«       Œ | j                  r| j                  |«       | j                  |j                  d<   |S )NÚauthorization_endpointÚtoken_endpoint)rC   rD   rq   rR   r0   )r_   rK   rI   rG   r.   rC   rD   rw   rm   Úregister_client_auth_methodrl   rL   rS   )r   ÚmetadatarK   r<   Úfs        r   rT   zOAuth2Base._get_oauth_clientç   sõ   € ØˆØ×Ñ˜T×/Ñ/Ô0Ø×Ñ˜XÔ&à×ÒØ6:×6HÑ6HˆMÐ2Ñ3Ø× Ò Ø.2×.CÑ.CˆMÐ*Ñ+à!�$—/‘/ð 
Ø—n‘nØ×,Ñ,Ø×.Ñ.ñ
ð ñ	
ˆð ×#Ò#Ø×-Ñ-ò 7�Ø×3Ñ3°AÕ6ð7ð ×ÒØ×Ñ Ô(à(,×(8Ñ(8ˆ�‰˜Ñ%Øˆr   c                 ó~   — | €
t        «       ‚| j                  d«      }|r||d<   | j                  d«      }|r||d<   |S )NÚcode_verifierr`   )r   r   )Ú
state_datarf   r   r`   s       r   Ú_format_state_paramszOAuth2Base._format_state_params  sL   € àÐÜ'Ó)Ð)à"Ÿ™ Ó7ˆÙØ&3ˆF�?Ñ#à!—~‘~ nÓ5ˆÙØ%1ˆF�>Ñ"Øˆr   c                 óÎ  — i }| j                   r@|j                  d«      }|st        d«      }||d<   ||d<   t        j	                  d|›�«       |j                  d| j
                  «      }|r(t        |t        t        f«      r|n|j                  «       nd }|r,d|v r(|j                  d«      }|st        d«      }||d<   ||d<    | j                  |fi |¤Ž\  }}||d<   ||d	<   |S )
Nr   é0   zUsing code_verifier: ÚscopeÚopenidÚnonceé   r   r]   )Úcode_challenge_methodr   r   rb   rc   r„   Ú
isinstanceÚlistÚtupleÚsplitrd   )	re   ry   r   Úrvr   r„   r†   r   r]   s	            r   Ú _create_oauth2_authorization_urlz+OAuth2Base._create_oauth2_authorization_url  sû   € àˆØ×'Ò'Ø"ŸJ™J Ó7ˆMÙ Ü .¨rÓ 2�Ø*7��Ñ'Ø"/ˆBˆÑÜ�I‰IÐ-¨mÐ->Ð?Ô@à—
‘
˜7 F§L¡LÓ1ˆñ ô ! ¬¬u¨Ô6‰U¸E¿K¹K¼Màð 	ñ
 �X Ñ&à—J‘J˜wÓ'ˆEÙÜ& rÓ*�Ø"'��w‘ØˆBˆw‰Kà4�V×4Ñ4Ð5KÑVÈvÑV‰
ˆˆUØˆˆ5‰	Øˆˆ7‰Øˆ	r   )NNNNNNNNNNNNNNN©NN)
r+   r,   r-   r.   rP   rw   rT   Ústaticmethodr�   rŽ   r0   r   r   rj   rj   ¹   sn   „ Ø€Jð
 ØØØØØØ ØØØØØ ØØ Øó#&&óP$òð4 ñó ðð ñó ñr   rj   c                   ó2   — e Zd Zdd„Zdd„Zd„ Zdd„Zdd„Zy)	ÚOAuth2MixinNc                 ó’   — t        | j                  «      r| j                  |||¬«       | j                  j                  |||¬«       y )N)ru   rv   )Úcallablern   rA   rq   rt   s       r   rw   zOAuth2Mixin._on_update_token/  sN   € Ü�D×&Ñ&Ô'Ø×ÑØØ+Ø)ð ô ð
 	�‰×#Ñ#ØØ'Ø%ð 	$õ 	
r   c                 óœ   — | j                  «       } | j                  di |¤Ž5 }| j                  |||||«      cd d d «       S # 1 sw Y   y xY w)Nr0   )Úload_server_metadatarT   r=   )r   r   r   r   r   r|   r<   s          r   r   zOAuth2Mixin.request<  sT   € Ø×,Ñ,Ó.ˆØ#ˆT×#Ñ#Ñ/ hÑ/ð 	Q°7Ø×+Ñ+¨G°V¸SÀ%ÈÓP÷	Q÷ 	Qò 	Qús   £AÁAc                 ó�  — | j                   r£d| j                  vr• | j                  di | j                  ¤Ž5 }|j	                  d| j                   d¬«      }|j                  «        |j                  «       }d d d «       t        j                  «       d<   | j                  j                  |«       | j                  S # 1 sw Y   ŒGxY w)NÚ
_loaded_atr   T)r7   r0   )	ro   rp   r.   rK   r   Úraise_for_statusÚjsonÚtimer_   )r   r<   Úrespr|   s       r   r–   z OAuth2Mixin.load_server_metadataA  s±   € Ø×$Ò$¨¸T×=QÑ=QÑ)QØ �—‘Ñ6 4×#5Ñ#5Ñ6ð '¸'Ø—‘Ø˜4×4Ñ4ÀTð 'ó �ð ×%Ñ%Ô'ØŸ9™9›;�÷'ô &*§Y¡Y£[ˆH�\Ñ"Ø× Ñ ×'Ñ'¨Ô1Ø×#Ñ#Ð#÷'ð 'ús   ·?B<Â<Cc                 óR  — | j                  «       }| j                  xs |j                  d«      }|st        d«      ‚| j                  r|j                  | j                  «        | j                  di |¤Ž5 }|�||_         | j                  ||fi |¤Žcddd«       S # 1 sw Y   yxY w)rY   ry   rZ   Nr0   )	r–   rI   r   r^   rJ   r_   rT   r`   rŽ   )r   r`   r   r|   ry   re   s         r   rd   z$OAuth2Mixin.create_authorization_urlN  s³   € ð ×,Ñ,Ó.ˆØ!%×!3Ñ!3ò "
°x·|±|Ø$ó8
Ðñ &ÜÐ>Ó?Ð?à× Ò Ø�M‰M˜$×/Ñ/Ô0à#ˆT×#Ñ#Ñ/ hÑ/ð 	°6ØÐ'Ø&2�Ô#Ø8�4×8Ñ8ØÐ.ñØ28ñ÷	÷ 	ò 	ús   Á6BÂB&c                 ó`  — | j                  «       }| j                  xs |j                  d«      } | j                  di |¤Ž5 }|�||_        i }| j
                  r|j                  | j
                  «       |j                  |«        |j                  |fi |¤Ž}|cddd«       S # 1 sw Y   yxY w)a  Fetch access token in the final step.

        :param redirect_uri: Callback or Redirect URI that is used in
                             previous :meth:`authorize_redirect`.
        :param kwargs: Extra parameters to fetch access token.
        :return: A token dict.
        rz   Nr0   )r–   rG   r   rT   r`   rH   r_   rN   )r   r`   r   r|   rz   re   rf   r   s           r   rh   zOAuth2Mixin.fetch_access_tokeng  sª   € ð ×,Ñ,Ó.ˆØ×.Ñ.ÒP°(·,±,Ð?OÓ2PˆØ#ˆT×#Ñ#Ñ/ hÑ/ð 	°6ØÐ'Ø&2�Ô#ØˆFØ×'Ò'Ø—‘˜d×6Ñ6Ô7Ø�M‰M˜&Ô!Ø&�F×&Ñ& ~Ñ@¸Ñ@ˆEØ÷	÷ 	ò 	ús   ÁAB$Â$B-r�   r   )r+   r,   r-   rw   r   r–   rd   rh   r0   r   r   r’   r’   .  s   „ ó
óQò
$óô2r   r’   )Úloggingr›   Úauthlib.common.securityr   Úauthlib.common.urlsr   Úauthlib.constsr   Úerrorsr   r   r	   Ú	getLoggerr+   rb   r   r2   r?   rV   rj   r’   r0   r   r   ú<module>r¥      s{   ðÛ Û å 2Ý (Ý -å )Ý ,Ý %à€g×Ñ˜Ó!€÷25ñ 25÷j6ñ 6÷0+ñ +ô\,�- ô ,÷^rñ rôjK�- õ Kr   