From b225e3043dc2ab6cff1a5fef3971ff282c3a479f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Vinot?= Date: Fri, 8 Nov 2024 20:44:53 +0100 Subject: [PATCH] chg: refactorize and normalize the way we initialize the tables for the indexes --- website/web/__init__.py | 32 +-- website/web/sri.txt | 5 +- website/web/static/generic.js | 26 +++ website/web/static/render_tables.js | 183 ++++++++++++++++++ website/web/static/tree.js | 17 -- website/web/templates/body_hash.html | 44 ----- website/web/templates/cookie_name.html | 40 ++-- website/web/templates/favicon_details.html | 33 ++-- website/web/templates/hash_type_details.html | 17 -- website/web/templates/hhh_details.html | 15 -- website/web/templates/hostname.html | 27 ++- website/web/templates/identifier_details.html | 16 -- website/web/templates/main.html | 5 + website/web/templates/search.html | 14 +- website/web/templates/tree_body_hashes.html | 24 --- website/web/templates/tree_favicons.html | 19 -- website/web/templates/tree_hashes_types.html | 9 - website/web/templates/tree_hostnames.html | 23 --- website/web/templates/tree_identifiers.html | 8 - website/web/templates/tree_urls.html | 13 -- website/web/templates/url.html | 29 +-- 21 files changed, 312 insertions(+), 287 deletions(-) create mode 100644 website/web/static/render_tables.js diff --git a/website/web/__init__.py b/website/web/__init__.py index 51776393..272a58c3 100644 --- a/website/web/__init__.py +++ b/website/web/__init__.py @@ -11,7 +11,6 @@ import json import logging import logging.config import os -import sys import time import filetype # type: ignore[import-untyped] @@ -49,7 +48,6 @@ from lookyloo.helpers import (UserAgents, load_cookies, ) from zoneinfo import available_timezones -all_timezones_set = available_timezones() from .genericapi import api as generic_api from .helpers import (User, build_users_table, get_secret_key, @@ -58,6 +56,7 @@ from .helpers import (User, build_users_table, get_secret_key, from .proxied import ReverseProxied logging.config.dictConfig(get_config('logging')) +all_timezones_set = available_timezones() app: Flask = Flask(__name__) app.wsgi_app = ReverseProxied(app.wsgi_app) # type: ignore[method-assign] @@ -1478,13 +1477,19 @@ def rebuild_cache() -> WerkzeugResponse: def search() -> str | Response | WerkzeugResponse: if request.form.get('url'): quoted_url: str = quote_plus(request.form['url']) - return redirect(url_for('url_details', url=quoted_url)) + return redirect(url_for('url_details', from_popup=True, url=quoted_url)) if request.form.get('hostname'): - return redirect(url_for('hostname_details', hostname=request.form.get('hostname'))) + return redirect(url_for('hostname_details', from_popup=True, hostname=request.form.get('hostname'))) if request.form.get('ressource'): - return redirect(url_for('body_hash_details', body_hash=request.form.get('ressource'))) + return redirect(url_for('body_hash_details', from_popup=True, body_hash=request.form.get('ressource'))) if request.form.get('cookie'): - return redirect(url_for('cookies_name_detail', cookie_name=request.form.get('cookie'))) + return redirect(url_for('cookies_name_detail', from_popup=True, cookie_name=request.form.get('cookie'))) + if request.form.get('favicon_sha512'): + return redirect(url_for('favicon_detail', from_popup=True, favicon_sha512=request.form.get('favicon_sha512'))) + if 'favicon_file' in request.files: + favicon = request.files['favicon_file'].stream.read() + favicon_sha512 = hashlib.sha512(favicon).hexdigest() + return redirect(url_for('favicon_detail', from_popup=True, favicon_sha512=favicon_sha512)) return render_template('search.html') @@ -1731,8 +1736,9 @@ def simple_capture() -> str | Response | WerkzeugResponse: @app.route('/cookies/', methods=['GET']) def cookies_name_detail(cookie_name: str) -> str: + from_popup = True if (request.args.get('from_popup') and request.args.get('from_popup') == 'True') else False captures = get_cookie_name_investigator(cookie_name.strip()) - return render_template('cookie_name.html', cookie_name=cookie_name, captures=captures) + return render_template('cookie_name.html', cookie_name=cookie_name, captures=captures, from_popup=from_popup) @app.route('/hhhdetails/', methods=['GET']) @@ -1760,11 +1766,13 @@ def capture_hash_details(hash_type: str, h: str) -> str: @app.route('/favicon_details/', methods=['GET']) def favicon_detail(favicon_sha512: str) -> str: + from_popup = True if (request.args.get('from_popup') and request.args.get('from_popup') == 'True') else False captures, favicon = get_favicon_investigator(favicon_sha512.strip()) mimetype, b64_favicon, mmh3_shodan = favicon - return render_template('favicon_details.html', favicon_sha512=favicon_sha512, + return render_template('favicon_details.html', captures=captures, mimetype=mimetype, b64_favicon=b64_favicon, - mmh3_shodan=mmh3_shodan) + mmh3_shodan=mmh3_shodan, + from_popup=from_popup) @app.route('/body_hashes/', methods=['GET']) @@ -1776,15 +1784,17 @@ def body_hash_details(body_hash: str) -> str: @app.route('/urls/', methods=['GET']) def url_details(url: str) -> str: + from_popup = True if (request.args.get('from_popup') and request.args.get('from_popup') == 'True') else False url = unquote_plus(url).strip() captures = get_url_investigator(url) - return render_template('url.html', url=url, captures=captures) + return render_template('url.html', url=url, captures=captures, from_popup=from_popup) @app.route('/hostnames/', methods=['GET']) def hostname_details(hostname: str) -> str: + from_popup = True if (request.args.get('from_popup') and request.args.get('from_popup') == 'True') else False captures = get_hostname_investigator(hostname.strip()) - return render_template('hostname.html', hostname=hostname, captures=captures) + return render_template('hostname.html', hostname=hostname, captures=captures, from_popup=from_popup) @app.route('/stats', methods=['GET']) diff --git a/website/web/sri.txt b/website/web/sri.txt index fa4b3395..a552661f 100644 --- a/website/web/sri.txt +++ b/website/web/sri.txt @@ -20,7 +20,7 @@ "favicon.ico": "KOmrfwRbOQqhhwSeBkNpMRAxSVMmmLg+2kRMg9iSv7OWjE9spJc7x4MKB4AE/hi0knaV7UBVctAU6XZ7AC72ZA==", "font.png": "RwoQkj9dT9SLUL2F7cAA16Nat9t2hDb58eQlHF9ThUar829p0INUXG+5XuDaFOC8SsmCZK5vw2f+YAQ6mLC1Qw==", "generic.css": "Sh/BcxFMLYYaLdCluVt9efGvJ9CF5d+YJ7lkL2M24PRGu8VZHI9lJiUlFObIocjQgwss3Ve2U5cUAE5WiAdpQQ==", - "generic.js": "XgwjuFX2l5fhV2Ko9hJHenhI3LeKQTxnmL/844gJrzmwH/gSYnzikGavmucy9HjhwCaohXgZ5UD3ZJ3s8XHBog==", + "generic.js": "/8a1CxlMcMAwl3UMfcGVe1smZZUB0gesxjd3Bmy7LLV16gE/ZPq6HciOnjNq0Jh+55PSSgIRLPsTbqGNv6Mcxw==", "hostname_popup.js": "8VoaZVwk2FBFCBVjgAup534WPy8B+e5/uUJPqyERUYf3kBcUVC8/T72ha9BYPYj5a6SNOOUJPgVmD5QI6qtAWw==", "html.png": "T7pZrb8MMDsA/JV/51hu+TOglTqlxySuEVY0rpDjTuAEyhzk2v+W4kYrj7vX+Tp3n2d2lvVD08PwhCG62Yfbzg==", "ifr.png": "rI5YJypmz1QcULRf9UaOYSqV4tPUSxUdLAycoYzCwywt4Pw4eWzBg9SUr769VyIimoiIyJR+aNuoIA4p5WO2fQ==", @@ -33,11 +33,12 @@ "loader.gif": "ZZKD5vLSKBWKeUpa2KI9qheUJ49iTI/UULmVU/AX28fBfH00K3lLc2v5pVJZ4qXG1BbB13LTXzRKKU35H2XfNg==", "lookyloo.jpeg": "i6wBj8CsIM5YAQLEMQfhs3CNOSKkErF8AMqqM6ZygSwCyQgv9CU8xt94veMZhM/ufBWoz7kAXmR+yywmxsTxug==", "redirect.png": "PAjzlPV97rEFvH55mG1ZC9wRl98be3yMeX/nENuFkJcds6/AXgSR2ig/QyPULgobSnNgiYieLVWY/oqsgeywrQ==", + "render_tables.js": "4IWMmjPZR25ZfDUcX0WB8DShK9FxW34XP2dxudL+Hs9HVDe3rS15zGcOlFtn6XtaDKc1IcGxZSFmqCcRv6I5yw==", "secure.svg": "H8ni7t0d60nCJDVGuZpuxC+RBy/ipAjWT627D12HlZGg6LUmjSwPTQTUekm3UJupEP7TUkhXyq6WHc5gy7QBjg==", "stats.css": "/kY943FwWBTne4IIyf7iBROSfbGd82TeBicEXqKkRwawMVRIvM/Pk5MRa7okUyGIxaDjFQGmV/U1vy+PhN6Jbw==", "stats_graph.js": "S/sMNQK1UMMLD0xQeEa7sq3ce8o6oPxwxGlyKVtaHOODjair86dbBDm7cu6pa/elMRDJT1j09jEFjWp+5GbhTw==", "tree.css": "jc7+RiJaZy7utfMu7iMWicpt0y0ZFiEQlB4c7MFNdlWcZf0czi3LgSQUFlDWt828Mx463V+JP1RalXuRjbGcEg==", - "tree.js": "V7P3EisB9n58pHvSv6xxPxWaU8Rkz7ci7/WnVasvz5m8z5ERrzgsp5DZXZfWLJ59MDPKphXg+wn6ljRgn2TiQQ==", + "tree.js": "lj5SMtMYs2Oo++fWzHl2aQVHraCFZgpLCey99kql5wjhpYXryoacHM1zLHrP9E6A+b/1VA2zun9d445E3RLk4Q==", "tree_modals.js": "mGWQ9o4O+x8vBe9XNuAFrEfz8veuRwqE+wpreVKFQcvBvxNcgvxI0SjH9Z3gdozTTY7Hq7yqvC7xA9PWDblN/Q==", "up.jpg": "d1ljZJ9f5JekyM6RLFFH2Ua44j6neiQBdUIXOenRTjGppQr3JaeglpQIH6BjPCJL177+TH52U3UIRNS5YAyKIg==", "up_right.jpg": "OMmz+n+MxR34P8/fn5t4DkqKqdJRzQbXQ7fAi2lhkZIJGhVs2vIyY1f2hpYoBxDAX1OcYsSE2lqIR2vXNDGZsA==", diff --git a/website/web/static/generic.js b/website/web/static/generic.js index 31576325..5ae8d47f 100644 --- a/website/web/static/generic.js +++ b/website/web/static/generic.js @@ -25,11 +25,37 @@ function checkAllBoxes(name) { } } +function openURLInNewTab(url) { + let win = window.open(url, '_blank'); + if (win == null) { + return false; + } + win.focus(); + return true; +} + +function openTreeInNewTab(capture_uuid, hostnode_uuid=null) { + let url = `/tree/${capture_uuid}`; + if (hostnode_uuid != null) { + url += `/${hostnode_uuid}`; + } + return openURLInNewTab(url); +} + const goBackButtons = document.querySelectorAll('.goBack'); goBackButtons.forEach(el => el.addEventListener('click', event => { window.history.back(); })); +const openNewTabButtons = document.querySelectorAll('.openNewTab'); +openNewTabButtons.forEach(el => el.addEventListener('click', event => { + if (window.opener === null) { + return openTreeInNewTab(el.dataset.capture, el.dataset.hostnode) + } else { + return window.opener.openTreeInNewTab(el.dataset.capture, el.dataset.hostnode); + } +})); + // Parameters: // contentType: The content type of your file. // its like application/pdf or application/msword or image/jpeg or diff --git a/website/web/static/render_tables.js b/website/web/static/render_tables.js new file mode 100644 index 00000000..6420dd72 --- /dev/null +++ b/website/web/static/render_tables.js @@ -0,0 +1,183 @@ +["load", "shown.bs.modal"].forEach(e => window.addEventListener(e, function() { + + if (document.getElementById('bodyHashDetailsTable')) { + new DataTable('#bodyHashDetailsTable', { + retrieve: true, + order: [[ 0, "desc" ]], + columnDefs: [{ width: '20%', targets: 0, + render: (data) => { + const date = new Date(data); + return date.getFullYear() + '-' + (date.getMonth() + 1).toString().padStart(2, "0") + '-' + date.getDate().toString().padStart(2, "0") + ' ' + date.toTimeString(); + } + }, + { width: '40%', targets: 1 }, + { width: '40%', targets: 2 }], + }); + } + if (document.getElementById('hashTypeDetailsTable')) { + new DataTable('#hashTypeDetailsTable', { + retrieve: true, + order: [[ 0, "desc" ]], + columnDefs: [{ width: '30%', + targets: 0, + render: (data) => { + const date = new Date(data); + return date.getFullYear() + '-' + (date.getMonth() + 1).toString().padStart(2, "0") + '-' + date.getDate().toString().padStart(2, "0") + ' ' + date.toTimeString(); + } + }, + { width: '30%', targets: 1 }, + { width: '50%', targets: 2 }], + + }); + } + + if (document.getElementById('identifierDetailsTable')) { + new DataTable('#identifierDetailsTable', { + retrieve: true, + order: [[ 0, "desc" ]], + columnDefs: [{ width: '30%', + targets: 0, + render: (data) => { + const date = new Date(data); + return date.getFullYear() + '-' + (date.getMonth() + 1).toString().padStart(2, "0") + '-' + date.getDate().toString().padStart(2, "0") + ' ' + date.toTimeString(); + } + }, + { width: '30%', targets: 1 }, + { width: '50%', targets: 2 }], + + }); + } + if (document.getElementById('#bodyHashesTable')) { + var table = new DataTable('#bodyHashesTable', { + retrieve: true, + order: [[ 0, "desc" ]], + columnDefs: [{ width: '10%', targets: 0 }, + { width: '10%', targets: 1 }, + { width: '60%', targets: 2 }, + { width: '20%', targets: 3 }], + initComplete: function (settings, json) { + $('[data-bs-toggle="tooltip"]').tooltip({html: true}); + } + }).on('draw', function() { + $('[data-bs-toggle="tooltip"]').tooltip({html: true}); + }); + } + if (document.getElementById('faviconsTable')) { + new DataTable('#faviconsTable', { + retrieve: true, + columnDefs: [{ width: '10%', targets: 0 }, + { width: '40%', targets: 1 }, + { width: '40%', targets: 2 }, + { width: '10%', targets: 3 }], + }); + } + if (document.getElementById('treeHashesTable')) { + new DataTable('#treeHashesTable', { + retrieve: true, + columnDefs: [{ width: '20%', targets: 0 }, + { width: '40%', targets: 1 }, + { width: '40%', targets: 2 }], + }); + } + if (document.getElementById('hostnamesTable')) { + new DataTable('#hostnamesTable', { + retrieve: true, + order: [[ 0, "desc" ]], + columnDefs: [{ width: '10%', targets: 0 }, + { width: '40%', targets: 1 }, + { width: '50%', targets: 2 }], + initComplete: function (settings, json) { + $('[data-bs-toggle="tooltip"]').tooltip({html: true}); + } + }).on('draw', function() { + $('[data-bs-toggle="tooltip"]').tooltip({html: true}); + }); + } + if (document.getElementById('identifiersTable')) { + new DataTable('#identifiersTable', { + retrieve: true, + columnDefs: [{ width: '20%', targets: 0 }, + { width: '40%', targets: 1 }, + { width: '40%', targets: 2 }], + }); + } + if (document.getElementById('urlsTable')) { + new DataTable('#urlsTable', { + retrieve: true, + order: [[ 0, "desc" ]], + columnDefs: [{ width: '10%', targets: 0 }, + { width: '90%', targets: 1 }], + initComplete: function (settings, json) { + $('[data-bs-toggle="tooltip"]').tooltip({html: true}); + } + }).on('draw', function() { + $('[data-bs-toggle="tooltip"]').tooltip({html: true}); + }); + } + if (document.getElementById('cookieNameTable')) { + new DataTable('#cookieNameTable', { + retrieve: true, + order: [[ 0, "desc" ]], + columnDefs: [{ width: '30%', targets: 0, + render: (data) => { + const date = new Date(data); + return date.getFullYear() + '-' + (date.getMonth() + 1).toString().padStart(2, "0") + '-' + date.getDate().toString().padStart(2, "0") + ' ' + date.toTimeString(); + } + }, + { width: '70%', targets: 1 }] + }); + } + + if (document.getElementById('hostnameTable')) { + new DataTable('#hostnameTable', { + retrieve: true, + order: [[ 0, "desc" ]], + columnDefs: [{ width: '20%', targets: 0, + render: (data) => { + const date = new Date(data); + return date.getFullYear() + '-' + (date.getMonth() + 1).toString().padStart(2, "0") + '-' + date.getDate().toString().padStart(2, "0") + ' ' + date.toTimeString(); + } + }, + { width: '40%', targets: 1 }, + { width: '40%', targets: 2 }], + }); + } + + if (document.getElementById('urlTable')) { + new DataTable('#urlTable', { + retrieve: true, + order: [[ 0, "desc" ]], + columnDefs: [{ width: '20%', targets: 0, + render: (data) => { + const date = new Date(data); + return date.getFullYear() + '-' + (date.getMonth() + 1).toString().padStart(2, "0") + '-' + date.getDate().toString().padStart(2, "0") + ' ' + date.toTimeString(); + } + }, + { width: '40%', targets: 1 }, + { width: '40%', targets: 2 }], + }); + } + + if (document.getElementById('faviconDetailsTable')) { + new DataTable('#faviconDetailsTable', { + retrieve: true, + order: [[ 0, "desc" ]], + columnDefs: [{ width: '30%', + targets: 0, + render: (data) => { + const date = new Date(data); + return date.getFullYear() + '-' + (date.getMonth() + 1).toString().padStart(2, "0") + '-' + date.getDate().toString().padStart(2, "0") + ' ' + date.toTimeString(); + } + }, + { width: '30%', targets: 1 }, + { width: '50%', targets: 2 }], + + }); + } + + // Other things to trigger in modals + document.querySelectorAll(".downloadFaviconButton").forEach(el => el.addEventListener('click', event => { + downloadBase64File(el.dataset.mimetype, el.dataset.b64favicon, el.dataset.filename); + })) + +})); diff --git a/website/web/static/tree.js b/website/web/static/tree.js index 64d10003..d8d6932d 100644 --- a/website/web/static/tree.js +++ b/website/web/static/tree.js @@ -157,23 +157,6 @@ if (parent_uuid != null) { }; -function openURLInNewTab(url) { - let win = window.open(url, '_blank'); - if (win == null) { - return false; - } - win.focus(); - return true; -} - -function openTreeInNewTab(capture_uuid, hostnode_uuid=null) { - let url = `/tree/${capture_uuid}`; - if (hostnode_uuid != null) { - url += `/${hostnode_uuid}`; - } - return openURLInNewTab(url); -} - function open_hostnode_popup(hostnode_uuid) { let win = window.open(`/tree/${treeUUID}/host/${hostnode_uuid}`, '_blank', 'width=1024,height=768,left=200,top=100'); if (win == null) { diff --git a/website/web/templates/body_hash.html b/website/web/templates/body_hash.html index edadd905..a8242061 100644 --- a/website/web/templates/body_hash.html +++ b/website/web/templates/body_hash.html @@ -7,50 +7,6 @@ {% block title %}{{ body_hash }}{% endblock %} -{% block scripts %} -{{ super() }} - - - - - -{% endblock %} - -{%else%} - - - {%endif%} diff --git a/website/web/templates/cookie_name.html b/website/web/templates/cookie_name.html index 6784869d..edbda8fb 100644 --- a/website/web/templates/cookie_name.html +++ b/website/web/templates/cookie_name.html @@ -1,32 +1,22 @@ -{% extends "main.html" %} - {% from "macros.html" import shorten_string %} -{% block scripts %} -{{ super() }} - - -{% endblock %} +{% if from_popup %} +{% extends "main.html" %} + +{% from 'bootstrap5/utils.html' import render_messages %} + +{% block title %}{{ cookie_name }}{% endblock %} + +{%endif%} + {% block content %} + + +{% if from_popup %} +
+{%endif%} +

