Each user stores their own login cookies (Netscape cookies.txt) for an auth-walled download host (Facebook, Instagram, X, TikTok, Reddit) in Settings; a download of an auth-walled link on that host is retried with the acting user's cookie. Two load-bearing security controls, both in downloads.credentials as the single source of truth so enqueue and the worker can't drift: - cache privacy: a cookie-authed download salts its MediaAsset format_sig with the user id, so the authed asset is private and never cache-served to another user. The worker attaches a cookie ONLY when the asset it is downloading into IS that private, salted identity. - host scope (SEC-12): a cookie is resolved only for a URL whose netloc the credential owns (netloc-scoped _host_is); a look-alike/unrelated host gets none. cookies_enc is Fernet-encrypted at rest, only decrypted in-worker into a 0600 file under staging/.auth/ (survives the retry wipe + _produced_file scan) and unlinked in finally. The blob is never returned by a route, logged, audited, or written to a job's error/snapshot. cookiefile is set after the adapter's extra merge so an adapter can't clobber it. Settings UI is write-only (host + set/updated only, never echoed). New download_credentials table + migration 0074; per-user routes; HU+EN i18n. Tests: host-scope, cache-privacy (no cross-user serve), encrypt-at-rest, write-only API, worker attach-gate; FE dom test for the write-only field.
24 lines
829 B
JSON
24 lines
829 B
JSON
{
|
|
"user_role_change": "Role changed",
|
|
"user_suspend": "User suspended",
|
|
"user_unsuspend": "User reinstated",
|
|
"user_delete": "User deleted",
|
|
"invite_approve": "Access request approved",
|
|
"invite_deny": "Access request denied",
|
|
"invite_add": "Email whitelisted",
|
|
"demo_add": "Demo email added",
|
|
"demo_remove": "Demo email removed",
|
|
"demo_reset": "Demo reset",
|
|
"discovery_purge": "Discovery purged",
|
|
"config_set": "Setting changed",
|
|
"config_reset": "Setting reset",
|
|
"scheduler_interval": "Job interval changed",
|
|
"maintenance_tune": "Maintenance tuned",
|
|
"sync_pause": "Sync paused",
|
|
"sync_resume": "Sync resumed",
|
|
"job_run": "Scheduler job run",
|
|
"audit_clear": "Audit log cleared",
|
|
"download_credential_set": "Download cookies set",
|
|
"download_credential_delete": "Download cookies removed"
|
|
}
|