2020-05-08 13:50:00 +02:00
|
|
|
const _ = require('lodash');
|
|
|
|
const { getCommonBeginning } = require('./stringFormatting');
|
|
|
|
|
|
|
|
const getConfigUrls = (serverConfig, forAdminBuild = false) => {
|
|
|
|
// Defines serverUrl value
|
|
|
|
let serverUrl = _.get(serverConfig, 'url', '');
|
|
|
|
serverUrl = _.trim(serverUrl, '/ ');
|
|
|
|
if (typeof serverUrl !== 'string') {
|
|
|
|
throw new Error('Invalid server url config. Make sure the url is a string.');
|
|
|
|
}
|
|
|
|
if (serverUrl.startsWith('http')) {
|
|
|
|
try {
|
|
|
|
serverUrl = _.trim(new URL(serverConfig.url).toString(), '/');
|
|
|
|
} catch (e) {
|
|
|
|
throw new Error(
|
|
|
|
'Invalid server url config. Make sure the url defined in server.js is valid.'
|
|
|
|
);
|
|
|
|
}
|
|
|
|
} else if (serverUrl !== '') {
|
|
|
|
serverUrl = `/${serverUrl}`;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Defines adminUrl value
|
|
|
|
let adminUrl = _.get(serverConfig, 'admin.url', '/admin');
|
|
|
|
adminUrl = _.trim(adminUrl, '/ ');
|
|
|
|
if (typeof adminUrl !== 'string') {
|
|
|
|
throw new Error('Invalid admin url config. Make sure the url is a non-empty string.');
|
|
|
|
}
|
|
|
|
if (adminUrl.startsWith('http')) {
|
|
|
|
try {
|
|
|
|
adminUrl = _.trim(new URL(adminUrl).toString(), '/');
|
|
|
|
} catch (e) {
|
|
|
|
throw new Error('Invalid admin url config. Make sure the url defined in server.js is valid.');
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
adminUrl = `${serverUrl}/${adminUrl}`;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Defines adminPath value
|
|
|
|
let adminPath = adminUrl;
|
|
|
|
if (
|
|
|
|
serverUrl.startsWith('http') &&
|
|
|
|
adminUrl.startsWith('http') &&
|
|
|
|
new URL(adminUrl).origin === new URL(serverUrl).origin &&
|
|
|
|
!forAdminBuild
|
|
|
|
) {
|
|
|
|
adminPath = adminUrl.replace(getCommonBeginning(serverUrl, adminUrl), '');
|
|
|
|
adminPath = `/${_.trim(adminPath, '/')}`;
|
|
|
|
} else if (adminUrl.startsWith('http')) {
|
|
|
|
adminPath = new URL(adminUrl).pathname;
|
|
|
|
}
|
|
|
|
|
|
|
|
return {
|
|
|
|
serverUrl,
|
|
|
|
adminUrl,
|
|
|
|
adminPath,
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
2020-05-28 11:17:59 +02:00
|
|
|
const getAbsoluteUrl = adminOrServer => config => {
|
|
|
|
if (config[adminOrServer].url.startsWith('http')) {
|
|
|
|
return config[adminOrServer].url;
|
|
|
|
}
|
|
|
|
|
|
|
|
let hostname =
|
|
|
|
config.environment === 'development' && ['127.0.0.1', '0.0.0.0'].includes(config.host)
|
|
|
|
? 'localhost'
|
|
|
|
: config.host;
|
|
|
|
|
|
|
|
return `http://${hostname}:${config.port}${config[adminOrServer].url}`;
|
|
|
|
};
|
|
|
|
|
2020-05-08 13:50:00 +02:00
|
|
|
module.exports = {
|
|
|
|
getConfigUrls,
|
2020-05-28 11:17:59 +02:00
|
|
|
getAbsoluteAdminUrl: getAbsoluteUrl('admin'),
|
|
|
|
getAbsoluteServerUrl: getAbsoluteUrl('server'),
|
2020-05-08 13:50:00 +02:00
|
|
|
};
|