pointapi/common/verification.py
2021-04-13 19:47:54 +08:00

58 lines
1.4 KiB
Python

import hashlib
from settings import settings
__all__ = 'restore_field', 'sort_kv', 'check_sign', 'check_preset'
def restore_field(data: dict) -> dict:
res = dict()
for k, v in data.items():
if isinstance(v, dict):
res[settings.FIELD_MAP.get(k) or k] = restore_field(v)
else:
res[settings.FIELD_MAP.get(k) or k] = v
return res
def check_preset(data: dict):
preset_name = set(settings.FIELD_MAP.values())
illegality_name = dict()
for k, v in data.items():
if k.startswith('#') and k not in preset_name:
illegality_name[k] = v
for k, v in illegality_name.items():
del data[k]
data[k[1:]] = v
return data
# def restore_field(data: dict) -> dict:
# """
# 不在预置字段 去掉前置#
# :param data:
# :return:
# """
# res = dict()
# for k, v in data.items():
# map_name = settings.FIELD_MAP.get(k)
# if map_name:
# res[map_name] = v
# elif k.startswith('#'):
# res[k[1:]] = v
# else:
# res[k] = v
# return res
def sort_kv(*args: dict):
return '&'.join(map(lambda item: '&'.join(map(lambda x: f'{x[0]}={x[1]}', sorted(item.items()))), args))
def check_sign(sign: str, salt: str, *args: dict):
s = sort_kv(*args) + salt
if hashlib.md5(s.encode()).hexdigest() != sign:
return False
return True