mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-18 18:41:14 +00:00
refactor(core): Prevent a server from starting if it's configured to use S3, but the license does not allow it (#13532)
This commit is contained in:
committed by
GitHub
parent
7fb88e623f
commit
223ec2d9c9
@@ -148,7 +148,7 @@ export abstract class BaseCommand extends Command {
|
||||
const isSelected = config.getEnv('binaryDataManager.mode') === 's3';
|
||||
const isAvailable = config.getEnv('binaryDataManager.availableModes').includes('s3');
|
||||
|
||||
if (!isSelected && !isAvailable) return;
|
||||
if (!isSelected) return;
|
||||
|
||||
if (isSelected && !isAvailable) {
|
||||
throw new UserError(
|
||||
@@ -157,51 +157,19 @@ export abstract class BaseCommand extends Command {
|
||||
}
|
||||
|
||||
const isLicensed = Container.get(License).isFeatureEnabled(LICENSE_FEATURES.BINARY_DATA_S3);
|
||||
|
||||
if (isSelected && isAvailable && isLicensed) {
|
||||
this.logger.debug(
|
||||
'License found for external storage - object store to init in read-write mode',
|
||||
if (!isLicensed) {
|
||||
this.logger.error(
|
||||
'No license found for S3 storage. \n Either set `N8N_DEFAULT_BINARY_DATA_MODE` to something else, or upgrade to a license that supports this feature.',
|
||||
);
|
||||
|
||||
await this._initObjectStoreService();
|
||||
|
||||
return;
|
||||
return this.exit(1);
|
||||
}
|
||||
|
||||
if (isSelected && isAvailable && !isLicensed) {
|
||||
this.logger.debug(
|
||||
'No license found for external storage - object store to init with writes blocked. To enable writes, please upgrade to a license that supports this feature.',
|
||||
);
|
||||
|
||||
await this._initObjectStoreService({ isReadOnly: true });
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (!isSelected && isAvailable) {
|
||||
this.logger.debug(
|
||||
'External storage unselected but available - object store to init with writes unused',
|
||||
);
|
||||
|
||||
await this._initObjectStoreService();
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
private async _initObjectStoreService(options = { isReadOnly: false }) {
|
||||
const objectStoreService = Container.get(ObjectStoreService);
|
||||
|
||||
this.logger.debug('Initializing object store service');
|
||||
|
||||
this.logger.debug('License found for external storage - Initializing object store service');
|
||||
try {
|
||||
await objectStoreService.init();
|
||||
objectStoreService.setReadonly(options.isReadOnly);
|
||||
|
||||
await Container.get(ObjectStoreService).init();
|
||||
this.logger.debug('Object store init completed');
|
||||
} catch (e) {
|
||||
const error = e instanceof Error ? e : new Error(`${e}`);
|
||||
|
||||
this.logger.debug('Object store init failed', { error });
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user