42 """Check if the browser supports Sec-Fetch headers.
44 https://caniuse.com/mdn-http_headers_sec-fetch-dest
45 https://caniuse.com/mdn-http_headers_sec-fetch-mode
46 https://caniuse.com/mdn-http_headers_sec-fetch-site
52 - Edge (mirrors Chrome)
53 - Opera (mirrors Chrome)
55 user_agent = user_agent.lower()
58 chrome_match = re.search(
r'chrome/(\d+)', user_agent)
60 version = int(chrome_match.group(1))
64 firefox_match = re.search(
r'firefox/(\d+)', user_agent)
66 version = int(firefox_match.group(1))
70 safari_match = re.search(
r'version/(\d+)\.(\d+)', user_agent)
72 major = int(safari_match.group(1))
73 minor = int(safari_match.group(2))
74 return major > 16
or (major == 16
and minor >= 4)
80 network: IPv4Network | IPv6Network,
81 request: SXNG_Request,
83) -> werkzeug.Response |
None:
86 user_agent = request.headers.get(
'User-Agent',
'')
88 val = request.headers.get(
"Sec-Fetch-Mode",
"")
89 if val
not in (
'navigate',
'cors'):
90 logger.debug(
"invalid Sec-Fetch-Mode '%s'", val)
91 return flask.redirect(flask.url_for(
'index'), code=302)
93 val = request.headers.get(
"Sec-Fetch-Site",
"")
94 if val
not in (
'same-origin',
'same-site',
'none'):
95 logger.debug(
"invalid Sec-Fetch-Site '%s'", val)
96 flask.redirect(flask.url_for(
'index'), code=302)
98 val = request.headers.get(
"Sec-Fetch-Dest",
"")
99 if val
not in (
'document',
'empty'):
100 logger.debug(
"invalid Sec-Fetch-Dest '%s'", val)
101 flask.redirect(flask.url_for(
'index'), code=302)