Ë
    UtiH  ã                   ó  — d dl Z d dlmZmZmZmZmZmZ d dlm	Z	m
Z
mZ d dlmZ  ede«      Zdedefd„Zd	ed
edefd„Zej'                  dd¬«      d„ «       Zej'                  dd¬«      d„ «       Zej'                  ddgd¬«      d„ «       Zy)é    N)Ú	BlueprintÚrequestÚsessionÚredirectÚflashÚurl_for)Úbuild_authorize_urlÚexchange_code_for_tokenÚquery_creator_info)Ú
save_tokenÚoauthÚsÚreturnc                 ó2  — | xs dj                  «       j                  «       } g }d}| D ]G  }d|cxk  rdk  sn d|cxk  rdk  rn n|j                  |«       d}Œ2|rŒ5|j                  d«       d}ŒI dj                  |«      j                  d«      }|xs d	S )
z[
    ASCII-ish slug without extra deps (Python 3.8).
    Keeps it stable and URL-safe.
    Ú FÚaÚzÚ0Ú9ú-TÚaccount)ÚstripÚlowerÚappendÚjoin)r   ÚoutÚ	prev_dashÚchÚslugs        ú2/var/www/html/luxverbi-app/app/blueprints/oauth.pyÚ_slugr!      s—   € ð
 
Šˆb�‰Ó×ÑÓ!€Aà
€CØ€IØò !ˆØ�2Ô˜Ô #¨Ô"2¨sÕ"2Ø�J‰J�rŒNØ‰IâØ—
‘
˜3”Ø ‘	ð!ð �7‰7�3‹<×Ñ˜cÓ"€DØÒ�9Ðó    ÚnicknameÚopen_idc                 ó<   — |xs ddd xs d}t        | «      › d|› �S )zˆ
    Human-friendly alias, but collision-resistant and stable:
      <slug(nickname)>-<last6(open_id)>
    Example: luxverbi-3fa91c
    r   iúÿÿÿNÚ000000r   )r!   )r#   r$   Útails      r    Úbuild_alias_from_channelr(   !   s/   € ð ŠM�r˜2˜3ÐÒ+ 8€DÜ�H‹oÐ˜a ˜vÐ&Ð&r"   z/loginÚlogin)Úendpointc                  óÚ   — t         j                  j                  d«      xs dj                  «       } t	        j
                  d«      }|t        d<   | t        d<   t        t        |«      «      S )z�
    /login?alias=... is still supported as an override,
    but by default we will generate a channel-based alias after OAuth callback.
    Úaliasr   é   Úoauth_stateÚoauth_alias_requested)	r   ÚargsÚgetr   ÚsecretsÚ	token_hexr   r   r	   )r,   Ústates     r    r)   r)   +   s\   € ô �\‰\×Ñ˜gÓ&Ò,¨"×3Ñ3Ó5€EÜ×Ñ˜bÓ!€EØ"„GˆMÑà',„GÐ#Ñ$ÜÔ'¨Ó.Ó/Ð/r"   z/tiktok/callbackÚtiktok_callbackc                  ó¬  — t         j                  j                  d«      } | r#t        d| › �d«       t	        t        d«      «      S t         j                  j                  d«      }t         j                  j                  d«      }|r|r|t        j                  d«      k7  r t        dd«       t	        t        d«      «      S 	 t        |«      }|t        d<   d	t        _        t        j                  d
«      xs dj                  «       }|}|s]|xs i j                  d«      xs d}	 t        |j                  d«      xs d«      }|xs i j                  d«      xs d}t        ||«      }|t        d<   t        ||«       t        d|› d�d«       t	        t        d«      «      S # t        $ r d}Y ŒRw xY w# t        $ r}	t        d|	› �d«       Y d }	~	ŒBd }	~	ww xY w)NÚerrorzTikTok error: úui.app_homeÚcoder4   r.   z$Invalid OAuth state or missing code.Útiktok_tokenTr/   r   r$   Úaccess_tokenÚcreator_nicknameÚtiktokÚoauth_aliasz$Successfully connected with TikTok (z).ÚsuccesszError exchanging code: )r   r0   r1   r   r   r   r   r
   Úmodifiedr   r   Ú	Exceptionr(   r   )
r7   r9   r4   Ú
token_dataÚ	requestedr,   r$   Úcreatorr#   Úes
             r    r5   r5   9   s³  € ä�L‰L×Ñ˜WÓ%€EÙÜ�˜u˜gÐ&¨Ô0Üœ Ó.Ó/Ð/ä�<‰<×Ñ˜FÓ#€DÜ�L‰L×Ñ˜WÓ%€Eá‘u ¬¯©°]Ó)CÒ CÜÐ4°gÔ>Üœ Ó.Ó/Ð/ð6Ü,¨TÓ2ˆ
Ø",Œ�ÑØŒÔô —[‘[Ð!8Ó9Ò?¸R×FÑFÓHˆ	ð ˆÙØ!Ò' R×,Ñ,¨YÓ7Ò=¸2ˆGð$Ü,¨Z¯^©^¸NÓ-KÒ-QÈrÓR�Ø#šM r×.Ñ.Ð/AÓBÒNÀh�ô -¨X°wÓ?ˆEð "'Œ�ÑÜ�5˜*Ô%äÐ4°U°G¸2Ð>À	ÔJô ”G˜MÓ*Ó+Ð+øô ò $Ø#’ð$ûô ò 6ÜÐ'¨ sÐ+¨W×5Ñ5ûð6ús=   Ã A#F1 Ä$7F  Å1F1 Æ F.Æ+F1 Æ-F.Æ.F1 Æ1	GÆ:GÇGz/logoutÚPOSTÚlogout)Úmethodsr*   c                  óÆ   — t        j                  dd «       t        j                  dd «       t        j                  dd «       t        dd«       t        t	        d«      «      S )Nr:   Údraftsr/   zDisconnected.r?   r8   )r   Úpopr   r   r   © r"   r    rG   rG   e   sI   € ä‡K�K� Ô%Ü‡K�K�˜$Ôô ‡K�KÐ'¨Ô.ä	ˆ/˜9Ô%Ü”G˜MÓ*Ó+Ð+r"   )r2   Úflaskr   r   r   r   r   r   Útiktok_clientr	   r
   r   Útoken_storer   Ú__name__ÚbpÚstrr!   r(   Úrouter)   r5   rG   rL   r"   r    ú<module>rT      s¼   ðã ß G× Gç ZÑ ZÝ "ñ ˆw˜Ó!€ðˆSð �Só ð*' sð '°Sð '¸Só 'ð ‡�ˆ(˜W€Ó%ñ
0ó &ð
0ð ‡�Ð
Ð'8€Ó9ñ(,ó :ð(,ðV ‡�ˆ)˜f˜X°€Ó9ñ	,ó :ñ	,r"   