mirror of https://github.com/CIRCL/lookyloo
new: first try to add an url in the hostnode to dl the file if there is one to be downloaded
parent
137c05648b
commit
5a77044530
|
@ -490,6 +490,10 @@ class Lookyloo():
|
|||
'''Get rendered HTML'''
|
||||
return self._get_raw(capture_uuid, 'html', all_html)
|
||||
|
||||
def get_data(self, capture_uuid: str, /) -> Tuple[str, BytesIO]:
|
||||
'''Get the data'''
|
||||
return self._get_raw(capture_uuid, 'data.filename', False).getvalue().decode(), self._get_raw(capture_uuid, 'data', False)
|
||||
|
||||
def get_cookies(self, capture_uuid: str, /, all_cookies: bool=False) -> BytesIO:
|
||||
'''Get the cookie(s)'''
|
||||
return self._get_raw(capture_uuid, 'cookies.json', all_cookies)
|
||||
|
@ -890,6 +894,17 @@ class Lookyloo():
|
|||
'url_object': url,
|
||||
}
|
||||
|
||||
if url.empty_response:
|
||||
if ct.root_hartree.rendered_node == url:
|
||||
# check if a file is available
|
||||
filename, data = self.lookyloo.get_data(self.uuid)
|
||||
if filename:
|
||||
# we have a file to download
|
||||
url.add_feature('has_dl_file', True)
|
||||
|
||||
|
||||
|
||||
|
||||
if not url.empty_response:
|
||||
# Index lookup
|
||||
# %%% Full body %%%
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -67,6 +67,7 @@ har2tree = "^1.13.2"
|
|||
playwrightcapture = "^1.13.4"
|
||||
passivetotal = "^2.5.9"
|
||||
werkzeug = "2.1.2"
|
||||
filetype = "^1.1.0"
|
||||
|
||||
[tool.poetry.extras]
|
||||
misp = ['python-magic', 'pydeep2']
|
||||
|
|
|
@ -6,6 +6,7 @@ import json
|
|||
import logging
|
||||
import os
|
||||
import time
|
||||
import filetype
|
||||
from datetime import date, datetime, timedelta, timezone
|
||||
from io import BytesIO, StringIO
|
||||
from typing import Any, Dict, List, Optional, Union
|
||||
|
@ -482,6 +483,17 @@ def image(tree_uuid: str):
|
|||
return send_file(to_return, mimetype='image/png',
|
||||
as_attachment=True, attachment_filename='image.png')
|
||||
|
||||
@app.route('/tree/<string:tree_uuid>/data', methods=['GET'])
|
||||
def data(tree_uuid: str):
|
||||
filename, data = lookyloo.get_data(tree_uuid)
|
||||
if len(filename) == 0:
|
||||
if filetype.guess_mime(data.getvalue()) is None:
|
||||
mime = 'application/octet-stream'
|
||||
else:
|
||||
mime = filetype.guess_mime(data.getvalue())
|
||||
return send_file(data, mimetype= mime,
|
||||
as_attachment=True, attachment_filename=filename)
|
||||
|
||||
|
||||
@app.route('/tree/<string:tree_uuid>/thumbnail/', defaults={'width': 64}, methods=['GET'])
|
||||
@app.route('/tree/<string:tree_uuid>/thumbnail/<int:width>', methods=['GET'])
|
||||
|
|
|
@ -181,6 +181,11 @@
|
|||
</p>
|
||||
{{ popup_icons(keys_response, url['url_object'], tree_uuid) }}
|
||||
|
||||
{% if url['url_object'].has_dl_file %}
|
||||
<a href="{{ url_for('get_data', tree_uuid=tree_uuid }}">
|
||||
Download file
|
||||
</a>
|
||||
|
||||
{% if url['url_object'].rendered_html %}
|
||||
<a href="{{ url_for('urlnode_rendered_content', tree_uuid=tree_uuid, node_uuid=url['url_object'].uuid) }}">
|
||||
Download rendered HTML page
|
||||
|
|
Loading…
Reference in New Issue