{{ cookie_name }}

Only the most recent captures are listed below, this will change soon.
diff --git a/website/web/templates/favicon_details.html b/website/web/templates/favicon_details.html index 60682a2f..19903bf6 100644 --- a/website/web/templates/favicon_details.html +++ b/website/web/templates/favicon_details.html @@ -1,26 +1,27 @@ {% from "macros.html" import shorten_string %} -
Shodan MMH3 Hash: {{ mmh3_shodan }}
- +
@@ -48,3 +49,5 @@ {% endfor %}
Capture Time
+ +{% endblock %} diff --git a/website/web/templates/hash_type_details.html b/website/web/templates/hash_type_details.html index 499dbad9..3f8f7cd1 100644 --- a/website/web/templates/hash_type_details.html +++ b/website/web/templates/hash_type_details.html @@ -1,21 +1,4 @@ {% from "macros.html" import shorten_string %} - - -
{{hash_type}}: {{h}}
Only the most recent captures are listed below, this will change soon.
diff --git a/website/web/templates/hhh_details.html b/website/web/templates/hhh_details.html index 54245f80..2ada53de 100644 --- a/website/web/templates/hhh_details.html +++ b/website/web/templates/hhh_details.html @@ -1,22 +1,7 @@ {% if from_popup %} {% extends "main.html" %} - {% from 'bootstrap5/utils.html' import render_messages %} - {% block title %}{{ hhh }}{% endblock %} - -{% block scripts %} -{{ super() }} - -{% endblock %} - {%endif%} {% block content %} diff --git a/website/web/templates/hostname.html b/website/web/templates/hostname.html index 4c0b202a..857f7ea8 100644 --- a/website/web/templates/hostname.html +++ b/website/web/templates/hostname.html @@ -1,26 +1,25 @@ {% from "macros.html" import shorten_string %} +{% if from_popup %} +{% extends "main.html" %} + +{% from 'bootstrap5/utils.html' import render_messages %} + +{% block title %}{{ hostname }}{% endblock %} + +{%endif%} + {% block content %} +{% if from_popup %} +
+{%endif%} +

