mirror of https://github.com/CIRCL/lookyloo
new: simplified version to automatically report url
parent
cafa9c1502
commit
ae0c9e3449
|
@ -116,7 +116,7 @@ class AsyncCapture(AbstractManager):
|
|||
|
||||
if send_report:
|
||||
self.lookyloo.send_mail(uuid, email=settings.get('email', ''),
|
||||
comment=settings.get('comment'))
|
||||
comment=settings.get('comment'), email_prio= settings["email"] if settings["email"] else None)
|
||||
|
||||
lazy_cleanup = self.lookyloo.redis.pipeline()
|
||||
if queue and self.lookyloo.redis.zscore('queues', queue):
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"email" : "analyst@test.de"
|
||||
}
|
|
@ -57,6 +57,10 @@ def load_configs(path_to_config_files: str | Path | None=None) -> None:
|
|||
for path in config_path.glob('*.json'):
|
||||
with path.open() as _c:
|
||||
configs[path.stem] = json.load(_c)
|
||||
user_path = config_path / 'users'
|
||||
for path in user_path.glob('*.json'):
|
||||
with path.open() as _c:
|
||||
configs[path.stem] = json.load(_c)
|
||||
|
||||
|
||||
@lru_cache(64)
|
||||
|
|
|
@ -864,7 +864,7 @@ class Lookyloo():
|
|||
|
||||
return f"Malicious capture according to {len(modules)} module(s): {', '.join(modules)}"
|
||||
|
||||
def send_mail(self, capture_uuid: str, /, email: str='', comment: str | None=None) -> bool | dict[str, Any]:
|
||||
def send_mail(self, capture_uuid: str, /, email: str='', comment: str | None=None, email_prio: str | None = None) -> bool | dict[str, Any]:
|
||||
'''Send an email notification regarding a specific capture'''
|
||||
if not get_config('generic', 'enable_mail_notification'):
|
||||
return {"error": "Unable to send mail: mail notification disabled"}
|
||||
|
@ -913,7 +913,7 @@ class Lookyloo():
|
|||
msg['From'] = email_config['from']
|
||||
if email:
|
||||
msg['Reply-To'] = email
|
||||
msg['To'] = email_config['to']
|
||||
msg['To'] = email_config['to'] if not email_prio else email_prio
|
||||
msg['Subject'] = email_config['subject']
|
||||
body = get_email_template()
|
||||
body = body.format(
|
||||
|
|
|
@ -737,13 +737,13 @@ tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipyth
|
|||
|
||||
[[package]]
|
||||
name = "filelock"
|
||||
version = "3.13.4"
|
||||
version = "3.14.0"
|
||||
description = "A platform independent file lock."
|
||||
optional = false
|
||||
python-versions = ">=3.8"
|
||||
files = [
|
||||
{file = "filelock-3.13.4-py3-none-any.whl", hash = "sha256:404e5e9253aa60ad457cae1be07c0f0ca90a63931200a47d9b6a6af84fd7b45f"},
|
||||
{file = "filelock-3.13.4.tar.gz", hash = "sha256:d13f466618bfde72bd2c18255e269f72542c6e70e7bac83a0232d6b1cc5c8cf4"},
|
||||
{file = "filelock-3.14.0-py3-none-any.whl", hash = "sha256:43339835842f110ca7ae60f1e1c160714c5a6afd15a2873419ab185334975c0f"},
|
||||
{file = "filelock-3.14.0.tar.gz", hash = "sha256:6ea72da3be9b8c82afd3edcf99f2fffbb5076335a5ae4d03248bb5b6c3eae78a"},
|
||||
]
|
||||
|
||||
[package.extras]
|
||||
|
|
|
@ -41,7 +41,7 @@ from werkzeug.wrappers.response import Response as WerkzeugResponse
|
|||
|
||||
from lookyloo import Lookyloo, CaptureSettings, Indexing
|
||||
from lookyloo.capturecache import CaptureCache
|
||||
from lookyloo.default import get_config
|
||||
from lookyloo.default import get_config, get_homedir
|
||||
from lookyloo.exceptions import MissingUUID, NoValidHarFile
|
||||
from lookyloo.helpers import get_taxonomies, UserAgents, load_cookies
|
||||
|
||||
|
@ -1632,7 +1632,7 @@ def capture_web() -> str | Response | WerkzeugResponse:
|
|||
# render template
|
||||
return _prepare_capture_template(user_ua=request.headers.get('User-Agent'))
|
||||
|
||||
@app.route('/simple_capture', methods=['GET', 'POST'])
|
||||
@app.route('/simple_capture', methods=['GET','POST'])
|
||||
def simple_capture() -> str | Response | WerkzeugResponse:
|
||||
if flask_login.current_user.is_authenticated:
|
||||
user = flask_login.current_user.get_id()
|
||||
|
@ -1644,15 +1644,32 @@ def simple_capture() -> str | Response | WerkzeugResponse:
|
|||
flash('Invalid submission: please submit at least a URL.', 'error')
|
||||
return render_template('simple_capture.html')
|
||||
capture_query: CaptureSettings = {}
|
||||
capture_query['url'] = request.form['url']
|
||||
|
||||
perma_uuid = lookyloo.enqueue_capture(capture_query, source='web', user=user,
|
||||
authenticated=flask_login.current_user.is_authenticated)
|
||||
if perma_uuid:
|
||||
flash('Recording is in progress and is reported automatically.', 'success')
|
||||
time.sleep(2)
|
||||
return redirect(url_for('simple_capture'))
|
||||
|
||||
if request.form.get('auto_report'):
|
||||
path = get_homedir() /'config'/ 'users' / (user + ".json")
|
||||
if os.path.isfile(path):
|
||||
email = get_config(user, 'email')
|
||||
capture_query['auto_report'] = {"email": email}
|
||||
else:
|
||||
capture_query['auto_report'] = True
|
||||
if request.form.get('url'):
|
||||
capture_query['url'] = request.form['url']
|
||||
perma_uuid = lookyloo.enqueue_capture(capture_query, source='web', user=user,
|
||||
authenticated=flask_login.current_user.is_authenticated)
|
||||
time.sleep(2)
|
||||
if perma_uuid:
|
||||
flash('Recording is in progress and is reported automatically.', 'success')
|
||||
return redirect(url_for('simple_capture'))
|
||||
elif request.form.get('urls'):
|
||||
for url in request.form['urls'].strip().split('\n'):
|
||||
if not url:
|
||||
continue
|
||||
query = capture_query.copy()
|
||||
query['url'] = url
|
||||
new_capture_uuid = lookyloo.enqueue_capture(query, source='web', user=user,
|
||||
authenticated=flask_login.current_user.is_authenticated)
|
||||
if new_capture_uuid:
|
||||
flash('Recording is in progress and is reported automatically.', 'success')
|
||||
return redirect(url_for('simple_capture'))
|
||||
# render template
|
||||
return render_template('simple_capture.html')
|
||||
|
||||
|
|
|
@ -122,6 +122,4 @@
|
|||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
{% endblock %}
|
||||
{% endblock %}
|
Loading…
Reference in New Issue