mirror of https://github.com/CIRCL/lookyloo
fix: Add mimetype for favicon in tree
parent
391166aec7
commit
c6f1057708
|
@ -23,6 +23,8 @@ from urllib.parse import urlparse
|
|||
from uuid import uuid4
|
||||
from zipfile import ZipFile
|
||||
|
||||
import magic
|
||||
|
||||
from defang import defang # type: ignore[import-untyped]
|
||||
from har2tree import CrawledTree, HostNode, URLNode
|
||||
from lacuscore import (LacusCore,
|
||||
|
@ -850,18 +852,21 @@ class Lookyloo():
|
|||
return to_return
|
||||
|
||||
@overload
|
||||
def get_potential_favicons(self, capture_uuid: str, /, all_favicons: Literal[False], for_datauri: Literal[True]) -> str:
|
||||
def get_potential_favicons(self, capture_uuid: str, /, all_favicons: Literal[False], for_datauri: Literal[True]) -> tuple[str, str]:
|
||||
...
|
||||
|
||||
@overload
|
||||
def get_potential_favicons(self, capture_uuid: str, /, all_favicons: Literal[True], for_datauri: Literal[False]) -> BytesIO:
|
||||
...
|
||||
|
||||
def get_potential_favicons(self, capture_uuid: str, /, all_favicons: bool=False, for_datauri: bool=False) -> BytesIO | str:
|
||||
def get_potential_favicons(self, capture_uuid: str, /, all_favicons: bool=False, for_datauri: bool=False) -> BytesIO | tuple[str, str]:
|
||||
'''Get rendered HTML'''
|
||||
fav = self._get_raw(capture_uuid, 'potential_favicons.ico', all_favicons)
|
||||
if not all_favicons and for_datauri:
|
||||
return base64.b64encode(fav.getvalue()).decode()
|
||||
favicon = fav.getvalue()
|
||||
f = magic.Magic(mime=True)
|
||||
mimetype = f.from_buffer(favicon)
|
||||
return mimetype, base64.b64encode(favicon).decode()
|
||||
return fav
|
||||
|
||||
def get_html(self, capture_uuid: str, /, all_html: bool=False) -> BytesIO:
|
||||
|
|
|
@ -769,7 +769,7 @@ def tree(tree_uuid: str, node_uuid: str | None=None) -> Response | str | Werkzeu
|
|||
meta = lookyloo.get_meta(tree_uuid)
|
||||
capture_settings = lookyloo.get_capture_settings(tree_uuid)
|
||||
# Get a potential favicon, if it exists
|
||||
b64_potential_favicon = lookyloo.get_potential_favicons(tree_uuid, all_favicons=False, for_datauri=True)
|
||||
mime_favicon, b64_potential_favicon = lookyloo.get_potential_favicons(tree_uuid, all_favicons=False, for_datauri=True)
|
||||
hostnode_to_highlight = None
|
||||
if node_uuid:
|
||||
try:
|
||||
|
@ -800,6 +800,7 @@ def tree(tree_uuid: str, node_uuid: str | None=None) -> Response | str | Werkzeu
|
|||
tree_uuid=tree_uuid, public_domain=lookyloo.public_domain,
|
||||
screenshot_thumbnail=b64_thumbnail, page_title=cache.title if hasattr(cache, 'title') else '',
|
||||
favicon=b64_potential_favicon,
|
||||
mime_favicon=mime_favicon,
|
||||
screenshot_size=screenshot_size,
|
||||
meta=meta, enable_mail_notification=enable_mail_notification,
|
||||
enable_monitoring=lookyloo.monitoring_enabled,
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
"stats.css": "/kY943FwWBTne4IIyf7iBROSfbGd82TeBicEXqKkRwawMVRIvM/Pk5MRa7okUyGIxaDjFQGmV/U1vy+PhN6Jbw==",
|
||||
"stats_graph.js": "S/sMNQK1UMMLD0xQeEa7sq3ce8o6oPxwxGlyKVtaHOODjair86dbBDm7cu6pa/elMRDJT1j09jEFjWp+5GbhTw==",
|
||||
"tree.css": "R/pWQnE8kMacDrzGy/NpA1tJoHAZpOjFiX6dqtBe+PqAnhYMn1CIQzODh8Ifvh6hBTPLRWX3bsabfEvfaI7Z6A==",
|
||||
"tree.js": "yutMvl9vXhN0htkl40tRHF3r5LCDsH+MJplB6ihMENIsMryEyVoTr4Zq1UadgMG5tP+W2/jqm2zfXh414Kk8AA==",
|
||||
"tree.js": "B14s0PA3EsL4eZw5e+bpQabUVy75t8z8o1PLHurwBD27w2A1Cn/98dA3r4g511Bmwkh09J142LH4y0bVsQeqmQ==",
|
||||
"up.jpg": "d1ljZJ9f5JekyM6RLFFH2Ua44j6neiQBdUIXOenRTjGppQr3JaeglpQIH6BjPCJL177+TH52U3UIRNS5YAyKIg==",
|
||||
"up_right.jpg": "OMmz+n+MxR34P8/fn5t4DkqKqdJRzQbXQ7fAi2lhkZIJGhVs2vIyY1f2hpYoBxDAX1OcYsSE2lqIR2vXNDGZsA==",
|
||||
"video.png": "gJtmkfr8I1Kw43pYEKjg6CAjgmhl1vIBKBQ3ZkxCu3wvxQm+6kf93iLrrFiY2WuiXzxEn2Leu52GJzmVN5id0g==",
|
||||
|
|
|
@ -595,7 +595,7 @@ function update(root, computed_node_width=0) {
|
|||
.attr('id', 'favicon')
|
||||
.attr("width", 32)
|
||||
.attr("height", 32)
|
||||
.attr("xlink:href", `data:image/png;base64,${favicon}`)
|
||||
.attr("xlink:href", `data:${mime_favicon};base64,${favicon}`)
|
||||
.attr('cursor', 'pointer')
|
||||
.on('mouseover', (event, d) => {
|
||||
d3.select('#tooltip')
|
||||
|
|
|
@ -190,6 +190,7 @@
|
|||
var treeUUID = "{{ tree_uuid }}";
|
||||
var screenshot_thumbnail = "{{ screenshot_thumbnail }}";
|
||||
var favicon = "{{ favicon }}";
|
||||
var mime_favicon = "{{ mime_favicon }}";
|
||||
var enable_bookmark = {{ enable_bookmark|tojson }};
|
||||
var treeData = {{ tree_json | safe }};
|
||||
var parent_uuid = {{ parent_uuid|tojson }};
|
||||
|
|
Loading…
Reference in New Issue