feat: add secret settings manager and migration for legacy settings
- Implemented SecretSettingsManager to handle secret settings with encryption. - Added functionality to migrate legacy plaintext settings into encrypted storage. - Introduced methods for setting, getting, and clearing secret settings. - Created tests for verifying the migration and canonicalization of secret settings. - Updated app state to handle service updates via socket communication. - Added interface for push service updates to manage service state changes.
This commit is contained in:
@@ -70,6 +70,10 @@ export class AuthRepository extends BaseRepository {
|
||||
);
|
||||
}
|
||||
|
||||
deleteSetting(key: string): void {
|
||||
this.query('DELETE FROM settings WHERE key = ?', [key]);
|
||||
}
|
||||
|
||||
getAllSettings(): Record<string, string> {
|
||||
const rows = this.query('SELECT key, value FROM settings');
|
||||
const settings: Record<string, string> = {};
|
||||
@@ -80,4 +84,24 @@ export class AuthRepository extends BaseRepository {
|
||||
}
|
||||
return settings;
|
||||
}
|
||||
|
||||
getSecretSetting(key: string): string | null {
|
||||
const rows = this.query('SELECT value FROM secret_settings WHERE key = ?', [key]);
|
||||
if (rows.length === 0) return null;
|
||||
|
||||
const value = (rows[0] as any).value || rows[0][0];
|
||||
return value ? String(value) : null;
|
||||
}
|
||||
|
||||
setSecretSetting(key: string, value: string): void {
|
||||
const now = Date.now();
|
||||
this.query(
|
||||
'INSERT OR REPLACE INTO secret_settings (key, value, updated_at) VALUES (?, ?, ?)',
|
||||
[key, value, now],
|
||||
);
|
||||
}
|
||||
|
||||
deleteSecretSetting(key: string): void {
|
||||
this.query('DELETE FROM secret_settings WHERE key = ?', [key]);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user