mirror of https://github.com/CIRCL/lookyloo
chg: Bump bootstrap-flask, use bootstrap 5
parent
9e944f4b7b
commit
787258dec1
|
@ -150,18 +150,15 @@ uvloop = ["uvloop (>=0.15.2)"]
|
|||
|
||||
[[package]]
|
||||
name = "bootstrap-flask"
|
||||
version = "1.8.0"
|
||||
description = "Bootstrap helper for Flask/Jinja2."
|
||||
version = "2.0.0"
|
||||
description = "Bootstrap 4 & 5 helper for your Flask projects."
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
|
||||
[package.dependencies]
|
||||
Flask = "*"
|
||||
|
||||
[package.extras]
|
||||
dev = ["coverage", "tox", "sphinx", "pallets-sphinx-themes", "sphinxcontrib-log-cabinet"]
|
||||
docs = ["sphinx", "pallets-sphinx-themes", "sphinxcontrib-log-cabinet"]
|
||||
WTForms = "*"
|
||||
|
||||
[[package]]
|
||||
name = "cchardet"
|
||||
|
@ -1366,7 +1363,7 @@ python-versions = "*"
|
|||
|
||||
[[package]]
|
||||
name = "types-redis"
|
||||
version = "4.1.7"
|
||||
version = "4.1.8"
|
||||
description = "Typing stubs for redis"
|
||||
category = "dev"
|
||||
optional = false
|
||||
|
@ -1374,7 +1371,7 @@ python-versions = "*"
|
|||
|
||||
[[package]]
|
||||
name = "types-requests"
|
||||
version = "2.27.6"
|
||||
version = "2.27.7"
|
||||
description = "Typing stubs for requests"
|
||||
category = "dev"
|
||||
optional = false
|
||||
|
@ -1385,7 +1382,7 @@ types-urllib3 = "<1.27"
|
|||
|
||||
[[package]]
|
||||
name = "types-urllib3"
|
||||
version = "1.26.6"
|
||||
version = "1.26.7"
|
||||
description = "Typing stubs for urllib3"
|
||||
category = "dev"
|
||||
optional = false
|
||||
|
@ -1472,6 +1469,20 @@ category = "main"
|
|||
optional = false
|
||||
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
|
||||
|
||||
[[package]]
|
||||
name = "wtforms"
|
||||
version = "3.0.1"
|
||||
description = "Form validation and rendering for Python web development."
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.7"
|
||||
|
||||
[package.dependencies]
|
||||
MarkupSafe = "*"
|
||||
|
||||
[package.extras]
|
||||
email = ["email-validator"]
|
||||
|
||||
[[package]]
|
||||
name = "yarl"
|
||||
version = "1.7.2"
|
||||
|
@ -1503,7 +1514,7 @@ misp = ["python-magic", "pydeep"]
|
|||
[metadata]
|
||||
lock-version = "1.1"
|
||||
python-versions = ">=3.8,<3.11"
|
||||
content-hash = "f38c5b2cf39a324872b1b87bb39917f6d7289b1ee83947bd7435697e88fabacb"
|
||||
content-hash = "e863b89ba405332c81f7e3ac71a2fd02dfd2a767d6aecf55671fc4a7aef1af2d"
|
||||
|
||||
[metadata.files]
|
||||
aiohttp = [
|
||||
|
@ -1621,8 +1632,8 @@ black = [
|
|||
{file = "black-21.12b0.tar.gz", hash = "sha256:77b80f693a569e2e527958459634f18df9b0ba2625ba4e0c2d5da5be42e6f2b3"},
|
||||
]
|
||||
bootstrap-flask = [
|
||||
{file = "Bootstrap-Flask-1.8.0.tar.gz", hash = "sha256:1c47a35b26b2ea2eaa0326b416c557aee77c7802f188055a8cfc4520a5cfdba2"},
|
||||
{file = "Bootstrap_Flask-1.8.0-py2.py3-none-any.whl", hash = "sha256:74a333756e997f2bb7d2d39a080eb2d1b4fd9da225f6cd5b56f0488ae5fe48ed"},
|
||||
{file = "Bootstrap-Flask-2.0.0.tar.gz", hash = "sha256:d2d18931720f7b4440d99c179c89772ca2f10d54fdff955a22f2925ff44ef133"},
|
||||
{file = "Bootstrap_Flask-2.0.0-py2.py3-none-any.whl", hash = "sha256:a097ea7cdb219648253cde95ab36aedcf929459881fff476edc699e2c0f6a654"},
|
||||
]
|
||||
cchardet = [
|
||||
{file = "cchardet-2.1.7-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:58005cd94e4bbb25fb4cee3ad75a0fe121384cb2b99ac5619aa45aecedf43c7b"},
|
||||
|
@ -2535,16 +2546,16 @@ types-pkg-resources = [
|
|||
{file = "types_pkg_resources-0.1.3-py2.py3-none-any.whl", hash = "sha256:0cb9972cee992249f93fff1a491bf2dc3ce674e5a1926e27d4f0866f7d9b6d9c"},
|
||||
]
|
||||
types-redis = [
|
||||
{file = "types-redis-4.1.7.tar.gz", hash = "sha256:dc4d78558b5354cdc35aad789f7925d1b80889226c9a599c39147a4892b52c56"},
|
||||
{file = "types_redis-4.1.7-py3-none-any.whl", hash = "sha256:95ef23c6fb56c8d2cf97e6141c197456b86928bc1ff2a04d7c4444aece83f8c3"},
|
||||
{file = "types-redis-4.1.8.tar.gz", hash = "sha256:0dcd0f47f96eee006b7533435c3692841bd1d4ecf6866ab758a789956c9e9f59"},
|
||||
{file = "types_redis-4.1.8-py3-none-any.whl", hash = "sha256:1a6f918dbc5307e38fab931bd43d5d6181eea745e7cfee476f493c3c3c32cf42"},
|
||||
]
|
||||
types-requests = [
|
||||
{file = "types-requests-2.27.6.tar.gz", hash = "sha256:5e0dc681e9bfadb5c1d17f63d29f6d13d29ef2897d30cb9c79285b34a1655fd7"},
|
||||
{file = "types_requests-2.27.6-py3-none-any.whl", hash = "sha256:8f8a3cf66c525247750b0a0e6ffef4a210d7c8637065a1e7a3cb5769b1eb82a4"},
|
||||
{file = "types-requests-2.27.7.tar.gz", hash = "sha256:f38bd488528cdcbce5b01dc953972f3cead0d060cfd9ee35b363066c25bab13c"},
|
||||
{file = "types_requests-2.27.7-py3-none-any.whl", hash = "sha256:2e0e100dd489f83870d4f61949d3a7eae4821e7bfbf46c57e463c38f92d473d4"},
|
||||
]
|
||||
types-urllib3 = [
|
||||
{file = "types-urllib3-1.26.6.tar.gz", hash = "sha256:51b4aff54099896bea28cbdd49d6e7d389dd5ac775d7a4b72c642c56b215d26f"},
|
||||
{file = "types_urllib3-1.26.6-py3-none-any.whl", hash = "sha256:89372ddb3f893b24f3a3cca0113bbc722c73818b9c42dda49f1092501a1ae594"},
|
||||
{file = "types-urllib3-1.26.7.tar.gz", hash = "sha256:cfd1fbbe4ba9a605ed148294008aac8a7b8b7472651d1cc357d507ae5962e3d2"},
|
||||
{file = "types_urllib3-1.26.7-py3-none-any.whl", hash = "sha256:3adcf2cb5981809091dbff456e6999fe55f201652d8c360f99997de5ac2f556e"},
|
||||
]
|
||||
types-werkzeug = [
|
||||
{file = "types-Werkzeug-1.0.9.tar.gz", hash = "sha256:5cc269604c400133d452a40cee6397655f878fc460e03fde291b9e3a5eaa518c"},
|
||||
|
@ -2627,6 +2638,10 @@ wrapt = [
|
|||
{file = "wrapt-1.13.3-cp39-cp39-win_amd64.whl", hash = "sha256:81bd7c90d28a4b2e1df135bfbd7c23aee3050078ca6441bead44c42483f9ebfb"},
|
||||
{file = "wrapt-1.13.3.tar.gz", hash = "sha256:1fea9cd438686e6682271d36f3481a9f3636195578bab9ca3382e2f5f01fc185"},
|
||||
]
|
||||
wtforms = [
|
||||
{file = "WTForms-3.0.1-py3-none-any.whl", hash = "sha256:837f2f0e0ca79481b92884962b914eba4e72b7a2daaf1f939c890ed0124b834b"},
|
||||
{file = "WTForms-3.0.1.tar.gz", hash = "sha256:6b351bbb12dd58af57ffef05bc78425d08d1914e0fd68ee14143b7ade023c5bc"},
|
||||
]
|
||||
yarl = [
|
||||
{file = "yarl-1.7.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f2a8508f7350512434e41065684076f640ecce176d262a7d54f0da41d99c5a95"},
|
||||
{file = "yarl-1.7.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:da6df107b9ccfe52d3a48165e48d72db0eca3e3029b5b8cb4fe6ee3cb870ba8b"},
|
||||
|
|
|
@ -42,7 +42,7 @@ gunicorn = "^20.1.0"
|
|||
cchardet = "^2.1.7"
|
||||
redis = {version = "^4.1.0", extras = ["hiredis"]}
|
||||
beautifulsoup4 = "^4.10"
|
||||
bootstrap-flask = "^1.8.0"
|
||||
bootstrap-flask = "^2.0.0"
|
||||
defang = "^0.5.3"
|
||||
vt-py = "^0.13.1"
|
||||
pyeupi = "^1.1"
|
||||
|
@ -72,8 +72,8 @@ misp = ['python-magic', 'pydeep']
|
|||
[tool.poetry.dev-dependencies]
|
||||
mypy = "^0.931"
|
||||
ipython = "^8.0.0"
|
||||
types-redis = "^4.1.7"
|
||||
types-requests = "^2.27.6"
|
||||
types-redis = "^4.1.8"
|
||||
types-requests = "^2.27.7"
|
||||
types-Flask = "^1.1.6"
|
||||
types-pkg-resources = "^0.1.3"
|
||||
|
||||
|
|
|
@ -6,6 +6,7 @@ import requests
|
|||
from lookyloo.default import get_homedir
|
||||
|
||||
d3js_version = '7'
|
||||
jquery_version = "3.6.0"
|
||||
datatables_version = "1.11.3"
|
||||
|
||||
|
||||
|
@ -17,6 +18,11 @@ if __name__ == '__main__':
|
|||
f.write(d3.content)
|
||||
print(f'Downloaded d3js v{d3js_version}.')
|
||||
|
||||
jquery = requests.get(f'https://code.jquery.com/jquery-{jquery_version}.min.js')
|
||||
with (dest_dir / f'jquery.min.js').open('wb') as f:
|
||||
f.write(jquery.content)
|
||||
print(f'Downloaded jquery v{jquery_version}.')
|
||||
|
||||
datatables_js = requests.get(f'https://cdn.datatables.net/v/bs4/dt-{datatables_version}/datatables.min.js')
|
||||
with (dest_dir / 'datatables.min.js').open('wb') as f:
|
||||
f.write(datatables_js.content)
|
||||
|
|
|
@ -16,7 +16,7 @@ import flask_login # type: ignore
|
|||
import pkg_resources
|
||||
from flask import (Flask, Response, flash, jsonify, redirect, render_template,
|
||||
request, send_file, url_for)
|
||||
from flask_bootstrap import Bootstrap # type: ignore
|
||||
from flask_bootstrap import Bootstrap5 # type: ignore
|
||||
from flask_cors import CORS # type: ignore
|
||||
from flask_restx import Api # type: ignore
|
||||
from pymisp import MISPEvent, MISPServerError
|
||||
|
@ -38,7 +38,7 @@ app.wsgi_app = ReverseProxied(app.wsgi_app) # type: ignore
|
|||
|
||||
app.config['SECRET_KEY'] = get_secret_key()
|
||||
|
||||
Bootstrap(app)
|
||||
Bootstrap5(app)
|
||||
app.config['BOOTSTRAP_SERVE_LOCAL'] = True
|
||||
app.config['SESSION_COOKIE_NAME'] = 'lookyloo'
|
||||
app.config['SESSION_COOKIE_SAMESITE'] = 'Strict'
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
"exe.png": "pWwo9nBLtEss/UJ173zHa6/RpySUyz/XMdNhWc6aRIvwwHMO6a+fLmu2K6TbvO3Jbg4VYL2Af4yhHPyhH3ZeTw==",
|
||||
"favicon.ico": "KOmrfwRbOQqhhwSeBkNpMRAxSVMmmLg+2kRMg9iSv7OWjE9spJc7x4MKB4AE/hi0knaV7UBVctAU6XZ7AC72ZA==",
|
||||
"font.png": "RwoQkj9dT9SLUL2F7cAA16Nat9t2hDb58eQlHF9ThUar829p0INUXG+5XuDaFOC8SsmCZK5vw2f+YAQ6mLC1Qw==",
|
||||
"generic.css": "+7hOycn2I+BrUz4g0GxeKiTBgZODxiZp5kFBaphbHK9fZqL///yRjF3c7ss+px+1b7WJqpJzbcjXh4XGhteCtA==",
|
||||
"generic.css": "UaM+KYbK+TMeT50HWjeCYOVQilq1J9UrtHAhcbCxVX+Y+2f3GiqT3ylDNevDEXhNSSLlWIVsGEgsdZyd1vJ8TQ==",
|
||||
"generic.js": "c/p+6Dk2kcwd9T9kf/IfoCX/ZU+VbtlUGYBo3qNSzwoUYC1soWwdIwM5rFxwxz9a1tORc/Wu0EFCPRw4ZwbqkQ==",
|
||||
"html.png": "T7pZrb8MMDsA/JV/51hu+TOglTqlxySuEVY0rpDjTuAEyhzk2v+W4kYrj7vX+Tp3n2d2lvVD08PwhCG62Yfbzg==",
|
||||
"ifr.png": "rI5YJypmz1QcULRf9UaOYSqV4tPUSxUdLAycoYzCwywt4Pw4eWzBg9SUr769VyIimoiIyJR+aNuoIA4p5WO2fQ==",
|
||||
|
@ -25,6 +25,7 @@
|
|||
"index.css": "2hAsQwCClHQ7b6VthbKYIkUPam4Ef6wbSxa3+nK0UuqCHezvPMr3aqpz16gD0lyYop55VEd/dhzZJLA4WMAplQ==",
|
||||
"insecure.svg": "iyoot+eMuRI7SITBdjslYS2WWFntz9VGi0doPoZBi/ZGPGDhm/Sd8SaJPiNCSKht/6dYPqgb90LQJ6a4YrhcFA==",
|
||||
"javascript.png": "sQcLDBrB+fEEt3PPoOwFh0g/RVkhDNrhuBMo0WMzf9IKNnZusYx+J59k8HGkAHFGDbytDwe6Tq6LIVgg/B6nqw==",
|
||||
"jquery.min.js": "894YE6QWD5I59HgZOGReFYm4dnWc1Qt5NtvYSaNcOP+u1T9qYdvdihz0PPSiiqn/+/3e7Jo4EaG7TubfWGUrMQ==",
|
||||
"json.png": "nE6ROpXE5iovHyd5oh8cnA4ozTa5bZjn1A6b+10b1Hb59O1NcMdcrv8Rqge3CAtSqJDKnrYbMChCT1j48yMwQw==",
|
||||
"loader.gif": "ZZKD5vLSKBWKeUpa2KI9qheUJ49iTI/UULmVU/AX28fBfH00K3lLc2v5pVJZ4qXG1BbB13LTXzRKKU35H2XfNg==",
|
||||
"lookyloo.jpeg": "i6wBj8CsIM5YAQLEMQfhs3CNOSKkErF8AMqqM6ZygSwCyQgv9CU8xt94veMZhM/ufBWoz7kAXmR+yywmxsTxug==",
|
||||
|
@ -32,7 +33,7 @@
|
|||
"secure.svg": "H8ni7t0d60nCJDVGuZpuxC+RBy/ipAjWT627D12HlZGg6LUmjSwPTQTUekm3UJupEP7TUkhXyq6WHc5gy7QBjg==",
|
||||
"stats.css": "/kY943FwWBTne4IIyf7iBROSfbGd82TeBicEXqKkRwawMVRIvM/Pk5MRa7okUyGIxaDjFQGmV/U1vy+PhN6Jbw==",
|
||||
"stats_graph.js": "0OEouA6NAxLG2wMd7D2vtGoMrXKna7My98Euc6ecyfdO4/6mIJS87vzISOS4zSZ8u4ehpa+p7E0nWhsXXE7H/Q==",
|
||||
"tree.css": "EPxR2uiIptWYOo7OVp2FcoVAzOJ7RVOIJu86tMIsnD84fhXmTiAkZYFGdNiXf2jVe+Th5qpCECscTqVo4634Xg==",
|
||||
"tree.css": "dnxO30wm12jtQCVNviK5az3kCGJhvbUjCB33caVZeHuZ6Pkp9Nuc3/leGYlKxtMtJlqWd176cac8b6oWAVTThQ==",
|
||||
"tree.js": "JeCMrFdQDrSYAXaJZE/tCOnfusbQI68rzFhyo0ojBCHt2FAs/DDBdYwCpkFNZ7J+n05NpfbegrrKVqd06PCNXA==",
|
||||
"up.jpg": "d1ljZJ9f5JekyM6RLFFH2Ua44j6neiQBdUIXOenRTjGppQr3JaeglpQIH6BjPCJL177+TH52U3UIRNS5YAyKIg==",
|
||||
"up_right.jpg": "OMmz+n+MxR34P8/fn5t4DkqKqdJRzQbXQ7fAi2lhkZIJGhVs2vIyY1f2hpYoBxDAX1OcYsSE2lqIR2vXNDGZsA==",
|
||||
|
|
|
@ -15,12 +15,20 @@
|
|||
align-items: center;
|
||||
}
|
||||
|
||||
/* Bootstrap 5 tweak: do not underline links unless hovered over */
|
||||
a:not([class*="btn"]) {
|
||||
text-decoration: none;
|
||||
}
|
||||
a:not([class*="btn"]):hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
/* CSS collapse thing */
|
||||
[data-toggle="collapse"].collapsed .if-not-collapsed {
|
||||
[data-bs-toggle="collapse"].collapsed .if-not-collapsed {
|
||||
display: none;
|
||||
}
|
||||
|
||||
[data-toggle="collapse"]:not(.collapsed) .if-collapsed {
|
||||
[data-bs-toggle="collapse"]:not(.collapsed) .if-collapsed {
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
|
|
@ -40,18 +40,6 @@ hr {
|
|||
border-width: 1px;
|
||||
}
|
||||
|
||||
hr.vertical {
|
||||
display: block;
|
||||
margin-top: 0.1em;
|
||||
margin-bottom: 0.5em;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
border-color: black;
|
||||
border-style: inset;
|
||||
border-width: 1px;
|
||||
height: 100px;
|
||||
}
|
||||
|
||||
/* menu vertical */
|
||||
#menu_vertical {
|
||||
position: fixed;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{% extends "main.html" %}
|
||||
|
||||
{% from 'bootstrap/utils.html' import render_messages %}
|
||||
{% from 'bootstrap5/utils.html' import render_messages %}
|
||||
|
||||
{% block title %}{{ body_hash }}{% endblock %}
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{% extends "main.html" %}
|
||||
|
||||
{% from 'bootstrap/utils.html' import render_messages %}
|
||||
{% from 'bootstrap5/utils.html' import render_messages %}
|
||||
|
||||
{% block title %}Captures{% endblock %}
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{% extends "main.html" %}
|
||||
{% from 'bootstrap/utils.html' import render_messages %}
|
||||
{% from 'bootstrap5/utils.html' import render_messages %}
|
||||
{% block title %}Capture{% endblock %}
|
||||
|
||||
{% block card %}
|
||||
|
@ -32,26 +32,26 @@
|
|||
{{ render_messages(container=True, dismissible=True) }}
|
||||
</br>
|
||||
<form role="form" action="{{ url_for('capture_web') }}" method=post enctype=multipart/form-data>
|
||||
<div class="form-group row">
|
||||
<div class="row mb-3">
|
||||
<div class="col-sm-10">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="checkbox" name="listing" {% if default_public %}checked="true"{% endif %}></input>
|
||||
<input class="form-check-input" type="checkbox" name="listing" {% if default_public %}checked="true"{% endif %}></input>
|
||||
<label for="listing" class="form-check-label">Display results on public page</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label for="url" class="col-sm-2 col-form-label">URL:</label>
|
||||
<div class="row mb-3">
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" name="url" id=url
|
||||
placeholder="URL to capture" value="{{predefined_url_to_capture}}" required>
|
||||
<label for="url" class="col-sm-2 col-form-label">URL:</label>
|
||||
<input type="text" class="form-control" name="url" id=url
|
||||
placeholder="URL to capture" value="{{predefined_url_to_capture}}" required>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p style="font-size: x-large"><b>Browser Configuration</b> (Lookyloo uses an emulated browser for all captures)</p>
|
||||
<div class="card card-body">
|
||||
{% if personal_ua %}
|
||||
<div class="form-group row">
|
||||
<div class="row mb-3">
|
||||
<div class="col-sm-10">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="checkbox" name="personal_ua"></input>
|
||||
|
@ -66,10 +66,10 @@
|
|||
</br>
|
||||
{% endif %}
|
||||
|
||||
<div class="form-group row">
|
||||
<div class="row mb-3">
|
||||
<label for="os" class="col-sm-2 col-form-label">Operating System:</label>
|
||||
<div class="col-sm-10">
|
||||
<select class="form-control" name="os" id="os">
|
||||
<select class="form-select" name="os" id="os">
|
||||
{% for os in user_agents.keys() %}
|
||||
<!-- Select the default os -->
|
||||
<option value="{{ os }}" {% if os==default['os'] %}selected{% endif %}>{{ os }}</option>
|
||||
|
@ -80,11 +80,11 @@
|
|||
|
||||
{% for os, browsers in user_agents.items() %}
|
||||
<!-- Hide the browsers that aren't part of the default os -->
|
||||
<div id="{{os.replace(' ', '_')}}" class="style-sub-1 form-group row" {% if not os==default['os'] %}style="display: none;"{%endif%}>
|
||||
<div id="{{os.replace(' ', '_')}}" class="style-sub-1 row mb-3" {% if not os==default['os'] %}style="display: none;"{%endif%}>
|
||||
<label for="browser" class="col-sm-2 col-form-label">Browser Type:</label>
|
||||
<div class="col-sm-10">
|
||||
<!-- Disable all the selects not related to the default os -->
|
||||
<select class="form-control" name="browser" {% if not os==default['os'] %}disabled{%endif%}>
|
||||
<select class="form-select" name="browser" {% if not os==default['os'] %}disabled{%endif%}>
|
||||
{% for browser in browsers.keys()%}
|
||||
<!-- Select the default browser -->
|
||||
<option value="{{ browser }}" {% if browser==default['browser'] %}selected{% endif %}>{{ browser }}</option>
|
||||
|
@ -94,11 +94,11 @@
|
|||
</div>
|
||||
{% for browser, user_agents in browsers.items()%}
|
||||
<!-- Hide the user agents that aren't part of the default OS and browsers that aren't part of the default os -->
|
||||
<div id="{{os.replace(' ', '_')}}_{{browser.replace(' ', '_')}}" class="style-sub-2 form-group row" {% if not os==default['os'] or not browser==default['browser']%} style="display: none;"{%endif%}>
|
||||
<div id="{{os.replace(' ', '_')}}_{{browser.replace(' ', '_')}}" class="style-sub-2 row mb-3" {% if not os==default['os'] or not browser==default['browser']%} style="display: none;"{%endif%}>
|
||||
<label for="user_agent" class="col-sm-2 col-form-label">User-Agent:</label>
|
||||
<div class="col-sm-10">
|
||||
<!-- Disable all the selects, unless it is in default os and browser -->
|
||||
<select class="form-control" name="user_agent" {% if not os==default['os'] or not browser==default['browser'] %}disabled{%endif%}>
|
||||
<select class="form-select" name="user_agent" {% if not os==default['os'] or not browser==default['browser'] %}disabled{%endif%}>
|
||||
{% for user_agent in user_agents %}
|
||||
<!-- Select the default ua -->
|
||||
<option value="{{ user_agent }}" {% if user_agent==default['useragent'] %}selected{% endif %}>{{ user_agent }}</option>
|
||||
|
@ -111,7 +111,7 @@
|
|||
<div class="dropdown-divider"></div>
|
||||
<div><b>Or</b> type the user-agent of your choice:</div>
|
||||
</br>
|
||||
<div class="form-group row">
|
||||
<div class="row mb-3">
|
||||
<label for="freetext_ua" class="col-sm-2 col-form-label">User-Agent:</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" name="freetext_ua" id="freetext_ua"
|
||||
|
@ -120,7 +120,7 @@
|
|||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<button class="btn btn-link" type="button" data-toggle="collapse" data-target="#collapseConfigCapture" aria-expanded="false" aria-controls="collapseConfigCapture">
|
||||
<button class="btn btn-link" type="button" data-bs-toggle="collapse" data-bs-target="#collapseConfigCapture" aria-expanded="false" aria-controls="collapseConfigCapture">
|
||||
<p style="margin-left: -12px; margin-top: 12px; font-size: x-large; color: black; text-decoration: underline; text-decoration-color: blue;"><b>Capture Configuration</b></p>
|
||||
</button>
|
||||
<div class="help-tip" title="Edit configuration options for the capture."></div>
|
||||
|
@ -129,10 +129,10 @@
|
|||
<div id="collapseConfigCapture" class="collapse">
|
||||
<div class="card card-body">
|
||||
{% if max_depth >= 2 %}
|
||||
<div class="form-group row">
|
||||
<div class="row mb-3">
|
||||
<label for="depth" class="col-sm-2 col-form-label">Link Depth:</label>
|
||||
<div class="col-sm-1">
|
||||
<select class="form-control" name="depth" id=depth>
|
||||
<select class="form-select" name="depth" id=depth>
|
||||
{% for depth in range(max_depth) %}
|
||||
<option value="{{ depth + 1 }}">{{ depth + 1 }}</option>
|
||||
{% endfor %}
|
||||
|
@ -141,29 +141,29 @@
|
|||
</div>
|
||||
{%endif%}
|
||||
|
||||
<div class="form-group row">
|
||||
<div class="row mb-3">
|
||||
<label for="referer" class="col-sm-2 col-form-label">Referer:</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" name="referer" id=referer placeholder="Pass referer of the URL">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group row">
|
||||
<div class="row mb-3">
|
||||
<label for="headers" class="col-sm-2 col-form-label">Other HTTP headers:</label>
|
||||
<div class="col-sm-10">
|
||||
<textarea class="form-control" name="headers" id=headers rows=3 placeholder="Accept-Language: en-US;q=0.5, fr-FR;q=0.4"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group row">
|
||||
<div class="row mb-3">
|
||||
<label for="proxy" class="col-sm-2 col-form-label">Proxy:</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" name="proxy" id="proxy" placeholder="Expected format: [scheme]://[username]:[password]@[hostname]:[port]">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group row">
|
||||
<label for="cookies" class="col-sm-6">Cookies (JSON export from the Firefox plugin Cookie Quick Manager)</label>
|
||||
<div class="row mb-3">
|
||||
<label for="cookies" class="col-sm-6 col-form-label">Cookies (JSON export from the Firefox plugin Cookie Quick Manager)</label>
|
||||
<div class="col-sm-4">
|
||||
<input type="file" class="form-control-file" id="cookies" name="cookies">
|
||||
</div>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{% extends "main.html" %}
|
||||
|
||||
{% from 'bootstrap/utils.html' import render_messages %}
|
||||
{% from 'bootstrap5/utils.html' import render_messages %}
|
||||
|
||||
{% block title %}Categories{% endblock %}
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{% extends "main.html" %}
|
||||
|
||||
{% from 'bootstrap/utils.html' import render_messages %}
|
||||
{% from 'bootstrap5/utils.html' import render_messages %}
|
||||
|
||||
{% block title %}{{ cookie_name }}{% endblock %}
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{% extends "main.html" %}
|
||||
|
||||
{% from 'bootstrap/utils.html' import render_messages %}
|
||||
{% from 'bootstrap5/utils.html' import render_messages %}
|
||||
|
||||
{% block title %}Cookies lookup{% endblock %}
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{% extends "main.html" %}
|
||||
|
||||
{% from 'bootstrap/utils.html' import render_messages %}
|
||||
{% from 'bootstrap5/utils.html' import render_messages %}
|
||||
|
||||
{% block title %}{{ url }}{% endblock %}
|
||||
|
||||
|
|
|
@ -60,7 +60,7 @@
|
|||
<script>
|
||||
$(document).ready(() => {
|
||||
$(function () {
|
||||
$('[data-toggle="tooltip"]').tooltip()
|
||||
$('[data-bs-toggle="tooltip"]').tooltip()
|
||||
})
|
||||
});
|
||||
</script>
|
||||
|
@ -117,7 +117,7 @@
|
|||
... /{{ shorten_string(url['url_path'], 50)}}
|
||||
{# Copy full URL to clipbard #}
|
||||
<button type="button" class="btn btn-default btn-copy js-copy"
|
||||
data-toggle="tooltip" data-placement="bottom" data-copy="{{ url['url_object'].name }}" data-original-title="Copy to clipboard">
|
||||
data-bs-toggle="tooltip" data-bs-placement="bottom" data-copy="{{ url['url_object'].name }}" data-original-title="Copy to clipboard">
|
||||
<svg class="bi bi-clipboard" width="1em" height="1em" viewBox="0 0 16 16" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z"/>
|
||||
<path fill-rule="evenodd" d="M9.5 1h-3a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h3a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z"/>
|
||||
|
@ -140,7 +140,7 @@
|
|||
{% if url['cookies_sent'] %}
|
||||
<div>
|
||||
<p class="h5">This request contains cookies.
|
||||
<button class="btn btn-info collapsed" type="button" data-toggle="collapse" data-target="#request_cookies_full_list_{{ url['url_object'].uuid }}" aria-expanded="false" aria-controls="collapseExample">
|
||||
<button class="btn btn-info collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#request_cookies_full_list_{{ url['url_object'].uuid }}" aria-expanded="false" aria-controls="collapseExample">
|
||||
<span class="if-collapsed">Show cookies sent.</span>
|
||||
<span class="if-not-collapsed">Hide cookies sent.</span>
|
||||
</button>
|
||||
|
@ -215,7 +215,7 @@
|
|||
{% if url['embedded_ressources'] %}
|
||||
{# Details on embedded resources #}
|
||||
<div><b>This response contains embedded ressources</b>
|
||||
<button class="btn btn-info collapsed" type="button" data-toggle="collapse" data-target="#embedded_full_list_{{ url['url_object'].uuid }}" aria-expanded="false" aria-controls="collapseExample">
|
||||
<button class="btn btn-info collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#embedded_full_list_{{ url['url_object'].uuid }}" aria-expanded="false" aria-controls="collapseExample">
|
||||
<span class="if-collapsed">Show embedded resources.</span>
|
||||
<span class="if-not-collapsed">Hide embedded resources.</span>
|
||||
</button>
|
||||
|
@ -255,7 +255,7 @@
|
|||
{% if url['cookies_received'] %}
|
||||
<div>
|
||||
<p class="h5">This response contains cookies.
|
||||
<button class="btn btn-info collapsed" type="button" data-toggle="collapse" data-target="#response_cookies_full_list_{{ url['url_object'].uuid }}" aria-expanded="false" aria-controls="collapseExample">
|
||||
<button class="btn btn-info collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#response_cookies_full_list_{{ url['url_object'].uuid }}" aria-expanded="false" aria-controls="collapseExample">
|
||||
<span class="if-collapsed">Show cookies received.</span>
|
||||
<span class="if-not-collapsed">Hide cookies received.</span>
|
||||
</button>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{% extends "main.html" %}
|
||||
|
||||
{% from 'bootstrap/utils.html' import render_messages %}
|
||||
{% from 'bootstrap5/utils.html' import render_messages %}
|
||||
{% from "macros.html" import shorten_string %}
|
||||
|
||||
{% block title %}Lookyloo{% endblock %}
|
||||
|
|
|
@ -75,40 +75,52 @@
|
|||
{% endmacro %}
|
||||
|
||||
{% macro context_form(tree_uuid, urlnode_uuid, hostnode_uuid, hash, callback_str) %}
|
||||
<button class="btn btn-info collapsed" type="button" data-toggle="collapse" data-target="#context_response_{{ urlnode_uuid }}" aria-expanded="false" aria-controls="collapseContextForm">
|
||||
<button class="btn btn-info collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#context_response_{{ urlnode_uuid }}" aria-expanded="false" aria-controls="collapseContextForm">
|
||||
<span class="if-collapsed">Add context</span>
|
||||
<span class="if-not-collapsed">Hide context form</span>
|
||||
</button>
|
||||
<div class="collapse" id="context_response_{{ urlnode_uuid }}">
|
||||
<div class="card card-body">
|
||||
<form role="form" action="{{ url_for('add_context', tree_uuid=tree_uuid, node_uuid=urlnode_uuid) }}" method=post enctype=multipart/form-data>
|
||||
<div class="form-group">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="checkbox" name="legitimate" id="legitimate">
|
||||
<label for="legitimate" class="form-check-label">Legitimate</label>
|
||||
<div class="row mb-3">
|
||||
<div class="col-sm-10">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="checkbox" name="legitimate" id="legitimate">
|
||||
<label for="legitimate" class="form-check-label">Legitimate</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="legitimate_domain">Domain serving the file when considered legitimate:</label>
|
||||
<input type="text" class="form-control" name="legitimate_domain" id="legitimate_domain" placeholder="Domain name">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="legitimate_description">Other context for this content (library name, owner, ...):</label>
|
||||
<input type="text" class="form-control" name="legitimate_description" id="legitimate_description" placeholder="Description">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="checkbox" name="malicious"></input>
|
||||
<label for="malicious" class="form-check-label">Malicious</label>
|
||||
<div class="row mb-3">
|
||||
<div class="col-sm-10">
|
||||
<label for="legitimate_domain" class="form-label">Domain serving the file when considered legitimate:</label>
|
||||
<input type="text" class="form-control" name="legitimate_domain" id="legitimate_domain" placeholder="Domain name">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="malicious_type">Type of malicious content (phishing, malware, ...):</label>
|
||||
<input type="text" class="form-control" name="malicious_type" id="malicious_type" placeholder="Type of malicious content">
|
||||
<div class="row mb-3">
|
||||
<div class="col-sm-10">
|
||||
<label for="legitimate_description" class="form-label">Other context for this content (library name, owner, ...):</label>
|
||||
<input type="text" class="form-control" name="legitimate_description" id="legitimate_description" placeholder="Description">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="malicious_target">Legitimate target of the malicious content (expecially for phishing):</label>
|
||||
<input type="text" class="form-control" name="malicious_target" id="malicious_target" placeholder="Target">
|
||||
<div class="row mb-3">
|
||||
<div class="col-sm-10">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="checkbox" name="malicious"></input>
|
||||
<label for="malicious" class="form-check-label">Malicious</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-sm-10">
|
||||
<label for="malicious_type" class="form-label">Type of malicious content (phishing, malware, ...):</label>
|
||||
<input type="text" class="form-control" name="malicious_type" id="malicious_type" placeholder="Type of malicious content">
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-sm-10">
|
||||
<label for="malicious_target" class="form-label">Legitimate target of the malicious content (expecially for phishing):</label>
|
||||
<input type="text" class="form-control" name="malicious_target" id="malicious_target" placeholder="Target">
|
||||
</div>
|
||||
</div>
|
||||
<input type="hidden" id="hash_to_contextualize" name="hash_to_contextualize" value="{{ hash }}">
|
||||
<input type="hidden" id="hostnode_uuid" name="hostnode_uuid" value="{{ hostnode_uuid }}">
|
||||
|
@ -123,7 +135,7 @@
|
|||
<form method="post" action="{{ url_for('get_ressource', tree_uuid=capture_uuid, node_uuid=urlnode_uuid) }}">
|
||||
<button class="btn btn-info" name="ressource_hash" value="{{ hash }}"
|
||||
{% if can_preview %}
|
||||
data-toggle="tooltip" data-placement="bottom" data-html="true"
|
||||
data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-html="true"
|
||||
title='<img class="ressource_preview" src="{{ url_for('get_ressource_preview', tree_uuid=capture_uuid, node_uuid=urlnode_uuid, h_ressource=hash) }}"/>'
|
||||
{% endif %}
|
||||
>{{ text }}</button>
|
||||
|
@ -165,7 +177,7 @@
|
|||
<p>
|
||||
The same file was seen in <b>{{ total_captures }}</b> other captures.
|
||||
</br>
|
||||
<button class="btn btn-info collapsed" type="button" data-toggle="collapse" data-target="#captureslist_{{ identifier_for_toggle }}" aria-expanded="false" aria-controls="collapseExample">
|
||||
<button class="btn btn-info collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#captureslist_{{ identifier_for_toggle }}" aria-expanded="false" aria-controls="collapseExample">
|
||||
<span class="if-collapsed">Show other captures</span>
|
||||
<span class="if-not-collapsed">Hide other captures</span>
|
||||
</button>
|
||||
|
@ -271,9 +283,9 @@
|
|||
<img src="{{ url_for('static', filename=icon_info['icon']) }}" alt="{{ icon_info['tooltip'] }}"
|
||||
width="21" height="21"
|
||||
{% if key == "image" %}
|
||||
data-toggle="tooltip" data-placement="bottom" data-html="true" title='<img class="ressource_preview" src="{{ url_for('get_ressource_preview', tree_uuid=tree_uuid, node_uuid=urlnode.uuid) }}"/> </br>Click to download.'
|
||||
data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-html="true" title='<img class="ressource_preview" src="{{ url_for('get_ressource_preview', tree_uuid=tree_uuid, node_uuid=urlnode.uuid) }}"/> </br>Click to download.'
|
||||
{% else %}
|
||||
data-toggle="tooltip" data-placement="bottom" data-html="true" title="{{icon_info['tooltip']}} <br/>Click to download."
|
||||
data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-html="true" title="{{icon_info['tooltip']}} <br/>Click to download."
|
||||
{% endif %}
|
||||
/>
|
||||
</a>
|
||||
|
|
|
@ -35,6 +35,9 @@
|
|||
{% block scripts %}
|
||||
<!-- Optional JavaScript -->
|
||||
{{ bootstrap.load_js() }}
|
||||
<script src='{{ url_for('static', filename='jquery.min.js') }}'
|
||||
integrity="{{get_sri('static', 'jquery.min.js')}}"
|
||||
crossorigin="anonymous"></script>
|
||||
<script src='{{ url_for('static', filename='datatables.min.js') }}'
|
||||
integrity="{{get_sri('static', 'datatables.min.js')}}"
|
||||
crossorigin="anonymous"></script>
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
<div>
|
||||
<p>Default tags: {{', '.join(default_tags)}}</p>
|
||||
<form role="form" action="{{ url_for('web_misp_push_view', tree_uuid=tree_uuid) }}" method=post enctype=multipart/form-data>
|
||||
<div class="form-group row">
|
||||
<label for="url" class="col-sm-2 col-form-label">Event info:</label>
|
||||
<div class="row mb-3">
|
||||
<div class="col-sm-10">
|
||||
<label for="url" class="col-sm-2 col-form-label">Event info:</label>
|
||||
<input type="text" class="form-control" name="event_info" value="{{event.info}}">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group row">
|
||||
<label for="tags" class="col-sm-2 col-form-label">Available tags:</label>
|
||||
<div class="row mb-3">
|
||||
<div class="col-sm-10">
|
||||
<label for="tags" class="col-sm-2 col-form-label">Available tags:</label>
|
||||
<select class="form-control" name="tags" id="tags" multiple>
|
||||
{% for tag in fav_tags %}
|
||||
<option value="{{ tag.name }}">{{ tag.name }}</option>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{% extends "main.html" %}
|
||||
|
||||
{% from 'bootstrap/utils.html' import render_messages %}
|
||||
{% from 'bootstrap5/utils.html' import render_messages %}
|
||||
{% from 'macros.html' import shorten_string %}
|
||||
{% from 'macros.html' import get_ressource_button %}
|
||||
{% from 'macros.html' import context_form %}
|
||||
|
@ -18,7 +18,7 @@
|
|||
<script>
|
||||
$(document).ready(() => {
|
||||
$(function () {
|
||||
$('[data-toggle="tooltip"]').tooltip()
|
||||
$('[data-bs-toggle="tooltip"]').tooltip()
|
||||
})
|
||||
});
|
||||
</script>
|
||||
|
|
|
@ -30,27 +30,27 @@
|
|||
</br>
|
||||
<div>Please only search one of the following thing at a time.</div>
|
||||
<form role="form" action="{{ url_for('search') }}" method=post enctype=multipart/form-data>
|
||||
<div class="form-group row">
|
||||
<label for="url" class="col-sm-2 col-form-label">URL:</label>
|
||||
<div class="row mb-3">
|
||||
<div class="col-sm-10">
|
||||
<label for="url" class="col-sm-2 col-form-label">URL:</label>
|
||||
<input type="text" class="form-control" name="url" id=url placeholder="URL to search">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label for="hostname" class="col-sm-2 col-form-label">Hostname:</label>
|
||||
<div class="row mb-3">
|
||||
<div class="col-sm-10">
|
||||
<label for="hostname" class="col-sm-2 col-form-label">Hostname:</label>
|
||||
<input type="text" class="form-control" name="hostname" id=hostname placeholder="Hostname to search">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label for="ressource" class="col-sm-2 col-form-label">Ressource:</label>
|
||||
<div class="row mb-3">
|
||||
<div class="col-sm-10">
|
||||
<label for="ressource" class="col-sm-2 col-form-label">Ressource:</label>
|
||||
<input type="text" class="form-control" name="ressource" id=ressource placeholder="SHA 521 of the ressource to search">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label for="cookie" class="col-sm-2 col-form-label">Cookie name:</label>
|
||||
<div class="row mb-3">
|
||||
<div class="col-sm-10">
|
||||
<label for="cookie" class="col-sm-2 col-form-label">Cookie name:</label>
|
||||
<input type="text" class="form-control" name="cookie" id=cookie placeholder="Cookie name to search">
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{% extends "main.html" %}
|
||||
|
||||
{% from 'bootstrap/utils.html' import render_messages %}
|
||||
{% from 'bootstrap5/utils.html' import render_messages %}
|
||||
{% from "macros.html" import shorten_string %}
|
||||
|
||||
{% block title %}Capture of {{info['url']}}{% endblock %}
|
||||
|
@ -157,7 +157,7 @@
|
|||
<hr/>
|
||||
<center>
|
||||
<div>
|
||||
<button type="button" class="btn btn-link" data-toggle="collapse" data-target="#menu_vertical_content">
|
||||
<button type="button" class="btn btn-link" data-bs-toggle="collapse" data-bs-target="#menu_vertical_content">
|
||||
<span class="if-collapsed">
|
||||
<img src="{{ url_for('static', filename='up.jpg') }}" class="arrow-down" alt="Maximize menu" height="25" width="25" title="Expand">
|
||||
</span>
|
||||
|
@ -171,7 +171,7 @@
|
|||
<div id=menu_vertical_content class="collapse show">
|
||||
<ul class="list-unstyled components">
|
||||
<li>
|
||||
<a href="#detailsModal" data-toggle="modal" data-target="#detailsModal" role="button">Capture Details</a>
|
||||
<a href="#detailsModal" data-bs-toggle="modal" data-bs-target="#detailsModal" role="button">Capture Details</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://www.lookyloo.eu/docs/main/usage.html#_investigate_a_capture" role="button">Lookyloo Manual</a>
|
||||
|
@ -184,46 +184,47 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div id="menu_container_horizontal" class="tree-panel-container">
|
||||
<div id=menu_horizontal class="media">
|
||||
<button type="button" class="btn btn-link mr-3 align-self-center" data-toggle="collapse" data-target="#menu_horizontal_content">
|
||||
<div class="tree-panel-container d-flex" id="menu_horizontal">
|
||||
<div class="flex-shrink-1">
|
||||
<button type="button" class="btn btn-link mr-3 align-self-center" data-bs-toggle="collapse" data-bs-target="#menu_horizontal_content">
|
||||
<span class="if-collapsed">
|
||||
<img src="{{ url_for('static', filename='up.jpg') }}" class="arrow-right" alt="Maximize menu" height="25" width="25" title="Expand">
|
||||
</span>
|
||||
<span class="if-not-collapsed">
|
||||
<img src="{{ url_for('static', filename='up.jpg') }}" class="arrow-left" alt="Minimize menu" height="25" width="25" title="Collapse">
|
||||
</span>
|
||||
</button>
|
||||
<div id="menu_horizontal_content" class="collapse show media-body mt-0 container">
|
||||
<div class="row">
|
||||
<hr class="vertical">
|
||||
</button>
|
||||
</div>
|
||||
<div id="menu_horizontal_content" class="collapse show flex-grow-1 ms-3 container">
|
||||
<div class="hstack gap-3">
|
||||
<div class="vr"></div>
|
||||
<div class="col-sm">
|
||||
<ul class="list-unstyled components">
|
||||
<li>
|
||||
<a href="#screenshotModal" data-toggle="modal" data-target="#screenshotModal" role="button">Page Screenshot</a>
|
||||
<a href="#screenshotModal" data-bs-toggle="modal" data-bs-target="#screenshotModal" role="button">Page Screenshot</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#statsModal" data-remote="{{ url_for('stats', tree_uuid=tree_uuid) }}"
|
||||
data-toggle="modal" data-target="#statsModal" role="button">Tree Statistics</a>
|
||||
data-bs-toggle="modal" data-bs-target="#statsModal" role="button">Tree Statistics</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#modulesModal" data-remote="{{ url_for('trigger_modules', tree_uuid=tree_uuid, force=False) }}"
|
||||
data-toggle="modal" data-target="#modulesModal" role="button">Third Party Reports</a>
|
||||
data-bs-toggle="modal" data-bs-target="#modulesModal" role="button">Third Party Reports</a>
|
||||
</li>
|
||||
{% if current_user.is_authenticated %}
|
||||
<li>
|
||||
<a href="#hashlookupModal" data-remote="{{ url_for('hashlookup', tree_uuid=tree_uuid) }}"
|
||||
data-toggle="modal" data-target="#hashlookupModal" role="button">Hashlookup hits</a>
|
||||
data-bs-toggle="modal" data-bs-target="#hashlookupModal" role="button">Hashlookup hits</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</div>
|
||||
<hr class="vertical">
|
||||
<div class="vr"></div>
|
||||
<div class="col-sm">
|
||||
<ul class="list-unstyled components">
|
||||
<li>
|
||||
<a href="#urlsInPageModal" data-remote="{{ url_for('urls_rendered_page', tree_uuid=tree_uuid) }}"
|
||||
data-toggle="modal" data-target="#urlsInPageModal" role="button">Run Subsequent Captures</a>
|
||||
data-bs-toggle="modal" data-bs-target="#urlsInPageModal" role="button">Run Subsequent Captures</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="{{ url_for('recapture', tree_uuid=tree_uuid) }}" role="button">Re-Capture URL</a>
|
||||
|
@ -235,31 +236,31 @@
|
|||
{% endif %}
|
||||
{% if enable_mail_notification %}
|
||||
<li>
|
||||
<a href="#emailModal" data-toggle="modal" data-target="#emailModal" role="button">Contact Local Administrator</a>
|
||||
<a href="#emailModal" data-bs-toggle="modal" data-bs-target="#emailModal" role="button">Contact Local Administrator</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</div>
|
||||
{%if enable_categorization or (current_user.is_authenticated and misp_push) or enable_bookmark or enable_context_by_users %}
|
||||
<hr class="vertical">
|
||||
<div class="vr"></div>
|
||||
<div class="col-sm">
|
||||
<ul class="list-unstyled components">
|
||||
{% if enable_categorization %}
|
||||
<li>
|
||||
<a href="#categoriesModal" data-remote="{{ url_for('categories_capture', tree_uuid=tree_uuid) }}"
|
||||
data-toggle="modal" data-target="#categoriesModal" role="button">Manage categories</a>
|
||||
data-bs-toggle="modal" data-bs-target="#categoriesModal" role="button">Manage categories</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% if current_user.is_authenticated and misp_push%}
|
||||
<li>
|
||||
<a href="#mispPushModal" data-remote="{{ url_for('web_misp_push_view', tree_uuid=tree_uuid) }}"
|
||||
data-toggle="modal" data-target="#mispPushModal" role="button">Prepare push to MISP</a>
|
||||
data-bs-toggle="modal" data-bs-target="#mispPushModal" role="button">Prepare push to MISP</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% if current_user.is_authenticated and misp_lookup%}
|
||||
<li>
|
||||
<a href="#mispLookupModal" data-remote="{{ url_for('web_misp_lookup_view', tree_uuid=tree_uuid) }}"
|
||||
data-toggle="modal" data-target="#mispLookupModal" role="button">Search events on MISP</a>
|
||||
data-bs-toggle="modal" data-bs-target="#mispLookupModal" role="button">Search events on MISP</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% if enable_bookmark %}
|
||||
|
@ -287,7 +288,7 @@
|
|||
<b>Legend</b>
|
||||
</div>
|
||||
<div style="display: inline;">
|
||||
<button type="button" class="btn btn-link" data-toggle="collapse" data-target="#legend">
|
||||
<button type="button" class="btn btn-link" data-bs-toggle="collapse" data-bs-target="#legend">
|
||||
<img src="{{ url_for('static', filename='down.jpg') }}" alt="Minimize legend" height="25" width="25" title="Collapse">
|
||||
</button>
|
||||
</div>
|
||||
|
@ -371,7 +372,7 @@
|
|||
|
||||
<div style="width: 70px; float: right;">
|
||||
<center>
|
||||
<button type="button" class="btn btn-link" data-toggle="collapse" data-target="#legend">
|
||||
<button type="button" class="btn btn-link" data-bs-toggle="collapse" data-bs-target="#legend">
|
||||
<img src="{{ url_for('static', filename='up.jpg') }}" alt="Maximize legend" height="40" width="40" title="Expand">
|
||||
<b>Legend</b>
|
||||
</button>
|
||||
|
@ -386,9 +387,7 @@
|
|||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="detailsModalLabel">Details of the capture at the time it happened</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<dl class="row">
|
||||
|
@ -418,7 +417,7 @@
|
|||
{%endif%}
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
|
||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -429,15 +428,13 @@
|
|||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="statsModalLabel">Statistics</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
... loading statistics ...
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
|
||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -448,15 +445,13 @@
|
|||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="mispPushModalLabel">MISP Push</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
... loading MISP Push view ...
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
|
||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -467,15 +462,13 @@
|
|||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="mispLookupModalLabel">MISP Lookup</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
... loading MISP Lookup view ...
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
|
||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -486,9 +479,7 @@
|
|||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="screenshotModalLabel">Screenshot</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<center>
|
||||
|
@ -508,7 +499,7 @@
|
|||
</center>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
|
||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -522,9 +513,7 @@
|
|||
Reports from 3rd party services
|
||||
</h4>
|
||||
</br>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
</br>
|
||||
<center><h5>Note that if you get an error when you click on a
|
||||
|
@ -535,7 +524,7 @@
|
|||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-success modulesForceRefresh">Re-run all modules</button>
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
|
||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -549,16 +538,14 @@
|
|||
Hits in Hashlookup
|
||||
</h4>
|
||||
</br>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
</br>
|
||||
<div class="modal-body">
|
||||
... loading results from hashlookup ...
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
|
||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -570,22 +557,20 @@
|
|||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="categoriesModalLabel">Categorize the capture</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
... loading the categorization options ...
|
||||
</div>
|
||||
<p>
|
||||
<form id=searchCategories>
|
||||
<label for="query">Category to search</label>
|
||||
<label for="query" class="form-label">Category to search</label>
|
||||
<input type="text" class="form-control" name="query" id="query" placeholder="Query">
|
||||
<button type="submit" class="btn btn-success">Search</button>
|
||||
</form>
|
||||
</p>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
|
||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -599,33 +584,31 @@
|
|||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="emailModalLabel">Notify by email</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p>A notification of this capture will be sent to the owners of this Lookyloo instance. They may or may not act on it.</p>
|
||||
<div class="form-group">
|
||||
<label for="email">Email address - used to get back in touch with you if needed (optional)</label>
|
||||
<div class="mb-3">
|
||||
<label for="email" class="form-label">Email address - used to get back in touch with you if needed (optional)</label>
|
||||
<input type="email" class="form-control" name="email" id="email" placeholder="Enter email">
|
||||
|
||||
<!-- boat fields -->
|
||||
<label class="boatymcboat" for="name">Your Name</label>
|
||||
<label class="boatymcboat form-label" for="name">Your Name</label>
|
||||
<input class="boatymcboat" autocomplete="off" type="text" id="name" name="name"
|
||||
placeholder="Your fav boat name here">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="comment">Please write a comment (optional)</label>
|
||||
<div class="mb-3">
|
||||
<label for="comment" class="form-label">Please write a comment (optional)</label>
|
||||
<textarea class="form-control" name="comment" id=comment rows="3"></textarea>
|
||||
</div>
|
||||
<div class="form-check">
|
||||
<div class="mb-3 form-check">
|
||||
<input class="form-check-input" type="checkbox" name="confirm" onchange="document.getElementById('btn-notification').disabled = !this.checked;"></input>
|
||||
<label for="force_push" class="form-check-label">{{ confirm_message }}</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="submit" class="btn btn-success" id="btn-notification" disabled=true>Send email</button>
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
|
||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
@ -638,15 +621,13 @@
|
|||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="urlsInPageModalLabel">URLs in the rendered page</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
... loading URLs in rendered page ...
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
|
||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{% extends "main.html" %}
|
||||
{% from 'bootstrap/utils.html' import render_messages %}
|
||||
{% from 'bootstrap5/utils.html' import render_messages %}
|
||||
{% block title %}Ongoing capture...{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{% extends "main.html" %}
|
||||
|
||||
{% from 'bootstrap/utils.html' import render_messages %}
|
||||
{% from 'bootstrap5/utils.html' import render_messages %}
|
||||
|
||||
{% block title %}{{ url }}{% endblock %}
|
||||
|
||||
|
|
Loading…
Reference in New Issue