2022-02-15 19:11:53 +09:00
|
|
|
class Malformed(Exception):
|
|
|
|
pass
|
|
|
|
|
2022-02-26 08:44:54 +09:00
|
|
|
def get(t, pairs, key, default=None):
|
|
|
|
value = pairs.get(key, default)
|
|
|
|
if isinstance(value, t):
|
|
|
|
return value
|
|
|
|
else:
|
|
|
|
raise Malformed(f'malformed {key}')
|
|
|
|
|
2022-02-16 18:55:30 +09:00
|
|
|
def parse_websocket_data(receipt):
|
2022-02-13 13:00:10 +09:00
|
|
|
if not isinstance(receipt, dict):
|
2022-02-15 19:11:53 +09:00
|
|
|
raise Malformed('not a json object')
|
2022-02-13 13:00:10 +09:00
|
|
|
|
2022-02-26 08:44:54 +09:00
|
|
|
match receipt.get('type'):
|
|
|
|
case 'message':
|
|
|
|
form = get(dict, receipt, 'form')
|
|
|
|
nonce = get(str, form, 'nonce')
|
|
|
|
comment = get(str, form, 'comment')
|
|
|
|
digest = get(str, form, 'captcha-digest', '')
|
|
|
|
answer = get(str, form, 'captcha-answer', '')
|
|
|
|
return nonce, comment, digest, answer
|
2022-02-13 13:00:10 +09:00
|
|
|
|
2022-02-26 08:44:54 +09:00
|
|
|
case 'appearance':
|
|
|
|
raise NotImplemented
|
2022-02-13 13:00:10 +09:00
|
|
|
|
2022-02-26 08:44:54 +09:00
|
|
|
case 'captcha':
|
|
|
|
return None
|
2022-02-20 13:23:32 +09:00
|
|
|
|
2022-02-26 08:44:54 +09:00
|
|
|
case _:
|
|
|
|
raise Malformed('malformed type')
|