From 18c9b0f54ff9dd1bcc9ae091de1b5f5351a58b25 Mon Sep 17 00:00:00 2001 From: Anastasia Shuba Date: Mon, 27 May 2024 13:23:55 +0200 Subject: [PATCH 1/3] Add pages to simulate HTTP/WebView errors --- index.html | 2 ++ server.js | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/index.html b/index.html index 4c2f6cf..4fc03a4 100644 --- a/index.html +++ b/index.html @@ -121,6 +121,8 @@

Other

  • Windows Browser: MainWorld Script injection tests
  • Windows Browser: SecureWorld Script injection tests
  • Site Breakage Reach Calculator
  • +
  • HTTP 401 error (and others)
  • +
  • Simulate connection drop
  • diff --git a/server.js b/server.js index a562c5a..b5ee6ae 100644 --- a/server.js +++ b/server.js @@ -261,6 +261,30 @@ app.get('/security/address-bar-spoofing/download-redirect', (req, res) => { res.redirect(301, 'https://staticcdn.duckduckgo.com/macos-desktop-browser/duckduckgo.dmg'); }); +// Simulate HTTP errors +app.get('/error', (req, res) => { + const code = parseInt(req.query.code); + + if (code == 401) { + // This sets a WebView error on Windows + res.set('WWW-Authenticate', 'Basic realm="Restricted Area"'); + } + + if (isNaN(code) || code < 100 || code > 599) { + res.statusCode = 200; + res.send(`Invalid HTTP error code provided. Status not set.`); + } else { + res.statusCode = code; + res.send(`HTTP error code set to '${code}'`); + } + res.end(); +}); + +// Simulate connection drop +app.get('/error/drop', (_, res) => { + res.destroy(); +}); + app.use('/content-scope-scripts/', express.static('node_modules/@duckduckgo/content-scope-scripts/integration-test/test-pages/')); const blockingRoutes = require('./privacy-protections/request-blocking/server/routes'); From 162100a1c7cdee89ba4424ee2e808c7d60214e60 Mon Sep 17 00:00:00 2001 From: Anastasia Shuba Date: Mon, 27 May 2024 21:11:46 +0200 Subject: [PATCH 2/3] lint --- server.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/server.js b/server.js index b5ee6ae..6727487 100644 --- a/server.js +++ b/server.js @@ -265,19 +265,19 @@ app.get('/security/address-bar-spoofing/download-redirect', (req, res) => { app.get('/error', (req, res) => { const code = parseInt(req.query.code); - if (code == 401) { + if (code === 401) { // This sets a WebView error on Windows res.set('WWW-Authenticate', 'Basic realm="Restricted Area"'); } if (isNaN(code) || code < 100 || code > 599) { res.statusCode = 200; - res.send(`Invalid HTTP error code provided. Status not set.`); + res.send('Invalid HTTP error code provided. Status not set.'); } else { res.statusCode = code; res.send(`HTTP error code set to '${code}'`); } - res.end(); + res.end(); }); // Simulate connection drop From 149211f786b9fefe80356deac4b96117ad78e165 Mon Sep 17 00:00:00 2001 From: Anastasia Shuba Date: Tue, 28 May 2024 11:46:51 +0200 Subject: [PATCH 3/3] code review --- index.html | 3 +-- network-error/index.html | 31 +++++++++++++++++++++++++++++++ network-error/server/routes.js | 28 ++++++++++++++++++++++++++++ server.js | 27 +++------------------------ 4 files changed, 63 insertions(+), 26 deletions(-) create mode 100644 network-error/index.html create mode 100644 network-error/server/routes.js diff --git a/index.html b/index.html index 4fc03a4..8bc67ee 100644 --- a/index.html +++ b/index.html @@ -51,6 +51,7 @@

    Browser Features

  • Element Hiding
  • Auto Refresh
  • Favicon
  • +
  • Network Errors
  • Security

    @@ -121,8 +122,6 @@

    Other

  • Windows Browser: MainWorld Script injection tests
  • Windows Browser: SecureWorld Script injection tests
  • Site Breakage Reach Calculator
  • -
  • HTTP 401 error (and others)
  • -
  • Simulate connection drop
  • diff --git a/network-error/index.html b/network-error/index.html new file mode 100644 index 0000000..52ff20b --- /dev/null +++ b/network-error/index.html @@ -0,0 +1,31 @@ + + + + + + Network Errors Tests + + +

    [Home][Network Error Tests]

    + +

    This page allows testing various HTTP statuses and network errors.

    +

    To test an HTTP status, simply pass it as a query param: /network-error/http_status/?code=404

    +

    Examples below:

    + + + +

    Available network errors:

    + + + + + \ No newline at end of file diff --git a/network-error/server/routes.js b/network-error/server/routes.js new file mode 100644 index 0000000..96c22df --- /dev/null +++ b/network-error/server/routes.js @@ -0,0 +1,28 @@ +const express = require('express'); +const router = express.Router(); + +// Simulate HTTP errors +router.get('/http_status/', (req, res) => { + const code = parseInt(req.query.code); + + if (code === 401) { + // This sets a WebView error on Windows + res.set('WWW-Authenticate', 'Basic realm="Restricted Area"'); + } + + if (isNaN(code) || code < 100 || code > 599) { + res.statusCode = 200; + res.send('Invalid HTTP error code provided. Status not set.'); + } else { + res.statusCode = code; + res.send(`HTTP error code set to '${code}'`); + } + res.end(); +}); + +// Simulate connection drop +router.get('/drop', (_, res) => { + res.destroy(); +}); + +module.exports = router; diff --git a/server.js b/server.js index 6727487..aa7983c 100644 --- a/server.js +++ b/server.js @@ -261,30 +261,6 @@ app.get('/security/address-bar-spoofing/download-redirect', (req, res) => { res.redirect(301, 'https://staticcdn.duckduckgo.com/macos-desktop-browser/duckduckgo.dmg'); }); -// Simulate HTTP errors -app.get('/error', (req, res) => { - const code = parseInt(req.query.code); - - if (code === 401) { - // This sets a WebView error on Windows - res.set('WWW-Authenticate', 'Basic realm="Restricted Area"'); - } - - if (isNaN(code) || code < 100 || code > 599) { - res.statusCode = 200; - res.send('Invalid HTTP error code provided. Status not set.'); - } else { - res.statusCode = code; - res.send(`HTTP error code set to '${code}'`); - } - res.end(); -}); - -// Simulate connection drop -app.get('/error/drop', (_, res) => { - res.destroy(); -}); - app.use('/content-scope-scripts/', express.static('node_modules/@duckduckgo/content-scope-scripts/integration-test/test-pages/')); const blockingRoutes = require('./privacy-protections/request-blocking/server/routes'); @@ -310,3 +286,6 @@ app.use('/viewport', viewportRoutes); const addressBarSpoofingRoutes = require('./security/address-bar-spoofing/server/routes.js'); app.use('/security/address-bar-spoofing-download-redirect', addressBarSpoofingRoutes); + +const networkErrorRoutes = require('./network-error/server/routes.js'); +app.use('/network-error', networkErrorRoutes);