代码上传
This commit is contained in:
60
license_verifier.py
Normal file
60
license_verifier.py
Normal file
@@ -0,0 +1,60 @@
|
||||
import platform
|
||||
import uuid
|
||||
import hashlib
|
||||
import requests
|
||||
|
||||
|
||||
# 常量配置
|
||||
ACTIVATE_URL = "http://activate.hzsystems.cn/api/activate_machine"
|
||||
PACKAGE_NAME = "hertz_studio_django_captcha"
|
||||
|
||||
|
||||
def get_machine_id() -> str:
|
||||
"""生成机器码。
|
||||
|
||||
根据当前系统信息(平台、架构、MAC地址)生成唯一机器码,
|
||||
使用 SHA256 取前16位并转大写,前缀为 HERTZ_STUDIO_。
|
||||
"""
|
||||
system_info = f"{platform.platform()}-{platform.machine()}-{uuid.getnode()}"
|
||||
return 'HERTZ_STUDIO_' + hashlib.sha256(system_info.encode()).hexdigest()[:16].upper()
|
||||
|
||||
|
||||
def request_verify_machine_code(package_name: str, machine_code: str):
|
||||
"""请求后端校验机器码。
|
||||
|
||||
向授权服务器提交包名和机器码,返回 JSON 响应;
|
||||
如果网络异常,返回 None。
|
||||
"""
|
||||
try:
|
||||
resp = requests.post(
|
||||
ACTIVATE_URL,
|
||||
json={"package_name": package_name, "machine_code": machine_code},
|
||||
timeout=10,
|
||||
)
|
||||
return resp.json()
|
||||
except requests.RequestException as e:
|
||||
print(f"机器码验证请求失败: {e}")
|
||||
return None
|
||||
|
||||
|
||||
def verify_machine_license() -> None:
|
||||
"""运行时验证授权。
|
||||
|
||||
在 Django 应用启动时执行授权验证:打印提示、生成机器码并请求校验;
|
||||
校验失败则抛出 RuntimeError 阻止应用启动。
|
||||
"""
|
||||
machine_id = get_machine_id()
|
||||
print(f"您的机器码: {machine_id}, 当前包名: {PACKAGE_NAME}")
|
||||
print("请将此机器码发送给作者进行注册。")
|
||||
|
||||
resp = request_verify_machine_code(PACKAGE_NAME, machine_id)
|
||||
if resp and resp.get("success") is True:
|
||||
print("=" * 60)
|
||||
print("机器码验证成功!")
|
||||
print("=" * 60)
|
||||
return
|
||||
|
||||
print("=" * 60)
|
||||
print("机器码验证失败!请联系作者获取运行权限。")
|
||||
print("=" * 60)
|
||||
raise RuntimeError("Hertz Xxxxx license verification failed")
|
||||
Reference in New Issue
Block a user