Add files via upload

This commit is contained in:
宗宸·谢尔比 2025-02-01 02:43:57 +08:00 committed by GitHub
parent 20cddc05f0
commit 3d4f3c1e6c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -398,21 +398,23 @@ class TranslationThread(QThread):
except Exception as e: except Exception as e:
self.translation_complete.emit(f"翻译错误: {str(e)}") self.translation_complete.emit(f"翻译错误: {str(e)}")
class SourceCodeAuditThread(QThread): class SourceCodeAuditThread(QThread):
audit_complete = pyqtSignal(str) audit_complete = pyqtSignal(str)
progress_updated = pyqtSignal(int) progress_updated = pyqtSignal(int)
def __init__(self, files, parent=None): # 修改构造函数 def __init__(self, files, parent=None):
super().__init__(parent) # 调用父类构造函数 super().__init__(parent)
self.files = files # 保存文件列表 self.files = files
def run(self): def run(self):
audit_results = []
total_files = len(self.files) total_files = len(self.files)
total_steps = total_files + 2 # 总步骤 = 文件数 + 2
audit_results = []
# ================= 阶段1处理所有文件 =================
for i, file_path in enumerate(self.files): for i, file_path in enumerate(self.files):
try: try:
# 文件读取异常处理 # 文件读取
try: try:
with open(file_path, 'r', encoding='utf-8', errors='ignore') as f: with open(file_path, 'r', encoding='utf-8', errors='ignore') as f:
content = f.read() content = f.read()
@ -420,10 +422,12 @@ class SourceCodeAuditThread(QThread):
audit_results.append(f"【文件读取失败】{os.path.basename(file_path)}\n错误原因:{str(e)}") audit_results.append(f"【文件读取失败】{os.path.basename(file_path)}\n错误原因:{str(e)}")
continue continue
# 进度更新(不受后续处理影响) # 更新进度每个文件占1步
self.progress_updated.emit(int((i+1)/total_files*100)) current_step = i + 1
progress = int( (current_step / total_steps) * 100 )
self.progress_updated.emit(progress)
# API请求异常处理 # API请求
try: try:
headers = { headers = {
"Authorization": f"Bearer {DEEPSEEK_API_KEY}", "Authorization": f"Bearer {DEEPSEEK_API_KEY}",
@ -439,10 +443,10 @@ class SourceCodeAuditThread(QThread):
- 位置行号: - 位置行号:
- 修复建议: - 修复建议:
4.如果不存在漏洞则不输出 4.如果不存在漏洞则不输出
5.忽略API请求失败 5.忽略API请求失败,不输出
文件内容 文件内容
{content[:3000]}""" {content[:3000]}""" # 限制每个文件内容长度
payload = { payload = {
"model": "deepseek-chat", "model": "deepseek-chat",
"messages": [{"role": "user", "content": prompt}], "messages": [{"role": "user", "content": prompt}],
@ -477,13 +481,16 @@ class SourceCodeAuditThread(QThread):
f"错误详情:{str(e)}" f"错误详情:{str(e)}"
) )
# 最终结果处理(保护汇总阶段) # ================= 阶段2结果汇总 =================
try: try:
# 更新进度到 N+1 步(汇总开始)
self.progress_updated.emit( int( (total_files + 1) / total_steps * 100 ) )
# 生成汇总结果
if len(audit_results) == 0: if len(audit_results) == 0:
final_result = "⚠️ 所有文件处理均失败请检查网络连接和API密钥" final_result = "⚠️ 所有文件处理均失败请检查网络连接和API密钥"
else: else:
audit_results_str = '\n'.join(audit_results) audit_results_str = '\n'.join(audit_results)
final_prompt = f"""请综合以下审计结果,按危险等级分类整理: final_prompt = f"""请综合以下审计结果,按危险等级分类整理:
{audit_results_str} {audit_results_str}
@ -491,8 +498,8 @@ class SourceCodeAuditThread(QThread):
1. 高危中危低危三级分类 1. 高危中危低危三级分类
2. 每个漏洞注明文件名和行号 2. 每个漏洞注明文件名和行号
3. 同类漏洞合并显示 3. 同类漏洞合并显示
4. 使用精简的Markdown格式""" 4. 不使用markdown格式直接输出文本"""
payload = { payload = {
"model": "deepseek-chat", "model": "deepseek-chat",
"messages": [{"role": "user", "content": final_prompt}], "messages": [{"role": "user", "content": final_prompt}],
@ -516,7 +523,10 @@ class SourceCodeAuditThread(QThread):
+ f"\n\n汇总错误:{str(e)}" + f"\n\n汇总错误:{str(e)}"
) )
self.audit_complete.emit(final_result) # ================= 阶段3最终提交 =================
# 强制进度到100%后才发送结果
self.progress_updated.emit(100) # 最后一步
self.audit_complete.emit(final_result) # 此时必定100%
class CyberSecurityApp(QMainWindow): class CyberSecurityApp(QMainWindow):
def __init__(self): def __init__(self):
@ -1098,7 +1108,7 @@ class CyberSecurityApp(QMainWindow):
return return
self.btn_audit.setEnabled(False) self.btn_audit.setEnabled(False)
self.audit_result.setPlainText("开始审计到达100%后请等待最后一个文件完成)...") self.audit_result.setPlainText("开始审计...")
self.audit_thread = SourceCodeAuditThread(self.audit_files, self) # 添加 self 作为 parent self.audit_thread = SourceCodeAuditThread(self.audit_files, self) # 添加 self 作为 parent
self.audit_thread.audit_complete.connect(self.show_audit_result) self.audit_thread.audit_complete.connect(self.show_audit_result)
@ -1138,4 +1148,4 @@ if __name__ == '__main__':
window = CyberSecurityApp() window = CyberSecurityApp()
window.show() window.show()
sys.exit(app.exec_()) sys.exit(app.exec_())