diff --git a/CHANGES b/CHANGES index 25cfbb283..b5b08b176 100644 --- a/CHANGES +++ b/CHANGES @@ -2121,4 +2121,5 @@ * Focal support * Reduce duration of self-signed certs to 800 days * Better backup config filename when downloading +* branding: footer can have template variables like %YEAR% and %VERSION% diff --git a/src/branding.js b/src/branding.js new file mode 100644 index 000000000..02e630e77 --- /dev/null +++ b/src/branding.js @@ -0,0 +1,18 @@ +'use strict'; + +exports = module.exports = { + renderFooter +}; + +const assert = require('assert'), + constants = require('./constants.js'); + +function renderFooter(footer) { + assert.strictEqual(typeof footer, 'string'); + + const year = new Date().getFullYear(); + + return footer.replace(/%YEAR%/g, year) + .replace(/%VERSION%/g, constants.VERSION); +} + diff --git a/src/cloudron.js b/src/cloudron.js index 3836329e5..9513b5f69 100644 --- a/src/cloudron.js +++ b/src/cloudron.js @@ -29,6 +29,7 @@ var addons = require('./addons.js'), auditSource = require('./auditsource.js'), backups = require('./backups.js'), BoxError = require('./boxerror.js'), + branding = require('./branding.js'), constants = require('./constants.js'), cron = require('./cron.js'), debug = require('debug')('box:cloudron'), @@ -175,7 +176,7 @@ function getConfig(callback) { version: constants.VERSION, isDemo: settings.isDemo(), cloudronName: allSettings[settings.CLOUDRON_NAME_KEY], - footer: allSettings[settings.FOOTER_KEY] || constants.FOOTER, + footer: branding.renderFooter(allSettings[settings.FOOTER_KEY] || constants.FOOTER), features: appstore.getFeatures(), profileLocked: allSettings[settings.DIRECTORY_CONFIG_KEY].lockUserProfiles, mandatory2FA: allSettings[settings.DIRECTORY_CONFIG_KEY].mandatory2FA diff --git a/src/constants.js b/src/constants.js index 0758dcaaa..66bd6deeb 100644 --- a/src/constants.js +++ b/src/constants.js @@ -48,7 +48,7 @@ exports = module.exports = { SUPPORT_EMAIL: 'support@cloudron.io', - FOOTER: '© 2020   [Cloudron](https://cloudron.io)       [Forum ](https://forum.cloudron.io)', + FOOTER: '© %YEAR%   [Cloudron](https://cloudron.io)       [Forum ](https://forum.cloudron.io)', VERSION: process.env.BOX_ENV === 'cloudron' ? fs.readFileSync(path.join(__dirname, '../VERSION'), 'utf8').trim() : '5.1.1-test' }; diff --git a/src/provision.js b/src/provision.js index b4f6e449e..bb7f08693 100644 --- a/src/provision.js +++ b/src/provision.js @@ -11,6 +11,7 @@ var assert = require('assert'), async = require('async'), backups = require('./backups.js'), BoxError = require('./boxerror.js'), + branding = require('./branding.js'), constants = require('./constants.js'), cloudron = require('./cloudron.js'), debug = require('debug')('box:provision'), @@ -233,7 +234,7 @@ function getStatus(callback) { apiServerOrigin: settings.apiServerOrigin(), // used by CaaS tool webServerOrigin: settings.webServerOrigin(), // used by CaaS tool cloudronName: allSettings[settings.CLOUDRON_NAME_KEY], - footer: allSettings[settings.FOOTER_KEY] || constants.FOOTER, + footer: branding.renderFooter(allSettings[settings.FOOTER_KEY] || constants.FOOTER), adminFqdn: settings.adminDomain() ? settings.adminFqdn() : null, activated: activated, provider: settings.provider() // used by setup wizard of marketplace images