🗃 Open source self-hosted web archiving. Takes URLs/browser history/bookmarks/Pocket/Pinboard/etc., saves HTML, JS, PDFs, media, and more...
1852 matches across 17 categories. Click a row to expand file-level details.
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | CLAUDE.md | 139 | def test_migration_preserves_snapshots(self): |
| LOW | old/TODO_hook_statemachine_cleanup.md | 127 | def has_running_background_hooks(self) -> bool: |
| LOW | old/TODO_fs_migrations.md | 305 | def reconcile_with_index_json(self): |
| LOW | old/TODO_fs_migrations.md | 465 | def move_directory_to_invalid(snapshot_dir: Path): |
| LOW | old/TODO_fs_migrations.md | 113 | def get_storage_path_for_version(self, version: str) -> Path: |
| LOW | old/TODO_fs_migrations.md | 284 | def _detect_fs_version_from_index(data: dict) -> str: |
| LOW | old/TODO_fs_migrations.md | 368 | def _merge_archive_results_from_index(self, index_data: dict): |
| LOW | old/TODO_fs_migrations.md | 387 | def _create_archive_result_if_missing(self, result_data: dict, existing: dict): |
| LOW | old/TODO_fs_migrations.md | 489 | def find_and_merge_duplicates(cls) -> int: |
| LOW | old/TODO_fs_migrations.md | 662 | def _cleanup_old_migration_dir(self, old_dir: Path): |
| LOW | old/TODO_fs_migrations.md | 787 | def import_orphans_from_archive(resume_from: str = None, batch_size: int = 100) -> dict: |
| LOW | old/TODO_fs_migrations.md | 891 | def process_filtered_snapshots( |
| LOW | old/TODO_fs_migrations.md | 1135 | def fix_invalid_folder_locations(out_dir: Path = DATA_DIR) -> Tuple[List[str], List[str]]: |
| LOW | old/TODO_process_tracking.md | 1108 | def has_running_background_hooks(self) -> bool: |
| LOW | old/TODO_process_tracking.md | 1126 | def has_running_background_hooks(self) -> bool: |
| LOW | old/TODO_process_tracking.md | 1828 | def stop_existing_supervisord_process(): |
| LOW | old/TODO_process_tracking.md | 1840 | def start_new_supervisord_process(): |
| LOW | old/TODO_process_tracking.md | 1852 | def stop_existing_supervisord_process(): |
| LOW | old/TODO_archivebox_jsonl_cli.md | 591 | def assert_jsonl_contains_type(stdout: str, record_type: str, min_count: int = 1): |
| LOW | old/TODO_archivebox_jsonl_cli.md | 600 | def assert_jsonl_pass_through(stdout: str, input_records: List[Dict[str, Any]]): |
| LOW | old/TODO_archivebox_jsonl_cli.md | 662 | def create_test_snapshot_json(url: str = None, **kwargs) -> Dict[str, Any]: |
| LOW | old/archivebox.ts | 6051 | // async function setupScreenrecordingWithAudio(page, wss) { |
| LOW | old/archivebox.ts | 1039 | async function getChromeExtensionsFromPersona({CHROME_EXTENSIONS, CHROME_EXTENSIONS_DIR}) { |
| LOW | old/archivebox.ts | 1061 | async function getChromeExtensionsFromCache({browser, extensions=CHROME_EXTENSIONS, extensions_dir=CHROME_EXTENSIONS_DIR |
| LOW | old/archivebox.ts | 1715 | async function collectSnapshotDirVersionFiles(snap_dir) { |
| LOW | old/archivebox.ts | 1825 | async function symlinkBestSnapshotResults(snap_dir) { |
| LOW | old/archivebox.ts | 3380 | async function saveAIQualityAssuranceResult(page, {original_url, version}) { |
| LOW | old/TODO_hook_architecture.md | 1427 | def check_background_hook_completed(archiveresult: 'ArchiveResult') -> bool: |
| LOW | old/TODO_hook_architecture.md | 1583 | def test_background_hook_detection(): |
| LOW | old/TODO_hook_architecture.md | 1588 | def test_find_binary_by_abspath(): |
| LOW | old/TODO_hook_architecture.md | 1627 | def test_foreground_hook_execution(snapshot): |
| LOW | old/TODO_hook_architecture.md | 1646 | def test_background_hook_execution(snapshot): |
| LOW | old/TODO_hook_architecture.md | 1667 | def test_background_hook_finalization(snapshot): |
| LOW | archivebox/hooks.py | 122 | def is_finite_background_hook(hook_name: str) -> bool: |
| LOW | archivebox/hooks.py | 142 | def normalize_hook_event_name(event_name: str) -> str | None: |
| LOW | archivebox/hooks.py | 162 | def _model_output_dir_from_child_path(path: Path, marker: str) -> Path | None: |
| LOW | archivebox/hooks.py | 528 | def extract_records_from_process(process: "Process") -> list[dict[str, Any]]: |
| LOW | archivebox/hooks.py | 558 | def collect_urls_from_plugins(snapshot_dir: Path) -> list[dict[str, Any]]: |
| LOW | archivebox/hooks.py | 663 | def normalize_enabled_plugins(value: Any) -> list[str]: |
| LOW | archivebox/hooks.py | 702 | def discover_plugins_that_provide_interface( |
| LOW | archivebox/hooks.py | 860 | def get_plugin_special_config(plugin_name: str, config: ConfigLookup, _visited: set[str] | None = None) -> PluginSpecial |
| LOW | archivebox/dead/hooks.py | 18 | def get_config_defaults_from_plugins() -> dict[str, Any]: |
| LOW | archivebox/dead/supervision_service.py | 2 | def ensure_single_orchestrator(*, data_dir: str | Path, takeover: bool, reason: str = ""): |
| LOW | archivebox/dead/supervision_service.py | 38 | def wait_until_replaced_or_signal( |
| LOW | archivebox/dead/folders.py | 22 | def fix_invalid_folder_locations(out_dir: Path = DATA_DIR, config=None, **config_kwargs) -> tuple[list[str], list[str]]: |
| LOW | archivebox/dead/process_plugin.py | 270 | async def _maybe_dispatch_json_event(self, line: str, parent_event_id: str | None) -> None: |
| LOW | archivebox/misc/util.py | 216 | def split_comma_separated_urls(url: str): |
| LOW | archivebox/misc/checks.py | 166 | def check_not_inside_source_dir(): |
| LOW | archivebox/misc/checks.py | 177 | def check_data_dir_permissions(config=None, **config_kwargs): |
| LOW | archivebox/misc/logging_util.py | 215 | def log_indexing_process_started(num_links: int): |
| LOW | archivebox/misc/logging_util.py | 227 | def log_indexing_process_finished(): |
| LOW | archivebox/misc/logging_util.py | 324 | def log_snapshot_archiving_started(snapshot: "Snapshot", out_dir: str, is_new: bool): |
| LOW | archivebox/misc/logging_util.py | 347 | def log_snapshot_archiving_finished(snapshot: "Snapshot", out_dir: str, is_new: bool, stats: dict, start_ts: datetime): |
| LOW | archivebox/misc/logging_util.py | 373 | def log_archive_method_started(method: str): |
| LOW | archivebox/misc/logging_util.py | 377 | def log_archive_method_finished(result: dict): |
| LOW | archivebox/misc/logging_util.py | 734 | def printable_dependency_version(name: str, dependency: dict) -> str: |
| LOW | archivebox/misc/serve_static.py | 99 | def _render_mhtml_preview_document(filename: str, output_path: str) -> str: |
| LOW | archivebox/misc/serve_static.py | 118 | def _format_direntry_timestamp(stat_result: os.stat_result) -> str: |
| LOW | archivebox/misc/serve_static.py | 166 | def _build_directory_zip_response( |
| LOW | archivebox/misc/serve_static.py | 256 | async def _stream_ranged_file_async(ranged_file: "RangedFileReader"): |
| 1007 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | old/TODO_fs_migrations.md | 301 | # ========================================================================= |
| MEDIUM | old/TODO_fs_migrations.md | 303 | # ========================================================================= |
| MEDIUM | old/TODO_fs_migrations.md | 460 | # ========================================================================= |
| MEDIUM | old/TODO_fs_migrations.md | 462 | # ========================================================================= |
| MEDIUM | old/TODO_fs_migrations.md | 79 | # ========================================================================= |
| MEDIUM | old/TODO_fs_migrations.md | 81 | # ========================================================================= |
| MEDIUM | old/TODO_fs_migrations.md | 145 | # ========================================================================= |
| MEDIUM | old/TODO_fs_migrations.md | 147 | # ========================================================================= |
| MEDIUM | old/TODO_archivebox_jsonl_cli.md | 467 | # ============================================================================= |
| MEDIUM | old/TODO_archivebox_jsonl_cli.md | 469 | # ============================================================================= |
| MEDIUM | old/TODO_archivebox_jsonl_cli.md | 532 | # ============================================================================= |
| MEDIUM | old/TODO_archivebox_jsonl_cli.md | 534 | # ============================================================================= |
| MEDIUM | old/TODO_archivebox_jsonl_cli.md | 574 | # ============================================================================= |
| MEDIUM | old/TODO_archivebox_jsonl_cli.md | 576 | # ============================================================================= |
| MEDIUM | old/TODO_archivebox_jsonl_cli.md | 619 | # ============================================================================= |
| MEDIUM | old/TODO_archivebox_jsonl_cli.md | 621 | # ============================================================================= |
| MEDIUM | old/TODO_archivebox_jsonl_cli.md | 636 | # ============================================================================= |
| MEDIUM | old/TODO_archivebox_jsonl_cli.md | 638 | # ============================================================================= |
| MEDIUM | archivebox/hooks.py | 97 | # ============================================================================= |
| MEDIUM | archivebox/hooks.py | 99 | # ============================================================================= |
| MEDIUM | archivebox/hooks.py | 976 | # ============================================================================= |
| MEDIUM | archivebox/hooks.py | 978 | # ============================================================================= |
| MEDIUM | archivebox/hooks.py | 1073 | # ============================================================================= |
| MEDIUM | archivebox/hooks.py | 1075 | # ============================================================================= |
| MEDIUM | archivebox/core/models.py | 995 | # ========================================================================= |
| MEDIUM | archivebox/core/models.py | 997 | # ========================================================================= |
| MEDIUM | archivebox/core/models.py | 1794 | # ========================================================================= |
| MEDIUM | archivebox/core/models.py | 1796 | # ========================================================================= |
| MEDIUM | archivebox/core/models.py | 3121 | # ========================================================================= |
| MEDIUM | archivebox/core/models.py | 3123 | # ========================================================================= |
| MEDIUM | archivebox/core/models.py | 246 | # ========================================================================= |
| MEDIUM | archivebox/core/models.py | 248 | # ========================================================================= |
| MEDIUM | archivebox/core/models.py | 296 | # ========================================================================= |
| MEDIUM | archivebox/core/models.py | 298 | # ========================================================================= |
| MEDIUM | archivebox/core/models.py | 390 | # ========================================================================= |
| MEDIUM | archivebox/core/models.py | 392 | # ========================================================================= |
| MEDIUM | archivebox/core/models.py | 794 | # ========================================================================= |
| MEDIUM | archivebox/core/models.py | 796 | # ========================================================================= |
| MEDIUM | archivebox/core/models.py | 1055 | # ========================================================================= |
| MEDIUM | archivebox/core/models.py | 1057 | # ========================================================================= |
| MEDIUM | archivebox/core/models.py | 1339 | # ========================================================================= |
| MEDIUM | archivebox/core/models.py | 1341 | # ========================================================================= |
| MEDIUM | archivebox/core/models.py | 1896 | # ========================================================================= |
| MEDIUM | archivebox/core/models.py | 1898 | # ========================================================================= |
| MEDIUM | archivebox/core/models.py | 2683 | # ========================================================================= |
| MEDIUM | archivebox/core/models.py | 2685 | # ========================================================================= |
| MEDIUM | archivebox/core/models.py | 2744 | # ========================================================================= |
| MEDIUM | archivebox/core/models.py | 2746 | # ========================================================================= |
| MEDIUM | archivebox/core/models.py | 2796 | # ========================================================================= |
| MEDIUM | archivebox/core/models.py | 2798 | # ========================================================================= |
| MEDIUM | archivebox/core/models.py | 2992 | # ========================================================================= |
| MEDIUM | archivebox/core/models.py | 2994 | # ========================================================================= |
| MEDIUM | archivebox/core/models.py | 3195 | # ============================================================================= |
| MEDIUM | archivebox/core/models.py | 3197 | # ============================================================================= |
| MEDIUM | archivebox/core/models.py | 4348 | # ============================================================================= |
| MEDIUM | archivebox/core/models.py | 4350 | # ============================================================================= |
| MEDIUM | archivebox/tests/conftest.py | 63 | # ============================================================================= |
| MEDIUM | archivebox/tests/conftest.py | 65 | # ============================================================================= |
| MEDIUM | archivebox/tests/conftest.py | 129 | # ============================================================================= |
| MEDIUM | archivebox/tests/conftest.py | 131 | # ============================================================================= |
| 119 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| HIGH | archivebox/misc/checks.py | 74 | print(" docker compose pull && docker compose up -d", file=sys.stderr) |
| HIGH | archivebox/misc/hashing.py | 250 | # "num_subpaths": null, |
| HIGH | archivebox/core/widgets.py | 516 | return window.updateHiddenField_id_config || null; |
| HIGH | archivebox/core/widgets.py | 516 | return window.updateHiddenField_id_config || null; |
| HIGH | archivebox/core/widgets.py | 522 | return null; |
| HIGH | archivebox/core/widgets.py | 526 | return keyInput && keyInput.value.trim() === key; |
| HIGH | archivebox/core/widgets.py | 528 | return matches.length ? matches[0] : null; |
| HIGH | archivebox/core/widgets.py | 535 | return rows ? rows.lastElementChild : null; |
| HIGH | archivebox/core/widgets.py | 537 | return null; |
| HIGH | archivebox/core/widgets.py | 602 | if (!domain || seen[domain]) {{ |
| HIGH | archivebox/core/widgets.py | 607 | domains.push(domain); |
| HIGH | archivebox/core/widgets.py | 611 | var hostAndPort = String(parsed.host || parsed.hostname || '').toLowerCase(); |
| HIGH | archivebox/core/widgets.py | 613 | if (!hostAndPort || seen[pathKey]) {{ |
| HIGH | archivebox/core/widgets.py | 617 | paths.push({{ host: hostAndPort, path: pathname }}); |
| HIGH | archivebox/core/widgets.py | 118 | onkeypress="if(event.key==='Enter' || event.keyCode===13 || event.key===' ' || event.code==='Space' | |
| HIGH | archivebox/core/widgets.py | 128 | var autocompleteTimeout_{widget_id} = null; |
| HIGH | archivebox/core/widgets.py | 165 | if (!(options && options.skipHiddenUpdate)) {{ |
| HIGH | archivebox/core/widgets.py | 309 | if (isEnter || isSpace || isComma) {{ |
| HIGH | archivebox/core/widgets.py | 319 | }} else if (event.key === 'Backspace' && !value && currentTags_{widget_id}.length > 0) {{ |
| HIGH | archivebox/core/widgets.py | 333 | if (!query || query.length < 1) {{ |
| HIGH | archivebox/core/widgets.py | 455 | if (!trimmed || trimmed.charAt(0) === '#') {{ |
| HIGH | archivebox/core/widgets.py | 497 | if (!pathname || pathname === '/') {{ |
| HIGH | archivebox/core/widgets.py | 591 | var seen = Object.create(null); |
| HIGH | archivebox/core/admin_snapshots.py | 1167 | "this.dataset.fallbacks && this.dataset.fallbacks.length ? " |
| HIGH | archivebox/core/admin_snapshots.py | 1192 | "this.dataset.fallbacks && this.dataset.fallbacks.length ? " |
| HIGH | archivebox/tests/test_server_security_browser.py | 32 | finalUrl: null, |
| HIGH | archivebox/tests/test_server_security_browser.py | 33 | status: null, |
| HIGH | archivebox/tests/test_server_security_browser.py | 34 | error: null, |
| HIGH | archivebox/tests/test_server_security_browser.py | 43 | result.status = response ? response.status() : null; |
| HIGH | archivebox/tests/test_server_security_browser.py | 89 | consoleMessages.push({type: message.type(), text: message.text()}); |
| HIGH | archivebox/tests/test_server_security_browser.py | 92 | consoleMessages.push({type: "pageerror", text: String(error)}); |
| HIGH | archivebox/tests/test_server_security_browser.py | 95 | requestFailures.push({ |
| HIGH | archivebox/tests/test_server_security_browser.py | 107 | () => window.__dangerousScriptRan !== true || window.__probeResults !== undefined, |
| HIGH | archivebox/tests/test_server_security_browser.py | 107 | () => window.__dangerousScriptRan !== true || window.__probeResults !== undefined, |
| HIGH | archivebox/tests/test_server_security_browser.py | 114 | probeResults: window.__probeResults || null, |
| HIGH | archivebox/tests/test_server_security_browser.py | 114 | probeResults: window.__probeResults || null, |
| HIGH | archivebox/tests/test_server_security_browser.py | 122 | status: response ? response.status() : null, |
| HIGH | archivebox/tests/test_server_security_browser.py | 124 | contentSecurityPolicy: response ? response.headers()["content-security-policy"] || null : null, |
| HIGH | archivebox/tests/test_server_security_browser.py | 125 | archiveboxSecurityMode: response ? response.headers()["x-archivebox-security-mode"] || null : null, |
| HIGH | archivebox/tests/test_hooks.py | 9 | sudo -u testuser bash -c 'source .venv/bin/activate && python -m pytest archivebox/tests/test_hooks.py -v' |
| HIGH | archivebox/crawls/admin.py | 317 | var cookieValue = null; |
| HIGH | archivebox/base_models/admin.py | 154 | if (!meta || meta.type === undefined || meta.type === null) {{ |
| HIGH | archivebox/base_models/admin.py | 154 | if (!meta || meta.type === undefined || meta.type === null) {{ |
| HIGH | archivebox/base_models/admin.py | 162 | return null; |
| HIGH | archivebox/base_models/admin.py | 208 | if (meta.minimum !== undefined || meta.maximum !== undefined) {{ |
| HIGH | archivebox/base_models/admin.py | 208 | if (meta.minimum !== undefined || meta.maximum !== undefined) {{ |
| HIGH | archivebox/base_models/admin.py | 210 | if (meta.minimum !== undefined) bounds.push('min ' + meta.minimum); |
| HIGH | archivebox/base_models/admin.py | 210 | if (meta.minimum !== undefined) bounds.push('min ' + meta.minimum); |
| HIGH | archivebox/base_models/admin.py | 211 | if (meta.maximum !== undefined) bounds.push('max ' + meta.maximum); |
| HIGH | archivebox/base_models/admin.py | 211 | if (meta.maximum !== undefined) bounds.push('max ' + meta.maximum); |
| HIGH | archivebox/base_models/admin.py | 341 | return left === right || JSON.stringify(left) === JSON.stringify(right); |
| HIGH | archivebox/base_models/admin.py | 348 | if (typeName && meta && meta.key && isRegexConfigKey_{widget_id}(meta.key)) {{ |
| HIGH | archivebox/base_models/admin.py | 352 | if (typeName === 'string' && meta && meta.key && meta.key.endsWith('_BINARY')) {{ |
| HIGH | archivebox/base_models/admin.py | 190 | return null; |
| HIGH | archivebox/base_models/admin.py | 252 | if (!pattern || isSimpleFilterPattern_{widget_id}(pattern)) {{ |
| HIGH | archivebox/base_models/admin.py | 259 | return error && error.message ? error.message : 'Invalid regex'; |
| HIGH | archivebox/base_models/admin.py | 272 | if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {{ |
| HIGH | archivebox/base_models/admin.py | 327 | if (raw === 'null') return null; |
| HIGH | archivebox/base_models/admin.py | 372 | if (meta.minimum !== undefined && numberValue < meta.minimum) {{ |
| HIGH | archivebox/base_models/admin.py | 375 | if (meta.maximum !== undefined && numberValue > meta.maximum) {{ |
| 9 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | bin/test_plugins.sh | 71 | except Exception: |
| MEDIUM | old/TODO_fs_migrations.md | 252 | def is_valid_timestamp(ts): |
| LOW | old/TODO_fs_migrations.md | 110 | except Exception: |
| LOW | old/TODO_fs_migrations.md | 673 | except Exception as e: |
| LOW | old/TODO_fs_migrations.md | 1153 | except Exception: |
| LOW | old/TODO_process_tracking.md | 1405 | except Exception as e: |
| LOW | old/TODO_hook_architecture.md | 145 | except Exception: |
| LOW | old/TODO_hook_architecture.md | 232 | except Exception as e: |
| LOW | old/TODO_hook_architecture.md | 1102 | except Exception as e: |
| LOW | docs/conf.py | 48 | except Exception: |
| LOW | archivebox/hooks.py | 345 | except Exception: |
| LOW | archivebox/hooks.py | 421 | except Exception: |
| LOW | archivebox/hooks.py | 512 | except Exception as e: |
| LOW | archivebox/hooks.py | 596 | except Exception: |
| LOW | archivebox/hooks.py | 778 | except Exception: |
| LOW | archivebox/hooks.py | 1148 | except Exception as e: |
| LOW | archivebox/dead/util.py | 104 | except Exception: |
| LOW | archivebox/dead/supervision_service.py | 24 | except Exception: |
| LOW | archivebox/dead/archivebox_persona.py | 92 | except Exception: |
| LOW | archivebox/dead/archivebox_persona.py | 124 | except Exception as e: |
| LOW | archivebox/dead/folders.py | 46 | except Exception: |
| LOW | archivebox/dead/process_plugin.py | 22 | except Exception as exc: # pragma: no cover - optional dependency |
| LOW | archivebox/dead/process_plugin.py | 27 | except Exception: # pragma: no cover - optional dependency |
| LOW | archivebox/dead/process_plugin.py | 285 | except Exception: |
| LOW | archivebox/dead/process_plugin.py | 312 | except Exception: |
| LOW | archivebox/dead/process_plugin.py | 315 | except Exception: |
| LOW | archivebox/misc/db.py | 141 | except Exception as err: |
| LOW | archivebox/misc/system.py | 82 | except Exception: |
| LOW | archivebox/misc/util.py | 504 | except Exception: |
| LOW | archivebox/misc/util.py | 509 | except Exception: |
| LOW | archivebox/misc/util.py | 514 | except Exception: |
| LOW | archivebox/misc/checks.py | 229 | except Exception: |
| LOW | archivebox/misc/checks.py | 234 | except Exception: |
| LOW | archivebox/misc/checks.py | 271 | except Exception as e: |
| LOW | archivebox/misc/checks.py | 324 | except Exception as e: |
| LOW | archivebox/misc/paginators.py | 75 | except Exception: |
| LOW | archivebox/misc/logging_util.py | 94 | except Exception: |
| LOW | archivebox/misc/logging_util.py | 362 | except Exception: |
| LOW | archivebox/misc/toml_util.py | 32 | except Exception: |
| LOW | archivebox/misc/toml_util.py | 37 | except Exception: |
| LOW | archivebox/misc/toml_util.py | 101 | except Exception: |
| LOW | archivebox/misc/serve_static.py | 49 | except Exception: |
| LOW | archivebox/misc/serve_static.py | 490 | except Exception: |
| LOW | archivebox/misc/serve_static.py | 668 | except Exception: |
| LOW | archivebox/misc/serve_static.py | 831 | except Exception: |
| LOW | archivebox/misc/serve_static.py | 859 | except Exception: |
| LOW | archivebox/misc/serve_static.py | 892 | except Exception: |
| LOW | archivebox/misc/serve_static.py | 945 | except Exception: |
| LOW | archivebox/core/admin_archiveresults.py | 127 | except Exception: |
| LOW | archivebox/core/models.py | 990 | except Exception as e: |
| LOW | archivebox/core/models.py | 195 | except Exception: |
| LOW | archivebox/core/models.py | 976 | except Exception as e: |
| LOW | archivebox/core/models.py | 1026 | except Exception: |
| LOW | archivebox/core/models.py | 1819 | except Exception: |
| LOW | archivebox/core/models.py | 1844 | except Exception: |
| LOW | archivebox/core/models.py | 1880 | except Exception: |
| LOW | archivebox/core/models.py | 2066 | except Exception: |
| LOW | archivebox/core/models.py | 2223 | except Exception: |
| LOW | archivebox/core/models.py | 2240 | except Exception: |
| LOW | archivebox/core/models.py | 4209 | except Exception: |
| 142 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | archivebox/hooks.py | 282 | |
| LOW | archivebox/hooks.py | 558 | |
| LOW | archivebox/hooks.py | 702 | |
| LOW | archivebox/hooks.py | 860 | |
| LOW | archivebox/hooks.py | 1078 | |
| LOW | archivebox/dead/legacy.py | 62 | |
| LOW | archivebox/dead/util.py | 72 | |
| LOW | archivebox/dead/supervisord_util.py | 17 | |
| LOW | archivebox/dead/archivebox_persona.py | 44 | |
| LOW | archivebox/dead/folders.py | 22 | |
| LOW | archivebox/misc/db.py | 103 | |
| LOW | archivebox/misc/system.py | 20 | |
| LOW | archivebox/misc/system.py | 89 | |
| LOW | archivebox/misc/system.py | 127 | |
| LOW | archivebox/misc/util.py | 477 | |
| LOW | archivebox/misc/logging_util.py | 377 | |
| LOW | archivebox/misc/logging_util.py | 556 | |
| LOW | archivebox/misc/jsonl.py | 139 | |
| LOW | archivebox/misc/hashing.py | 153 | |
| LOW | archivebox/misc/serve_static.py | 482 | |
| LOW | archivebox/misc/serve_static.py | 711 | |
| LOW | archivebox/core/admin_archiveresults.py | 80 | |
| LOW | archivebox/core/models.py | 151 | |
| LOW | archivebox/core/models.py | 1000 | |
| LOW | archivebox/core/models.py | 1060 | |
| LOW | archivebox/core/models.py | 1160 | |
| LOW | archivebox/core/models.py | 1343 | |
| LOW | archivebox/core/models.py | 1441 | |
| LOW | archivebox/core/models.py | 1647 | |
| LOW | archivebox/core/models.py | 1688 | |
| LOW | archivebox/core/models.py | 1850 | |
| LOW | archivebox/core/models.py | 2059 | |
| LOW | archivebox/core/models.py | 2117 | |
| LOW | archivebox/core/models.py | 2361 | |
| LOW | archivebox/core/models.py | 2817 | |
| LOW | archivebox/core/models.py | 4014 | |
| LOW | archivebox/core/tag_utils.py | 58 | |
| LOW | archivebox/core/widgets.py | 51 | |
| LOW | archivebox/core/widgets.py | 670 | |
| LOW | archivebox/core/forms.py | 351 | |
| LOW | archivebox/core/admin_site.py | 75 | |
| LOW | archivebox/core/middleware.py | 69 | |
| LOW | archivebox/core/middleware.py | 143 | |
| LOW | archivebox/core/middleware.py | 73 | |
| LOW | archivebox/core/middleware.py | 148 | |
| LOW | archivebox/core/views.py | 1407 | |
| LOW | archivebox/core/views.py | 336 | |
| LOW | archivebox/core/views.py | 528 | |
| LOW | archivebox/core/views.py | 1446 | |
| LOW | archivebox/core/views.py | 1483 | |
| LOW | archivebox/core/templatetags/core_tags.py | 114 | |
| LOW | archivebox/core/sqlite_backend/base.py | 31 | |
| LOW | archivebox/config/django.py | 34 | |
| LOW | archivebox/config/paths.py | 42 | |
| LOW | archivebox/config/common.py | 403 | |
| LOW | archivebox/config/collection.py | 10 | |
| LOW | archivebox/config/views.py | 311 | |
| LOW | archivebox/config/views.py | 374 | |
| LOW | archivebox/tests/conftest.py | 271 | |
| LOW | archivebox/tests/test_search_backends_e2e.py | 9 | |
| 63 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | archivebox/__main__.py | 6 | |
| LOW | archivebox/dead/live_ui.py | 2 | |
| LOW | archivebox/misc/shell_welcome_message.py | 6 | |
| LOW | archivebox/misc/shell_welcome_message.py | 7 | |
| LOW | archivebox/misc/shell_welcome_message.py | 8 | |
| LOW | archivebox/misc/shell_welcome_message.py | 9 | |
| LOW | archivebox/misc/shell_welcome_message.py | 10 | |
| LOW | archivebox/misc/shell_welcome_message.py | 11 | |
| LOW | archivebox/misc/shell_welcome_message.py | 12 | |
| LOW | archivebox/misc/shell_welcome_message.py | 13 | |
| LOW | archivebox/misc/shell_welcome_message.py | 14 | |
| LOW | archivebox/misc/shell_welcome_message.py | 16 | |
| LOW | archivebox/misc/shell_welcome_message.py | 17 | |
| LOW | archivebox/misc/shell_welcome_message.py | 17 | |
| LOW | archivebox/misc/shell_welcome_message.py | 19 | |
| LOW | archivebox/misc/shell_welcome_message.py | 20 | |
| LOW | archivebox/misc/shell_welcome_message.py | 22 | |
| LOW | archivebox/core/host_utils.py | 1 | |
| LOW | archivebox/core/models.py | 62 | |
| LOW | archivebox/core/tag_utils.py | 1 | |
| LOW | archivebox/core/apps.py | 26 | |
| LOW | archivebox/core/shutdown_util.py | 1 | |
| LOW | archivebox/core/admin_site.py | 17 | |
| LOW | archivebox/core/admin_site.py | 18 | |
| LOW | archivebox/core/admin_site.py | 19 | |
| LOW | archivebox/core/admin_site.py | 19 | |
| LOW | archivebox/core/admin_site.py | 21 | |
| LOW | archivebox/core/settings.py | 537 | |
| LOW | archivebox/core/settings.py | 571 | |
| LOW | archivebox/core/permissions.py | 1 | |
| LOW | archivebox/core/recovery_util.py | 1 | |
| LOW | archivebox/core/wsgi.py | 10 | |
| LOW | archivebox/core/sqlite_backend/base.py | 1 | |
| LOW | archivebox/config/django.py | 47 | |
| LOW | archivebox/config/paths.py | 17 | |
| LOW | archivebox/tests/test_server_security_browser.py | 4 | |
| LOW | archivebox/crawls/schedule_utils.py | 1 | |
| LOW | archivebox/crawls/apps.py | 15 | |
| LOW | archivebox/cli/archivebox_update.py | 2 | |
| LOW | archivebox/cli/archivebox_add.py | 2 | |
| LOW | archivebox/search/sonic_daemon.py | 1 | |
| LOW | archivebox/personas/importers.py | 8 | |
| LOW | archivebox/machine/models.py | 1 | |
| LOW | archivebox/machine/apps.py | 19 | |
| LOW | archivebox/services/binary_service.py | 1 | |
| LOW | archivebox/services/runner.py | 1 | |
| LOW | archivebox/services/process_service.py | 1 | |
| LOW | archivebox/services/crawl_service.py | 1 | |
| LOW | archivebox/services/tag_service.py | 1 | |
| LOW | archivebox/services/__init__.py | 1 | |
| LOW | archivebox/services/__init__.py | 2 | |
| LOW | archivebox/services/__init__.py | 3 | |
| LOW | archivebox/services/__init__.py | 4 | |
| LOW | archivebox/services/__init__.py | 5 | |
| LOW | archivebox/services/__init__.py | 6 | |
| LOW | archivebox/services/__init__.py | 6 | |
| LOW | archivebox/services/__init__.py | 6 | |
| LOW | archivebox/services/__init__.py | 6 | |
| LOW | archivebox/services/__init__.py | 7 | |
| LOW | archivebox/services/__init__.py | 8 | |
| 4 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | docker-compose.yml | 1 | # Usage: |
| LOW | docker-compose.yml | 21 | # - ADMIN_USERNAME=admin # creates an admin user on first run with the given user/pass combo |
| LOW | docker-compose.yml | 41 | # - dns |
| LOW | docker-compose.yml | 61 | ### This optional container runs xvfb+noVNC so you can watch the ArchiveBox browser as it archives things, |
| LOW | docker-compose.yml | 81 | # You can also any other ingress provider for SSL like Apache, Caddy, Traefik, Cloudflare Tunnels, etc. |
| LOW | docker-compose.yml | 101 | # environment: |
| LOW | docker-compose.yml | 121 | # cap_add: |
| LOW | docker-compose.yml | 141 | ### Example: Run PYWB in parallel and auto-import WARCs from ArchiveBox |
| LOW | docker-compose.yml | 161 | # - subnet: 172.20.0.0/24 |
| LOW | docker-compose.yml | 181 | # remote: 'examplegdrive:archivebox' |
| LOW | bin/setup.sh | 1 | #!/usr/bin/env bash |
| LOW | bin/export_browser_history.sh | 1 | #!/usr/bin/env bash |
| LOW | bin/docker_entrypoint.sh | 1 | #!/bin/bash |
| LOW | bin/docker_entrypoint.sh | 281 | # e.g. "docker run archivebox archivebox init: |
| LOW | bin/test_plugins.sh | 1 | #!/bin/bash |
| LOW | old/archivebox.ts | 81 | // 'https://browserleaks.com/canvas', |
| LOW | old/archivebox.ts | 101 | // 'https://docker-compose.archivebox.io', |
| LOW | old/archivebox.ts | 121 | // 'https://facebook.com/815781663692514/?comment_id=924451748966499', |
| LOW | old/archivebox.ts | 221 | isLandscape: false, |
| LOW | old/archivebox.ts | 261 | // { |
| LOW | old/archivebox.ts | 321 | // if (snap_id.startsWith('.')) continue |
| LOW | old/archivebox.ts | 341 | // if (fs.existsSync(dest_path)) { |
| LOW | old/archivebox.ts | 361 | |
| LOW | old/archivebox.ts | 481 | {webstore_id: 'ifibfemgeogfhoebkmokieepdoobkbpo', name: 'twocaptcha'}, // https://2captcha.com/blog/ |
| LOW | old/archivebox.ts | 661 | '--autoplay-policy=no-user-gesture-required', // auto-start videos so they trigger network requests + show up i |
| LOW | old/archivebox.ts | 1761 | if (snapshot_entry.sha256 == version_entry.sha256) { |
| LOW | old/archivebox.ts | 1781 | // mv ./data/archive/<snap_id>/example.txt -> ./data/archive/<snap_id>/versions/<version_id>/example.txt |
| LOW | old/archivebox.ts | 2101 | // ffmpeg_Path: '<path of ffmpeg_path>' || null, |
| LOW | old/archivebox.ts | 2421 | // await page.setCookie(...cookies) |
| LOW | old/archivebox.ts | 3121 | const recorder = page_state.recorder |
| LOW | old/archivebox.ts | 3241 | // const screenshot_jpg = SCREENSHOT_JPG_PATH(page) |
| LOW | old/archivebox.ts | 3261 | // cropped_bytes[idx + 1] = this.data[idx + 1]; |
| LOW | old/archivebox.ts | 3501 | // spawn( |
| LOW | old/archivebox.ts | 4541 | |
| LOW | old/archivebox.ts | 5341 | |
| LOW | old/archivebox.ts | 5361 | // mimeType: 'inode/directory' |
| LOW | old/archivebox.ts | 5461 | // { |
| LOW | old/archivebox.ts | 5501 | // example: detectFilename({url: 'https://example.com/favicon.png', extension: 'ico'}) outputs 'favicon.ico' |
| LOW | old/archivebox.ts | 6041 | |
| LOW | old/archivebox.ts | 6061 | // video: true, |
| LOW | docs/.readthedocs.yaml | 1 | # Read the Docs configuration file for ArchiveBox docs |
| LOW | .github/workflows/codeql.yml | 1 | # For most projects, this workflow file will not need changing; you simply need |
| LOW | .github/workflows/codeql.yml | 61 | # Initializes the CodeQL tools for scanning. |
| LOW | archivebox/hooks.py | 981 | # Templates are discovered by filename convention inside each plugin's templates/ dir: |
| LOW | archivebox/dead/django.py | 1 | # ruff: noqa |
| LOW | archivebox/dead/views.py | 1 | # ruff: noqa |
| LOW | archivebox/misc/paginators.py | 81 | |
| LOW | archivebox/misc/hashing.py | 241 | # "num_bytes": 214677, |
| LOW | archivebox/core/models.py | 781 | # log_worker_event( |
| LOW | archivebox/core/models.py | 3601 | if self.delete_at is not None and update_fields is not None: |
| LOW | archivebox/core/asgi.py | 21 | # from channels.security.websocket import AllowedHostsOriginValidator |
| LOW | archivebox/core/admin_snapshots.py | 941 | html = Template("""{{bookmarked_date}} (<code>{{timestamp}}</code>)""") |
| LOW | archivebox/core/settings.py | 181 | # str(plugin_dir / 'static') |
| LOW | archivebox/core/settings.py | 261 | "default": { |
| LOW | archivebox/core/settings.py | 281 | |
| LOW | archivebox/core/settings.py | 301 | # return 'default' |
| LOW | archivebox/core/settings.py | 341 | # "OPTIONS": { |
| LOW | archivebox/core/urls.py | 101 | # path('/accounts', django.contrib.auth.urls) |
| LOW | archivebox/core/urls.py | 121 | # future, just an idea: |
| LOW | archivebox/config/version.py | 81 | # # when its most relevant, e.g. when the user runs a long-running command |
| 9 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| CRITICAL | archivebox/core/admin_archiveresults.py | 17 | from django.core.exceptions import ValidationError |
| CRITICAL | archivebox/crawls/models.py | 18 | from django.core.exceptions import ValidationError |
| CRITICAL | archivebox/api/v1_core.py | 17 | from django.core.exceptions import ValidationError |
| CRITICAL | archivebox/templates/static/jquery-3.7.1.slim.min.js | 2 | !function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):f |
| CRITICAL | archivebox/templates/static/jquery.min.js | 2 | !function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):f |
| CRITICAL | archivebox/services/snapshot_service.py | 7 | from django.core.exceptions import ValidationError |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | bin/kill_chrome.sh | 50 | # Check if still alive |
| LOW | bin/kill_chrome.sh | 59 | # Check if it's a zombie/uninterruptible process BEFORE trying to kill |
| LOW | bin/build_docker.sh | 93 | # Check if docker is ready for cross-plaform builds, if not, recreate builder |
| LOW | bin/docker_entrypoint.sh | 100 | # Check if user attempted to run it in the root of their home folder or hard drive (common mistake) |
| LOW | bin/test_plugins.sh | 264 | # Check if there are any Python test files |
| LOW | archivebox/hooks.py | 263 | # Check if this is a plugin directory (not the root plugins dir) |
| LOW | archivebox/hooks.py | 270 | # Check if plugin is enabled |
| LOW | archivebox/hooks.py | 897 | # Check if PLUGINS whitelist is specified (e.g., --plugins=wget,favicon) |
| LOW | archivebox/hooks.py | 1118 | # Check if discovered snapshot exceeds crawl max_depth |
| LOW | archivebox/misc/jsonl.py | 147 | # Check if it's a file path |
| LOW | archivebox/core/models.py | 2593 | # Check if any ARs are still pending/started |
| LOW | archivebox/core/models.py | 2634 | # Check if sealed |
| LOW | archivebox/core/views.py | 2411 | # Check if it's from archivebox.config.file |
| LOW | archivebox/core/views.py | 2170 | # Check if crawl can start (for debugging stuck crawls) |
| LOW | archivebox/core/views.py | 2195 | # Check if retry_at is in the future (would prevent worker from claiming) |
| LOW | archivebox/mcp/server.py | 162 | # Check if this is a positional Argument (not an Option) |
| LOW | archivebox/crawls/models.py | 440 | # Check if crawl already exists by ID |
| LOW | archivebox/crawls/models.py | 834 | # Check if already in urls (parse existing JSONL entries) |
| LOW | archivebox/crawls/models.py | 1390 | # Check if any snapshots exist for this crawl |
| LOW | archivebox/crawls/models.py | 1553 | # Set retry_at to near future so tick() can poll and check is_finished() |
| LOW | archivebox/cli/archivebox_update.py | 579 | # Check if needs migration (0.8.x → 0.9.x) |
| LOW | archivebox/cli/archivebox_extract.py | 336 | # Output results as JSONL (when piped) or human-readable (when TTY) |
| LOW | archivebox/cli/archivebox_extract.py | 393 | # Check if input looks like existing ArchiveResult IDs to process |
| LOW | archivebox/cli/archivebox_version.py | 109 | # Check if LDAP is enabled (simple config lookup) |
| LOW | archivebox/cli/archivebox_persona.py | 265 | # Check if resolved_path is a child of personas_dir |
| LOW | archivebox/machine/models.py | 827 | # Check if it's already pointing to the right place |
| LOW | archivebox/machine/models.py | 1607 | # Check if too old (PID definitely reused) |
| LOW | archivebox/machine/models.py | 1611 | # Check if OS process still exists with matching start time |
| LOW | archivebox/machine/models.py | 2315 | # Check if process exited |
| LOW | archivebox/machine/models.py | 2608 | # Check if installation succeeded by looking at updated status |
| LOW | archivebox/workers/supervisord_util.py | 1047 | # Check if the monitored process has exited |
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | bin/build_brew.sh | 21 | # Create a temporary virtualenv for generating the formula |
| MEDIUM | pkg/debian/install.sh | 31 | # Create the virtualenv if it doesn't exist |
| MEDIUM | archivebox/hooks.py | 350 | # Create a failed Process record for hooks that don't exist |
| MEDIUM | archivebox/hooks.py | 513 | # Create a failed Process record for exceptions |
| MEDIUM | archivebox/misc/logging_util.py | 650 | # Create a Rich Text object for proper formatting |
| MEDIUM | archivebox/core/templatetags/core_tags.py | 416 | # Create a mini template and render it with context |
| MEDIUM | archivebox/tests/test_cli_status.py | 133 | # Create an orphaned directory |
| MEDIUM | archivebox/tests/test_cli_crawl.py | 192 | # Create a crawl |
| MEDIUM | archivebox/tests/test_cli_add.py | 174 | # Create a file with URLs |
| MEDIUM | archivebox/tests/migrations_helpers.py | 572 | # Create a user |
| MEDIUM | archivebox/tests/migrations_helpers.py | 739 | # Create a user |
| MEDIUM | archivebox/tests/test_cli_archiveresult.py | 34 | # Create a snapshot first |
| MEDIUM | archivebox/cli/archivebox_update.py | 567 | # Create a new crawl (created_by will default to system user) |
| MEDIUM | archivebox/cli/archivebox_persona.py | 15 | # Create a new persona |
| Severity | File | Line | Snippet |
|---|---|---|---|
| HIGH | old/TODO_process_tracking.md | 711 | Wait for process to exit, polling periodically. Args: timeout: Max seconds to wait (None = |
| HIGH | archivebox/hooks.py | 103 | Check if a hook is a background hook (doesn't block foreground progression). Background hooks have '.bg.' in t |
| HIGH | archivebox/hooks.py | 187 | Find all hook scripts for an event family. Searches both built-in and user plugin directories. Filters out |
| HIGH | archivebox/hooks.py | 861 | Extract special config keys for a plugin following naming conventions. ArchiveBox recognizes 3 special config |
| HIGH | archivebox/machine/models.py | 2165 | Wait for process to exit, polling periodically. Args: timeout: Max seconds to wait (None = |
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | bin/fuzz_test.sh | 4 | # This is intentionally not a test harness: it does not assert success/failure. |
| LOW | archivebox/misc/util.py | 428 | # if response is non-test (e.g. image or other binary files), just return the filename instead |
| MEDIUM | archivebox/core/models.py | 4082 | # these properties provide seamless access to Process data through ArchiveResult |
| LOW | archivebox/core/views.py | 1151 | # We can't just call request.build_absolute_uri in the template, because it would include query parameters |
| LOW | archivebox/cli/archivebox_archiveresult.py | 115 | # If no id, we could create it, but for now just pass through |
| LOW | archivebox/cli/archivebox_crawl.py | 93 | # Handle existing Crawl records (just pass through with id) |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | pyproject.toml | 94 | # to use sonic make sure you have a sonic server running in docker (archivebox/sonic) or locally: |
| MEDIUM | .github/workflows/codeql.yml | 55 | # If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize how |
| LOW | archivebox/core/admin_snapshots.py | 1645 | f"Successfully deleted {total} Snapshots ({deleted_count} total objects including related records). Don' |
| LOW | archivebox/config/collection.py | 22 | # If you modify this file manually, make sure to update your archive after by running: |
| LOW | archivebox/cli/archivebox_install.py | 78 | stderr("\n[+] Don't forget to create a new admin user for the Web UI...", color="green") |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | docker-compose.yml | 1 | # Usage: |
| LOW | bin/kill_chrome.sh | 5 | # Usage: |
| LOW | bin/export_browser_history.sh | 4 | # Usage: |
| LOW | archivebox/machine/detect.py | 282 | # Example usage |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | archivebox/tests/test_server_security_browser.py | 211 | defaults={"email": "admin@example.com", "is_staff": True, "is_superuser": True}, |
| LOW | archivebox/tests/migrations_helpers.py | 577 | 'admin@example.com', 1, 1, datetime('now')) |
| LOW | archivebox/tests/migrations_helpers.py | 744 | 'admin@example.com', 1, 1, datetime('now')) |
| LOW | archivebox/tests/test_urls.py | 84 | defaults={"email": "admin@example.com", "is_staff": True, "is_superuser": True}, |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | archivebox/machine/models.py | 2222 | # Step 1: Send SIGTERM for graceful shutdown |
| LOW | archivebox/machine/models.py | 2225 | # Step 2: Wait for graceful exit |
| LOW | archivebox/machine/models.py | 2238 | # Step 3: Force kill with SIGKILL |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | archivebox/mcp/server.py | 311 | def handle_request(self, request: dict) -> dict: |