{{ hostname }}

Only the most recent captures are listed below, this will change soon.
- - diff --git a/website/web/templates/identifier_details.html b/website/web/templates/identifier_details.html index f85c4304..aaf94177 100644 --- a/website/web/templates/identifier_details.html +++ b/website/web/templates/identifier_details.html @@ -1,21 +1,5 @@ {% from "macros.html" import shorten_string %} - -
{{identifier_type}}: {{identifier}}
diff --git a/website/web/templates/main.html b/website/web/templates/main.html index 768ddcc9..6c5540af 100644 --- a/website/web/templates/main.html +++ b/website/web/templates/main.html @@ -47,6 +47,11 @@ {{get_sri('static', 'generic.js')}} nonce="{{ csp_nonce() }}" crossorigin="anonymous"> + + {% endblock %} diff --git a/website/web/templates/search.html b/website/web/templates/search.html index 9981758b..f0330518 100644 --- a/website/web/templates/search.html +++ b/website/web/templates/search.html @@ -1,5 +1,5 @@ {% extends "main.html" %} -{% block title %}Capture{% endblock %} +{% block title %}Search{% endblock %} {% block card %} @@ -54,6 +54,18 @@ +
+
+ + +
+
+
+
+ + +
+
diff --git a/website/web/templates/tree_body_hashes.html b/website/web/templates/tree_body_hashes.html index 393c4860..ffd910eb 100644 --- a/website/web/templates/tree_body_hashes.html +++ b/website/web/templates/tree_body_hashes.html @@ -1,28 +1,4 @@ {% from "macros.html" import popup_icons_response %} - - - -
diff --git a/website/web/templates/tree_favicons.html b/website/web/templates/tree_favicons.html index e43d7889..bbc6798a 100644 --- a/website/web/templates/tree_favicons.html +++ b/website/web/templates/tree_favicons.html @@ -1,22 +1,3 @@ - - - - -
Click on the favicon to see the other captures it's been found in
diff --git a/website/web/templates/tree_hashes_types.html b/website/web/templates/tree_hashes_types.html index 9adb7971..5d3f3298 100644 --- a/website/web/templates/tree_hashes_types.html +++ b/website/web/templates/tree_hashes_types.html @@ -1,12 +1,3 @@ - - -
Click on the hash to see the other captures it's been found in
diff --git a/website/web/templates/tree_hostnames.html b/website/web/templates/tree_hostnames.html index 483e3242..597ce490 100644 --- a/website/web/templates/tree_hostnames.html +++ b/website/web/templates/tree_hostnames.html @@ -1,28 +1,5 @@ {% from "macros.html" import popup_icons_response %} - - - -
diff --git a/website/web/templates/tree_identifiers.html b/website/web/templates/tree_identifiers.html index 2ec42a44..ae763341 100644 --- a/website/web/templates/tree_identifiers.html +++ b/website/web/templates/tree_identifiers.html @@ -1,11 +1,3 @@ - -
Click on the identifier to see the other captures it's been found in
diff --git a/website/web/templates/tree_urls.html b/website/web/templates/tree_urls.html index 42b35fe6..9b909216 100644 --- a/website/web/templates/tree_urls.html +++ b/website/web/templates/tree_urls.html @@ -1,18 +1,5 @@ {% from "macros.html" import popup_icons_response %} - -
diff --git a/website/web/templates/url.html b/website/web/templates/url.html index 30ee5a4b..ad7270ca 100644 --- a/website/web/templates/url.html +++ b/website/web/templates/url.html @@ -1,26 +1,27 @@ {% from "macros.html" import shorten_string %} +{% if from_popup %} +{% extends "main.html" %} + +{% from 'bootstrap5/utils.html' import render_messages %} + +{% block title %}{{ url }}{% endblock %} + +{%endif%} + + {% block content %} +{% if from_popup %} +
+{%endif%} + +

{{ url }}

Only the most recent captures are listed below, this will change soon.
- -