Commit 1166ef98 authored by Francesco Poldi's avatar Francesco Poldi

Added Graph OSINT explorer

parent e91193b8
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
<!DOCTYPE html>
<html>
<head>
<title>Title</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="css/uikit.min.css" />
<script src="js/uikit.min.js"></script>
<script src="js/uikit-icons.min.js"></script>
<link rel="stylesheet" href="photon/css/photon.min.css">
<style>
body {
color: #d3d3d3;
font: 12pt arial;
min-height: 100px;
min-width: 100px;
}
#pane {
width: auto;
height: auto;
min-width: 400px;
min-height: 400px;
overflow:hidden;
}
#includedContent {
width: 100%;
height: 100%;
overflow: hidden;
}
</style>
</head>
<body>
<div class="window">
<div class="window-content">
<div class="pane-group">
<nav class="nav-group">
<h5 class="nav-group-title">Favorites</h5>
<a class="nav-group-item" id="loadHome">
<span class="icon icon-home"></span>
</a>
<span class="nav-group-item" id="dashboard">
<ul class="uk-iconnav uk-iconnav-vertical">
<li><a href="#" uk-icon="icon: image"> Dashboard </a></li>
</ul>
</span>
<span class="nav-group-item" id="twint">
<ul class="uk-iconnav uk-iconnav-vertical">
<li><a href="#" uk-icon="icon: social"> Graph </a></li>
</ul>
</span>
</nav>
<div class="pane" id="pane">
<div id="includedContent"></div>
<script>window.$ = window.jQuery = require('jquery');</script>
<script>
const {ipcRenderer} = require('electron');
$("#twint").click(function(){
$("#includedContent").load("pages/form.html");
});
$("#dashboard").click(function(){
$("#includedContent").load("pages/dashboard.html");
});
$(document).ready(function(){
$("#includedContent").load("pages/home.html");
});
$("#loadHome").click(function(){
$("#includedContent").load("pages/home.html");
});
</script>
</div>
</div>
</div>
</div>
</body>
</html>
\ No newline at end of file
//const electron = require('electron');
const url = require('url');
const path = require('path');
var fs = require('fs');
//var sqlite3 = require('sqlite3').verbose();
const {app, BrowserWindow, ipcMain, Menu, MenuItem} = require('electron');
const menu = new Menu()
menu.append(new MenuItem({ label: 'Hello' }))
menu.append(new MenuItem({ type: 'separator' }))
menu.append(new MenuItem({ label: 'Electron', type: 'checkbox', checked: true }))
let mainWindow;
app.on('ready' , function(){
win = new BrowserWindow({
width: 800,
height: 600,
minWidth: 200,
minHeight: 200,
})
win.on('closed', () => {
win = null
});
win.loadURL(url.format({
pathname: path.join(__dirname, 'index.html'),
protocol: 'file:',
slashes: true
}));
ipcMain.on('get-dashboard-url', (event, arg) => {
fs.readFile('./dashboard.txt', 'utf-8', (err, data) => {
event.sender.send('asynchronous-reply', data);
});
});
var graphName = "";
ipcMain.on('Name', (event, arg) => {
graphName = arg;
});
ipcMain.on('importData', (event, arg) => {
fs.readFile(graphName, 'utf-8', (err, data) => {
event.sender.send('responseGraph', data);
});
});
ipcMain.on('exportData', (event, arg) => {
fs.writeFile(graphName, arg)
});
ipcMain.on('show-context-menu', (event, arg) => {
const menu = new Menu();
menu.append(new MenuItem ({
label: 'Item ' + arg,
}));
menu.popup(menu)
});
});
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
{
"name": "twint-explorer",
"version": "1.0.0",
"description": "Twint Explorer",
"main": "index.js",
"scripts": {
"start": "electron .",
"rebuild": "electron-rebuild -f -w sqlite3",
"build": "electron-packager . --all twint --ignore-modules=node_modules/electron-*"
},
"author": "Francesco Poldi @pielco11",
"license": "MIT",
"dependencies": {
"electron": "^1.8.4",
"jquery": "^3.3.1",
"sqlite3": "^4.0.0",
"uikit": "^3.0.0-beta.40",
"vis": "^4.21.0"
},
"devDependencies": {
"electron-osx-sign": "^0.4.10",
"electron-packager": "^12.0.1",
"electron-rebuild": "^1.7.3"
}
}
<html>
<link rel="stylesheet" href="photon/css/photon.min.css">
<body>
<script>
window.$ = window.jQuery = require('jquery');
//const {ipcRenderer} = require('electron');
$(document).ready(function(){
ipcRenderer.send('get-dashboard-url', 'asynchronous-message');
console.log("sent");
ipcRenderer.on('asynchronous-reply', (event, arg) => {
document.getElementById("dFrame").src = arg;
console.log(arg);
});
})
</script>
<iframe src="" height=100% width=100% id="dFrame"></iframe>
</body>
</html>
\ No newline at end of file
<html>
<h1>Twint Graph Visualizer</h1>
<head>
<title>
Twint Graph Visualizer
</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="css/uikit.min.css" />
<script src="js/uikit.min.js"></script>
<script src="js/uikit-icons.min.js"></script>
<script>
const vis = require('vis');
</script>
<link href="node_modules/vis/dist/vis-network.min.css" rel="stylesheet" type="text/css"/>
<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css">
<link rel="stylesheet" href="http://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css">
<style>
form {
margin-left: 10px;
}
h1 {
margin-left: 10px;
}
body {
color: black
}
#mynetwork {
width: 100%;
height: 100%;
overflow:hidden;
border: 1px solid #444444;
background-color: #444444;
}
</style>
</head>
<body>
<form action=ìì>
<div class="uk-margin" uk-margin>
<div uk-form-custom="target: true">
<input class="uk-input uk-form-width-medium" type="text" placeholder="Database file" id="submitDatabase">
</div>
<div uk-form-custom="target: true">
<input class="uk-input uk-form-width-medium" type="text" placeholder="Graph file" id="graphFile">
</div>
<div uk-form-custom="target: > * > span:first-child">
<select id="submitTable">
<option value="">Please select...</option>
<option value="users where user = ">Users</option>
<option value="followers where follower = ">Followers</option>
<option value="following where follows =">Following</option>
</select>
<button class="uk-button uk-button-default" type="button" tabindex="-1">
<span></span>
<span uk-icon="icon: chevron-down"></span>
</button>
</div>
<input class="uk-input uk-form-width-medium" type="text" id="submitQuery" placeholder="Condition">
</div>
<div>
<input class="uk-input uk-form-width-medium" type="text" id="submitRawQuery" placeholder="Raw Query">
<button type="button" class="uk-button uk-button-default" onclick="loadQuery()">Load settings</button>
<button type="button" class="uk-button uk-button-default" onclick="loadGraph()">Load graph</button>
<button type="button" class="uk-button uk-button-default" onclick="importNetwork()">Import Graph</input>
<button type="button" class="uk-button uk-button-default" onclick="exportNetwork()">Export Graph</input>
</div>
</form>
<script>
//var sqlite3 = require('sqlite3').verbose();
var network;
var data;
var nodes = new vis.DataSet();
var edges = new vis.DataSet();
var query = "select * from ";
var _table = "";
var _where = "";
var _raw_ = "";
var val = "";
const sqlite3 = require('sqlite3').verbose();
function loadQuery(){
_where = document.getElementById("submitQuery").value;
_table = document.getElementById("submitTable").value;
_raw_ = document.getElementById("submitRawQuery").value;
if (_raw_) { query = _raw_;}
else if (_where == "*") { query += _table.split(" ")[0];}
else{query += _table + "\"" + _where + "\"";}
val = document.getElementById("submitDatabase").value;
var db = new sqlite3.Database(val);
console.log(query);
if (query.split(" ")[3] == "followers") {
db.each(query, (err, result) => {
try{
nodes.add({
id : result.follower,
label: result.follower,
group: 'user'
});
}catch(err) {;}
try{
nodes.add({
id : result.user,
label: result.user,
group: 'user'
});
}catch(err) {;}
try{
edges.add({
id : result.user + "_" + result.follower,
from : result.follower,
to : result.user,
arrows: 'to'
});
}catch(err) {
edges.remove(result.user + "_" + result.follower);
edges.add({
id : result.user + "_" + result.follower,
from : result.follower,
to : result.user,
arrows: 'to, from'
});
}
})
}
else if (query.split(" ")[3] == "users") {
db.each(query, (err, result) => {
try{
nodes.add({
id : result.user,
label: result.user,
group: 'user'
});
}catch(err) {;}
})
}
else {
db.each(query, (err, result) => {
try{
nodes.add({
id : result.follows,
label: result.follows,
group: 'user'
});
}catch(err) {;}
try{
nodes.add({
id : result.user,
label: result.user,
group: 'user'
});
}catch(err) {;}
try{
edges.add({
id : result.user + "_" + result.follows,
from : result.user,
to : result.follows,
arrows: 'to'
});
}catch(err) {
edges.remove(result.user + "_" + result.follows);
edges.add({
id : result.user + "_" + result.follows,
from : result.user,
to : result.follows,
arrows: 'to, from'
});
}
})
}
query = "select * from ";
db.close();
};
function loadGraph(){
var container = document.getElementById('mynetwork');
data = {
nodes: nodes,
edges: edges
};
var options = {
layout: {improvedLayout:false},
physics : {
"barnesHut":{"damping": 1, "gravitationalConstant": -18500,},
stabilization: {
enabled : true,
iterations : 2000,
updateInterval: 25
},
timestep: 1,
},
groups: {
user: {shape: 'icon', icon:
{
face : 'Ionicons',
code : '\uf47e',
size : 50,
color: 'cyan'
}
}
},
nodes : {
font: {
color: '#ffffff'
}
}
};
network = new vis.Network(container, data, options);
network.on("stabilizationIterationsDone", function () {
network.setOptions( { physics: false } );
});
}
</script>
<div id="mynetwork"></div>
</body>
</html>
<html>
<head>
<link href="node_modules/vis/dist/vis-network.min.css" rel="stylesheet" type="text/css"/>
<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css">
<link rel="stylesheet" href="http://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css">
</head>
<body>
<h1>
Home of Twint OSINT Visualizer
</h1>
</body>
</html>
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
var app = require('app'); // Module to control application life.
var BrowserWindow = require('browser-window'); // Module to create native browser window.
// Keep a global reference of the window object, if you don't, the window will
// be closed automatically when the JavaScript object is garbage collected.
var mainWindow = null;
// Quit when all windows are closed.
app.on('window-all-closed', function() {
// On OS X it is common for applications and their menu bar
// to stay active until the user quits explicitly with Cmd + Q
if (process.platform != 'darwin') {
app.quit();
}
});
// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
app.on('ready', function() {
// Create the browser window.
mainWindow = new BrowserWindow({
width: 600,
height: 300,
'min-width': 500,
'min-height': 200,
'accept-first-mouse': true,
'title-bar-style': 'hidden'
});
// and load the index.html of the app.
mainWindow.loadUrl('file://' + __dirname + '/index.html');
// Open the DevTools.
//mainWindow.openDevTools();
// Emitted when the window is closed.
mainWindow.on('closed', function() {
// Dereference the window object, usually you would store windows
// in an array if your app supports multi windows, this is the time
// when you should delete the corresponding element.
mainWindow = null;
});
});
<!DOCTYPE html>
<html>
<head>
<title>Photon</title>
<!-- Stylesheets -->
<link rel="stylesheet" href="../css/photon.min.css">
<!-- Javascript -->
<script src="js/menu.js" charset="utf-8"></script>
</head>
<body>
<div class="window">
<!-- .toolbar-header sits at the top of your app -->
<header class="toolbar toolbar-header">
<h1 class="title">Photon</h1>
</header>
<!-- Your app's content goes inside .window-content -->
<div class="window-content">
<div class="pane-group">
<div class="pane pane-sm sidebar">
<nav class="nav-group">
<h5 class="nav-group-title">Favorites</h5>
<span class="nav-group-item">
<span class="icon icon-home"></span>
connors
</span>
<span class="nav-group-item active">
<span class="icon icon-light-up"></span>
Photon
</span>
<span class="nav-group-item">
<span class="icon icon-download"></span>
Downloads
</span>
<span class="nav-group-item">
<span class="icon icon-folder"></span>
Documents
</span>
<span class="nav-group-item">
<span class="icon icon-window"></span>
Applications
</span>
<span class="nav-group-item">
<span class="icon icon-signal"></span>
AirDrop
</span>
<span class="nav-group-item">
<span class="icon icon-monitor"></span>
Desktop
</span>
</nav>
</div>
<div class="pane">
<table class="table-striped">
<thead>
<tr>
<th>Name</th>
<th>Kind</th>
<th>Date Modified</th>
<th>Author</th>
</tr>
</thead>
<tbody>
<tr>
<td>bars.scss</td>
<td>Document</td>
<td>Oct 13, 2015</td>
<td>connors</td>
</tr>
<tr>
<td>base.scss</td>
<td>Document</td>
<td>Oct 13, 2015</td>
<td>connors</td>
</tr>
<tr>
<td>button-groups.scss</td>
<td>Document</td>
<td>Oct 13, 2015</td>
<td>connors</td>
</tr>
<tr>
<td>buttons.scss</td>
<td>Document</td>
<td>Oct 13, 2015</td>
<td>connors</td>
</tr>
<tr>
<td>docs.scss</td>
<td>Document</td>
<td>Oct 13, 2015</td>
<td>connors</td>
</tr>
<tr>
<td>forms.scss</td>
<td>Document</td>
<td>Oct 13, 2015</td>
<td>connors</td>
</tr>
<tr>
<td>grid.scss</td>
<td>Document</td>
<td>Oct 13, 2015</td>
<td>connors</td>
</tr>
<tr>
<td>icons.scss</td>
<td>Document</td>
<td>Oct 13, 2015</td>
<td>connors</td>
</tr>
<tr>
<td>images.scss</td>
<td>Document</td>
<td>Oct 13, 2015</td>
<td>connors</td>
</tr>
<tr>
<td>lists.scss</td>
<td>Document</td>
<td>Oct 13, 2015</td>
<td>connors</td>
</tr>
<tr>
<td>mixins.scss</td>
<td>Document</td>
<td>Oct 13, 2015</td>
<td>connors</td>
</tr>
<tr>
<td>navs.scss</td>
<td>Document</td>
<td>Oct 13, 2015</td>
<td>connors</td>
</tr>
<tr>
<td>normalize.scss</td>
<td>Document</td>
<td>Oct 13, 2015</td>
<td>connors</td>
</tr>
<tr>
<td>photon.scss</td>
<td>Document</td>
<td>Oct 13, 2015</td>
<td>connors</td>
</tr>
<tr>
<td>tables.scss</td>
<td>Document</td>
<td>Oct 13, 2015</td>
<td>connors</td>
</tr>
<tr>
<td>tabs.scss</td>
<td>Document</td>
<td>Oct 13, 2015</td>
<td>connors</td>
</tr>
<tr>
<td>utilities.scss</td>
<td>Document</td>
<td>Oct 13, 2015</td>
<td>connors</td>
</tr>
<tr>
<td>variables.scss</td>
<td>Document</td>
<td>Oct 13, 2015</td>
<td>connors</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</body>
</html>
var remote = require('remote')
var Menu = remote.require('menu')
var MenuItem = remote.require('menu-item')
// Build our new menu
var menu = new Menu()
menu.append(new MenuItem({
label: 'Delete',
click: function() {
// Trigger an alert when menu item is clicked
alert('Deleted')
}
}))
menu.append(new MenuItem({
label: 'More Info...',
click: function() {
// Trigger an alert when menu item is clicked
alert('Here is more information')
}
}))
// Add the listener
document.addEventListener('DOMContentLoaded', function () {
document.querySelector('.js-context-menu').addEventListener('click', function (event) {
menu.popup(remote.getCurrentWindow());
})
})
{
"name": "proton-template-app",
"version": "1.0.0",
"description": "A simple template app for Proton",
"main": "app.js",
"author": "Connor Sears",
"scripts": {
"start": "electron ."
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment