diff --git a/common/verification.py b/common/verification.py index 2f68865..a055c8e 100644 --- a/common/verification.py +++ b/common/verification.py @@ -2,27 +2,47 @@ import hashlib from settings import settings -__all__ = 'restore_field', 'sort_kv', 'check_sign' +__all__ = 'restore_field', 'sort_kv', 'check_sign', 'check_preset' 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 + 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)) diff --git a/handler_data/ta_handler.py b/handler_data/ta_handler.py index d930a07..a69ff43 100644 --- a/handler_data/ta_handler.py +++ b/handler_data/ta_handler.py @@ -50,6 +50,7 @@ async def to_date(request, rdb, data): :return: """ data['#time'] = arrow.get(data['#time'], tzinfo='Asia/Shanghai').strftime('%Y-%m-%d %H:%M:%S.%f')[:-3] + data['#event_time'] = data['#time'] @TaHandler @@ -62,9 +63,9 @@ async def device_label(request, rdb, data): :return: """ # 条件 - if data.get('type') == 'user_add': - v = await rdb.execute('sadd', f'{data.game}.devices', data.properties.get('#device_id', '')) + if data.get('#type') == 'user' and data.get('#event_name') == 'add': + v = await rdb.execute('sadd', f'{data["#app_id"]}.devices', data.get('#device_id', '')) if v: - data.properties['is_new_device'] = 1 + data['properties']['is_new_device'] = 1 else: - data.properties['is_new_device'] = 0 + data['properties']['is_new_device'] = 0 diff --git a/routers/point.py b/routers/point.py index c2b97e6..7e9febf 100644 --- a/routers/point.py +++ b/routers/point.py @@ -1,4 +1,5 @@ import asyncio +import traceback from fastapi import APIRouter, Request @@ -26,6 +27,7 @@ async def point(request: Request, items: DataModel): # continue return {"code": -1, 'msg': '签名错误'} single_data = dict(**public_data, **data, properties=properties) + check_preset(single_data) await asyncio.gather( *map(lambda o: asyncio.create_task(o(request, rdb, single_data)), data_factory.handler_link)) msg = data_factory.format_data(single_data) @@ -33,4 +35,5 @@ async def point(request: Request, items: DataModel): return {"code": 0, 'msg': 'ok'} except Exception as e: - return {"code": -1, 'msg': '数据异常'} + msg = traceback.format_exc() + return {"code": -1, 'msg': msg} diff --git a/settings.py b/settings.py index e7b6ad8..37a04a8 100644 --- a/settings.py +++ b/settings.py @@ -45,7 +45,12 @@ class Config: "a35": "#mp_platform", "a36": "#app_crashed_reason", "a37": "#zone_offset", + + + "b01": "#app_id", + "b02": "#type", + "b03": "#time", "b06": "#event_time" }