Add ability to change the key

This commit is contained in:
Miguel Jacq 2025-10-31 16:46:42 +11:00
parent 0caf0efeef
commit f778afd268
Signed by: mig5
GPG key ID: 59B3F0C24135C6A9
4 changed files with 50 additions and 4 deletions

View file

@ -13,17 +13,20 @@ from PySide6.QtWidgets import (
QFileDialog,
QDialogButtonBox,
QSizePolicy,
QMessageBox,
)
from .db import DBConfig
from .db import DBConfig, DBManager
from .settings import save_db_config
from .key_prompt import KeyPrompt
class SettingsDialog(QDialog):
def __init__(self, cfg: DBConfig, parent=None):
def __init__(self, cfg: DBConfig, db: DBManager, parent=None):
super().__init__(parent)
self.setWindowTitle("Settings")
self._cfg = DBConfig(path=cfg.path, key="")
self._db = db
form = QFormLayout()
form.setFieldGrowthPolicy(QFormLayout.ExpandingFieldsGrow)
@ -44,12 +47,17 @@ class SettingsDialog(QDialog):
h.setStretch(1, 0)
form.addRow("Database path", path_row)
# Change key button
self.rekey_btn = QPushButton("Change key")
self.rekey_btn.clicked.connect(self._change_key)
bb = QDialogButtonBox(QDialogButtonBox.Save | QDialogButtonBox.Cancel)
bb.accepted.connect(self._save)
bb.rejected.connect(self.reject)
v = QVBoxLayout(self)
v.addLayout(form)
v.addWidget(self.rekey_btn)
v.addWidget(bb)
def _browse(self):
@ -67,6 +75,26 @@ class SettingsDialog(QDialog):
save_db_config(self._cfg)
self.accept()
def _change_key(self):
p1 = KeyPrompt(self, title="Change key", message="Enter new key")
if p1.exec() != QDialog.Accepted:
return
new_key = p1.key()
p2 = KeyPrompt(self, title="Change key", message="Re-enter new key")
if p2.exec() != QDialog.Accepted:
return
if new_key != p2.key():
QMessageBox.warning(self, "Key mismatch", "The two entries did not match.")
return
if not new_key:
QMessageBox.warning(self, "Empty key", "Key cannot be empty.")
return
try:
self._db.rekey(new_key)
QMessageBox.information(self, "Key changed", "The database key was updated.")
except Exception as e:
QMessageBox.critical(self, "Error", f"Could not change key:\n{e}")
@property
def config(self) -> DBConfig:
return self._cfg