
    i                         d dl Z d dlmZ d dlmZ d dlmZmZ ddlm	Z	 ddl
mZ  e       Zej                  j                  dd	      Z G d
 d      Zy)    N)Console)config_manager)obj_localDbValutobj_externalSupaDbVault   )get_playready_keys)get_widevine_keysconfigdelay_after_requestc                       e Zd Zddededee   dee   fdZddee   ded	ed
ededee   fdZddee   ded	ed
ededee   fdZy)
DRMManagerNwidevine_device_pathplayready_device_pathwidevine_remote_cdm_apiplayready_remote_cdm_apic                 p    || _         || _        || _        || _        t        du| _        t        du| _        y)zT
        Initialize DRM Manager with configuration file paths and database.
        N)r   r   r   r   r   is_local_db_connectedr   is_supa_db_connected)selfr   r   r   r   s        X/home/nidran/Documenti/script/streaming-community/StreamingCommunity/core/drm/manager.py__init__zDRMManager.__init__   s@    
 %9!%:"'>$(@% &6T%A"$;4$G!    	pssh_listlicense_urlheaderskeykid_to_labelreturnc           	         |rg }|j                  d      D ]  }|j                  d      }t        |      dk(  s#|d   j                  dd      j                         }	|d   j                  dd      j                         }
|
dd	 d
z   }|st        j                  d       t        j                  d|	 d| d       |j                  |	 d|
         |r|S |r|d   j                  d      nd}|st        j                  d       | j                  r|r|rt        j                  ||d      }|r|S | j                  r|r|rt        j                  ||d      }|r|S 	 t        ||| j                  | j                  |||      }t!        j"                  t$               |r| j                  r?|r=|r;t        j                  dt        |       d       t        j&                  |d|||       | j                  r?|r=|r;t        j                  dt        |       d       t        j&                  |d|||       |S t        j                  d       	 t        j                  d       y# t(        $ r"}t        j                  d|        Y d}~<d}~ww xY w)a  
        Get Widevine keys with step: 
            1) Database lookup by license URL and PSSH
            2) Fallback search by KIDs only
            3) CDM extraction
                1) If .wvd file provided, use it
                2) Else, use remote CDM API if provided
        |:   r   - r   N*[cyan]Using Manual Key.    - [red][white]:[green] [cyan]| [red]Manualpssh5[yellow]Warning: No PSSH provided for database lookupwidevineStoring  key(s) to local database... key(s) to Supabase database...'[yellow]CDM extraction returned no keys[red]CDM error: z0
[red]All extraction methods failed for Widevine)splitlenreplacestripconsoleprintappendgetr   r   get_keys_by_psshr   r   r	   r   r   timesleepDELAYset_keys	Exceptionr   r   r   r   r   r   manual_keyskeysk_splitkidkey_val
masked_keypssh_val
found_keyses                  r   get_wv_keyszDRMManager.get_wv_keys'   so    K		# 
;**S/w<1$!!*,,S"5;;=C%aj00b9??AG!("!3J&&?@MMKuOJ<Oc"de&&#ay'9:
; "" 099Q<##F+dMMQR %%+()::;R\]J!! $$0AA+xYcdJ!!	2$YT=V=VX\XtXtv}  @C  EQ  RDJJu--+(MMHSYK7S"TU$--dJXWcd,,MMHSYK7V"WX+44T:{T\^jk GH
 	IJ	  	2MM,QC011	2   CI  4I   	J)JJc           	         |rg }|j                  d      D ]  }|j                  d      }t        |      dk(  s#|d   j                  dd      j                         }	|d   j                  dd      j                         }
|
dd	 d
z   }|st        j                  d       t        j                  d|	 d| d       |j                  |	 d|
         |r|S |r|d   j                  d      nd}|st        j                  d       | j                  r|r|rt        j                  ||d      }|r|S | j                  r|r|rt        j                  ||d      }|r|S 	 t        ||| j                  | j                  |||      }t!        j"                  t$               |r| j                  r?|r=|r;t        j                  dt        |       d       t        j&                  |d|||       | j                  r?|r=|r;t        j                  dt        |       d       t        j&                  |d|||       |S t        j                  d       	 t        j                  d       y# t(        $ r"}t        j                  d|        Y d}~<d}~ww xY w)a  
        Get PlayReady keys with step: 
            1) Database lookup by license URL and PSSH
            2) Fallback search by KIDs only
            3) CDM extraction
                1) If .prd file provided, use it
                2) Else, use remote CDM API if provided
        r    r!   r"   r   r#   r$   r   Nr%   r&   r'   r(   r)   r*   r+   r,   	playreadyr.   r/   r0   r1   r2   z1
[red]All extraction methods failed for PlayReady)r3   r4   r5   r6   r7   r8   r9   r:   r   r   r;   r   r   r   r   r   r<   r=   r>   r?   r@   rA   s                  r   get_pr_keyszDRMManager.get_pr_keysn   sq    K		# 
;**S/w<1$!!*,,S"5;;=C%aj00b9??AG!("!3J&&?@MMKuOJ<Oc"de&&#ay'9:
; "" 099Q<##F+dMMQR %%+()::;R]^J!! $$0AA+xYdeJ!!	2%id>X>XZ^ZwZw  zA  CF  HT  UDJJu--+(MMHSYK7S"TU$--dKhXde,,MMHSYK7V"WX+44T;U]_klGH
 	JK	  	2MM,QC011	2rL   )NNNN)NNN)	__name__
__module____qualname__strlistr   dictrK   rO    r   r   r   r      s    HS HPS Huyz}u~ H  bf  gj  bk HET$Z Ec ED E^a Ex| E  IM  NQ  IR ENDT$Z Dc DD D^a Dx| D  IM  NQ  IR Dr   r   )r<   rich.consoler   StreamingCommunity.utilsr   StreamingCommunity.utils.vaultr   r   rN   r   r-   r	   r7   
remote_cdmget_intr>   r   rV   r   r   <module>r\      sM     ! 4 T * ' )!!))(4IJZ Zr   