U
    g3                     @   s   d dl Z d dlZd dlZd dlZd dlZddlmZ ddlmZ ddl	m
Z
mZmZmZmZmZmZmZmZ G dd deZG d	d
 d
eZG dd deZdS )    N   )InfoExtractor   )
Cryptodome)	ExtractorErrorint_or_nonejwt_decode_hs256traverse_objtry_callurl_basenameurl_or_noneurlencode_postdatavariadicc                   @   s   e Zd ZdZdZdZdZdZdZdZ	dZ
ddiZddd	d
dddZedd Zejdd Zdd Zdd Zdd Zddddi dfddZddi i dfddZdd Zd"d d!ZdS )#WrestleUniverseBaseIEZwrestleuniversezLhttps?://(?:www\.)?wrestle-universe\.com/(?:(?P<lang>\w{2})/)?%s/(?P<id>\w+)zapi.wrestle-universe.comNkeyZ'AIzaSyCaRPBsDQYVDUWWBXjsTrHESi2r_F3RAdAz*/*zapplication/jsonz$Chrome/JsCore/9.9.4/FirebaseCore-webz)1:307308870738:web:820f38fe5150c8976e338b!https://www.wrestle-universe.com/z https://www.wrestle-universe.com)AcceptContent-TypezX-Client-VersionzX-Firebase-gmpidZRefererZOriginc                    sl    j r js4t fdd}|s. js.   | _ j rL jtt krf js^tddd 	   j S )Nc                      s     dd jS )Nr   token)Z_get_cookiesvalue selfr   D/tmp/pip-unpacked-wheel-q5ljy6pj/yt_dlp/extractor/wrestleuniverse.py<lambda>,       z.WrestleUniverseBaseIE._TOKEN.<locals>.<lambda>z<Expired token. Refresh your cookies in browser and try againTexpected)
_REAL_TOKEN_TOKEN_EXPIRYr
   _REFRESH_TOKENZraise_login_required_TOKENinttimer   _refresh_token)r   r   r   r   r   r!   )   s    
 zWrestleUniverseBaseIE._TOKENc                 C   s0   || _ t|thdthf}|s&td|| _d S )Nexpz'There was a problem with the auth token)r   r	   r   r   r   r   )r   r   Zexpiryr   r   r   r!   9   s
    c                 C   s   | j dd d| j| jtjd||ddd dd}t|d	thf}|s^td
