diff --git a/app.py b/app.py index 06c9cab..b2c2efb 100644 --- a/app.py +++ b/app.py @@ -1648,17 +1648,36 @@ def delete_ca(ca_id): if request.method == 'POST': # 删除文件 try: + # 删除CA证书和私钥文件 if os.path.exists(ca['cert_path']): os.remove(ca['cert_path']) if os.path.exists(ca['key_path']): os.remove(ca['key_path']) - # 删除CA目录 + + # 删除CA目录及其所有内容 ca_dir = os.path.dirname(ca['cert_path']) if os.path.exists(ca_dir): - os.rmdir(ca_dir) + # 删除目录中的所有文件和子目录 + for filename in os.listdir(ca_dir): + file_path = os.path.join(ca_dir, filename) + try: + if os.path.isfile(file_path) or os.path.islink(file_path): + os.unlink(file_path) + elif os.path.isdir(file_path): + shutil.rmtree(file_path) + except Exception as e: + print(f'删除文件/目录失败 {file_path}. 原因: {e}') + flash(f'删除文件/目录失败: {str(e)}', 'warning') + + # 现在删除空目录 + try: + os.rmdir(ca_dir) + except OSError as e: + print(f"删除目录失败: {e}") + flash(f'删除目录失败: {str(e)}', 'warning') except OSError as e: print(f"文件删除错误: {e}") - flash('删除文件时出错', 'danger') + flash(f'删除文件时出错: {str(e)}', 'danger') return redirect(url_for('ca_detail', ca_id=ca_id)) # 删除数据库记录 @@ -1666,12 +1685,16 @@ def delete_ca(ca_id): if conn: try: cursor = conn.cursor() + # 先删除CRL记录 + cursor.execute("DELETE FROM certificate_revocation_list WHERE ca_id = %s", (ca_id,)) + # 再删除CA记录 cursor.execute("DELETE FROM certificate_authorities WHERE id = %s", (ca_id,)) conn.commit() flash('CA删除成功', 'success') return redirect(url_for('ca_list')) except Error as e: print(f"Database error: {e}") + conn.rollback() flash('删除CA记录失败', 'danger') return redirect(url_for('ca_detail', ca_id=ca_id)) finally: