mirror of
				https://github.com/devine-dl/pywidevine.git
				synced 2025-11-04 03:44:50 +00:00 
			
		
		
		
	serve: Improve error handling on /parse_license
This commit is contained in:
		
							parent
							
								
									6eceaaf410
								
							
						
					
					
						commit
						dd1a355691
					
				@ -21,7 +21,7 @@ from pywidevine import __version__
 | 
				
			|||||||
from pywidevine.cdm import Cdm
 | 
					from pywidevine.cdm import Cdm
 | 
				
			||||||
from pywidevine.device import Device
 | 
					from pywidevine.device import Device
 | 
				
			||||||
from pywidevine.exceptions import TooManySessions, InvalidSession, SignatureMismatch, InvalidInitData, \
 | 
					from pywidevine.exceptions import TooManySessions, InvalidSession, SignatureMismatch, InvalidInitData, \
 | 
				
			||||||
    InvalidLicenseType
 | 
					    InvalidLicenseType, InvalidLicenseMessage, InvalidContext
 | 
				
			||||||
 | 
					
 | 
				
			||||||
routes = web.RouteTableDef()
 | 
					routes = web.RouteTableDef()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -280,23 +280,52 @@ async def parse_license(request: web.Request) -> web.Response:
 | 
				
			|||||||
            "status": 400,
 | 
					            "status": 400,
 | 
				
			||||||
            "message": f"Invalid Session ID '{session_id.hex()}', it may have expired."
 | 
					            "message": f"Invalid Session ID '{session_id.hex()}', it may have expired."
 | 
				
			||||||
        }, status=400)
 | 
					        }, status=400)
 | 
				
			||||||
 | 
					    except InvalidLicenseMessage as e:
 | 
				
			||||||
 | 
					        return web.json_response({
 | 
				
			||||||
 | 
					            "status": 400,
 | 
				
			||||||
 | 
					            "message": f"Invalid License Message, {e}"
 | 
				
			||||||
 | 
					        }, status=400)
 | 
				
			||||||
 | 
					    except InvalidContext as e:
 | 
				
			||||||
 | 
					        return web.json_response({
 | 
				
			||||||
 | 
					            "status": 400,
 | 
				
			||||||
 | 
					            "message": f"Invalid Context, {e}"
 | 
				
			||||||
 | 
					        }, status=400)
 | 
				
			||||||
 | 
					    except SignatureMismatch:
 | 
				
			||||||
 | 
					        return web.json_response({
 | 
				
			||||||
 | 
					            "status": 400,
 | 
				
			||||||
 | 
					            "message": "Signature Validation failed on the License Message, rejecting."
 | 
				
			||||||
 | 
					        }, status=400)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # prepare the keys
 | 
					    # get keys
 | 
				
			||||||
    license_keys = [
 | 
					    try:
 | 
				
			||||||
 | 
					        keys = cdm.get_keys(session_id, key_type)
 | 
				
			||||||
 | 
					    except InvalidSession:
 | 
				
			||||||
 | 
					        return web.json_response({
 | 
				
			||||||
 | 
					            "status": 400,
 | 
				
			||||||
 | 
					            "message": f"Invalid Session ID '{session_id.hex()}', it may have expired."
 | 
				
			||||||
 | 
					        }, status=400)
 | 
				
			||||||
 | 
					    except ValueError as e:
 | 
				
			||||||
 | 
					        return web.json_response({
 | 
				
			||||||
 | 
					            "status": 400,
 | 
				
			||||||
 | 
					            "message": f"The Key Type value '{key_type}' is invalid, {e}"
 | 
				
			||||||
 | 
					        }, status=400)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # get the keys in json form
 | 
				
			||||||
 | 
					    keys_json = [
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            "key_id": key.kid.hex,
 | 
					            "key_id": key.kid.hex,
 | 
				
			||||||
            "key": key.key.hex(),
 | 
					            "key": key.key.hex(),
 | 
				
			||||||
            "type": key.type,
 | 
					            "type": key.type,
 | 
				
			||||||
            "permissions": key.permissions,
 | 
					            "permissions": key.permissions,
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        for key in cdm.get_keys(session_id, key_type)
 | 
					        for key in keys
 | 
				
			||||||
    ]
 | 
					    ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return web.json_response({
 | 
					    return web.json_response({
 | 
				
			||||||
        "status": 200,
 | 
					        "status": 200,
 | 
				
			||||||
        "message": "Success",
 | 
					        "message": "Success",
 | 
				
			||||||
        "data": {
 | 
					        "data": {
 | 
				
			||||||
            "keys": license_keys
 | 
					            "keys": keys_json
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user