diff --git a/backend/app/crud/settings.py b/backend/app/crud/settings.py index b84164e..eb3b8e0 100644 --- a/backend/app/crud/settings.py +++ b/backend/app/crud/settings.py @@ -113,6 +113,9 @@ def create_or_update_settings(db: Session, settings: SettingsCreate): db_settings.auth_password_hash = get_password_hash(value) else: db_settings.auth_password_hash = None + elif key == "imap_password": + if value: # Only update password if a new one is provided + setattr(db_settings, key, value) elif hasattr(db_settings, key): setattr(db_settings, key, value) diff --git a/backend/app/schemas/settings.py b/backend/app/schemas/settings.py index a14cddd..f98089c 100644 --- a/backend/app/schemas/settings.py +++ b/backend/app/schemas/settings.py @@ -19,7 +19,7 @@ class SettingsBase(BaseModel): class SettingsCreate(SettingsBase): """Schema for creating or updating settings, including the IMAP password.""" - imap_password: str + imap_password: str | None = None auth_password: str | None = None diff --git a/frontend/src/components/letterfeed/SettingsDialog.tsx b/frontend/src/components/letterfeed/SettingsDialog.tsx index cea160a..b81b931 100644 --- a/frontend/src/components/letterfeed/SettingsDialog.tsx +++ b/frontend/src/components/letterfeed/SettingsDialog.tsx @@ -68,7 +68,11 @@ export function SettingsDialog({ const handleSave = async () => { if (!currentSettings) return try { - await updateSettings(currentSettings) + const payload: SettingsCreate = { ...currentSettings } + if (payload.imap_password === "") { + delete payload.imap_password + } + await updateSettings(payload) toast.success("Settings saved successfully!") onOpenChange(false) onSuccess() @@ -140,7 +144,7 @@ export function SettingsDialog({ handleSettingsChange("imap_password", e.target.value) } diff --git a/frontend/src/lib/api.ts b/frontend/src/lib/api.ts index f2198e1..f4f1770 100644 --- a/frontend/src/lib/api.ts +++ b/frontend/src/lib/api.ts @@ -51,7 +51,7 @@ export interface Settings { export interface SettingsCreate { imap_server: string; imap_username: string; - imap_password?: string; + imap_password?: string | null; search_folder: string; move_to_folder?: string | null; mark_as_read: boolean;