import base64 import hashlib import hmac import json import time import zlib def gen_user_sig( sdk_appid: int, secret_key: str, userid: str, expire: int = 180 * 86400, ) -> str: curr_time = int(time.time()) sig_doc = { "TLS.ver": "2.0", "TLS.identifier": str(userid), "TLS.sdkappid": sdk_appid, "TLS.expire": expire, "TLS.time": curr_time, } sig_bytes = json.dumps(sig_doc, separators=(",", ":")).encode("utf-8") compressed = zlib.compress(sig_bytes) base64_userbuf = base64.urlsafe_b64encode(compressed).rstrip(b"=").decode("utf-8") signature = hmac.new( secret_key.encode("utf-8"), base64_userbuf.encode("utf-8"), hashlib.sha256, ).digest() base64_sig = base64.urlsafe_b64encode(signature).rstrip(b"=").decode("utf-8") return f"{base64_sig}{base64_userbuf}"