三处收口,未授权插件不加载、不暴露端点、不可管理:
- core/licensing:授权管理器单例 + 构建期烘焙决策(chongming/_build_flags.py,
随代码编译、部署侧不可改);开发/测试默认放行,CHONGMING_LICENSE_MODE 可临时开
- lifespan_setup:_scan_plugins(盘扫)与 _discover_plugins(授权收口)分离,
未授权插件连同 TOML 路由/MQTT 主题/副本数一起从启动流程消失(契约校验因此
不会硬失败),启动打印授权横幅
- route_registry.set_denied_types:未授权类型经 Zenoh 推来的描述符一律忽略
(否则把 load_mode 改成 external 即可绕过)
- worker_admin:扩缩容/重启/读改配置对未授权插件一律 403,实例盘点附 licensed 标注
- routes/licensing:/license/{info,reload,file}(仅超管),导入先验签后原子落盘,
坏文件不覆盖现有授权;导入不即时加载插件,如实告知需重启
打包可选:不加 --license 出"非授权版"(不校验、插件照常加载);授权版强制校验
且公钥随代码内置(现场换 config.toml 公钥自签也无效)。未烘焙的旧打包产物沿用
"打包即强制"的旧语义;烘焙标记只在产物内生效,不影响源码运行。
补依赖 greenlet(chongming-auth→database 的 sqlalchemy asyncio import 期即要求)
与 python-multipart(上传端点注册路由即要求);新增 test/test_license_gate.py
(52 项:门禁/契约存活/描述符拦截/管理接口/上传安全/烘焙三态,自造夹具直接运行)。
76 lines
826 B
Plaintext
76 lines
826 B
Plaintext
/target
|
|
|
|
# Byte-compiled / optimized / DLL files
|
|
__pycache__/
|
|
.pytest_cache/
|
|
*.py[cod]
|
|
|
|
# C extensions
|
|
*.so
|
|
|
|
# Distribution / packaging
|
|
.Python
|
|
.venv/
|
|
env/
|
|
bin/
|
|
build/
|
|
develop-eggs/
|
|
dist/
|
|
eggs/
|
|
lib/
|
|
lib64/
|
|
parts/
|
|
sdist/
|
|
var/
|
|
include/
|
|
man/
|
|
venv/
|
|
*.egg-info/
|
|
.installed.cfg
|
|
*.egg
|
|
|
|
# 授权版标记:打包脚本构建期生成(可编辑安装时落在 src/chongming/ 下),非源码
|
|
src/chongming/_build_flags.py
|
|
|
|
# Installer logs
|
|
pip-log.txt
|
|
pip-delete-this-directory.txt
|
|
pip-selfcheck.json
|
|
|
|
# Unit test / coverage reports
|
|
htmlcov/
|
|
.tox/
|
|
.coverage
|
|
.cache
|
|
nosetests.xml
|
|
coverage.xml
|
|
|
|
# Translations
|
|
*.mo
|
|
|
|
# Mr Developer
|
|
.mr.developer.cfg
|
|
.project
|
|
.pydevproject
|
|
|
|
# Rope
|
|
.ropeproject
|
|
|
|
# Django stuff:
|
|
*.log
|
|
*.pot
|
|
|
|
.DS_Store
|
|
|
|
# Sphinx documentation
|
|
docs/_build/
|
|
|
|
# PyCharm
|
|
.idea/
|
|
|
|
# VSCode
|
|
.vscode/
|
|
|
|
# Pyenv
|
|
.python-version
|