pointapi/models/base.py
2021-04-01 11:30:58 +08:00

50 lines
1.1 KiB
Python

import hashlib
from pydantic import Field
from pydantic import BaseModel, validator
from settings import settings
from ipaddress import IPv4Address
FIELD_MAP = {
'ip': 'a01',
'os': 'a08',
}
def to_alias(k: str) -> str:
return FIELD_MAP.get(k) or k
class IP4(str):
@classmethod
def __get_validators__(cls):
yield cls.validate
@classmethod
def validate(cls, v):
IPv4Address(v)
return str(v)
class Base(BaseModel):
# sign = md5(distinct_id+account_id+act+ts+salt)
distinct_id: str = Field(..., title='访客 ID')
game: str
account_id: str
act: str
event_name: str = None
# preset: dict
properties: dict
ts: int
sign: str
@validator('sign')
def sign_validator(cls, v: str, values: dict):
s = f'{values.get("distinct_id")}{values.get("account_id", "")}{values.get("act", "")}{values.get("ts", "")}{settings.SALT}'
if hashlib.md5(s.encode()).hexdigest() == v:
return v
raise ValueError(f'打击违法犯罪行为{hashlib.md5(s.encode()).hexdigest()}')