2020-10-27 11:27:17 +01:00
|
|
|
'use strict';
|
|
|
|
|
2020-05-08 13:50:00 +02:00
|
|
|
const _ = require('lodash');
|
2020-06-23 16:31:16 +02:00
|
|
|
const { getCommonBeginning } = require('./string-formatting');
|
2020-05-08 13:50:00 +02:00
|
|
|
|
|
|
|
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:38:50 +02:00
|
|
|
const getAbsoluteUrl = adminOrServer => (config, forAdminBuild = false) => {
|
2021-07-05 11:01:58 +02:00
|
|
|
const { serverUrl, adminUrl } = getConfigUrls(config.get('server'), forAdminBuild);
|
2020-05-28 11:38:50 +02:00
|
|
|
let url = adminOrServer === 'server' ? serverUrl : adminUrl;
|
|
|
|
|
|
|
|
if (url.startsWith('http')) {
|
|
|
|
return url;
|
2020-05-28 11:17:59 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
let hostname =
|
2021-07-05 11:01:58 +02:00
|
|
|
config.get('environment') === 'development' &&
|
|
|
|
['127.0.0.1', '0.0.0.0'].includes(config.get('server.host'))
|
2020-05-28 11:17:59 +02:00
|
|
|
? 'localhost'
|
2021-07-05 11:01:58 +02:00
|
|
|
: config.get('server.host');
|
2020-05-28 11:17:59 +02:00
|
|
|
|
2021-07-05 11:01:58 +02:00
|
|
|
return `http://${hostname}:${config.get('server.port')}${url}`;
|
2020-05-28 11:17:59 +02:00
|
|
|
};
|
|
|
|
|
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
|
|
|
};
|