Ë
    Uti  ã                   óÐ   — d dl mZmZmZ d dlZd dlmZmZmZ d dl	m
Z
 d dlmZmZ d dlmZ dedefd	„Zdd
„Zddœdededefd„Zddœdedeeeef      fd„Zddœdedee   fd„Zy)é    )ÚOptionalÚDictÚAnyN)ÚrequestÚabortÚsession)ÚBULK_API_KEY)Ú
load_tokenÚ
save_token)Úensure_fresh_token_bundleÚaliasÚreturnc                 óH   — | xs dj                  «       }|st        d«      ‚|S )NÚ Úempty_alias)ÚstripÚRuntimeError)r   Úas     ú+/var/www/html/luxverbi-app/services/auth.pyÚ_norm_aliasr      s'   € à	Š�"×ÑÓ€AÙÜ˜=Ó)Ð)Ø€Hó    c                  ó°  — t         st        d«       t        j                  j	                  d«      xse t        j                  j	                  d«      xsD t        j
                  j	                  d«      xs# t        j                  j	                  d«      xs dj                  «       } | r#t        j                  | t        t         «      «      st        d«       yy)uŒ   
    AutorizaciÃ³n para endpoints bulk.
    Acepta X-Api-Key (recomendado) y, para facilitar curl/cron, tambiÃ©n api_key en form/query.
    i‘  z	X-Api-Keyz	X-API-KeyÚapi_keyr   N)r	   r   r   ÚheadersÚgetÚformÚargsr   ÚsecretsÚcompare_digestÚstr)Úks    r   Úrequire_bulk_api_keyr"      s¥   € õ
 äˆcŒ
ô 	�‰×Ñ˜KÓ(ò 	Ü�?‰?×Ñ˜{Ó+ò	ä�<‰<×Ñ˜IÓ&ò	ô �<‰<×Ñ˜IÓ&ò	ð ß�eƒgð ñ ”G×*Ñ*¨1¬c´,Ó.?Ô@Üˆc�
ð Ar   i,  ©Úrefresh_if_lt_secondsr$   c                óò   — t        | «      } t        | «      }|st        d| › d| › d�«      ‚t        ||¬«      }t	        | |«       |j                  d«      xs dj                  «       }|st        d| › �«      ‚|S )uÝ   
    Devuelve un access_token vÃ¡lido para el alias:
    - load_token(alias)
    - ensure_fresh_token_bundle(...) (refresca si estÃ¡ cerca de expirar)
    - save_token(alias, tok) (persistimos rotaciÃ³n/expiraciones)
    zno_token_for_alias:z (haz login OAuth con ?alias=ú)r#   Úaccess_tokenr   zmissing_access_token_for_alias:)r   r
   r   r   r   r   r   )r   r$   ÚtokÚats       r   Úget_access_token_for_aliasr*   *   sˆ   € ô ˜Ó€Eä
�UÓ
€CÙÜÐ0°°Ð7TÐUZÐT[Ð[\Ð]Ó^Ð^ä
# CÐ?TÔ
U€CÜˆu�cÔà
�'‰'�.Ó
!Ò
' R×	.Ñ	.Ó	0€BÙÜÐ<¸U¸GÐDÓEÐEà€Ir   c                 óV  — t        j                  d«      }|sy	 t        || ¬«      }|t         d<   dt         _        t        j                  d«      xs dj	                  «       }|rt        t        |«      |«       |S # t        $ r$ t        j                  dd«       dt         _        Y yw xY w)uþ   
    Devuelve el bundle en sesiÃ³n (refrescado si hace falta) o None si no hay login.
    Importante: si hay oauth_alias en sesiÃ³n, persistimos el bundle en token_store
    para que worker/cron tenga siempre refresh_token/expiraciones actualizadas.
    Útiktok_tokenNr#   TÚoauth_aliasr   )	r   r   r   Úmodifiedr   r   r   Ú	ExceptionÚpop)r$   Ú
token_datar   s      r   Úrequire_login_bundler2   A   sš   € ô —‘˜^Ó,€JÙØðÜ.¨zÐQfÔgˆ
Ø",Œ�ÑØŒÔô —‘˜]Ó+Ò1¨r×8Ñ8Ó:ˆÙÜ”{ 5Ó)¨:Ô6àÐøÜò Ü�‰�N DÔ)ØŒÔÙðús   šA A; Á;*B(Â'B(c                 ó²   — t        | ¬«      }|sy |j                  d«      xs dj                  «       }|s"t        j                  dd «       dt        _        y |S )Nr#   r'   r   r,   T)r2   r   r   r   r0   r.   )r$   Úbr)   s      r   Úrequire_login_access_tokenr5   \   sP   € ÜÐ3HÔI€AÙØà
�%‰%�Ó
Ò
% 2×	,Ñ	,Ó	.€BÙä�‰�N DÔ)ØŒÔØà€Ir   )r   N)Útypingr   r   r   r   Úflaskr   r   r   Úconfigr	   Útoken_storer
   r   Útiktok_clientr   r    r   r"   Úintr*   r2   r5   © r   r   ú<module>r=      sœ   ðç &Ñ &Û ç )Ñ )å ß .Ý 3ð�sð ˜só óð, LOò  cð ÀSð ÐSVó ð. :=ò °3ð ÀÈ$ÈsÐTWÈxÉ.ÑAYó ð6 @Cò ¸ð ÀxÐPSÁ}ô r   