t|d ddt|dthf| _	| j	s| 
d || _d S )NzEhttps://identitytoolkit.googleapis.com/v1/accounts:signInWithPasswordz
Logging inT)ZreturnSecureTokenemailpassword,:
separatorsi  )queryheadersdataZexpected_statusZidTokenzUnable to log in: )errormessager   ZrefreshTokenzNo refresh token was granted)_download_json_LOGIN_QUERY_LOGIN_HEADERSjsondumpsencoder	   strr   r    report_warningr!   )r   usernamer'   loginr   r   r   r   _perform_loginB   s2         
z$WrestleUniverseBaseIE._perform_loginc                 C   sl   | j r
d S | jdd g| jdd | _ | j sT| j| jd| _ | j rFd S tt | _ | j| jd| j  d S )NZ	device_id)Zie_keyr   )	
_DEVICE_IDZ_configuration_arg_NETRC_MACHINEcacheloadr8   uuidZuuid4storer   r   r   r   _real_initializeS   s    z&WrestleUniverseBaseIE._real_initializec              	   C   sn   | j dd d| jtd| jd| jddid}t|dthfrH|d | _t|dd	td
}|sdtd|| _d S )Nz+https://securetoken.googleapis.com/v1/tokenzRefreshing tokenrefresh_token)Z
grant_typerD   r   z!application/x-www-form-urlencoded)r-   r/   r.   Zaccess_tokenZid_token)Zexpected_typez+No auth token returned from refresh request)	r2   r3   r   r    r4   r	   r8   r   r!   )r   Zrefreshr   r   r   r   r$   `   s(        	
z$WrestleUniverseBaseIE._refresh_token ZAPITc           	   
   C   s   ddi}|r&d|d< t j|dd }|r@| jr@d| j |d< | jd	| j d
| j d| | |d| dd| d||||dS )NzCA-CIDrE   zapplication/json;charset=utf-8r   r(   r+   zBearer Authorizationzhttps://z/v1//zDownloading z JSONzFailed to download )noteZerrnoter/   r.   r-   fatal)r5   r6   r7   r!   r2   	_API_HOST	_API_PATH)	r   video_idparammsgauthr/   r-   rI   r.   r   r   r   	_call_apiq   s     
 
 
   zWrestleUniverseBaseIE._call_apic                    s~   t jstdddt jd}t jj|t jd  fdd}t|	 
d }	| j|||| j|	d	|||d
}
|
|fS )Nz'pycryptodomex not found. Please installTr   i   )ZhashAlgoc              
      sZ   | sd S z  t|  W S  ttjfk
rT } ztd| W 5 d }~X Y nX d S )NzCould not decrypt data: )decryptbase64	b64decodedecode
ValueErrorbinasciiErrorr   )r/   ecipherr   r   rQ      s    z:WrestleUniverseBaseIE._call_encrypted_api.<locals>.decryptZDER)deviceIdr   )r/   r-   rI   )r   ZRSAr   generateZ
PKCS1_OAEPnewSHA1rR   	b64encodeZ
public_keyZ
export_keyrT   rP   r=   )r   rL   rM   rN   r/   r-   rI   Zprivate_keyrQ   r   Zapi_jsonr   rY   r   _call_encrypted_api}   s     
 z)WrestleUniverseBaseIE._call_encrypted_apic              	   C   sf   | j |dd|pdiddd}|sb| ||}| j||dd}t|d	t|ttttfthfp`i }|S )
