From 25add10b357f77f6403512af6684d6b48cda726a Mon Sep 17 00:00:00 2001 From: wzj <244142824@qq.com> Date: Sun, 15 Jun 2025 07:43:46 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=88=A0=E9=99=A4CA=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.py | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) 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: