Spaces:
Paused
Paused
| import 'dotenv/config'; | |
| import neo4j from 'neo4j-driver'; | |
| import * as path from 'path'; | |
| import { fileURLToPath } from 'url'; | |
| const __filename = fileURLToPath(import.meta.url); | |
| const __dirname = path.dirname(__filename); | |
| const KEYWORDS = [ | |
| 'udbud', 'tender', 'public procurement', | |
| 'cybersecurity', 'sikkerhed', 'security', | |
| 'budget', 'ansvar', 'portfolio', 'portefølje', | |
| 'claus', 'familie', 'family', 'privat', 'private', | |
| 'darkweb', 'leak', 'password' | |
| ]; | |
| async function analyzeProfile() { | |
| console.log('🕵️ Analysing User Profile & Focus Areas...'); | |
| const uri = process.env.NEO4J_URI; | |
| const user = process.env.NEO4J_USER; | |
| const password = process.env.NEO4J_PASSWORD; | |
| const driver = neo4j.driver(uri, neo4j.auth.basic(user, password)); | |
| const session = driver.session(); | |
| try { | |
| // 1. Søg i filnavne og stier | |
| console.log('📂 Scanning file paths for keywords...'); | |
| const pathQuery = ` | |
| MATCH (f:File) | |
| WHERE ${KEYWORDS.map(k => `toLower(f.path) CONTAINS '${k}'`).join(' OR ')} | |
| RETURN f.path as path, f.name as name | |
| LIMIT 20 | |
| `; | |
| const pathResults = await session.run(pathQuery); | |
| // 2. Søg i indhold (hvis indekseret - simuleret her via metadata eller noder) | |
| // Bemærk: Vi har ikke fuldtekst af alle dokumenter i grafen endnu, kun kode-struktur. | |
| // Men vi tjekker 'IntelReport' og 'ThreatActor' for sammenfald. | |
| console.log('🧠 Checking Intelligence Graph correlation...'); | |
| // Tjek om 'Claus' eller firma-relaterede termer optræder i Threat Data | |
| const threatQuery = ` | |
| MATCH (n) | |
| WHERE (n:Victim OR n:ThreatActor OR n:IntelReport) | |
| AND (toLower(n.name) CONTAINS 'claus' OR toLower(n.name) CONTAINS 'widget') | |
| RETURN labels(n) as type, n.name as name | |
| `; | |
| const threatResults = await session.run(threatQuery); | |
| // 3. Rapport | |
| console.log('\n--- 🔍 FINDINGS REPORT ---'); | |
| if (pathResults.records.length > 0) { | |
| console.log('\n📄 Relevant Files (Portfolio & Interests):'); | |
| pathResults.records.forEach(r => { | |
| console.log(` - ${r.get('name')} (${r.get('path')})`); | |
| }); | |
| } else { | |
| console.log('\n📄 No direct file matches found in current index.'); | |
| } | |
| if (threatResults.records.length > 0) { | |
| console.log('\n⚠️ THREAT ALERT (Personal/Brand Mention):'); | |
| threatResults.records.forEach(r => { | |
| console.log(` - [${r.get('type')}] ${r.get('name')}`); | |
| }); | |
| } else { | |
| console.log('\n✅ No direct mentions of User/Brand found in current Dark Web data sample.'); | |
| } | |
| } catch (error) { | |
| console.error('Analysis failed:', error); | |
| } finally { | |
| await session.close(); | |
| await driver.close(); | |
| } | |
| } | |
| analyzeProfile(); | |