diff --git a/README.md b/README.md index 2151bea..c0c031b 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,13 @@ # Runic Gateway Website +[![Bugs](https://sonar.whitlocktech.com/api/project_badges/measure?project=runic-gateway-website&metric=bugs&token=sqb_d3593f26ac5663cd3e666039b7038f3248e8df50)](https://sonar.whitlocktech.com/dashboard?id=runic-gateway-website) +[![Code Smells](https://sonar.whitlocktech.com/api/project_badges/measure?project=runic-gateway-website&metric=code_smells&token=sqb_d3593f26ac5663cd3e666039b7038f3248e8df50)](https://sonar.whitlocktech.com/dashboard?id=runic-gateway-website) +[![Duplicated Lines (%)](https://sonar.whitlocktech.com/api/project_badges/measure?project=runic-gateway-website&metric=duplicated_lines_density&token=sqb_d3593f26ac5663cd3e666039b7038f3248e8df50)](https://sonar.whitlocktech.com/dashboard?id=runic-gateway-website) +[![Lines of Code](https://sonar.whitlocktech.com/api/project_badges/measure?project=runic-gateway-website&metric=ncloc&token=sqb_d3593f26ac5663cd3e666039b7038f3248e8df50)](https://sonar.whitlocktech.com/dashboard?id=runic-gateway-website) +[![Security Hotspots](https://sonar.whitlocktech.com/api/project_badges/measure?project=runic-gateway-website&metric=security_hotspots&token=sqb_d3593f26ac5663cd3e666039b7038f3248e8df50)](https://sonar.whitlocktech.com/dashboard?id=runic-gateway-website) +[![Security Rating](https://sonar.whitlocktech.com/api/project_badges/measure?project=runic-gateway-website&metric=security_rating&token=sqb_d3593f26ac5663cd3e666039b7038f3248e8df50)](https://sonar.whitlocktech.com/dashboard?id=runic-gateway-website) +[![Vulnerabilities](https://sonar.whitlocktech.com/api/project_badges/measure?project=runic-gateway-website&metric=vulnerabilities&token=sqb_d3593f26ac5663cd3e666039b7038f3248e8df50)](https://sonar.whitlocktech.com/dashboard?id=runic-gateway-website) + Public site, wiki, and protected admin panel for a private Ultima Online shard — a full-stack app in one repo. Branding is instance-configurable via `BRAND_*` (see [Branding](#branding)); **UOMysticmoon** is the first instance. diff --git a/bot/src/app.js b/bot/src/app.js index 1029d90..c69dab3 100644 --- a/bot/src/app.js +++ b/bot/src/app.js @@ -4,6 +4,9 @@ const internalRouter = require('./internal/internal.routes') const app = express() +// Internal-only listener, but don't advertise the stack anyway (defense in depth). +app.disable('x-powered-by') + app.use(express.json()) app.get('/health', (req, res) => res.json({ status: 'ok' })) diff --git a/client/vite.config.js b/client/vite.config.js index 46b418f..38ee91b 100644 --- a/client/vite.config.js +++ b/client/vite.config.js @@ -15,5 +15,9 @@ export default defineConfig({ }, build: { outDir: 'dist', + // Don't inject the inline module-preload polyfill script — modern browsers all + // support modulepreload, and an inline