NmetadataaljaF)rN   r-   rO   rI   )rI   props	pageProps)rd   re   )	rP   Z_download_webpageZ_search_nextjs_datar	   r   r8   bytesdictset)r   urlrL   langZ
props_keysra   ZwebpageZnextjs_datar   r   r   _download_metadata   s        z(WrestleUniverseBaseIE._download_metadatac                 C   sN   t ||dd}|s,|ds,| jddd n|s:| d | j||dd	dd
S )NF)get_allZcanWatchz:This account does not have access to the requested contentTr   zNo supported formats foundmp4hls)Zm3u8_idZlive)r	   getZraise_no_formatsZ_extract_m3u8_formats)r   r/   pathrL   Zhls_urlr   r   r   _get_formats   s     
z"WrestleUniverseBaseIE._get_formats)N)__name__
__module____qualname__r>   _VALID_URL_TMPLrJ   rK   r   r   r    r=   r3   r4   propertyr!   setterr<   rC   r$   rP   r`   rk   rq   r   r   r   r   r      s6   	

	r   c                   @   sN   e Zd Zejd Zdddddddd	d
dddddddidgZdZdd ZdS )WrestleUniverseVODIEZvideoszAhttps://www.wrestle-universe.com/en/videos/dp8mpjmcKfxzUhEHM2uFwsZdp8mpjmcKfxzUhEHM2uFwsrm   u5   The 3rd “Futari wa Princess” Max Heart Tournamentz$md5:318d5061e944797fbbb81d5c7dd00bf5u*   埼玉・春日部ふれあいキューブtjpwi  i'cZ20230129zVhttps://image.asset.wrestle-universe.com/8FjD67P8rZc446RBQs5RBN/8FjD67P8rZc446RBQs5RBNzcount:7zcount:21)idexttitledescriptionlocationchannelduration	timestampupload_date	thumbnailchapterscastskip_downloadm3u8)ri   	info_dictparamsZvideoEpisodesc                 C   s   |  |dd\}}| |||d}| j|ddd| jid}|| |dd	thf|d
t|dthfdthfddthfddthfdt	hfdthfdddthfdt
hfddd dthfdt
hfdt
hfdfd	S )Nrj   rz   ZvideoEpisodeFallbackDataz:watchZwatchr[   r/   ZprotocolHlsri   )rz   formatsdisplayNamer}   labelsgroupvenueZwatchStartTimekeyVisualUrlZcasts.r   ZvideoChaptersc                 S   s   t |dtS )Nstart)
isinstancero   r"   )_vr   r   r   r      r   z4WrestleUniverseVODIE._real_extract.<locals>.<lambda>r   end)r|   
start_timeZend_time)	r|   r}   r   r~   r   r   r   r   r   )_match_valid_urlr   rk   rP   r=   rq   r   r	   r8   r   r"   )r   ri   rj   rL   ra   
video_datar   r   r   _real_extract   s,    

z"WrestleUniverseVODIE._real_extractN	rr   rs   rt   r   ru   Z
_VALID_URLZ_TESTSrK   r   r   r   r   r   rx      s*   
 rx   c                   @   s   e Zd Zejd Zdddddddd	d
ddddddddddidddddddddddddd dd!ddid"d#d$d%d&gZd'Zd(d) Zd*S )+WrestleUniversePPVIEZlivesz HLS AES-128 key obtained via APIz@https://www.wrestle-universe.com/en/lives/buH9ibbfhdJAY4GKZcEuJXZbuH9ibbfhdJAY4GKZcEuJXrm   u,   【PPV】Beyond the origins, into the futurez$md5:9a872db68cd09be4a1e35a3ee8b0bdfcry   u   東京・Twin Box AKIHABARAir'  i0cZ20230130zVhttps://image.asset.wrestle-universe.com/rJs2m7cBaLXrwCcxMdQGRM/rJs2m7cBaLXrwCcxMdQGRMzcount:3Z 5633184acd6e43f1f1ac71c6447a4186Z 5bac71beb33197d5600337ce86de7862r   iv)rz   r{   r|   r}   r   r~   r   r   r   r   
thumbnailshls_aesr   r   zNo longer available)rH   ri   r   r   skipzunencrypted HLSz@https://www.wrestle-universe.com/en/lives/wUG8hP5iApC63jbtQzhVVxZwUG8hP5iApC63jbtQzhVVxzGRAND PRINCESS '22z$md5:e4f43d0d4262de3952ff34831bc99858u   東京・両国国技館i|F  i`5bZ20220319zVhttps://image.asset.wrestle-universe.com/i8jxSTCHPfdAKD4zN41Psx/i8jxSTCHPfdAKD4zN41Psx)rz   r{   r|   r}   r   r~   r   r   r   r   r   )rH   ri   r   r   z<manifest provides live-a (partial) and live-b (full) streamsz@https://www.wrestle-universe.com/en/lives/umc99R9XsexXrxr9VjTo9gT)rH   ri   Zonly_matchingeventsc                 C   s  |  |dd\}}| |||d}d|it|dthfdthfddthfddthfd	thfd
dthifd}t|dthf}|dr|r||d  |d< | j|ddddid\}}| 	|ddthf||d< |d D ]d}	|	drt
|	d d |	d< t|	d dd |	d< |	d t|	d dd sd|	d< qt|dd |hf}
|
rx|
t|dd!|hfd"|d#< nt|dd$t
hfr| d% |S )&Nrj   rz   ZeventFallbackDatar   r}   r   r   r   Z	startTime)r   ZalterKeyVisualUrlZheroKeyVisualUrlri   )r|   r}   r   r~   r   r   Z	endedTimer   r   z:watchArchivezwatch archivemethodr   r   rn   ))urls.ri   r   Ztbrg      @.r   Z	format_idZmanifest_urliZ
preferencer   r   r   r   ZencryptTypez-HLS AES-128 key was not found in API response)r   r   rk   r	   r8   r   r   ro   r`   rq   r"   r   	partition
startswithr9   )r   ri   rj   rL   ra   infoZ
ended_timer   rQ   fZhls_aes_keyr   r   r   r     sL     

   

 

z"WrestleUniversePPVIE._real_extractNr   r   r   r   r   r      s`   
  1r   )rR   rV   r5   r#   rA   commonr   Zdependenciesr   utilsr   r   r   r	   r
   r   r   r   r   r   rx   r   r   r   r   r   <module>   s   , 3