40    """Check if the browser supports Sec-Fetch headers. 
   42    https://caniuse.com/mdn-http_headers_sec-fetch-dest 
   43    https://caniuse.com/mdn-http_headers_sec-fetch-mode 
   44    https://caniuse.com/mdn-http_headers_sec-fetch-site 
   50    - Edge (mirrors Chrome) 
   51    - Opera (mirrors Chrome) 
   53    user_agent = user_agent.lower()
 
   56    chrome_match = re.search(
r'chrome/(\d+)', user_agent)
 
   58        version = int(chrome_match.group(1))
 
   62    firefox_match = re.search(
r'firefox/(\d+)', user_agent)
 
   64        version = int(firefox_match.group(1))
 
   68    safari_match = re.search(
r'version/(\d+)\.(\d+)', user_agent)
 
   70        major = int(safari_match.group(1))
 
   71        minor = int(safari_match.group(2))
 
   72        return major > 16 
or (major == 16 
and minor >= 4)
 
 
   78    network: IPv4Network | IPv6Network,
 
   79    request: flask.Request,
 
   81) -> werkzeug.Response | 
None:
 
   83    if not request.is_secure:
 
   85            "Sec-Fetch cannot be verified for non-secure requests (HTTP headers are not set/sent by the client)." 
   90    user_agent = request.headers.get(
'User-Agent', 
'')
 
   92        val = request.headers.get(
"Sec-Fetch-Mode", 
"")
 
   93        if val 
not in (
'navigate', 
'cors'):
 
   94            logger.debug(
"invalid Sec-Fetch-Mode '%s'", val)
 
   95            return flask.redirect(flask.url_for(
'index'), code=302)
 
   97        val = request.headers.get(
"Sec-Fetch-Site", 
"")
 
   98        if val 
not in (
'same-origin', 
'same-site', 
'none'):
 
   99            logger.debug(
"invalid Sec-Fetch-Site '%s'", val)
 
  100            flask.redirect(flask.url_for(
'index'), code=302)
 
  102        val = request.headers.get(
"Sec-Fetch-Dest", 
"")
 
  103        if val 
not in (
'document', 
'empty'):
 
  104            logger.debug(
"invalid Sec-Fetch-Dest '%s'", val)
 
  105            flask.redirect(flask.url_for(
'index'), code=302)