1
0
mirror of https://gitlab.com/bramw/baserow.git synced 2024-11-25 00:46:46 +00:00
bramw_baserow/web-frontend/modules/core/middleware/urlCheck.js

51 lines
1.5 KiB
JavaScript

function isValidHttpUrl(rawString) {
try {
const url = new URL(rawString)
return url.protocol === 'http:' || url.protocol === 'https:'
} catch (_) {
return false
}
}
function invalidUrlEnvVariable(envVariableName) {
/**
* This function lets us check on startup that a provided environment variable is
* a valid url. If we didn't do this then whenever the user would try to send a
* HTTP request they would get a mysterious 500 error raised by the http client.
*
* @type {string}
*/
const envValue = process.env[envVariableName]
return envValue && !isValidHttpUrl(envValue)
}
/**
* This middleware makes sure that the current user is admin else a 403 error
* will be shown to the user.
*/
export default function ({ store, req, error, i18n }) {
// If nuxt generate, pass this middleware
if (process.server && !req) return
if (process.server && !process.env.BASEROW_DISABLE_PUBLIC_URL_CHECK) {
const urlEnvVarsToCheck = []
if (process.env.BASEROW_PUBLIC_URL) {
urlEnvVarsToCheck.push('BASEROW_PUBLIC_URL')
} else {
urlEnvVarsToCheck.push('PUBLIC_BACKEND_URL', 'PUBLIC_WEB_FRONTEND_URL')
}
for (const name of urlEnvVarsToCheck) {
if (invalidUrlEnvVariable(name)) {
// noinspection HttpUrlsUsage
return error({
statusCode: 500,
hideBackButton: true,
message: i18n.t('urlCheck.invalidUrlEnvVarTitle', { name }),
content: i18n.t('urlCheck.invalidUrlEnvVarDescription', { name }),
})
}
}
}
}