diff --git a/CHANGES b/CHANGES index 6b71feb8a..e62701177 100644 --- a/CHANGES +++ b/CHANGES @@ -2404,4 +2404,6 @@ * mailbox: app can be set as owner when recvmail addon enabled * domains: add well known config UI (for jitsi configuration) * Prefix email addon variables with CLOUDRON_EMAIL instead of CLOUDRON_MAIL +* remove support for manifest version 1 + diff --git a/src/apps.js b/src/apps.js index 0ffd5bcbc..e0c687897 100644 --- a/src/apps.js +++ b/src/apps.js @@ -2222,7 +2222,7 @@ async function restart(app, auditSource) { function checkManifestConstraints(manifest) { assert(manifest && typeof manifest === 'object'); - if (manifest.manifestVersion > 2) return new BoxError(BoxError.BAD_FIELD, 'Manifest version must be <= 2'); + if (manifest.manifestVersion !== 2) return new BoxError(BoxError.BAD_FIELD, 'Manifest version must be 2'); if (!manifest.dockerImage) return new BoxError(BoxError.BAD_FIELD, 'Missing dockerImage'); // dockerImage is optional in manifest diff --git a/src/docker.js b/src/docker.js index 3418ea6c4..8211923ea 100644 --- a/src/docker.js +++ b/src/docker.js @@ -266,16 +266,15 @@ async function createSubcontainer(app, name, cmd, options) { const manifest = app.manifest; const exposedPorts = {}, dockerPortBindings = { }; const domain = app.fqdn; - const envPrefix = manifest.manifestVersion <= 1 ? '' : 'CLOUDRON_'; const stdEnv = [ 'CLOUDRON=1', 'CLOUDRON_PROXY_IP=172.18.0.1', `CLOUDRON_APP_HOSTNAME=${app.id}`, - `${envPrefix}WEBADMIN_ORIGIN=${settings.dashboardOrigin()}`, - `${envPrefix}API_ORIGIN=${settings.dashboardOrigin()}`, - `${envPrefix}APP_ORIGIN=https://${domain}`, - `${envPrefix}APP_DOMAIN=${domain}` + `CLOUDRON_WEBADMIN_ORIGIN=${settings.dashboardOrigin()}`, + `CLOUDRON_API_ORIGIN=${settings.dashboardOrigin()}`, + `CLOUDRON_APP_ORIGIN=https://${domain}`, + `CLOUDRON_APP_DOMAIN=${domain}` ]; const portEnv = []; diff --git a/src/services.js b/src/services.js index 82fa02c42..a590045ff 100644 --- a/src/services.js +++ b/src/services.js @@ -1002,17 +1002,15 @@ async function setupLdap(app, options) { if (!app.sso) return; - const envPrefix = app.manifest.manifestVersion <= 1 ? '' : 'CLOUDRON_'; - const env = [ - { name: `${envPrefix}LDAP_SERVER`, value: '172.18.0.1' }, + { name: 'CLOUDRON_LDAP_SERVER', value: '172.18.0.1' }, { name: 'CLOUDRON_LDAP_HOST', value: '172.18.0.1' }, // to keep things in sync with the database _HOST vars - { name: `${envPrefix}LDAP_PORT`, value: '' + constants.LDAP_PORT }, - { name: `${envPrefix}LDAP_URL`, value: 'ldap://172.18.0.1:' + constants.LDAP_PORT }, - { name: `${envPrefix}LDAP_USERS_BASE_DN`, value: 'ou=users,dc=cloudron' }, - { name: `${envPrefix}LDAP_GROUPS_BASE_DN`, value: 'ou=groups,dc=cloudron' }, - { name: `${envPrefix}LDAP_BIND_DN`, value: 'cn='+ app.id + ',ou=apps,dc=cloudron' }, - { name: `${envPrefix}LDAP_BIND_PASSWORD`, value: hat(4 * 128) } // this is ignored + { name: 'CLOUDRON_LDAP_PORT', value: '' + constants.LDAP_PORT }, + { name: 'CLOUDRON_LDAP_URL', value: 'ldap://172.18.0.1:' + constants.LDAP_PORT }, + { name: 'CLOUDRON_LDAP_USERS_BASE_DN', value: 'ou=users,dc=cloudron' }, + { name: 'CLOUDRON_LDAP_GROUPS_BASE_DN', value: 'ou=groups,dc=cloudron' }, + { name: 'CLOUDRON_LDAP_BIND_DN', value: 'cn='+ app.id + ',ou=apps,dc=cloudron' }, + { name: 'CLOUDRON_LDAP_BIND_PASSWORD', value: hat(4 * 128) } // this is ignored ]; debug('Setting up LDAP'); @@ -1042,17 +1040,15 @@ async function setupSendMail(app, options) { const password = existingPassword || hat(4 * 48); // see box#565 for password length - const envPrefix = app.manifest.manifestVersion <= 1 ? '' : 'CLOUDRON_'; - const env = [ - { name: `${envPrefix}MAIL_SMTP_SERVER`, value: 'mail' }, - { name: `${envPrefix}MAIL_SMTP_PORT`, value: '2525' }, - { name: `${envPrefix}MAIL_SMTPS_PORT`, value: '2465' }, - { name: `${envPrefix}MAIL_STARTTLS_PORT`, value: '2587' }, - { name: `${envPrefix}MAIL_SMTP_USERNAME`, value: app.mailboxName + '@' + app.mailboxDomain }, - { name: `${envPrefix}MAIL_SMTP_PASSWORD`, value: password }, - { name: `${envPrefix}MAIL_FROM`, value: app.mailboxName + '@' + app.mailboxDomain }, - { name: `${envPrefix}MAIL_DOMAIN`, value: app.mailboxDomain } + { name: 'CLOUDRON_MAIL_SMTP_SERVER', value: 'mail' }, + { name: 'CLOUDRON_MAIL_SMTP_PORT', value: '2525' }, + { name: 'CLOUDRON_MAIL_SMTPS_PORT', value: '2465' }, + { name: 'CLOUDRON_MAIL_STARTTLS_PORT', value: '2587' }, + { name: 'CLOUDRON_MAIL_SMTP_USERNAME', value: app.mailboxName + '@' + app.mailboxDomain }, + { name: 'CLOUDRON_MAIL_SMTP_PASSWORD', value: password }, + { name: 'CLOUDRON_MAIL_FROM', value: app.mailboxName + '@' + app.mailboxDomain }, + { name: 'CLOUDRON_MAIL_DOMAIN', value: app.mailboxDomain } ]; debug('Setting sendmail addon config to %j', env); await addonConfigs.set(app.id, 'sendmail', env); @@ -1079,18 +1075,16 @@ async function setupRecvMail(app, options) { const password = existingPassword || hat(4 * 48); // see box#565 for password length - const envPrefix = app.manifest.manifestVersion <= 1 ? '' : 'CLOUDRON_'; - const env = [ - { name: `${envPrefix}MAIL_IMAP_SERVER`, value: 'mail' }, - { name: `${envPrefix}MAIL_IMAP_PORT`, value: '9393' }, - { name: `${envPrefix}MAIL_IMAPS_PORT`, value: '9993' }, - { name: `${envPrefix}MAIL_POP3_PORT`, value: '9595' }, - { name: `${envPrefix}MAIL_POP3S_PORT`, value: '9995' }, - { name: `${envPrefix}MAIL_IMAP_USERNAME`, value: app.inboxName + '@' + app.inboxDomain }, - { name: `${envPrefix}MAIL_IMAP_PASSWORD`, value: password }, - { name: `${envPrefix}MAIL_TO`, value: app.inboxName + '@' + app.inboxDomain }, - { name: `${envPrefix}MAIL_TO_DOMAIN`, value: app.inboxDomain }, + { name: 'CLOUDRON_MAIL_IMAP_SERVER', value: 'mail' }, + { name: 'CLOUDRON_MAIL_IMAP_PORT', value: '9393' }, + { name: 'CLOUDRON_MAIL_IMAPS_PORT', value: '9993' }, + { name: 'CLOUDRON_MAIL_POP3_PORT', value: '9595' }, + { name: 'CLOUDRON_MAIL_POP3S_PORT', value: '9995' }, + { name: 'CLOUDRON_MAIL_IMAP_USERNAME', value: app.inboxName + '@' + app.inboxDomain }, + { name: 'CLOUDRON_MAIL_IMAP_PASSWORD', value: password }, + { name: 'CLOUDRON_MAIL_TO', value: app.inboxName + '@' + app.inboxDomain }, + { name: 'CLOUDRON_MAIL_TO_DOMAIN', value: app.inboxDomain }, ]; debug('setupRecvMail: setting recvmail addon config to %j', env); @@ -1189,21 +1183,19 @@ async function setupMySql(app, options) { if (networkError) throw new BoxError(BoxError.ADDONS_ERROR, `Network error setting up mysql: ${networkError.message}`); if (response.status !== 201) throw new BoxError(BoxError.ADDONS_ERROR, `Error setting up mysql. Status code: ${response.status} message: ${response.body.message}`); - const envPrefix = app.manifest.manifestVersion <= 1 ? '' : 'CLOUDRON_'; - let env = [ - { name: `${envPrefix}MYSQL_USERNAME`, value: data.username }, - { name: `${envPrefix}MYSQL_PASSWORD`, value: data.password }, - { name: `${envPrefix}MYSQL_HOST`, value: 'mysql' }, - { name: `${envPrefix}MYSQL_PORT`, value: '3306' } + { name: 'CLOUDRON_MYSQL_USERNAME', value: data.username }, + { name: 'CLOUDRON_MYSQL_PASSWORD', value: data.password }, + { name: 'CLOUDRON_MYSQL_HOST', value: 'mysql' }, + { name: 'CLOUDRON_MYSQL_PORT', value: '3306' } ]; if (options.multipleDatabases) { - env = env.concat({ name: `${envPrefix}MYSQL_DATABASE_PREFIX`, value: `${data.prefix}_` }); + env = env.concat({ name: 'CLOUDRON_MYSQL_DATABASE_PREFIX', value: `${data.prefix}_` }); } else { env = env.concat( - { name: `${envPrefix}MYSQL_URL`, value: `mysql://${data.username}:${data.password}@mysql/${data.database}` }, - { name: `${envPrefix}MYSQL_DATABASE`, value: data.database } + { name: 'CLOUDRON_MYSQL_URL', value: `mysql://${data.username}:${data.password}@mysql/${data.database}` }, + { name: 'CLOUDRON_MYSQL_DATABASE', value: data.database } ); } @@ -1393,15 +1385,13 @@ async function setupPostgreSql(app, options) { if (networkError) throw new BoxError(BoxError.ADDONS_ERROR, `Network error setting up postgresql: ${networkError.message}`); if (response.status !== 201) throw new BoxError(BoxError.ADDONS_ERROR, `Error setting up postgresql. Status code: ${response.status} message: ${response.body.message}`); - const envPrefix = app.manifest.manifestVersion <= 1 ? '' : 'CLOUDRON_'; - const env = [ - { name: `${envPrefix}POSTGRESQL_URL`, value: `postgres://${data.username}:${data.password}@postgresql/${data.database}` }, - { name: `${envPrefix}POSTGRESQL_USERNAME`, value: data.username }, - { name: `${envPrefix}POSTGRESQL_PASSWORD`, value: data.password }, - { name: `${envPrefix}POSTGRESQL_HOST`, value: 'postgresql' }, - { name: `${envPrefix}POSTGRESQL_PORT`, value: '5432' }, - { name: `${envPrefix}POSTGRESQL_DATABASE`, value: data.database } + { name: 'CLOUDRON_POSTGRESQL_URL', value: `postgres://${data.username}:${data.password}@postgresql/${data.database}` }, + { name: 'CLOUDRON_POSTGRESQL_USERNAME', value: data.username }, + { name: 'CLOUDRON_POSTGRESQL_PASSWORD', value: data.password }, + { name: 'CLOUDRON_POSTGRESQL_HOST', value: 'postgresql' }, + { name: 'CLOUDRON_POSTGRESQL_PORT', value: '5432' }, + { name: 'CLOUDRON_POSTGRESQL_DATABASE', value: data.database } ]; debug('Setting postgresql addon config to %j', env); @@ -1557,19 +1547,17 @@ async function setupMongoDb(app, options) { if (networkError) throw new BoxError(BoxError.ADDONS_ERROR, `Network error setting up mongodb: ${networkError.message}`); if (response.status !== 201) throw new BoxError(BoxError.ADDONS_ERROR, `Error setting up mongodb. Status code: ${response.status} message: ${response.body.message}`); - const envPrefix = app.manifest.manifestVersion <= 1 ? '' : 'CLOUDRON_'; - const env = [ - { name: `${envPrefix}MONGODB_URL`, value : `mongodb://${data.username}:${data.password}@mongodb:27017/${data.database}` }, - { name: `${envPrefix}MONGODB_USERNAME`, value : data.username }, - { name: `${envPrefix}MONGODB_PASSWORD`, value: data.password }, - { name: `${envPrefix}MONGODB_HOST`, value : 'mongodb' }, - { name: `${envPrefix}MONGODB_PORT`, value : '27017' }, - { name: `${envPrefix}MONGODB_DATABASE`, value : data.database } + { name: 'CLOUDRON_MONGODB_URL', value : `mongodb://${data.username}:${data.password}@mongodb:27017/${data.database}` }, + { name: 'CLOUDRON_MONGODB_USERNAME', value : data.username }, + { name: 'CLOUDRON_MONGODB_PASSWORD', value: data.password }, + { name: 'CLOUDRON_MONGODB_HOST', value : 'mongodb' }, + { name: 'CLOUDRON_MONGODB_PORT', value : '27017' }, + { name: 'CLOUDRON_MONGODB_DATABASE', value : data.database } ]; if (options.oplog) { - env.push({ name: `${envPrefix}MONGODB_OPLOG_URL`, value : `mongodb://${data.username}:${data.password}@mongodb:27017/local?authSource=${data.database}` }); + env.push({ name: 'CLOUDRON_MONGODB_OPLOG_URL', value : `mongodb://${data.username}:${data.password}@mongodb:27017/local?authSource=${data.database}` }); } debug('Setting mongodb addon config to %j', env); @@ -1784,13 +1772,11 @@ async function setupRedis(app, options) { --label isCloudronManaged=true \ ${readOnly} -v /tmp -v /run ${tag} ${cmd}`; - const envPrefix = app.manifest.manifestVersion <= 1 ? '' : 'CLOUDRON_'; - const env = [ - { name: `${envPrefix}REDIS_URL`, value: 'redis://redisuser:' + redisPassword + '@redis-' + app.id }, - { name: `${envPrefix}REDIS_PASSWORD`, value: redisPassword }, - { name: `${envPrefix}REDIS_HOST`, value: redisName }, - { name: `${envPrefix}REDIS_PORT`, value: '6379' } + { name: 'CLOUDRON_REDIS_URL', value: 'redis://redisuser:' + redisPassword + '@redis-' + app.id }, + { name: 'CLOUDRON_REDIS_PASSWORD', value: redisPassword }, + { name: 'CLOUDRON_REDIS_HOST', value: redisName }, + { name: 'CLOUDRON_REDIS_PORT', value: '6379' } ]; const [inspectError, result] = await safe(docker.inspect(redisName)); diff --git a/src/test/common.js b/src/test/common.js index 475db5ec2..1c116ca4b 100644 --- a/src/test/common.js +++ b/src/test/common.js @@ -2,7 +2,6 @@ const apps = require('../apps.js'), async = require('async'), - blobs = require('../blobs.js'), constants = require('../constants.js'), database = require('../database.js'), delay = require('delay'), @@ -26,7 +25,7 @@ const manifest = { 'website': 'http://test.cloudron.io', 'contactEmail': 'test@cloudron.io', 'version': '0.1.0', - 'manifestVersion': 1, + 'manifestVersion': 2, 'dockerImage': 'cloudron/test:25.2.0', 'healthCheckPath': '/', 'httpPort': 7777,