
    i                         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       Zddee   d	ed
edee   dededefdZddee   d	ed
edee   dedefdZy)    )Console)Cdm)Device)	RemoteCdm)PSSH)create_client_curlN	pssh_listlicense_urlcdm_device_pathcdm_remote_apiheaderskeykid_to_labelc                 .   |rj|j                  d      }t        |      dk(  rJ|d   j                  dd      j                          d|d   j                  dd      j                          gS y||t        j                  d       yt        | |||||      S )	a  
    Extract PlayReady CONTENT keys (KID/KEY) from a license.

    Args:
        - pssh_list (list[dict]): List of dicts {'pssh': ..., 'kid': ..., 'type': ...}
        - license_url (str): PlayReady license URL.
        - cdm_device_path (str): Path to local CDM file (device.prd). Optional if using remote.
        - cdm_remote_api (list[str]): Remote CDM API config. Optional if using local device.
        - headers (dict): Optional HTTP headers for the license request.
        - key (str): Optional raw license data to bypass HTTP request.
        - kid_to_label (dict): Mapping from KID (hex) to track label.

    Returns:
        list: List of strings "KID:KEY" (only CONTENT keys) or None if error.
    :   r   -    NzB[red]Error: Must provide either cdm_device_path or cdm_remote_api.)splitlenreplacestripconsoleprint_get_playready_keys_local_cdm)r	   r
   r   r   r   r   r   k_splits           Z/home/nidran/Documenti/script/streaming-community/StreamingCommunity/core/drm/playready.pyget_playready_keysr      s    " ))C.w<1qz))#r288:;1WQZ=O=OPSUW=X=^=^=`<abcc >#9Z[(KR`bikwxx    c                 4   d}d}t               }| D ]c  }	t        |	j                  dd            j                  dd      j	                         j                         }
|
sM|
dk7  sS|j                  |
       e |At        j                  d       	 t        j                  |      }t        j                  |      }n!t        j                  d       	 t        d0i |}|j                         }g }t               }	 t!        |       D ]  \  }}	|	d
   }t        |	j                  dd            j                  dd      j	                         j                         }|	j                  dd      }t        j                  d| d|dd  d| d       	 t#        |      }|j$                  st        j                  d       	 |j'                  ||j$                  d         }|r|j)                         ni }d|vrd|d<   |t        j                  d       	 t+        |      j-                  ||      }|j.                  dk7  r:t        j                  d|j.                   d|j0                  dd  d | d!|        r|j3                  ||j0                         	 |j5                  |      D ]  }|j6                  j8                  j                  dd      j	                         j                         }
t;        d" |
D              rX|
|vrt        j                  d#|
 d$       |
|v rz|j<                  j9                         j                  dd      j                         }|
 d%| }||vs|j?                  |       |j                  |
        	 |j	                         d'k(  rtA        |      tA        |      k\  r n#tA        |       d(k(  stA        |      d(k\  s n |ryt!        |      D ]j  \  }}|jC                  d%      \  }
}|dd) d*z   }|r|j                  |
j	                               nd}|rd+| nd}t        j                  d,|
 d-| |        l nt        j                  d.       |r|nd	 	 |jE                  |       S # t        $ r"}t        j                  d|        Y d}~yd}~ww xY w# t        $ r"}t        j                  d	|        Y d}~yd}~ww xY w# t        $ r#}t        j                  d|        Y d}~d}~ww xY w# t        $ r#}t        j                  d|        Y d}~-d}~ww xY w# t        $ r#}t        j                  d|        Y d}~\d}~ww xY w# t        $ r#}t        j                  d&|        Y d}~d}~ww xY w# t        $ r Y S w xY w# t        $ rC}t        j                  d/|        Y d}~	 |jE                  |       y# t        $ r Y yw xY wd}~ww xY w# 	 |jE                  |       w # t        $ r Y w w xY wxY w)1z8Extract PlayReady keys using local or remote CDM device.Nkidr   r   zn/az[green]Using local CDM.z%[red]Error loading local CDM device: z[green]Using remote CDM.z$[red]Error initializing remote CDM: psshzN/Atypeunknownz[red]z [cyan](PSSH: [yellow]   z...[cyan] KID: [red])z([red]Invalid PlayReady PSSH/PRO header: z![red]No WRM headers found in PSSHr   z'[red]Error creating license challenge: zContent-Typeztext/xml; charset=utf-8z
[red]License URL is None.)r   )dataz[red]License request error:    z[red]License error: z
Response: z
Url: z

Headers: c              3   &   K   | ]	  }|d k(    yw)0N ).0cs     r   	<genexpr>z0_get_playready_keys_local_cdm.<locals>.<genexpr>   s     1181s   z$[yellow]Warning: Extracted KID [red]z( [yellow]is not in the expected KID listr   z[red]Error extracting keys: allr   *z [cyan]| [red]z    - [red]z[white]:[green]z[yellow]No keys extractedz-[red]Unexpected error during key extraction: r,   )#setstrgetr   lowerr   addr   r   r   loadr   from_device	Exceptionr   open	enumerater   wrm_headersget_license_challengecopyr   poststatus_codetextparse_licenseget_keyskey_idhexr0   r   appendr   r   close)r	   r
   r   r   r   r   devicecdmexpected_kidsitemr"   e
session_idall_content_keysextracted_kidsir#   kid_info	type_infopssh_obj	challengereq_headersresponsekey_objkey_valformatted_keyk
masked_keylabel	label_strs                                 r   r   r   2   s   F
C EM #$((5"%&..sB7==?EEG3%<c"# "/0	[[1F//&)C
 	01	-n-C JUNi + Q	GAt<D488E512::3CIIKQQSH3IMME),B49+Mabjakklmn:
 ''AB55j(BVBVWXBYZ	 -4',,.K[0.GN+";<-kBGGZcGd
 ##s* 4X5I5I4J,W_WdWdeifiWjVkkrs~r  @K  LW  KX  Y  Z j(--8"||J7 0G!..,,44S"=CCEKKMC 1S11  -/(LSEQy&z{ n, %kkoo/77R@FFHG'*e1WI$6M$,<<(//>&**3/)06  E)c..ASEW.W 9~"s+;'<'AcQ	h !"23 Y1 wws|W$Sb\C/
9E((548=nUG42	C5
|I;WXY MM56#3=	IIj!o  	MMA!EF	  	MM@DE	&   HLM   GsKL    <QC@AF   <QC@A@  		  EaSIJ	IIj! 		
	IIj! 		s`  *Q> R, 8BV% S"V% 9T	6V% T8,A%V% CU'!$U';V% V% BV% ,V>	R)R$$R),	S5SS	T#T;V% TV% 		T5T0*V% 0T55V% 8	U$UV% U$$V% '	V0VV% VV% 	V"!V"%	W1.W,W4 W 	W)(W),W11W4 4X6XX	XXXX)NNNNN)NN)rich.consoler   pyplayready.cdmr   pyplayready.devicer   pyplayready.remote.remotecdmr   pyplayready.system.psshr   $StreamingCommunity.utils.http_clientr   r   listdictr4   r   r   r,   r    r   <module>rg      s    !  % 2 ( D )y$t* y3 yQT ymqrumv y  IM y  [^ y  uy y>KT$Z Kc K\_ Kquvyqz K  FJ K  ae Kr    