mirror of
https://github.com/thegeneralist01/archivr
synced 2026-07-22 11:15:41 +02:00
feat: cookie consent extension support (ARCHIVR_COOKIE_EXT)
Mirrors the uBlock Origin Lite integration exactly: Backend: - singlefile.rs: resolve_cookie_ext_config() reads ARCHIVR_COOKIE_CONSENT (default true) + ARCHIVR_COOKIE_EXT path; extension paths comma-joined into --load-extension / --disable-extensions-except so uBlock and cookie ext can coexist; SaveResult.cookie_ext_skipped tracks miss - database.rs: cookie_ext_enabled column on instance_settings (DEFAULT 1); idempotent ALTER TABLE migration; get/update wired through - capture.rs: CaptureConfig.cookie_ext_enabled: Option<bool>; threaded to singlefile::save(); cookie_ext_skipped surfaced in CaptureResult - routes.rs: CaptureBody + UpdateInstanceSettingsBody get cookie_ext_enabled; capture handler resolves effective value (body overrides global); notes_json only includes skipped fields that are true; GET instance-settings includes cookie_ext_available from env path check Frontend: - api.js: submitCapture forwards cookie_ext_enabled - SettingsView.jsx: 'I Still Don't Care About Cookies' card in Extensions tab; always-active toggle (user can disable even when ext not installed); amber 'Not configured' hint + ARCHIVR_COOKIE_EXT guidance when unavailable - CaptureDialog.jsx: 'Block cookie banners' toggle in Advanced options; always shown with amber hint when ext not configured; defaults from global setting Operator setup: download + unzip the extension from GitHub releases, set ARCHIVR_COOKIE_EXT=/path/to/unpacked/ext. No Node daemon needed.
This commit is contained in:
parent
a6ca24b846
commit
52effb60f6
10 changed files with 260 additions and 70 deletions
|
|
@ -140,6 +140,8 @@ pub struct InstanceSettings {
|
|||
/// Global default for ad-blocking via uBlock Origin Lite during WebPage captures.
|
||||
/// Per-capture requests can override this.
|
||||
pub ublock_enabled: bool,
|
||||
/// Global default for cookie-consent banner dismissal via extension during WebPage captures.
|
||||
pub cookie_ext_enabled: bool,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
|
||||
|
|
@ -198,7 +200,8 @@ pub fn initialize_schema(conn: &Connection) -> Result<()> {
|
|||
id INTEGER PRIMARY KEY CHECK (id = 1),
|
||||
public_index_enabled INTEGER NOT NULL DEFAULT 0 CHECK (public_index_enabled IN (0, 1)),
|
||||
public_entry_content_enabled INTEGER NOT NULL DEFAULT 0 CHECK (public_entry_content_enabled IN (0, 1)),
|
||||
public_archive_submission_enabled INTEGER NOT NULL DEFAULT 0 CHECK (public_archive_submission_enabled IN (0, 1))
|
||||
public_archive_submission_enabled INTEGER NOT NULL DEFAULT 0 CHECK (public_archive_submission_enabled IN (0, 1)),
|
||||
cookie_ext_enabled INTEGER NOT NULL DEFAULT 1 CHECK (cookie_ext_enabled IN (0, 1))
|
||||
);
|
||||
|
||||
INSERT OR IGNORE INTO instance_settings (
|
||||
|
|
@ -464,7 +467,8 @@ pub fn initialize_auth_schema(conn: &Connection) -> Result<()> {
|
|||
public_entry_content_enabled INTEGER NOT NULL DEFAULT 0 CHECK (public_entry_content_enabled IN (0, 1)),
|
||||
public_archive_submission_enabled INTEGER NOT NULL DEFAULT 0 CHECK (public_archive_submission_enabled IN (0, 1)),
|
||||
default_entry_visibility INTEGER NOT NULL DEFAULT 2,
|
||||
ublock_enabled INTEGER NOT NULL DEFAULT 1 CHECK (ublock_enabled IN (0, 1))
|
||||
ublock_enabled INTEGER NOT NULL DEFAULT 1 CHECK (ublock_enabled IN (0, 1)),
|
||||
cookie_ext_enabled INTEGER NOT NULL DEFAULT 1 CHECK (cookie_ext_enabled IN (0, 1))
|
||||
);
|
||||
|
||||
INSERT OR IGNORE INTO instance_settings
|
||||
|
|
@ -509,6 +513,11 @@ pub fn initialize_auth_schema(conn: &Connection) -> Result<()> {
|
|||
"ALTER TABLE instance_settings ADD COLUMN ublock_enabled INTEGER NOT NULL DEFAULT 1",
|
||||
[],
|
||||
);
|
||||
// Add cookie_ext_enabled column to instance_settings if not present (idempotent migration)
|
||||
let _ = conn.execute(
|
||||
"ALTER TABLE instance_settings ADD COLUMN cookie_ext_enabled INTEGER NOT NULL DEFAULT 1",
|
||||
[],
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
|
@ -735,7 +744,8 @@ pub fn get_instance_settings(conn: &Connection) -> Result<InstanceSettings> {
|
|||
conn.query_row(
|
||||
"SELECT public_index_enabled, public_entry_content_enabled,
|
||||
public_archive_submission_enabled, default_entry_visibility,
|
||||
COALESCE(ublock_enabled, 1)
|
||||
COALESCE(ublock_enabled, 1),
|
||||
COALESCE(cookie_ext_enabled, 1)
|
||||
FROM instance_settings WHERE id = 1",
|
||||
[],
|
||||
|row| {
|
||||
|
|
@ -745,6 +755,7 @@ pub fn get_instance_settings(conn: &Connection) -> Result<InstanceSettings> {
|
|||
open_registration_enabled: row.get::<_, i64>(2)? != 0,
|
||||
default_entry_visibility: row.get::<_, i64>(3)? as u32,
|
||||
ublock_enabled: row.get::<_, i64>(4)? != 0,
|
||||
cookie_ext_enabled: row.get::<_, i64>(5)? != 0,
|
||||
})
|
||||
},
|
||||
)
|
||||
|
|
@ -758,7 +769,8 @@ pub fn update_instance_settings(conn: &Connection, settings: &InstanceSettings)
|
|||
public_entry_content_enabled = ?2,
|
||||
public_archive_submission_enabled = ?3,
|
||||
default_entry_visibility = ?4,
|
||||
ublock_enabled = ?5
|
||||
ublock_enabled = ?5,
|
||||
cookie_ext_enabled = ?6
|
||||
WHERE id = 1",
|
||||
params![
|
||||
settings.public_index_enabled as i64,
|
||||
|
|
@ -766,6 +778,7 @@ pub fn update_instance_settings(conn: &Connection, settings: &InstanceSettings)
|
|||
settings.open_registration_enabled as i64,
|
||||
settings.default_entry_visibility as i64,
|
||||
settings.ublock_enabled as i64,
|
||||
settings.cookie_ext_enabled as i64,
|
||||
],
|
||||
)?;
|
||||
Ok(())
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue