U
    Uti                     @   s   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 eeddd	Zdd
ddZddeeedddZddeeeeef  dddZddeee dddZdS )    )OptionalDictAnyN)requestabortsession)BULK_API_KEY)
load_token
save_token)ensure_fresh_token_bundle)aliasreturnc                 C   s   | pd  }|std|S )N Zempty_alias)stripRuntimeError)r   a r   +/var/www/html/luxverbi-app/services/auth.py_norm_alias   s    r   )r   c                  C   sd   t std tjdp>tjdp>tjdp>tjdp>d } | rXt	| t
t s`td dS )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-KeyZapi_keyr   N)r   r   r   headersgetformargsr   secretscompare_digeststr)kr   r   r   require_bulk_api_key   s    


	r   i,  refresh_if_lt_seconds)r   r   r   c                C   sh   t | } t| }|s*td|  d|  dt||d}t| | |dpLd }|sdt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atr   r   r   get_access_token_for_alias*   s    
r$   )r   r   c                 C   s   t d}|sdS zDt|| d}|t d< dt _t dp:d }|rRtt|| |W S  tk
r~   t dd dt _Y dS X dS )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   Z
token_datar   r   r   r   require_login_bundleA   s    
r*   c                 C   sB   t | d}|sd S |dpd }|s>tdd  dt_d S |S )Nr   r!   r   r%   T)r*   r   r   r   r)   r'   )r   br#   r   r   r   require_login_access_token\   s    
r,   )typingr   r   r   r   flaskr   r   r   configr   token_storer	   r
   tiktok_clientr   r   r   r   intr$   r*   r,   r   r   r   r   <module>   s   "