mirror of
https://github.com/strapi/strapi.git
synced 2025-12-26 22:54:31 +00:00
enhancement: refactor env-only values into configuration
This commit is contained in:
parent
316470cdf8
commit
9469280178
@ -68,6 +68,18 @@ Will display the correct start-up message according to the specified boolean.
|
||||
|
||||
:::note
|
||||
|
||||
Can be disabled by setting `STRAPI_HIDE_STARTUP_MESSAGE` to `true`.
|
||||
Can be disabled by setting the server config value:
|
||||
|
||||
```javascript
|
||||
// in config/server.js
|
||||
{
|
||||
logger: {
|
||||
startup: {
|
||||
enabled: false;
|
||||
}
|
||||
},
|
||||
// ...the rest of your server config
|
||||
}
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
@ -18,4 +18,16 @@ In order to use remote transfer providers, the remote Strapi server must have a
|
||||
|
||||
## Disabling Remote Transfers
|
||||
|
||||
If desired, the remote transfer feature of a server can be completely disabled by setting the environment variable `STRAPI_DISABLE_REMOTE_DATA_TRANSFER` to true.
|
||||
The remote transfer feature of a server can be completely disabled by setting the server config value:
|
||||
|
||||
```javascript
|
||||
// in config/server.js
|
||||
{
|
||||
transfer: {
|
||||
remote: {
|
||||
enabled: false;
|
||||
}
|
||||
}
|
||||
// ...the rest of your server config
|
||||
}
|
||||
```
|
||||
|
||||
@ -8,7 +8,7 @@ tags:
|
||||
|
||||
# Remote Provider Websocket
|
||||
|
||||
When the data transfer feature is enabled for a Strapi server (an `admin.transfer.token.salt` config value has been set and `STRAPI_DISABLE_REMOTE_DATA_TRANSFER` is not set to true), Strapi will create websocket servers available on the routes `/admin/transfer/runner/pull` and `/admin/transfer/runner/push`.
|
||||
When the data transfer feature is enabled for a Strapi server (an `admin.transfer.token.salt` config value has been set and `server.transfer.remote.enabled` is not set to false), Strapi will create websocket servers available on the routes `/admin/transfer/runner/pull` and `/admin/transfer/runner/push`.
|
||||
|
||||
Opening a websocket connection on those routes requires a valid transfer token as a bearer token in the Authorization header.
|
||||
|
||||
|
||||
@ -26,4 +26,17 @@ module.exports = ({ env }) => ({
|
||||
requestTimeout: 1000 * 60 * 10, // set request timeout to 600000ms (10 minutes)
|
||||
},
|
||||
},
|
||||
transfer: {
|
||||
remote: {
|
||||
// enabled: false,
|
||||
},
|
||||
},
|
||||
logger: {
|
||||
updates: {
|
||||
// enabled: false,
|
||||
},
|
||||
startup: {
|
||||
// enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
@ -5,26 +5,28 @@ import { getService } from '../utils';
|
||||
export default () => async (ctx: Context, next: Next) => {
|
||||
const transferUtils = getService('transfer').utils;
|
||||
|
||||
const { hasValidTokenSalt, isDataTransferEnabled, isDisabledFromEnv } = transferUtils;
|
||||
const { hasValidTokenSalt, isRemoteTransferEnabled } = transferUtils;
|
||||
|
||||
if (isDataTransferEnabled()) {
|
||||
// verify that data transfer is enabled
|
||||
if (isRemoteTransferEnabled()) {
|
||||
return next();
|
||||
}
|
||||
|
||||
// if it has been manually disabled, return a not found
|
||||
if (strapi.config.get('server.transfer.remote.enabled') === false) {
|
||||
return ctx.notFound();
|
||||
}
|
||||
|
||||
// if it's enabled but doesn't have a valid salt, throw a not implemented
|
||||
if (!hasValidTokenSalt()) {
|
||||
return ctx.notImplemented(
|
||||
'The server configuration for data transfer is invalid. Please contact your server administrator.',
|
||||
// @ts-expect-error have to pass multiple arguments to surface the error details
|
||||
{
|
||||
code: 'INVALID_TOKEN_SALT',
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
if (isDisabledFromEnv()) {
|
||||
return ctx.notFound();
|
||||
}
|
||||
|
||||
// This should never happen as long as we're handling individual scenarios above
|
||||
throw new Error('Unexpected error while trying to access a data transfer route');
|
||||
};
|
||||
|
||||
@ -398,7 +398,6 @@ describe('Transfer Token', () => {
|
||||
transfer: {
|
||||
utils: {
|
||||
hasValidTokenSalt: jest.fn(() => true),
|
||||
isDisabledFromEnv: jest.fn(() => false),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
@ -313,10 +313,10 @@ const hash = (accessKey: string): string => {
|
||||
};
|
||||
|
||||
const checkSaltIsDefined = () => {
|
||||
const { hasValidTokenSalt, isDisabledFromEnv } = getService('transfer').utils;
|
||||
const { hasValidTokenSalt } = getService('transfer').utils;
|
||||
|
||||
// Ignore the check if the data-transfer feature is manually disabled
|
||||
if (isDisabledFromEnv()) {
|
||||
if (!strapi.config.get('server.transfer.remote.enabled')) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@ -1,13 +1,6 @@
|
||||
import { env } from '@strapi/utils';
|
||||
import { getService } from '../../utils';
|
||||
|
||||
/**
|
||||
* Returns whether the data transfer features have been disabled from the env configuration
|
||||
*/
|
||||
const isDisabledFromEnv = (): boolean => {
|
||||
return env.bool('STRAPI_DISABLE_REMOTE_DATA_TRANSFER', false) as boolean;
|
||||
};
|
||||
|
||||
/**
|
||||
* A valid transfer token salt must be a non-empty string defined in the Strapi config
|
||||
*/
|
||||
@ -20,10 +13,17 @@ const hasValidTokenSalt = (): boolean => {
|
||||
/**
|
||||
* Checks whether data transfer features are enabled
|
||||
*/
|
||||
const isDataTransferEnabled = (): boolean => {
|
||||
const isRemoteTransferEnabled = (): boolean => {
|
||||
const { utils } = getService('transfer');
|
||||
|
||||
return !utils.isDisabledFromEnv() && utils.hasValidTokenSalt();
|
||||
// TODO v6: Remove this warning
|
||||
if (env.bool('STRAPI_DISABLE_REMOTE_DATA_TRANSFER')) {
|
||||
strapi.log.warn(
|
||||
'STRAPI_DISABLE_REMOTE_DATA_TRANSFER is no longer supported. Instead, set transfer.remote.enabled to false in your server configuration'
|
||||
);
|
||||
}
|
||||
|
||||
return strapi.config.get('server.transfer.remote.enabled') && utils.hasValidTokenSalt();
|
||||
};
|
||||
|
||||
export { isDataTransferEnabled, isDisabledFromEnv, hasValidTokenSalt };
|
||||
export { isRemoteTransferEnabled, hasValidTokenSalt };
|
||||
|
||||
@ -4,7 +4,7 @@ import path from 'path';
|
||||
import _ from 'lodash';
|
||||
import { omit } from 'lodash/fp';
|
||||
import dotenv from 'dotenv';
|
||||
|
||||
import type { Config } from '@strapi/types';
|
||||
import loadConfigDir from './config-loader';
|
||||
|
||||
dotenv.config({ path: process.env.ENV_PATH });
|
||||
@ -16,18 +16,31 @@ const { version: strapiVersion } = require(path.join(__dirname, '../../../packag
|
||||
const defaultConfig = {
|
||||
server: {
|
||||
host: process.env.HOST || os.hostname() || 'localhost',
|
||||
port: process.env.PORT || 1337,
|
||||
port: Number(process.env.PORT) || 1337,
|
||||
proxy: false,
|
||||
cron: { enabled: false },
|
||||
admin: { autoOpen: false },
|
||||
dirs: { public: './public' },
|
||||
},
|
||||
admin: {},
|
||||
transfer: {
|
||||
remote: {
|
||||
enabled: true,
|
||||
},
|
||||
},
|
||||
logger: {
|
||||
updates: {
|
||||
enabled: true,
|
||||
},
|
||||
startup: {
|
||||
enabled: true,
|
||||
},
|
||||
},
|
||||
} satisfies Partial<Config.Server>,
|
||||
admin: {} satisfies Partial<Config.Admin>,
|
||||
api: {
|
||||
rest: {
|
||||
prefix: '/api',
|
||||
},
|
||||
},
|
||||
} satisfies Partial<Config.Api>,
|
||||
};
|
||||
|
||||
export default (dirs: { app: string; dist: string }, initialConfig: any = {}) => {
|
||||
|
||||
@ -35,6 +35,10 @@ export default (app: Strapi) => {
|
||||
},
|
||||
|
||||
logFirstStartupMessage() {
|
||||
if (!strapi.config.get('server.logger.startup.enabled')) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.logStats();
|
||||
|
||||
console.log(chalk.bold('One more thing...'));
|
||||
@ -53,6 +57,9 @@ export default (app: Strapi) => {
|
||||
},
|
||||
|
||||
logDefaultStartupMessage() {
|
||||
if (!strapi.config.get('server.logger.startup.enabled')) {
|
||||
return;
|
||||
}
|
||||
this.logStats();
|
||||
|
||||
console.log(chalk.bold('Welcome back!'));
|
||||
@ -71,17 +78,13 @@ export default (app: Strapi) => {
|
||||
},
|
||||
|
||||
logStartupMessage({ isInitialized }: { isInitialized: boolean }) {
|
||||
// Should the startup message be displayed?
|
||||
const hideStartupMessage = process.env.STRAPI_HIDE_STARTUP_MESSAGE
|
||||
? process.env.STRAPI_HIDE_STARTUP_MESSAGE === 'true'
|
||||
: false;
|
||||
|
||||
if (hideStartupMessage === false) {
|
||||
if (!isInitialized) {
|
||||
this.logFirstStartupMessage();
|
||||
} else {
|
||||
this.logDefaultStartupMessage();
|
||||
}
|
||||
if (!strapi.config.get('server.logger.startup.enabled')) {
|
||||
return;
|
||||
}
|
||||
if (!isInitialized) {
|
||||
this.logFirstStartupMessage();
|
||||
} else {
|
||||
this.logDefaultStartupMessage();
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
@ -85,9 +85,17 @@ const createUpdateNotifier = (strapi: Strapi) => {
|
||||
|
||||
return {
|
||||
notify({ checkInterval = CHECK_INTERVAL, notifInterval = NOTIF_INTERVAL } = {}) {
|
||||
if (env.bool('STRAPI_DISABLE_UPDATE_NOTIFICATION', false) || !config) {
|
||||
// TODO v6: Remove this warning
|
||||
if (env.bool('STRAPI_DISABLE_UPDATE_NOTIFICATION', false)) {
|
||||
strapi.log.warn(
|
||||
'STRAPI_DISABLE_UPDATE_NOTIFICATION is no longer supported. Instead, set logger.updates.enabled to false in your server configuration.'
|
||||
);
|
||||
}
|
||||
|
||||
if (!strapi.config.get('server.logger.updates.enabled') || !config) {
|
||||
return;
|
||||
}
|
||||
|
||||
display(notifInterval);
|
||||
checkUpdate(checkInterval); // doesn't need to await
|
||||
},
|
||||
|
||||
@ -15,6 +15,25 @@ export interface WebhooksProp {
|
||||
populateRelations?: boolean;
|
||||
}
|
||||
|
||||
export interface LoggerProp {
|
||||
updates?: {
|
||||
enabled?: boolean;
|
||||
};
|
||||
startup?: {
|
||||
enabled?: boolean;
|
||||
};
|
||||
}
|
||||
|
||||
export interface TransferProp {
|
||||
remote?: {
|
||||
enabled?: boolean;
|
||||
};
|
||||
}
|
||||
|
||||
export interface AdminProp {
|
||||
autoOpen?: boolean;
|
||||
}
|
||||
|
||||
export interface Server {
|
||||
// required
|
||||
host: string;
|
||||
@ -30,4 +49,7 @@ export interface Server {
|
||||
cron?: CronProp;
|
||||
dirs?: DirsProp;
|
||||
webhooks?: WebhooksProp;
|
||||
logger?: LoggerProp;
|
||||
transfer?: TransferProp;
|
||||
admin?: AdminProp;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user