Initial commit
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from pathlib import Path
|
||||
from tkinter import messagebox, filedialog as fd
|
||||
|
||||
|
||||
class IntegrityTools:
|
||||
"""Операции сохранения и проверки хэша БД."""
|
||||
|
||||
def __init__(self, integrity_checker, audit_logger, db_path: str | None):
|
||||
self.integrity_checker = integrity_checker
|
||||
self.audit_logger = audit_logger
|
||||
self.db_path = Path(db_path) if db_path else None
|
||||
|
||||
def set_db_path(self, db_path: str | None) -> None:
|
||||
self.db_path = Path(db_path) if db_path else None
|
||||
|
||||
def _hash_path(self) -> Path:
|
||||
return self.db_path.with_suffix(self.db_path.suffix + ".hash")
|
||||
|
||||
def save_db_hash(self):
|
||||
if not self.db_path:
|
||||
messagebox.showwarning("Сохранить хэш", "База данных не выбрана.")
|
||||
return
|
||||
if not self.db_path.exists():
|
||||
messagebox.showwarning(
|
||||
"Сохранить хэш", f"Файл БД не найден:\n{self.db_path}")
|
||||
return
|
||||
suggested = self.db_path.with_suffix(self.db_path.suffix + ".hash")
|
||||
path = fd.asksaveasfilename(
|
||||
title="Сохранить контрольную сумму БД",
|
||||
defaultextension=".hash",
|
||||
filetypes=[("Hash file", "*.hash"), ("All files", "*.*")],
|
||||
initialdir=str(suggested.parent),
|
||||
initialfile=suggested.name,
|
||||
)
|
||||
if not path:
|
||||
return
|
||||
try:
|
||||
self.integrity_checker.save_hash(str(self.db_path), str(path))
|
||||
except Exception as e:
|
||||
messagebox.showerror("Сохранить хэш", f"Ошибка сохранения:\n{e}")
|
||||
return
|
||||
self.audit_logger.log(
|
||||
f"Сохранена контрольная сумма БД → {Path(path).name}")
|
||||
messagebox.showinfo("Сохранить хэш", f"Хэш сохранён в {path}")
|
||||
|
||||
def verify_db_hash(self):
|
||||
if not self.db_path:
|
||||
messagebox.showwarning(
|
||||
"Проверка целостности", "База данных не выбрана.")
|
||||
return
|
||||
if not self.db_path.exists():
|
||||
messagebox.showwarning(
|
||||
"Проверка целостности", f"Файл БД не найден:\n{self.db_path}")
|
||||
return
|
||||
suggested = self.db_path.with_suffix(self.db_path.suffix + ".hash")
|
||||
path = fd.askopenfilename(
|
||||
title="Выбрать файл контрольной суммы БД",
|
||||
filetypes=[("Hash file", "*.hash"), ("All files", "*.*")],
|
||||
initialdir=str(suggested.parent),
|
||||
initialfile=suggested.name,
|
||||
)
|
||||
if not path:
|
||||
return
|
||||
ok = self.integrity_checker.verify_hash(str(self.db_path), str(path))
|
||||
self.audit_logger.log("Проверка целостности БД: " +
|
||||
("OK" if ok else "НЕСОВПАДЕНИЕ"))
|
||||
if ok:
|
||||
messagebox.showinfo("Проверка целостности", "БД в целостности.")
|
||||
else:
|
||||
messagebox.showerror("Проверка целостности",
|
||||
"БД была изменена извне.")
|
||||
Reference in New Issue
Block a user