From d647697c8ee2bc9d3d271ed9aa9973ab3c4fb6b7 Mon Sep 17 00:00:00 2001 From: David Bauer <david.bauer@open-xchange.com> Date: Wed, 12 Apr 2023 14:07:50 +0200 Subject: [PATCH] Fix: Faulty routing when running on different app root --- spec/app_root_test.js | 3 +-- spec/util.js | 7 +++++-- src/index.js | 4 +++- src/routes/autohooks.js | 3 ++- src/routes/redirects.js | 2 +- 5 files changed, 12 insertions(+), 7 deletions(-) diff --git a/spec/app_root_test.js b/spec/app_root_test.js index 67151e4..b6a9f74 100644 --- a/spec/app_root_test.js +++ b/spec/app_root_test.js @@ -39,8 +39,7 @@ describe('With different app root', function () { } } }) - process.env.APP_ROOT = '/appsuite/' - app = await injectApp() + app = await injectApp('/appsuite/') }) afterEach(async function () { diff --git a/spec/util.js b/spec/util.js index 04a3a34..2341975 100644 --- a/spec/util.js +++ b/spec/util.js @@ -65,8 +65,9 @@ export function mockRedis (data = {}, isEnabled = true) { return mock } -export async function injectApp () { +export async function injectApp (appRoot = '/') { register.clear() + process.env.APP_ROOT = appRoot const { configMap } = await import('../src/config_map.js') const { getLatestVersion } = await import('../src/version.js') @@ -76,7 +77,9 @@ export async function injectApp () { app.register(sensible) app.register(urlData) app.register(formbody) - app.register(autoLoad, { dir: join(__dirname, '../src/routes'), prefix: process.env.APP_ROOT, autoHooks: true }) + const autoLoadOptions = { dir: join(__dirname, '../src/routes'), autoHooks: true } + if (appRoot) autoLoadOptions.options = { prefix: String(appRoot).replace(/\/$/, '') } + app.register(autoLoad, autoLoadOptions) return app } diff --git a/src/index.js b/src/index.js index 5ef2eea..2980e0a 100644 --- a/src/index.js +++ b/src/index.js @@ -45,7 +45,9 @@ app.register(autoLoad, { dir: join(__dirname, 'plugins') }) // Register routes // Note: routes are loaded in alphabetical order -app.register(autoLoad, { dir: join(__dirname, 'routes'), prefix: process.env.APP_ROOT, autoHooks: true }) +const autoLoadOptions = { dir: join(__dirname, 'routes'), autoHooks: true } +if (process.env.APP_ROOT !== '/') autoLoadOptions.options = { prefix: String(process.env.APP_ROOT).replace(/\/$/, '') } +app.register(autoLoad, autoLoadOptions) app.addHook('onReady', () => { // don't block the onReady hook diff --git a/src/routes/autohooks.js b/src/routes/autohooks.js index 4ce8d4e..31a3fe3 100644 --- a/src/routes/autohooks.js +++ b/src/routes/autohooks.js @@ -18,11 +18,12 @@ export default async function (app, opts) { done() }) + const slowRequestThreshold = parseInt(process.env.SLOW_REQUEST_THRESHOLD) || 4000 + // Logs the request with the 'debug' level and also logs headers with the 'trace' level app.addHook('onResponse', (req, reply, done) => { const responseTime = reply.getResponseTime() const loggingOptions = { url: req.raw.url, res: reply, method: req.method, responseTime } - const slowRequestThreshold = parseInt(process.env.SLOW_REQUEST_THRESHOLD) || 4000 /* c8 ignore next */ if (process.env.LOG_LEVEL === 'trace') loggingOptions.headers = req.headers reply.log.debug(loggingOptions, 'request completed') diff --git a/src/routes/redirects.js b/src/routes/redirects.js index e2921c8..0adb224 100644 --- a/src/routes/redirects.js +++ b/src/routes/redirects.js @@ -9,7 +9,7 @@ export default async function redirectsPlugin (fastify) { }) if (process.env.APP_ROOT.length > 1) { - fastify.get(process.env.APP_ROOT.slice(0, -1), async (req, res) => { + fastify.get('', async (req, res) => { res.redirect(process.env.APP_ROOT) }) } -- GitLab