forked from kenzuya/unshackle
fix(serve): correct PlayReady RemoteCDM server validation
This commit is contained in:
@@ -628,12 +628,17 @@ class dl:
|
|||||||
"device_type": self.cdm.device_type.name,
|
"device_type": self.cdm.device_type.name,
|
||||||
}
|
}
|
||||||
else:
|
else:
|
||||||
self.log.info(
|
# Handle both local PlayReady CDM and RemoteCdm (which has certificate_chain=None)
|
||||||
f"Loaded PlayReady CDM: {self.cdm.certificate_chain.get_name()} (L{self.cdm.security_level})"
|
is_remote = self.cdm.certificate_chain is None and hasattr(self.cdm, "device_name")
|
||||||
)
|
if is_remote:
|
||||||
|
cdm_name = self.cdm.device_name
|
||||||
|
self.log.info(f"Loaded PlayReady Remote CDM: {cdm_name} (L{self.cdm.security_level})")
|
||||||
|
else:
|
||||||
|
cdm_name = self.cdm.certificate_chain.get_name() if self.cdm.certificate_chain else "Unknown"
|
||||||
|
self.log.info(f"Loaded PlayReady CDM: {cdm_name} (L{self.cdm.security_level})")
|
||||||
cdm_info = {
|
cdm_info = {
|
||||||
"type": "PlayReady",
|
"type": "PlayReady",
|
||||||
"certificate": self.cdm.certificate_chain.get_name(),
|
"certificate": cdm_name,
|
||||||
"security_level": self.cdm.security_level,
|
"security_level": self.cdm.security_level,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -166,10 +166,26 @@ def serve(
|
|||||||
if "playready_devices" not in user_config:
|
if "playready_devices" not in user_config:
|
||||||
user_config["playready_devices"] = prd_device_names
|
user_config["playready_devices"] = prd_device_names
|
||||||
|
|
||||||
|
def create_serve_authentication(serve_playready_flag: bool):
|
||||||
|
@web.middleware
|
||||||
|
async def serve_authentication(request: web.Request, handler) -> web.Response:
|
||||||
|
if serve_playready_flag and request.path in ("/playready", "/playready/"):
|
||||||
|
response = await handler(request)
|
||||||
|
else:
|
||||||
|
response = await pywidevine_serve.authentication(request, handler)
|
||||||
|
|
||||||
|
if serve_playready_flag and request.path.startswith("/playready"):
|
||||||
|
from pyplayready import __version__ as pyplayready_version
|
||||||
|
response.headers["Server"] = f"https://git.gay/ready-dl/pyplayready serve v{pyplayready_version}"
|
||||||
|
|
||||||
|
return response
|
||||||
|
return serve_authentication
|
||||||
|
|
||||||
if no_key:
|
if no_key:
|
||||||
app = web.Application(middlewares=[cors_middleware])
|
app = web.Application(middlewares=[cors_middleware])
|
||||||
else:
|
else:
|
||||||
app = web.Application(middlewares=[cors_middleware, pywidevine_serve.authentication])
|
serve_auth = create_serve_authentication(serve_playready and bool(prd_devices))
|
||||||
|
app = web.Application(middlewares=[cors_middleware, serve_auth])
|
||||||
|
|
||||||
app["config"] = serve_config
|
app["config"] = serve_config
|
||||||
app["debug_api"] = debug_api
|
app["debug_api"] = debug_api
|
||||||
@@ -203,6 +219,14 @@ def serve(
|
|||||||
playready_app.on_cleanup.append(pyplayready_serve._cleanup)
|
playready_app.on_cleanup.append(pyplayready_serve._cleanup)
|
||||||
playready_app.add_routes(pyplayready_serve.routes)
|
playready_app.add_routes(pyplayready_serve.routes)
|
||||||
|
|
||||||
|
async def playready_ping(_: web.Request) -> web.Response:
|
||||||
|
from pyplayready import __version__ as pyplayready_version
|
||||||
|
response = web.json_response({"message": "OK"})
|
||||||
|
response.headers["Server"] = f"https://git.gay/ready-dl/pyplayready serve v{pyplayready_version}"
|
||||||
|
return response
|
||||||
|
|
||||||
|
app.router.add_route("*", "/playready", playready_ping)
|
||||||
|
|
||||||
app.add_subapp("/playready", playready_app)
|
app.add_subapp("/playready", playready_app)
|
||||||
log.info(f"PlayReady CDM endpoints available at http://{host}:{port}/playready/")
|
log.info(f"PlayReady CDM endpoints available at http://{host}:{port}/playready/")
|
||||||
elif serve_playready:
|
elif serve_playready:
|
||||||
|
|||||||
Reference in New Issue
Block a user