ForcePilot/backend/package/yuxi/channel/extensions/tencent_im/usersig.py

37 lines
886 B
Python
Raw Normal View History

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}"