diff --git a/pywidevine/cdm.py b/pywidevine/cdm.py index 670440a..08dcfc0 100644 --- a/pywidevine/cdm.py +++ b/pywidevine/cdm.py @@ -108,7 +108,7 @@ class Cdm: self.__signer = pss.new(rsa_key) self.__decrypter = PKCS1_OAEP.new(rsa_key) - self._sessions: dict[bytes, Session] = {} + self.__sessions: dict[bytes, Session] = {} @classmethod def from_device(cls, device: Device) -> Cdm: @@ -128,11 +128,11 @@ class Cdm: Raises: TooManySessions: If the session cannot be opened as limit has been reached. """ - if len(self._sessions) > self.MAX_NUM_OF_SESSIONS: + if len(self.__sessions) > self.MAX_NUM_OF_SESSIONS: raise TooManySessions(f"Too many Sessions open ({self.MAX_NUM_OF_SESSIONS}).") session = Session() - self._sessions[session.id] = session + self.__sessions[session.id] = session return session.id @@ -146,10 +146,10 @@ class Cdm: Raises: InvalidSession: If the Session identifier is invalid. """ - session = self._sessions.get(session_id) + session = self.__sessions.get(session_id) if not session: raise InvalidSession(f"Session identifier {session_id!r} is invalid.") - del self._sessions[session_id] + del self.__sessions[session_id] def set_service_certificate(self, session_id: bytes, certificate: Optional[Union[bytes, str]]) -> str: """ @@ -180,7 +180,7 @@ class Cdm: Returns the Service Provider ID of the verified DrmCertificate if successful. If certificate is None, it will return the now unset certificate's Provider ID. """ - session = self._sessions.get(session_id) + session = self.__sessions.get(session_id) if not session: raise InvalidSession(f"Session identifier {session_id!r} is invalid.") @@ -260,7 +260,7 @@ class Cdm: Returns a SignedMessage containing a LicenseRequest message. It's signed with the Private Key of the device provision. """ - session = self._sessions.get(session_id) + session = self.__sessions.get(session_id) if not session: raise InvalidSession(f"Session identifier {session_id!r} is invalid.") @@ -333,7 +333,7 @@ class Cdm: SignatureMismatch: If the Signature of the License SignedMessage does not match the underlying License. """ - session = self._sessions.get(session_id) + session = self.__sessions.get(session_id) if not session: raise InvalidSession(f"Session identifier {session_id!r} is invalid.") @@ -403,7 +403,7 @@ class Cdm: TypeError: If the provided type_ is an unexpected value type. ValueError: If the provided type_ is not a valid Key Type. """ - session = self._sessions.get(session_id) + session = self.__sessions.get(session_id) if not session: raise InvalidSession(f"Session identifier {session_id!r} is invalid.") @@ -475,7 +475,7 @@ class Cdm: if output_file.is_file() and not exists_ok: raise FileExistsError(f"Output file already exists, {output_file}") - session = self._sessions.get(session_id) + session = self.__sessions.get(session_id) if not session: raise InvalidSession(f"Session identifier {session_id!r} is invalid.") diff --git a/pywidevine/serve.py b/pywidevine/serve.py index c70c55c..7bdd9b1 100644 --- a/pywidevine/serve.py +++ b/pywidevine/serve.py @@ -203,7 +203,8 @@ async def get_license_challenge(request: web.Request) -> web.Response: }, status=400) # enforce service certificate (opt-in) - if request.app["config"].get("force_privacy_mode") and not cdm._sessions[session_id].service_certificate: + # TODO: Add a way to check if there's a service certificate set properly + if request.app["config"].get("force_privacy_mode") and not cdm._Cdm__sessions[session_id].service_certificate: return web.json_response({ "status": 403, "message": "No Service Certificate set but Privacy Mode is Enforced."