70 lines
1.9 KiB
Python
70 lines
1.9 KiB
Python
from dataclasses import dataclass, field
|
|
|
|
import db
|
|
|
|
|
|
@dataclass
|
|
class SFTPConfig:
|
|
host: str = ""
|
|
port: int = 22
|
|
user: str = ""
|
|
auth_method: str = "key" # "key" or "password"
|
|
key: str = ""
|
|
password: str = ""
|
|
remote_path: str = ""
|
|
|
|
|
|
@dataclass
|
|
class GrimmoryConfig:
|
|
url: str = ""
|
|
user: str = ""
|
|
password: str = ""
|
|
bookdrop_path: str = ""
|
|
|
|
|
|
@dataclass
|
|
class AppConfig:
|
|
sftp: SFTPConfig = field(default_factory=SFTPConfig)
|
|
grimmory: GrimmoryConfig = field(default_factory=GrimmoryConfig)
|
|
work_dir: str = "/tmp/calibresync"
|
|
|
|
|
|
def load() -> AppConfig:
|
|
s = db.get_all_settings()
|
|
return AppConfig(
|
|
sftp=SFTPConfig(
|
|
host=s.get("sftp_host", ""),
|
|
port=int(s.get("sftp_port", "22")),
|
|
user=s.get("sftp_user", ""),
|
|
auth_method=s.get("sftp_auth_method", "key"),
|
|
key=s.get("sftp_key", ""),
|
|
password=s.get("sftp_password", ""),
|
|
remote_path=s.get("sftp_remote_path", ""),
|
|
),
|
|
grimmory=GrimmoryConfig(
|
|
url=s.get("grimmory_url", ""),
|
|
user=s.get("grimmory_user", ""),
|
|
password=s.get("grimmory_password", ""),
|
|
bookdrop_path=s.get("grimmory_bookdrop_path", ""),
|
|
),
|
|
work_dir=s.get("work_dir", "/tmp/calibresync"),
|
|
)
|
|
|
|
|
|
def save(form: dict) -> None:
|
|
keys = [
|
|
"sftp_host", "sftp_port", "sftp_user", "sftp_auth_method",
|
|
"sftp_remote_path",
|
|
"grimmory_url", "grimmory_user", "grimmory_bookdrop_path",
|
|
"work_dir",
|
|
"scheduler_interval_minutes", "sync_batch_size",
|
|
]
|
|
for key in keys:
|
|
if key in form and form[key] is not None:
|
|
db.set_setting(key, str(form[key]))
|
|
|
|
# Only overwrite secrets if a non-empty value was submitted
|
|
for secret in ("sftp_key", "sftp_password", "grimmory_password"):
|
|
if form.get(secret, "").strip():
|
|
db.set_setting(secret, form[secret].strip())
|