Add lease-bound Remote key IPC and SDK validation
This commit is contained in:
1 parent
9ac33560dc
commit
792cac5d0b
12 files changed
+807
-9
No files matched your search
@@ -102,6 +102,45 @@ def valid_remote_presentation(request):
|
||||
return False
|
||||
|
||||
|
||||
def valid_remote_key(key):
|
||||
"""Validate one logical key identity and transition, without desktop access."""
|
||||
try:
|
||||
_fields(key, ("name", "pressed"))
|
||||
name = key["name"]
|
||||
if not isinstance(name, str) or type(key["pressed"]) is not bool:
|
||||
return False
|
||||
if len(name) == 1 and name in "abcdefghijklmnopqrstuvwxyz0123456789":
|
||||
return True
|
||||
if (2 <= len(name) <= 3 and name[0] == "F" and name[1:].isascii()
|
||||
and name[1:].isdecimal()):
|
||||
number = int(name[1:])
|
||||
return 1 <= number <= 24 and str(number) == name[1:]
|
||||
if len(name) == 4 and name[:3] == "KP_" and name[3] in "0123456789":
|
||||
return True
|
||||
return name in (
|
||||
"BackSpace", "Tab", "Return", "Escape", "space", "Pause", "Print", "Menu",
|
||||
"Caps_Lock", "Num_Lock", "Scroll_Lock", "Shift_L", "Shift_R", "Control_L", "Control_R",
|
||||
"Alt_L", "Alt_R", "Super_L", "Super_R", "Page_Up", "Page_Down", "End", "Home",
|
||||
"Left", "Up", "Right", "Down", "Insert", "Delete",
|
||||
"KP_Begin", "KP_Enter", "KP_Page_Up", "KP_Page_Down", "KP_End", "KP_Home",
|
||||
"KP_Left", "KP_Up", "KP_Right", "KP_Down", "KP_Insert", "KP_Delete",
|
||||
"KP_Multiply", "KP_Add", "KP_Separator", "KP_Subtract", "KP_Decimal", "KP_Divide",
|
||||
"semicolon", "equal", "comma", "minus", "period", "slash", "grave", "bracketleft",
|
||||
"backslash", "bracketright", "apostrophe")
|
||||
except (ProtocolError, TypeError, ValueError):
|
||||
return False
|
||||
|
||||
|
||||
def valid_remote_key_request(request):
|
||||
"""Validate remote.key parameters; consent and delivery checks belong to core."""
|
||||
try:
|
||||
_fields(request, ("lease", "epoch", "sequence", "key"))
|
||||
return (_token(request["lease"]) and _positive(request["epoch"])
|
||||
and _positive(request["sequence"]) and valid_remote_key(request["key"]))
|
||||
except (ProtocolError, TypeError, ValueError, UnicodeError):
|
||||
return False
|
||||
|
||||
|
||||
class SessionError(Exception):
|
||||
def __init__(self, code, message):
|
||||
super().__init__("Tentacle session error " + str(code))
|
||||
|
||||
Reference in new issue
Block a user