mirror of
https://github.com/strapi/strapi.git
synced 2025-10-29 00:49:49 +00:00
Move index.html to public middleware + add config var "defaultIndex"
Signed-off-by: Pierre Noël <pierre.noel@strapi.io>
This commit is contained in:
parent
2d677be6b4
commit
74e63ea77c
@ -1,3 +1,6 @@
|
|||||||
{
|
{
|
||||||
"myCustomConfiguration": "This configuration is accessible through strapi.config.environments.development.myCustomConfiguration"
|
"myCustomConfiguration": "This configuration is accessible through strapi.config.environments.development.myCustomConfiguration",
|
||||||
|
"public": {
|
||||||
|
"defaultIndex": false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,56 +0,0 @@
|
|||||||
<!doctype html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
|
|
||||||
<title>Welcome to your Strapi app</title>
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
||||||
<meta name="robots" content="noindex">
|
|
||||||
<link href="https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css" rel="stylesheet" />
|
|
||||||
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.11.2/css/all.min.css" rel="stylesheet" />
|
|
||||||
<link href="https://fonts.googleapis.com/css?family=Lato:400,700&display=swap" rel="stylesheet" />
|
|
||||||
<style>
|
|
||||||
*{-webkit-box-sizing:border-box;text-decoration:none}body,html{margin:0;padding:0;font-size:62.5%;-webkit-font-smoothing:antialiased}body{font-size:1.3rem;font-family:Lato,Helvetica,Arial,Verdana,sans-serif;background:#fafafb;margin:0;padding:80px 0;color:#333740;line-height:1.8rem}strong{font-weight:700}.wrapper{width:684px;margin:auto}h1{text-align:center}h2{font-size:1.8rem;font-weight:700;margin-bottom:1px}.logo{height:40px;margin-bottom:74px}.informations{position:relative;overflow:hidden;display:flex;justify-content:space-between;width:100%;height:126px;margin-top:18px;padding:20px 30px;background:#fff;border-radius:2px;box-shadow:0 2px 4px 0 #e3e9f3}.informations:before{position:absolute;top:0;left:0;content:'';display:block;width:100%;height:2px;background:#007eff}.environment{display:inline-block;padding:0 10px;height:20px;margin-bottom:36px;background:#e6f0fb;border:1px solid #aed4fb;border-radius:2px;text-transform:uppercase;color:#007eff;font-size:1.2rem;font-weight:700;line-height:20px;letter-spacing:.05rem}.cta{display:inline-block;height:30px;padding:0 15px;margin-top:32px;border-radius:2px;color:#fff;font-weight:700;line-height:28px}.cta i{position:relative;display:inline-block;height:100%;vertical-align:middle;font-size:1rem;margin-right:20px}.cta i:before{position:absolute;top:8px}.cta-primary{background:#007eff}.cta-secondary{background:#6dbb1a}.text-align-right{text-align:right}.lets-started{position:relative;overflow:hidden;width:100%;height:144px;margin-top:18px;padding:20px 30px;background:#fff;border-radius:2px;box-shadow:0 2px 4px 0 #e3e9f3}.people-saying-hello{position:absolute;right:30px;bottom:-8px;width:113px;height:70px}.visible{opacity:1!important}.people-saying-hello img{position:absolute;max-width:100%;opacity:0;transition:opacity .2s ease-out}@media only screen and (max-width:768px){.wrapper{width:auto!important;margin:0 20px}.informations{flex-direction:column;height:auto}.environment{width:100%;text-align:center;margin-bottom:18px}.text-align-right{margin-top:18px;text-align:center}.cta{width:100%;text-align:center}.lets-started{height:auto}.people-saying-hello{display:none}}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body lang="en">
|
|
||||||
<section class="wrapper">
|
|
||||||
<h1><img class="logo" src="https://strapi.io/assets/images/logo_login.png" /></h1>
|
|
||||||
<% if (isInitialised) { %>
|
|
||||||
<div class="informations">
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<span class="environment"><%= strapi.config.environment %></span>
|
|
||||||
<p>
|
|
||||||
The server is running successfully (<strong>v<%= strapi.config.info.version %>)</strong>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div class="text-align-right">
|
|
||||||
<p><%= serverTime %></p>
|
|
||||||
<a class="cta cta-primary" href="<%= strapi.config.admin.url %>" target="_blank" title="Click to open the administration" ><i class="fas fa-external-link-alt"></i>Open the administration</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<% } %>
|
|
||||||
<% if (!isInitialised) { %>
|
|
||||||
|
|
||||||
<div class="lets-started">
|
|
||||||
<h2>Let's get started!</h2>
|
|
||||||
<p>To discover the power provided by Strapi, you need to create an administrator.</p>
|
|
||||||
<a class="cta cta-secondary" href="<%= strapi.config.admin.url %>" target="_blank" title="Click to create the first administration" ><i class="fas fa-external-link-alt"></i>Create the first administrator</a>
|
|
||||||
<div class="people-saying-hello">
|
|
||||||
<img class="visible" src="https://strapi.io/assets/images/group_people_1.png" alt="People saying hello" />
|
|
||||||
<img src="https://strapi.io/assets/images/group_people_2.png" alt="People saying hello" />
|
|
||||||
<img src="https://strapi.io/assets/images/group_people_3.png" alt="People saying hello" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<% } %>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<script>
|
|
||||||
var images=document.querySelectorAll('.people-saying-hello img');var nextIndex=0;setInterval(function(){var currentIndex=0;images.forEach(function(image,index){if(image.className==='visible'){currentIndex=index}});nextIndex=currentIndex+1;if(nextIndex===images.length){nextIndex=0}
|
|
||||||
images.forEach(function(image){image.classList.remove('visible')})
|
|
||||||
images[nextIndex].classList.add('visible')},1500)
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@ -1,30 +0,0 @@
|
|||||||
<!doctype html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
|
|
||||||
<title>Welcome to your Strapi app</title>
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
||||||
<meta name="robots" content="noindex">
|
|
||||||
<link href="https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css" rel="stylesheet" />
|
|
||||||
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.11.2/css/all.min.css" rel="stylesheet" />
|
|
||||||
<link href="https://fonts.googleapis.com/css?family=Lato:400,700&display=swap" rel="stylesheet" />
|
|
||||||
<style>
|
|
||||||
*{-webkit-box-sizing:border-box;text-decoration:none}body,html{margin:0;padding:0;font-size:62.5%;-webkit-font-smoothing:antialiased}body{font-size:1.3rem;font-family:Lato,Helvetica,Arial,Verdana,sans-serif;background:#fafafb;margin:0;padding:80px 0;color:#333740;line-height:1.8rem}strong{font-weight:700}.wrapper{width:684px;margin:auto}h1{text-align:center}h2{font-size:1.8rem;font-weight:700;margin-bottom:1px}.logo{height:40px}.informations{position:relative;overflow:hidden;display:flex;justify-content:space-between;width:100%;height:126px;margin-top:92px;padding:20px 30px;background:#fff;border-radius:2px;box-shadow:0 2px 4px 0 #e3e9f3}.informations:before{position:absolute;top:0;left:0;content:'';display:block;width:100%;height:2px;background:#6dbb1a}.environment{display:inline-block;padding:0 10px;height:20px;margin-bottom:36px;background:#e9f5dd;border:1px solid #6dbb1a;border-radius:2px;text-transform:uppercase;color:#6dbb1a;font-size:1.2rem;font-weight:700;line-height:20px;letter-spacing:.05rem}.cta{display:inline-block;height:30px;padding:0 15px;margin-top:32px;border-radius:2px;color:#fff;font-weight:700;line-height:28px}.cta i{position:relative;display:inline-block;height:100%;vertical-align:middle;font-size:1rem;margin-right:20px}.cta i:before{position:absolute;top:8px}.cta-primary{background:#007eff}.cta-secondary{background:#}.text-align-right{text-align:right}@media only screen and (max-width:768px){.wrapper{width:auto!important;margin:0 20px}.informations{flex-direction:column;height:auto}.informations p{text-align:center}.environment{width:100%;text-align:center;margin-bottom:18px}.text-align-right{margin-top:18px;text-align:center}}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body lang="en">
|
|
||||||
<section class="wrapper">
|
|
||||||
<h1><img class="logo" src="https://strapi.io/assets/images/logo_login.png" /></h1>
|
|
||||||
<div class="informations">
|
|
||||||
<div>
|
|
||||||
<span class="environment"><%= strapi.config.environment %></span>
|
|
||||||
<p>The server is running successfully.</p>
|
|
||||||
</div>
|
|
||||||
<div class="text-align-right">
|
|
||||||
<p><%= serverTime %></p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
173
packages/strapi/lib/core/bootstrap.js
vendored
173
packages/strapi/lib/core/bootstrap.js
vendored
@ -9,13 +9,7 @@ const getKind = obj => obj.kind || 'collectionType';
|
|||||||
|
|
||||||
const pickSchema = model => {
|
const pickSchema = model => {
|
||||||
const schema = _.cloneDeep(
|
const schema = _.cloneDeep(
|
||||||
_.pick(model, [
|
_.pick(model, ['connection', 'collectionName', 'info', 'options', 'attributes'])
|
||||||
'connection',
|
|
||||||
'collectionName',
|
|
||||||
'info',
|
|
||||||
'options',
|
|
||||||
'attributes',
|
|
||||||
])
|
|
||||||
);
|
);
|
||||||
|
|
||||||
schema.kind = getKind(model);
|
schema.kind = getKind(model);
|
||||||
@ -26,32 +20,25 @@ module.exports = function(strapi) {
|
|||||||
// Retrieve Strapi version.
|
// Retrieve Strapi version.
|
||||||
strapi.config.uuid = _.get(strapi.config.info, 'strapi.uuid', '');
|
strapi.config.uuid = _.get(strapi.config.info, 'strapi.uuid', '');
|
||||||
strapi.config.info.customs = _.get(strapi.config.info, 'strapi', {});
|
strapi.config.info.customs = _.get(strapi.config.info, 'strapi', {});
|
||||||
strapi.config.info.strapi = (
|
strapi.config.info.strapi = (_.get(strapi.config, 'info.dependencies.strapi') || '').replace(
|
||||||
_.get(strapi.config, 'info.dependencies.strapi') || ''
|
/(\^|~)/g,
|
||||||
).replace(/(\^|~)/g, '');
|
''
|
||||||
|
);
|
||||||
strapi.config.info.node = process.versions.node;
|
strapi.config.info.node = process.versions.node;
|
||||||
|
|
||||||
// Set connections.
|
// Set connections.
|
||||||
strapi.connections = {};
|
strapi.connections = {};
|
||||||
|
|
||||||
// Set current environment config.
|
// Set current environment config.
|
||||||
strapi.config.currentEnvironment =
|
strapi.config.currentEnvironment = strapi.config.environments[strapi.config.environment] || {};
|
||||||
strapi.config.environments[strapi.config.environment] || {};
|
|
||||||
|
|
||||||
const defaultConnection =
|
const defaultConnection = strapi.config.currentEnvironment.database.defaultConnection;
|
||||||
strapi.config.currentEnvironment.database.defaultConnection;
|
|
||||||
|
|
||||||
// Set current connections.
|
// Set current connections.
|
||||||
strapi.config.connections = _.get(
|
strapi.config.connections = _.get(strapi.config.currentEnvironment, 'database.connections', {});
|
||||||
strapi.config.currentEnvironment,
|
|
||||||
'database.connections',
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
|
|
||||||
if (_.get(strapi.config, 'language.enabled')) {
|
if (_.get(strapi.config, 'language.enabled')) {
|
||||||
strapi.config.language.locales = Object.keys(
|
strapi.config.language.locales = Object.keys(_.get(strapi.config, 'locales', {}));
|
||||||
_.get(strapi.config, 'locales', {})
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
strapi.contentTypes = {};
|
strapi.contentTypes = {};
|
||||||
@ -71,8 +58,7 @@ module.exports = function(strapi) {
|
|||||||
apiName,
|
apiName,
|
||||||
modelName,
|
modelName,
|
||||||
globalId: model.globalId || _.upperFirst(_.camelCase(modelName)),
|
globalId: model.globalId || _.upperFirst(_.camelCase(modelName)),
|
||||||
collectionName:
|
collectionName: model.collectionName || `${modelName}`.toLocaleLowerCase(),
|
||||||
model.collectionName || `${modelName}`.toLocaleLowerCase(),
|
|
||||||
connection: model.connection || defaultConnection,
|
connection: model.connection || defaultConnection,
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -133,9 +119,7 @@ module.exports = function(strapi) {
|
|||||||
modelName: key,
|
modelName: key,
|
||||||
identity: model.identity || _.upperFirst(key),
|
identity: model.identity || _.upperFirst(key),
|
||||||
globalId: model.globalId || _.upperFirst(_.camelCase(`admin-${key}`)),
|
globalId: model.globalId || _.upperFirst(_.camelCase(`admin-${key}`)),
|
||||||
connection:
|
connection: model.connection || strapi.config.currentEnvironment.database.defaultConnection,
|
||||||
model.connection ||
|
|
||||||
strapi.config.currentEnvironment.database.defaultConnection,
|
|
||||||
});
|
});
|
||||||
|
|
||||||
strapi.contentTypes[model.uid] = model;
|
strapi.contentTypes[model.uid] = model;
|
||||||
@ -167,13 +151,9 @@ module.exports = function(strapi) {
|
|||||||
modelName: key,
|
modelName: key,
|
||||||
uid: `plugins::${pluginName}.${key}`,
|
uid: `plugins::${pluginName}.${key}`,
|
||||||
plugin: pluginName,
|
plugin: pluginName,
|
||||||
collectionName:
|
collectionName: model.collectionName || `${pluginName}_${key}`.toLowerCase(),
|
||||||
model.collectionName || `${pluginName}_${key}`.toLowerCase(),
|
globalId: model.globalId || _.upperFirst(_.camelCase(`${pluginName}-${key}`)),
|
||||||
globalId:
|
connection: model.connection || strapi.config.currentEnvironment.database.defaultConnection,
|
||||||
model.globalId || _.upperFirst(_.camelCase(`${pluginName}-${key}`)),
|
|
||||||
connection:
|
|
||||||
model.connection ||
|
|
||||||
strapi.config.currentEnvironment.database.defaultConnection,
|
|
||||||
});
|
});
|
||||||
|
|
||||||
strapi.contentTypes[model.uid] = model;
|
strapi.contentTypes[model.uid] = model;
|
||||||
@ -259,68 +239,54 @@ module.exports = function(strapi) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Preset config in alphabetical order.
|
// Preset config in alphabetical order.
|
||||||
strapi.config.middleware.settings = Object.keys(strapi.middleware).reduce(
|
strapi.config.middleware.settings = Object.keys(strapi.middleware).reduce((acc, current) => {
|
||||||
(acc, current) => {
|
// Try to find the settings in the current environment, then in the main configurations.
|
||||||
// Try to find the settings in the current environment, then in the main configurations.
|
const currentSettings = _.merge(
|
||||||
const currentSettings = _.merge(
|
_.get(_.cloneDeep(strapi.middleware[current]), ['defaults', current], {}),
|
||||||
_.get(
|
strapi.config[current],
|
||||||
_.cloneDeep(strapi.middleware[current]),
|
strapi.config.currentEnvironment[current],
|
||||||
['defaults', current],
|
flattenMiddlewaresConfig[current]
|
||||||
{}
|
);
|
||||||
),
|
acc[current] = !_.isObject(currentSettings) ? {} : currentSettings;
|
||||||
flattenMiddlewaresConfig[current] ||
|
|
||||||
strapi.config.currentEnvironment[current] ||
|
if (!_.has(acc[current], 'enabled')) {
|
||||||
strapi.config[current]
|
strapi.log.warn(
|
||||||
|
`(middleware:${current}) wasn't loaded due to missing key \`enabled\` in the configuration`
|
||||||
);
|
);
|
||||||
acc[current] = !_.isObject(currentSettings) ? {} : currentSettings;
|
}
|
||||||
|
|
||||||
if (!_.has(acc[current], 'enabled')) {
|
// Ensure that enabled key exist by forcing to false.
|
||||||
strapi.log.warn(
|
_.defaults(acc[current], { enabled: false });
|
||||||
`(middleware:${current}) wasn't loaded due to missing key \`enabled\` in the configuration`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Ensure that enabled key exist by forcing to false.
|
return acc;
|
||||||
_.defaults(acc[current], { enabled: false });
|
}, {});
|
||||||
|
|
||||||
return acc;
|
strapi.config.hook.settings = Object.keys(strapi.hook).reduce((acc, current) => {
|
||||||
},
|
// Try to find the settings in the current environment, then in the main configurations.
|
||||||
{}
|
const currentSettings = _.merge(
|
||||||
);
|
_.get(_.cloneDeep(strapi.hook[current]), ['defaults', current], {}),
|
||||||
|
flattenHooksConfig[current] ||
|
||||||
|
_.get(strapi.config.currentEnvironment, ['hook', current]) ||
|
||||||
|
_.get(strapi.config, ['hook', current])
|
||||||
|
);
|
||||||
|
|
||||||
strapi.config.hook.settings = Object.keys(strapi.hook).reduce(
|
acc[current] = !_.isObject(currentSettings) ? {} : currentSettings;
|
||||||
(acc, current) => {
|
|
||||||
// Try to find the settings in the current environment, then in the main configurations.
|
if (!_.has(acc[current], 'enabled')) {
|
||||||
const currentSettings = _.merge(
|
strapi.log.warn(
|
||||||
_.get(_.cloneDeep(strapi.hook[current]), ['defaults', current], {}),
|
`(hook:${current}) wasn't loaded due to missing key \`enabled\` in the configuration`
|
||||||
flattenHooksConfig[current] ||
|
|
||||||
_.get(strapi.config.currentEnvironment, ['hook', current]) ||
|
|
||||||
_.get(strapi.config, ['hook', current])
|
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
acc[current] = !_.isObject(currentSettings) ? {} : currentSettings;
|
// Ensure that enabled key exist by forcing to false.
|
||||||
|
_.defaults(acc[current], { enabled: false });
|
||||||
|
|
||||||
if (!_.has(acc[current], 'enabled')) {
|
return acc;
|
||||||
strapi.log.warn(
|
}, {});
|
||||||
`(hook:${current}) wasn't loaded due to missing key \`enabled\` in the configuration`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Ensure that enabled key exist by forcing to false.
|
|
||||||
_.defaults(acc[current], { enabled: false });
|
|
||||||
|
|
||||||
return acc;
|
|
||||||
},
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
|
|
||||||
// default settings
|
// default settings
|
||||||
strapi.config.port =
|
strapi.config.port = _.get(strapi.config.currentEnvironment, 'server.port') || strapi.config.port;
|
||||||
_.get(strapi.config.currentEnvironment, 'server.port') ||
|
strapi.config.host = _.get(strapi.config.currentEnvironment, 'server.host') || strapi.config.host;
|
||||||
strapi.config.port;
|
|
||||||
strapi.config.host =
|
|
||||||
_.get(strapi.config.currentEnvironment, 'server.host') ||
|
|
||||||
strapi.config.host;
|
|
||||||
|
|
||||||
// proxy settings
|
// proxy settings
|
||||||
const proxy = _.get(strapi.config.currentEnvironment, 'server.proxy', {});
|
const proxy = _.get(strapi.config.currentEnvironment, 'server.proxy', {});
|
||||||
@ -338,45 +304,24 @@ module.exports = function(strapi) {
|
|||||||
port: strapi.config.port,
|
port: strapi.config.port,
|
||||||
});
|
});
|
||||||
|
|
||||||
const adminPath = _.get(
|
const adminPath = _.get(strapi.config.currentEnvironment.server, 'admin.path', 'admin');
|
||||||
strapi.config.currentEnvironment.server,
|
|
||||||
'admin.path',
|
|
||||||
'admin'
|
|
||||||
);
|
|
||||||
|
|
||||||
strapi.config.admin.url = new URL(adminPath, strapi.config.url).toString();
|
strapi.config.admin.url = new URL(adminPath, strapi.config.url).toString();
|
||||||
};
|
};
|
||||||
|
|
||||||
const enableHookNestedDependencies = function(
|
const enableHookNestedDependencies = function(strapi, name, flattenHooksConfig, force = false) {
|
||||||
strapi,
|
|
||||||
name,
|
|
||||||
flattenHooksConfig,
|
|
||||||
force = false
|
|
||||||
) {
|
|
||||||
// Couldn't find configurations for this hook.
|
// Couldn't find configurations for this hook.
|
||||||
if (_.isEmpty(_.get(flattenHooksConfig, name, true))) {
|
if (_.isEmpty(_.get(flattenHooksConfig, name, true))) {
|
||||||
// Check if database connector is used
|
// Check if database connector is used
|
||||||
const modelsUsed = Object.keys(
|
const modelsUsed = Object.keys(_.assign(_.clone(strapi.api) || {}, strapi.plugins))
|
||||||
_.assign(_.clone(strapi.api) || {}, strapi.plugins)
|
|
||||||
)
|
|
||||||
.filter(x =>
|
.filter(x =>
|
||||||
_.isObject(
|
_.isObject(_.get(strapi.api, [x, 'models']) || _.get(strapi.plugins, [x, 'models']))
|
||||||
_.get(strapi.api, [x, 'models']) ||
|
|
||||||
_.get(strapi.plugins, [x, 'models'])
|
|
||||||
)
|
|
||||||
) // Filter API with models
|
) // Filter API with models
|
||||||
.map(
|
.map(x => _.get(strapi.api, [x, 'models']) || _.get(strapi.plugins, [x, 'models'])) // Keep models
|
||||||
x =>
|
|
||||||
_.get(strapi.api, [x, 'models']) ||
|
|
||||||
_.get(strapi.plugins, [x, 'models'])
|
|
||||||
) // Keep models
|
|
||||||
.filter(models => {
|
.filter(models => {
|
||||||
const apiModelsUsed = Object.keys(models).filter(model => {
|
const apiModelsUsed = Object.keys(models).filter(model => {
|
||||||
const connector = _.get(
|
const connector = _.get(strapi.config.connections, models[model].connection, {})
|
||||||
strapi.config.connections,
|
.connector;
|
||||||
models[model].connection,
|
|
||||||
{}
|
|
||||||
).connector;
|
|
||||||
|
|
||||||
if (connector) {
|
if (connector) {
|
||||||
return connector.replace('strapi-hook-', '') === name;
|
return connector.replace('strapi-hook-', '') === name;
|
||||||
|
|||||||
@ -17,6 +17,10 @@ const utils = require('../../utils');
|
|||||||
* Public assets hook
|
* Public assets hook
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
const defaults = {
|
||||||
|
defaultIndex: true,
|
||||||
|
};
|
||||||
|
|
||||||
module.exports = strapi => {
|
module.exports = strapi => {
|
||||||
return {
|
return {
|
||||||
/**
|
/**
|
||||||
@ -24,58 +28,19 @@ module.exports = strapi => {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
async initialize() {
|
async initialize() {
|
||||||
const { maxAge } = strapi.config.middleware.settings.public;
|
const { defaultIndex, maxAge } = Object.assign(
|
||||||
|
{},
|
||||||
|
defaults,
|
||||||
|
strapi.config.middleware.settings.public
|
||||||
|
);
|
||||||
const staticDir = path.resolve(
|
const staticDir = path.resolve(
|
||||||
strapi.dir,
|
strapi.dir,
|
||||||
strapi.config.middleware.settings.public.path || strapi.config.paths.static
|
strapi.config.middleware.settings.public.path || strapi.config.paths.static
|
||||||
);
|
);
|
||||||
const indexFileName = 'index.html';
|
|
||||||
const indexPath = path.join(staticDir, indexFileName);
|
|
||||||
|
|
||||||
if (fs.existsSync(indexPath)) {
|
|
||||||
const index = fs.readFileSync(indexPath, 'utf8');
|
|
||||||
const renderer = _.template(index); // Is the project initialized?
|
|
||||||
|
|
||||||
const renderIndexPage = async () => {
|
|
||||||
const isInitialised = await utils.isInitialised(strapi);
|
|
||||||
|
|
||||||
const data = {
|
|
||||||
serverTime: new Date().toUTCString(),
|
|
||||||
isInitialised,
|
|
||||||
..._.pick(strapi, [
|
|
||||||
'config.info.version',
|
|
||||||
'config.info.name',
|
|
||||||
'config.admin.url',
|
|
||||||
'config.environment',
|
|
||||||
]),
|
|
||||||
};
|
|
||||||
|
|
||||||
return renderer(data);
|
|
||||||
};
|
|
||||||
|
|
||||||
const serveIndexPage = async ctx => {
|
|
||||||
ctx.url = indexFileName;
|
|
||||||
|
|
||||||
const content = await renderIndexPage();
|
|
||||||
const body = stream.Readable({
|
|
||||||
read() {
|
|
||||||
this.push(Buffer.from(content));
|
|
||||||
this.push(null);
|
|
||||||
},
|
|
||||||
});
|
|
||||||
// Serve static.
|
|
||||||
ctx.type = 'html';
|
|
||||||
ctx.body = body;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Serve /public index page.
|
|
||||||
strapi.router.get('/', serveIndexPage);
|
|
||||||
strapi.router.get(`/${indexFileName}`, serveIndexPage);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Match every route with an extension.
|
// Match every route with an extension.
|
||||||
// The file without extension will not be served.
|
// The file without extension will not be served.
|
||||||
// Note: This route could be override by the user.
|
// Note: This route can be overriden by the user.
|
||||||
strapi.router.get(
|
strapi.router.get(
|
||||||
'/*',
|
'/*',
|
||||||
async (ctx, next) => {
|
async (ctx, next) => {
|
||||||
@ -90,6 +55,38 @@ module.exports = strapi => {
|
|||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if (defaultIndex) {
|
||||||
|
const index = fs.readFileSync(path.join(__dirname, 'index.html'), 'utf8');
|
||||||
|
|
||||||
|
const serveIndexPage = async ctx => {
|
||||||
|
ctx.url = 'index.html';
|
||||||
|
const isInitialised = await utils.isInitialised(strapi);
|
||||||
|
const data = {
|
||||||
|
serverTime: new Date().toUTCString(),
|
||||||
|
isInitialised,
|
||||||
|
..._.pick(strapi, [
|
||||||
|
'config.info.version',
|
||||||
|
'config.info.name',
|
||||||
|
'config.admin.url',
|
||||||
|
'config.environment',
|
||||||
|
]),
|
||||||
|
};
|
||||||
|
const content = _.template(index)(data);
|
||||||
|
const body = stream.Readable({
|
||||||
|
read() {
|
||||||
|
this.push(Buffer.from(content));
|
||||||
|
this.push(null);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
// Serve static.
|
||||||
|
ctx.type = 'html';
|
||||||
|
ctx.body = body;
|
||||||
|
};
|
||||||
|
|
||||||
|
strapi.router.get('/', serveIndexPage);
|
||||||
|
strapi.router.get('/index.html', serveIndexPage);
|
||||||
|
}
|
||||||
|
|
||||||
if (!strapi.config.serveAdminPanel) return;
|
if (!strapi.config.serveAdminPanel) return;
|
||||||
|
|
||||||
const basename = _.get(strapi.config.currentEnvironment.server, 'admin.path')
|
const basename = _.get(strapi.config.currentEnvironment.server, 'admin.path')
|
||||||
@ -106,7 +103,7 @@ module.exports = strapi => {
|
|||||||
await next();
|
await next();
|
||||||
},
|
},
|
||||||
koaStatic(buildDir, {
|
koaStatic(buildDir, {
|
||||||
index: indexFileName,
|
index: '/',
|
||||||
maxage: maxAge,
|
maxage: maxAge,
|
||||||
defer: false,
|
defer: false,
|
||||||
})
|
})
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user