新增简易的8080面板😊

This commit is contained in:
Falck
2026-04-17 23:15:15 +08:00
parent c38d2f66d1
commit 9d19d09821
465 changed files with 9235 additions and 35285 deletions

199
tools/test_signature.py Normal file
View File

@@ -0,0 +1,199 @@
#!/usr/bin/env python3
"""
签名验证测试脚本
测试签名验证功能是否正常工作
"""
import sys
import json
import base64
import hashlib
from pathlib import Path
# 添加项目路径
sys.path.insert(0, str(Path(__file__).parent.parent))
sys.path.insert(0, str(Path(__file__).parent.parent / "store/@{FutureOSS}/signature-verifier"))
from cryptography.hazmat.primitives import hashes, serialization
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.backends import default_backend
from cryptography.exceptions import InvalidSignature
# 导入签名验证插件
from main import SignatureVerifier, SignatureSigner
def test_verify_official_plugins():
"""测试验证所有已签名的官方插件"""
print("="*60)
print("测试 1: 验证所有官方插件签名")
print("="*60)
store_dir = Path(__file__).parent.parent / "store"
verifier = SignatureVerifier(key_dir="./data/signature-verifier/keys")
authors = ["FutureOSS", "Falck"]
total = 0
passed = 0
failed = 0
for author in authors:
author_dir = store_dir / f"@{{{author}}}"
if not author_dir.exists():
continue
print(f"\n--- @{author} ---")
for plugin_dir in sorted(author_dir.iterdir()):
if plugin_dir.is_dir() and (plugin_dir / "manifest.json").exists():
total += 1
valid, msg = verifier.verify_plugin(plugin_dir, author)
status = "✅ 通过" if valid else "❌ 失败"
print(f" {status}: {plugin_dir.name} - {msg}")
if valid:
passed += 1
else:
failed += 1
print(f"\n{'='*60}")
print(f"结果: {passed}/{total} 通过, {failed} 失败")
print(f"{'='*60}")
return failed == 0
def test_tamper_detection():
"""测试篡改检测"""
print("\n" + "="*60)
print("测试 2: 篡改检测")
print("="*60)
store_dir = Path(__file__).parent.parent / "store"
verifier = SignatureVerifier(key_dir="./data/signature-verifier/keys")
# 选择一个测试插件
test_plugin = store_dir / "@{FutureOSS}" / "dashboard"
if not test_plugin.exists():
print("跳过: dashboard 插件不存在")
return True
# 验证原始签名
valid_before, msg_before = verifier.verify_plugin(test_plugin, "FutureOSS")
print(f"\n篡改前: {'✅ 有效' if valid_before else '❌ 无效'} - {msg_before}")
if not valid_before:
print("警告: 原始签名已无效,跳过篡改测试")
return False
# 创建一个临时篡改文件
tamper_file = test_plugin / "__tamper_test__.tmp"
tamper_file.write_text("tampered content")
# 验证篡改后的签名
valid_after, msg_after = verifier.verify_plugin(test_plugin, "FutureOSS")
print(f"篡改后: {'✅ 有效' if valid_after else '❌ 无效'} - {msg_after}")
# 清理
tamper_file.unlink()
# 再次验证应该恢复有效
valid_clean, msg_clean = verifier.verify_plugin(test_plugin, "FutureOSS")
print(f"清理后: {'✅ 有效' if valid_clean else '❌ 无效'} - {msg_clean}")
# 预期:篡改后无效,清理后有效
success = not valid_after and valid_clean
print(f"\n{'='*60}")
print(f"篡改检测: {'✅ 成功' if success else '❌ 失败'}")
print(f"{'='*60}")
return success
def test_missing_signature():
"""测试缺失签名文件"""
print("\n" + "="*60)
print("测试 3: 缺失签名检测")
print("="*60)
store_dir = Path(__file__).parent.parent / "store"
verifier = SignatureVerifier(key_dir="./data/signature-verifier/keys")
# 选择一个插件并临时移除签名
test_plugin = store_dir / "@{FutureOSS}" / "json-codec"
if not test_plugin.exists():
print("跳过: json-codec 插件不存在")
return True
sig_file = test_plugin / "SIGNATURE"
if not sig_file.exists():
print("跳过: json-codec 没有签名文件")
return True
# 备份签名
backup = sig_file.read_text()
sig_file.unlink()
# 验证
valid, msg = verifier.verify_plugin(test_plugin, "FutureOSS")
print(f"无签名: {'✅ 有效' if valid else '❌ 无效'} - {msg}")
# 恢复
sig_file.write_text(backup)
valid_restored, msg_restored = verifier.verify_plugin(test_plugin, "FutureOSS")
print(f"恢复后: {'✅ 有效' if valid_restored else '❌ 无效'} - {msg_restored}")
success = not valid and valid_restored
print(f"\n{'='*60}")
print(f"缺失签名检测: {'✅ 成功' if success else '❌ 失败'}")
print(f"{'='*60}")
return success
def test_official_check():
"""测试 is_official_plugin 方法"""
print("\n" + "="*60)
print("测试 4: 官方插件识别")
print("="*60)
store_dir = Path(__file__).parent.parent / "store"
verifier = SignatureVerifier(key_dir="./data/signature-verifier/keys")
# 测试官方插件
official_plugin = store_dir / "@{FutureOSS}" / "dashboard"
is_official = verifier.is_official_plugin(official_plugin)
print(f"dashboard 是官方插件: {'✅ 是' if is_official else '❌ 否'}")
success = is_official
print(f"\n{'='*60}")
print(f"官方插件识别: {'✅ 成功' if success else '❌ 失败'}")
print(f"{'='*60}")
return success
def main():
print("FutureOSS 签名验证系统测试")
print("="*60)
results = []
results.append(("官方插件验证", test_verify_official_plugins()))
results.append(("篡改检测", test_tamper_detection()))
results.append(("缺失签名检测", test_missing_signature()))
results.append(("官方插件识别", test_official_check()))
print("\n" + "="*60)
print("测试总结")
print("="*60)
for name, passed in results:
status = "✅ 通过" if passed else "❌ 失败"
print(f" {status}: {name}")
all_passed = all(r[1] for r in results)
print(f"\n{'='*60}")
print(f"总体结果: {'✅ 全部通过' if all_passed else '❌ 有失败'}")
print(f"{'='*60}")
return 0 if all_passed else 1
if __name__ == "__main__":
sys.exit(main())