OSINT Framework
@@ -28,8 +36,17 @@
(D) - Google Dork, for more information: Google Hacking
(R) - Requires registration
(M) - Indicates a URL that contains the search term and the URL itself must be edited manually
-
-
+
+
+
+
Notes
OSINT framework focused on gathering information from free tools or resources. The intention is to help people find free OSINT resources. Some of the sites included might require registration or offer more data for $$$, but you should be able to get at least a portion of the available information for no cost.
diff --git a/public/js/arf.js b/public/js/arf.js
index 7b31315..b3fa05f 100644
--- a/public/js/arf.js
+++ b/public/js/arf.js
@@ -18,6 +18,10 @@ var vis = d3.select("#body").append("svg")
.append("g")
.attr("transform", "translate(" + margin[3] + "," + margin[0] + ")");
+function getCSSVar(name) {
+ return getComputedStyle(document.body).getPropertyValue(name).trim();
+}
+
d3.json("arf.json").then(function(json) {
root = d3.hierarchy(json, function(d) {
return d && d.children ? d.children.filter(function(c) { return c != null; }) : null;
@@ -33,20 +37,11 @@ d3.json("arf.json").then(function(json) {
}
}
-/* function toggleAll(d) {
- if (d.children) {
- d.children.forEach(toggleAll);
- toggle(d);
- }
- } */
root.children.forEach(collapse);
update(root);
});
function update(source) {
- // var duration = d3.event && d3.event.altKey ? 5000 : 500;
-
- // Compute the new tree layout.
tree(root);
var nodes = root.descendants().reverse();
var links = root.links();
@@ -54,7 +49,7 @@ function update(source) {
// Normalize for fixed-depth.
nodes.forEach(function(d) { d.y = d.depth * 180; });
- // Update the nodes…
+ // Update the nodes
var node = vis.selectAll("g.node")
.data(nodes, function(d) { return d.id || (d.id = ++i); });
@@ -66,7 +61,9 @@ function update(source) {
nodeEnter.append("circle")
.attr("r", 1e-6)
- .style("fill", function(d) { return d._children ? "lightsteelblue" : "#fff"; });
+ .style("fill", function(d) {
+ return d._children ? getCSSVar("--color-node-fill-branch") : getCSSVar("--color-node-fill-leaf");
+ });
nodeEnter.append('a')
.attr("target", "_blank")
@@ -76,7 +73,9 @@ function update(source) {
.attr("dy", ".35em")
.attr("text-anchor", function(d) { return d.children || d._children ? "end" : "start"; })
.text(function(d) { return d.data.name; })
- .style("fill", function(d) { return d.data.free ? 'black' : '#999'; })
+ .style("fill", function(d) {
+ return d.data.free ? getCSSVar("--color-text-primary") : getCSSVar("--color-text-secondary");
+ })
.style("fill-opacity", 1e-6);
nodeEnter.append("title")
@@ -91,10 +90,15 @@ function update(source) {
nodeUpdate.select("circle")
.attr("r", 6)
- .style("fill", function(d) { return d._children ? "lightsteelblue" : "#fff"; });
+ .style("fill", function(d) {
+ return d._children ? getCSSVar("--color-node-fill-branch") : getCSSVar("--color-node-fill-leaf");
+ });
nodeUpdate.select("text")
- .style("fill-opacity", 1);
+ .style("fill-opacity", 1)
+ .style("fill", function(d) {
+ return d.data.free ? getCSSVar("--color-text-primary") : getCSSVar("--color-text-secondary");
+ });
// Transition exiting nodes to the parent's new position.
var nodeExit = node.exit().transition()
@@ -108,7 +112,7 @@ function update(source) {
nodeExit.select("text")
.style("fill-opacity", 1e-6);
- // Update the links…
+ // Update the links
var link = vis.selectAll("path.link")
.data(links, function(d) { return d.target.id; });
@@ -129,7 +133,7 @@ function update(source) {
.duration(duration)
.attr("d", diagonal);
- // Transition exiting nodes to the parent's new position.
+ // Transition exiting links to the parent's new position.
link.exit().transition()
.duration(duration)
.attr("d", function(d) {
@@ -155,8 +159,16 @@ function toggle(d) {
d._children = null;
}
}
-//Togle Dark Mode
+
+// Toggle light/dark mode and persist preference.
function goDark() {
- var element = document.body;
- element.classList.toggle("dark-Mode");
-}
\ No newline at end of file
+ var body = document.body;
+ var isLight = body.classList.toggle("light-mode");
+ localStorage.setItem("theme", isLight ? "light" : "dark");
+ var btn = document.getElementById("theme-toggle");
+ if (btn) {
+ btn.textContent = isLight ? "Switch to dark mode" : "Switch to light mode";
+ }
+ // Re-render to pick up new CSS variable values for D3 inline styles.
+ update(root);
+}
From b2cd803130c4db8b75f10f20d9a112331eafcfa8 Mon Sep 17 00:00:00 2001
From: s0lray
Date: Tue, 24 Mar 2026 07:29:22 -0400
Subject: [PATCH 2/3] fix(ui): improve light mode secondary text contrast to
meet WCAG AA
#767676 on white = 4.54:1, just above the 4.5:1 AA threshold.
#999 (previous value) was 2.85:1, which failed.
Closes THE-37.
Co-Authored-By: Paperclip
---
public/css/arf.css | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/public/css/arf.css b/public/css/arf.css
index fbbbf39..8e93be0 100644
--- a/public/css/arf.css
+++ b/public/css/arf.css
@@ -18,7 +18,7 @@ body.light-mode {
--color-bg: #ffffff;
--color-surface: #f5f5f5;
--color-text-primary: #000000;
- --color-text-secondary: #999;
+ --color-text-secondary: #767676;
--color-node-stroke: steelblue;
--color-node-fill-branch: lightsteelblue;
--color-node-fill-leaf: #ffffff;
From 635c51cd6336f80adad0edabe69142e122b18e07 Mon Sep 17 00:00:00 2001
From: s0lray
Date: Tue, 24 Mar 2026 07:58:04 -0400
Subject: [PATCH 3/3] fix(ui): replace blue-tinted dark mode palette with
neutral dark grays
Board feedback: dark mode looked blue rather than properly dark.
Changed backgrounds from navy (#1a1a2e, #16213e) to neutral darks
(#1a1a1a, #2d2d2d), node fills to gray (#3a3a3a), and node stroke
to steelblue to match light mode styling.
Co-Authored-By: Claude Opus 4.6
Co-Authored-By: Paperclip
---
public/css/arf.css | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/public/css/arf.css b/public/css/arf.css
index 8e93be0..3238f8b 100644
--- a/public/css/arf.css
+++ b/public/css/arf.css
@@ -1,13 +1,13 @@
/* === Color tokens === */
:root {
- --color-bg: #1a1a2e;
- --color-surface: #16213e;
+ --color-bg: #1a1a1a;
+ --color-surface: #2d2d2d;
--color-text-primary: #e0e0e0;
- --color-text-secondary: #888;
- --color-node-stroke: #4a9eff;
- --color-node-fill-branch: #2a4a7f;
- --color-node-fill-leaf: #1a1a2e;
- --color-link: #444;
+ --color-text-secondary: #999;
+ --color-node-stroke: steelblue;
+ --color-node-fill-branch: #3a3a3a;
+ --color-node-fill-leaf: #1a1a1a;
+ --color-link: #555;
--color-noscript-bg: #2a1a00;
--color-noscript-border: #7a4a00;
--color-legend: #e0e0e0;