voidaccess 1.3.0__tar.gz → 1.4.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {voidaccess-1.3.0 → voidaccess-1.4.0}/PKG-INFO +2 -3
- {voidaccess-1.3.0 → voidaccess-1.4.0}/pyproject.toml +4 -5
- {voidaccess-1.3.0 → voidaccess-1.4.0}/voidaccess.egg-info/PKG-INFO +2 -3
- {voidaccess-1.3.0 → voidaccess-1.4.0}/voidaccess.egg-info/SOURCES.txt +15 -15
- voidaccess-1.4.0/voidaccess.egg-info/entry_points.txt +2 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/voidaccess.egg-info/top_level.txt +1 -1
- {voidaccess-1.3.0/cli → voidaccess-1.4.0/voidaccess_cli}/commands/configure.py +1 -1
- {voidaccess-1.3.0/cli → voidaccess-1.4.0/voidaccess_cli}/commands/enrich.py +3 -3
- {voidaccess-1.3.0/cli → voidaccess-1.4.0/voidaccess_cli}/commands/export.py +4 -4
- {voidaccess-1.3.0/cli → voidaccess-1.4.0/voidaccess_cli}/commands/investigate.py +6 -6
- {voidaccess-1.3.0/cli → voidaccess-1.4.0/voidaccess_cli}/commands/show.py +4 -4
- {voidaccess-1.3.0/cli → voidaccess-1.4.0/voidaccess_cli}/main.py +34 -9
- {voidaccess-1.3.0/cli → voidaccess-1.4.0/voidaccess_cli}/tor_detect.py +1 -1
- voidaccess-1.3.0/voidaccess.egg-info/entry_points.txt +0 -2
- {voidaccess-1.3.0 → voidaccess-1.4.0}/LICENSE +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/README.md +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/analysis/__init__.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/analysis/opsec.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/analysis/patterns.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/analysis/temporal.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/api/__init__.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/api/auth.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/api/main.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/api/routes/__init__.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/api/routes/admin.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/api/routes/auth.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/api/routes/entities.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/api/routes/export.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/api/routes/investigations.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/api/routes/monitors.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/api/routes/search.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/api/routes/settings.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/auth/__init__.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/auth/token_blacklist.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/config.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/crawler/__init__.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/crawler/dedup.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/crawler/frontier.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/crawler/spider.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/crawler/utils.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/db/__init__.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/db/migrations/__init__.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/db/migrations/env.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/db/migrations/versions/0001_initial_schema.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/db/migrations/versions/0002_add_investigation_status_column.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/db/migrations/versions/0002_add_missing_tables.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/db/migrations/versions/0003_add_canonical_value_and_entity_links.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/db/migrations/versions/0004_add_page_posted_at.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/db/migrations/versions/0005_add_extraction_method.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/db/migrations/versions/0006_add_monitor_alerts.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/db/migrations/versions/0007_add_actor_style_profiles.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/db/migrations/versions/0008_add_users_table.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/db/migrations/versions/0009_add_investigation_id_to_relationships.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/db/migrations/versions/0010_add_composite_index_entity_relationships.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/db/migrations/versions/0011_add_page_extraction_cache.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/db/migrations/versions/0013_add_graph_status.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/db/migrations/versions/0015_add_progress_fields.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/db/migrations/versions/0016_backfill_graph_status.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/db/migrations/versions/0017_add_user_api_keys.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/db/migrations/versions/0018_add_user_id_to_investigations.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/db/migrations/versions/0019_add_content_safety_log.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/db/migrations/versions/0020_add_entity_source_tracking.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/db/models.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/db/queries.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/db/session.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/export/__init__.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/export/misp.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/export/sigma.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/export/stix.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/extractor/__init__.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/extractor/llm_extract.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/extractor/ner.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/extractor/normalizer.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/extractor/pipeline.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/extractor/regex_patterns.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/fingerprint/__init__.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/fingerprint/profiler.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/fingerprint/stylometry.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/graph/__init__.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/graph/builder.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/graph/export.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/graph/model.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/graph/queries.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/graph/visualize.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/i18n/__init__.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/i18n/detect.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/i18n/query_expand.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/i18n/translate.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/monitor/__init__.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/monitor/_db.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/monitor/alerts.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/monitor/config.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/monitor/diff.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/monitor/jobs.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/monitor/scheduler.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/scraper/__init__.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/scraper/scrape.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/scraper/scrape_js.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/search/__init__.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/search/circuit_breaker.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/search/search.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/setup.cfg +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/sources/__init__.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/sources/blockchain.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/sources/cache.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/sources/cisa.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/sources/dns_enrichment.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/sources/domain_reputation.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/sources/email_reputation.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/sources/engines.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/sources/enrichment.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/sources/github_scraper.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/sources/gitlab_scraper.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/sources/hash_reputation.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/sources/historical_intel.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/sources/ip_reputation.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/sources/paste_scraper.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/sources/pastes.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/sources/rss_scraper.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/sources/seed_manager.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/sources/seeds.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/sources/shodan.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/sources/telegram.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/sources/virustotal.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_analysis_opsec.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_analysis_stylometry.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_analysis_temporal.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_api.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_api_monitors.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_blockchain.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_config.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_crawler.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_db.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_dns_enrichment.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_domain_reputation.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_email_reputation.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_fingerprint.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_github_scraper.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_gitlab_scraper.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_graph.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_hash_reputation.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_i18n.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_ip_reputation.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_llm.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_llm_utils.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_model_singleton.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_monitor.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_pagination.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_paste_scraper.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_rss_scraper.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_scrape_js.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_settings.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_sources.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_sources_enrichment_new.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_vector.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/utils/__init__.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/utils/async_utils.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/utils/content_safety.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/utils/defang.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/utils/encryption.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/utils/ioc_freshness.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/utils/user_keys.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/vector/__init__.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/vector/embedder.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/vector/model_singleton.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/vector/search.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/vector/store.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/voidaccess/__init__.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/voidaccess/llm.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/voidaccess/llm_utils.py +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/voidaccess.egg-info/dependency_links.txt +0 -0
- {voidaccess-1.3.0 → voidaccess-1.4.0}/voidaccess.egg-info/requires.txt +0 -0
- {voidaccess-1.3.0/cli → voidaccess-1.4.0/voidaccess_cli}/__init__.py +0 -0
- {voidaccess-1.3.0/cli → voidaccess-1.4.0/voidaccess_cli}/adapters/__init__.py +0 -0
- {voidaccess-1.3.0/cli → voidaccess-1.4.0/voidaccess_cli}/adapters/sqlite.py +0 -0
- {voidaccess-1.3.0/cli → voidaccess-1.4.0/voidaccess_cli}/browser.py +0 -0
- {voidaccess-1.3.0/cli → voidaccess-1.4.0/voidaccess_cli}/commands/__init__.py +0 -0
- {voidaccess-1.3.0/cli → voidaccess-1.4.0/voidaccess_cli}/config.py +0 -0
- {voidaccess-1.3.0/cli → voidaccess-1.4.0/voidaccess_cli}/display.py +0 -0
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: voidaccess
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.4.0
|
|
4
4
|
Summary: Dark web OSINT CLI — automated threat intelligence from query to report
|
|
5
5
|
Author: VoidAccess
|
|
6
|
-
License: MIT
|
|
6
|
+
License-Expression: MIT
|
|
7
7
|
Keywords: osint,darkweb,threat-intelligence,tor,cli
|
|
8
8
|
Classifier: Development Status :: 4 - Beta
|
|
9
9
|
Classifier: Environment :: Console
|
|
10
10
|
Classifier: Intended Audience :: Information Technology
|
|
11
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
12
11
|
Classifier: Operating System :: OS Independent
|
|
13
12
|
Classifier: Programming Language :: Python :: 3
|
|
14
13
|
Classifier: Programming Language :: Python :: 3.11
|
|
@@ -4,10 +4,10 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "voidaccess"
|
|
7
|
-
version = "1.
|
|
7
|
+
version = "1.4.0"
|
|
8
8
|
description = "Dark web OSINT CLI — automated threat intelligence from query to report"
|
|
9
9
|
readme = "README.md"
|
|
10
|
-
license =
|
|
10
|
+
license = "MIT"
|
|
11
11
|
requires-python = ">=3.10"
|
|
12
12
|
authors = [{ name = "VoidAccess" }]
|
|
13
13
|
keywords = ["osint", "darkweb", "threat-intelligence", "tor", "cli"]
|
|
@@ -15,7 +15,6 @@ classifiers = [
|
|
|
15
15
|
"Development Status :: 4 - Beta",
|
|
16
16
|
"Environment :: Console",
|
|
17
17
|
"Intended Audience :: Information Technology",
|
|
18
|
-
"License :: OSI Approved :: MIT License",
|
|
19
18
|
"Operating System :: OS Independent",
|
|
20
19
|
"Programming Language :: Python :: 3",
|
|
21
20
|
"Programming Language :: Python :: 3.11",
|
|
@@ -51,7 +50,7 @@ dependencies = [
|
|
|
51
50
|
dev = ["pytest", "pytest-asyncio"]
|
|
52
51
|
|
|
53
52
|
[project.scripts]
|
|
54
|
-
voidaccess = "
|
|
53
|
+
voidaccess = "voidaccess_cli.main:app"
|
|
55
54
|
|
|
56
55
|
[tool.setuptools]
|
|
57
56
|
py-modules = ["config"]
|
|
@@ -59,7 +58,7 @@ py-modules = ["config"]
|
|
|
59
58
|
[tool.setuptools.packages.find]
|
|
60
59
|
where = ["."]
|
|
61
60
|
include = [
|
|
62
|
-
"
|
|
61
|
+
"voidaccess_cli*",
|
|
63
62
|
"db*",
|
|
64
63
|
"sources*",
|
|
65
64
|
"extractor*",
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: voidaccess
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.4.0
|
|
4
4
|
Summary: Dark web OSINT CLI — automated threat intelligence from query to report
|
|
5
5
|
Author: VoidAccess
|
|
6
|
-
License: MIT
|
|
6
|
+
License-Expression: MIT
|
|
7
7
|
Keywords: osint,darkweb,threat-intelligence,tor,cli
|
|
8
8
|
Classifier: Development Status :: 4 - Beta
|
|
9
9
|
Classifier: Environment :: Console
|
|
10
10
|
Classifier: Intended Audience :: Information Technology
|
|
11
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
12
11
|
Classifier: Operating System :: OS Independent
|
|
13
12
|
Classifier: Programming Language :: Python :: 3
|
|
14
13
|
Classifier: Programming Language :: Python :: 3.11
|
|
@@ -20,20 +20,6 @@ api/routes/search.py
|
|
|
20
20
|
api/routes/settings.py
|
|
21
21
|
auth/__init__.py
|
|
22
22
|
auth/token_blacklist.py
|
|
23
|
-
cli/__init__.py
|
|
24
|
-
cli/browser.py
|
|
25
|
-
cli/config.py
|
|
26
|
-
cli/display.py
|
|
27
|
-
cli/main.py
|
|
28
|
-
cli/tor_detect.py
|
|
29
|
-
cli/adapters/__init__.py
|
|
30
|
-
cli/adapters/sqlite.py
|
|
31
|
-
cli/commands/__init__.py
|
|
32
|
-
cli/commands/configure.py
|
|
33
|
-
cli/commands/enrich.py
|
|
34
|
-
cli/commands/export.py
|
|
35
|
-
cli/commands/investigate.py
|
|
36
|
-
cli/commands/show.py
|
|
37
23
|
crawler/__init__.py
|
|
38
24
|
crawler/dedup.py
|
|
39
25
|
crawler/frontier.py
|
|
@@ -173,4 +159,18 @@ voidaccess.egg-info/SOURCES.txt
|
|
|
173
159
|
voidaccess.egg-info/dependency_links.txt
|
|
174
160
|
voidaccess.egg-info/entry_points.txt
|
|
175
161
|
voidaccess.egg-info/requires.txt
|
|
176
|
-
voidaccess.egg-info/top_level.txt
|
|
162
|
+
voidaccess.egg-info/top_level.txt
|
|
163
|
+
voidaccess_cli/__init__.py
|
|
164
|
+
voidaccess_cli/browser.py
|
|
165
|
+
voidaccess_cli/config.py
|
|
166
|
+
voidaccess_cli/display.py
|
|
167
|
+
voidaccess_cli/main.py
|
|
168
|
+
voidaccess_cli/tor_detect.py
|
|
169
|
+
voidaccess_cli/adapters/__init__.py
|
|
170
|
+
voidaccess_cli/adapters/sqlite.py
|
|
171
|
+
voidaccess_cli/commands/__init__.py
|
|
172
|
+
voidaccess_cli/commands/configure.py
|
|
173
|
+
voidaccess_cli/commands/enrich.py
|
|
174
|
+
voidaccess_cli/commands/export.py
|
|
175
|
+
voidaccess_cli/commands/investigate.py
|
|
176
|
+
voidaccess_cli/commands/show.py
|
|
@@ -15,7 +15,7 @@ from rich.console import Console
|
|
|
15
15
|
from rich.prompt import Prompt, Confirm
|
|
16
16
|
from rich.table import Table
|
|
17
17
|
|
|
18
|
-
from
|
|
18
|
+
from voidaccess_cli import config as cli_config
|
|
19
19
|
|
|
20
20
|
app = typer.Typer(help="Configure the voidaccess CLI.", no_args_is_help=False, invoke_without_command=True)
|
|
21
21
|
console = Console()
|
|
@@ -30,7 +30,7 @@ def run(
|
|
|
30
30
|
skip_emails: bool = typer.Option(False, "--skip-emails"),
|
|
31
31
|
) -> None:
|
|
32
32
|
"""Re-enrich entities for an existing investigation."""
|
|
33
|
-
from
|
|
33
|
+
from voidaccess_cli import config as cli_config
|
|
34
34
|
cli_config.apply_env()
|
|
35
35
|
|
|
36
36
|
inv_id = _resolve_investigation_id(target)
|
|
@@ -50,7 +50,7 @@ def _resolve_investigation_id(target: str) -> Optional[str]:
|
|
|
50
50
|
except Exception:
|
|
51
51
|
return None
|
|
52
52
|
return data.get("investigation", {}).get("id") or data.get("id")
|
|
53
|
-
from
|
|
53
|
+
from voidaccess_cli.adapters import sqlite as sqlite_adapter
|
|
54
54
|
sqlite_adapter.init_db()
|
|
55
55
|
resolved = sqlite_adapter.resolve_investigation_id(target) or target
|
|
56
56
|
row = sqlite_adapter.get_investigation(resolved)
|
|
@@ -89,7 +89,7 @@ _TYPE_MAP = {
|
|
|
89
89
|
|
|
90
90
|
def _load_extraction_results(investigation_id: str) -> list:
|
|
91
91
|
"""Reconstruct ExtractionResult-shaped objects from the DB."""
|
|
92
|
-
from
|
|
92
|
+
from voidaccess_cli.adapters import sqlite as sqlite_adapter
|
|
93
93
|
rows = sqlite_adapter.get_entities(investigation_id)
|
|
94
94
|
fakes = []
|
|
95
95
|
for r in rows:
|
|
@@ -25,7 +25,7 @@ def run(
|
|
|
25
25
|
output: Optional[Path] = typer.Option(None, "--output", help="Output file"),
|
|
26
26
|
) -> None:
|
|
27
27
|
"""Export an investigation."""
|
|
28
|
-
from
|
|
28
|
+
from voidaccess_cli import config as cli_config
|
|
29
29
|
cli_config.apply_env()
|
|
30
30
|
|
|
31
31
|
fmt = fmt.lower()
|
|
@@ -58,7 +58,7 @@ def _load_target(target: str) -> tuple[Optional[str], Optional[dict]]:
|
|
|
58
58
|
return None, None
|
|
59
59
|
inv_id = data.get("investigation", {}).get("id") or data.get("id")
|
|
60
60
|
return inv_id, data
|
|
61
|
-
from
|
|
61
|
+
from voidaccess_cli.adapters import sqlite as sqlite_adapter
|
|
62
62
|
sqlite_adapter.init_db()
|
|
63
63
|
resolved = sqlite_adapter.resolve_investigation_id(target) or target
|
|
64
64
|
data = sqlite_adapter.investigation_to_export_dict(resolved)
|
|
@@ -75,7 +75,7 @@ def _render(fmt: str, inv_id: Optional[str], data: dict) -> tuple[str | bytes, s
|
|
|
75
75
|
return _csv_from_data(data), ".csv"
|
|
76
76
|
|
|
77
77
|
if fmt == "md":
|
|
78
|
-
from
|
|
78
|
+
from voidaccess_cli.commands.investigate import _render_markdown # reuse renderer
|
|
79
79
|
# Adapt shape: _render_markdown expects flat payload
|
|
80
80
|
flat = _flatten_for_md(data)
|
|
81
81
|
return _render_markdown(flat), ".md"
|
|
@@ -154,5 +154,5 @@ def _default_out_path(target: str, suffix: str) -> Path:
|
|
|
154
154
|
p = Path(target).expanduser()
|
|
155
155
|
if p.exists():
|
|
156
156
|
return p.with_suffix(suffix)
|
|
157
|
-
from
|
|
157
|
+
from voidaccess_cli import config as cli_config
|
|
158
158
|
return cli_config.get_output_dir() / f"{target}{suffix}"
|
|
@@ -46,7 +46,7 @@ def run(
|
|
|
46
46
|
quiet: bool = typer.Option(False, "--quiet", help="No live display; print final summary only"),
|
|
47
47
|
) -> None:
|
|
48
48
|
"""Run an investigation: query → search → scrape → extract → enrich → report."""
|
|
49
|
-
from
|
|
49
|
+
from voidaccess_cli import config as cli_config
|
|
50
50
|
|
|
51
51
|
cli_config.apply_env()
|
|
52
52
|
if quiet:
|
|
@@ -106,10 +106,10 @@ async def _run_investigation(
|
|
|
106
106
|
fmt: str,
|
|
107
107
|
quiet: bool,
|
|
108
108
|
) -> None:
|
|
109
|
-
from
|
|
110
|
-
from
|
|
111
|
-
from
|
|
112
|
-
from
|
|
109
|
+
from voidaccess_cli import config as cli_config
|
|
110
|
+
from voidaccess_cli.adapters import sqlite as sqlite_adapter
|
|
111
|
+
from voidaccess_cli.display import InvestigationDisplay
|
|
112
|
+
from voidaccess_cli.tor_detect import detect_tor, tor_unavailable_message
|
|
113
113
|
|
|
114
114
|
cfg = cli_config.load_config()
|
|
115
115
|
preset = DEPTH_PRESETS[depth]
|
|
@@ -500,7 +500,7 @@ def _build_cooccurrence_edges(investigation_id: str) -> int:
|
|
|
500
500
|
from db.session import get_session
|
|
501
501
|
except Exception:
|
|
502
502
|
return 0
|
|
503
|
-
from
|
|
503
|
+
from voidaccess_cli.adapters.sqlite import save_relationships
|
|
504
504
|
|
|
505
505
|
edges: list[dict] = []
|
|
506
506
|
inv_uuid = uuid.UUID(investigation_id)
|
|
@@ -26,7 +26,7 @@ def run(
|
|
|
26
26
|
),
|
|
27
27
|
) -> None:
|
|
28
28
|
"""Open the entity browser TUI."""
|
|
29
|
-
from
|
|
29
|
+
from voidaccess_cli import config as cli_config
|
|
30
30
|
cli_config.apply_env()
|
|
31
31
|
|
|
32
32
|
data: Optional[dict] = None
|
|
@@ -41,7 +41,7 @@ def run(
|
|
|
41
41
|
if candidate_path.exists() and candidate_path.suffix == ".json":
|
|
42
42
|
data = json.loads(candidate_path.read_text(encoding="utf-8"))
|
|
43
43
|
else:
|
|
44
|
-
from
|
|
44
|
+
from voidaccess_cli.adapters import sqlite as sqlite_adapter
|
|
45
45
|
sqlite_adapter.init_db()
|
|
46
46
|
resolved = sqlite_adapter.resolve_investigation_id(target) or target
|
|
47
47
|
data = sqlite_adapter.investigation_to_export_dict(resolved)
|
|
@@ -49,13 +49,13 @@ def run(
|
|
|
49
49
|
console.print(f"[red]Unknown investigation:[/red] {target}")
|
|
50
50
|
raise typer.Exit(code=1)
|
|
51
51
|
|
|
52
|
-
from
|
|
52
|
+
from voidaccess_cli.browser import EntityBrowserApp
|
|
53
53
|
app = EntityBrowserApp(data=data)
|
|
54
54
|
app.run()
|
|
55
55
|
|
|
56
56
|
|
|
57
57
|
def _pick_recent() -> Optional[str]:
|
|
58
|
-
from
|
|
58
|
+
from voidaccess_cli.adapters import sqlite as sqlite_adapter
|
|
59
59
|
sqlite_adapter.init_db()
|
|
60
60
|
rows = sqlite_adapter.list_investigations(limit=20)
|
|
61
61
|
if not rows:
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
cli/main.py — typer entry point exposed as the `voidaccess` script.
|
|
3
3
|
|
|
4
4
|
Defined as the [project.scripts] target in pyproject.toml:
|
|
5
|
-
voidaccess = "
|
|
5
|
+
voidaccess = "voidaccess_cli.main:app"
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
8
|
from __future__ import annotations
|
|
@@ -24,11 +24,20 @@ import typer
|
|
|
24
24
|
from rich.console import Console
|
|
25
25
|
from rich.table import Table
|
|
26
26
|
|
|
27
|
-
from
|
|
28
|
-
from
|
|
29
|
-
from
|
|
27
|
+
from voidaccess_cli import __version__
|
|
28
|
+
from voidaccess_cli import config as cli_config
|
|
29
|
+
from voidaccess_cli.commands import configure, enrich, export, investigate, show
|
|
30
30
|
|
|
31
31
|
console = Console()
|
|
32
|
+
BANNER = """\
|
|
33
|
+
[color(183)] ░░[color(141)]████████[color(183)]░░[/]
|
|
34
|
+
[color(183)] ░░[color(141)]████████████[color(183)]░░[/]
|
|
35
|
+
[color(183)] ░░[color(141)]██████████████[color(183)]░░[/]
|
|
36
|
+
[color(183)] ░░[color(141)]████[/] [bright_white]void[/] [color(141)]████[color(183)]░░[/]
|
|
37
|
+
[color(183)] ░░[color(141)]██████████████[color(183)]░░[/]
|
|
38
|
+
[color(183)] ░░[color(141)]████████████[color(183)]░░[/]
|
|
39
|
+
[color(183)] ░░[color(141)]████████[color(183)]░░[/]
|
|
40
|
+
[dim white] dark web osint intelligence[/dim white]"""
|
|
32
41
|
|
|
33
42
|
app = typer.Typer(
|
|
34
43
|
name="voidaccess",
|
|
@@ -63,7 +72,7 @@ def _ensure_first_run() -> None:
|
|
|
63
72
|
@app.command("status")
|
|
64
73
|
def status() -> None:
|
|
65
74
|
"""Show current config, Tor status, and detected API keys."""
|
|
66
|
-
from
|
|
75
|
+
from voidaccess_cli.tor_detect import detect_tor
|
|
67
76
|
cli_config.apply_env()
|
|
68
77
|
cfg = cli_config.load_config()
|
|
69
78
|
|
|
@@ -112,7 +121,7 @@ def list_investigations(
|
|
|
112
121
|
) -> None:
|
|
113
122
|
"""List saved investigations."""
|
|
114
123
|
cli_config.apply_env()
|
|
115
|
-
from
|
|
124
|
+
from voidaccess_cli.adapters import sqlite as sqlite_adapter
|
|
116
125
|
sqlite_adapter.init_db()
|
|
117
126
|
rows = sqlite_adapter.list_investigations(limit=limit)
|
|
118
127
|
if as_json:
|
|
@@ -144,10 +153,26 @@ def version() -> None:
|
|
|
144
153
|
console.print(f"voidaccess {__version__}")
|
|
145
154
|
|
|
146
155
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
156
|
+
def show_banner(console: Console) -> None:
|
|
157
|
+
if not sys.stdout.isatty():
|
|
158
|
+
return
|
|
159
|
+
console.print()
|
|
160
|
+
console.print(BANNER, justify="center")
|
|
161
|
+
console.print()
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
@app.callback(invoke_without_command=True)
|
|
165
|
+
def main(
|
|
166
|
+
ctx: typer.Context,
|
|
167
|
+
no_banner: bool = typer.Option(
|
|
168
|
+
False, "--no-banner",
|
|
169
|
+
help="Skip banner"
|
|
170
|
+
),
|
|
171
|
+
) -> None:
|
|
172
|
+
"""Set env vars and render banner before command execution."""
|
|
150
173
|
cli_config.apply_env()
|
|
174
|
+
if not no_banner and not ctx.invoked_subcommand:
|
|
175
|
+
show_banner(console)
|
|
151
176
|
|
|
152
177
|
|
|
153
178
|
if __name__ == "__main__":
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{voidaccess-1.3.0 → voidaccess-1.4.0}/db/migrations/versions/0002_add_investigation_status_column.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{voidaccess-1.3.0 → voidaccess-1.4.0}/db/migrations/versions/0007_add_actor_style_profiles.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{voidaccess-1.3.0 → voidaccess-1.4.0}/db/migrations/versions/0011_add_page_extraction_cache.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{voidaccess-1.3.0 → voidaccess-1.4.0}/db/migrations/versions/0018_add_user_id_to_investigations.py
RENAMED
|
File without changes
|
|
File without changes
|
{voidaccess-1.3.0 → voidaccess-1.4.0}/db/migrations/versions/0020_add_entity_source_tracking.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|