diff --git a/src/appdb.js b/src/appdb.js index c5801bc06..fd6eb6753 100644 --- a/src/appdb.js +++ b/src/appdb.js @@ -52,6 +52,7 @@ var assert = require('assert'), async = require('async'), database = require('./database.js'), DatabaseError = require('./databaseerror'), + mailboxdb = require('./mailboxdb.js'), safe = require('safetydance'), util = require('util'); @@ -189,7 +190,7 @@ function add(id, appStoreId, manifest, location, portBindings, data, callback) { var sso = 'sso' in data ? data.sso : null; var debugModeJson = data.debugMode ? JSON.stringify(data.debugMode) : null; - var queries = [ ]; + var queries = []; queries.push({ query: 'INSERT INTO apps (id, appStoreId, manifestJson, installationState, location, accessRestrictionJson, memoryLimit, altDomain, xFrameOptions, lastBackupId, sso, debugModeJson) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', args: [ id, appStoreId, manifestJson, installationState, location, accessRestrictionJson, memoryLimit, altDomain, xFrameOptions, lastBackupId, sso, debugModeJson ] @@ -202,6 +203,14 @@ function add(id, appStoreId, manifest, location, portBindings, data, callback) { }); }); + // only allocate a mailbox if fromEmail is set + if (data.fromEmail) { + queries.push({ + query: 'INSERT INTO mailboxes (name, ownerId, ownerType) VALUES (?, ?, ?)', + args: [ data.fromEmail, id, mailboxdb.TYPE_APP ] + }); + } + database.transaction(queries, function (error) { if (error && error.code === 'ER_DUP_ENTRY') return callback(new DatabaseError(DatabaseError.ALREADY_EXISTS, error.message)); if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); diff --git a/src/apps.js b/src/apps.js index 4444d23d3..02578cd6e 100644 --- a/src/apps.js +++ b/src/apps.js @@ -554,30 +554,25 @@ function install(data, auditSource, callback) { altDomain: altDomain, xFrameOptions: xFrameOptions, sso: sso, - debugMode: debugMode + debugMode: debugMode, + fromEmail: (location ? location : manifest.title.toLowerCase().replace(/[^a-zA-Z0-9]/g, '')) + '.app' }; - var from = (location ? location : manifest.title.toLowerCase().replace(/[^a-zA-Z0-9]/g, '')) + '.app'; - mailboxdb.add(from, appId, mailboxdb.TYPE_APP, function (error) { - if (error && error.reason === DatabaseError.ALREADY_EXISTS) return callback(new AppsError(AppsError.ALREADY_EXISTS, 'Mailbox already exists')); + appdb.add(appId, appStoreId, manifest, location, portBindings, data, function (error) { + if (error && error.reason === DatabaseError.ALREADY_EXISTS) return callback(getDuplicateErrorDetails(location, portBindings, error)); if (error) return callback(new AppsError(AppsError.INTERNAL_ERROR, error)); - appdb.add(appId, appStoreId, manifest, location, portBindings, data, function (error) { - if (error && error.reason === DatabaseError.ALREADY_EXISTS) return callback(getDuplicateErrorDetails(location, portBindings, error)); - if (error) return callback(new AppsError(AppsError.INTERNAL_ERROR, error)); + // save cert to boxdata/certs + if (cert && key) { + if (!safe.fs.writeFileSync(path.join(paths.APP_CERTS_DIR, config.appFqdn(location) + '.user.cert'), cert)) return callback(new AppsError(AppsError.INTERNAL_ERROR, 'Error saving cert: ' + safe.error.message)); + if (!safe.fs.writeFileSync(path.join(paths.APP_CERTS_DIR, config.appFqdn(location) + '.user.key'), key)) return callback(new AppsError(AppsError.INTERNAL_ERROR, 'Error saving key: ' + safe.error.message)); + } - // save cert to boxdata/certs - if (cert && key) { - if (!safe.fs.writeFileSync(path.join(paths.APP_CERTS_DIR, config.appFqdn(location) + '.user.cert'), cert)) return callback(new AppsError(AppsError.INTERNAL_ERROR, 'Error saving cert: ' + safe.error.message)); - if (!safe.fs.writeFileSync(path.join(paths.APP_CERTS_DIR, config.appFqdn(location) + '.user.key'), key)) return callback(new AppsError(AppsError.INTERNAL_ERROR, 'Error saving key: ' + safe.error.message)); - } + taskmanager.restartAppTask(appId); - taskmanager.restartAppTask(appId); + eventlog.add(eventlog.ACTION_APP_INSTALL, auditSource, { appId: appId, location: location, manifest: manifest }); - eventlog.add(eventlog.ACTION_APP_INSTALL, auditSource, { appId: appId, location: location, manifest: manifest }); - - callback(null, { id : appId }); - }); + callback(null, { id : appId }); }); }); }); @@ -898,24 +893,19 @@ function clone(appId, data, auditSource, callback) { accessRestriction: app.accessRestriction, xFrameOptions: app.xFrameOptions, lastBackupId: backupId, - sso: !!app.sso + sso: !!app.sso, + fromEmail: (location ? location : manifest.title.toLowerCase().replace(/[^a-zA-Z0-9]/g, '')) + '.app' }; - var from = (location ? location : manifest.title.toLowerCase().replace(/[^a-zA-Z0-9]/g, '')) + '.app'; - mailboxdb.add(from, newAppId, mailboxdb.TYPE_APP, function (error) { - if (error && error.reason === DatabaseError.ALREADY_EXISTS) return callback(new AppsError(AppsError.ALREADY_EXISTS, 'Mailbox already exists')); + appdb.add(newAppId, appStoreId, manifest, location, portBindings, data, function (error) { + if (error && error.reason === DatabaseError.ALREADY_EXISTS) return callback(getDuplicateErrorDetails(location, portBindings, error)); if (error) return callback(new AppsError(AppsError.INTERNAL_ERROR, error)); - appdb.add(newAppId, appStoreId, manifest, location, portBindings, data, function (error) { - if (error && error.reason === DatabaseError.ALREADY_EXISTS) return callback(getDuplicateErrorDetails(location, portBindings, error)); - if (error) return callback(new AppsError(AppsError.INTERNAL_ERROR, error)); + taskmanager.restartAppTask(newAppId); - taskmanager.restartAppTask(newAppId); + eventlog.add(eventlog.ACTION_APP_CLONE, auditSource, { appId: newAppId, oldAppId: appId, backupId: backupId, location: location, manifest: manifest }); - eventlog.add(eventlog.ACTION_APP_CLONE, auditSource, { appId: newAppId, oldAppId: appId, backupId: backupId, location: location, manifest: manifest }); - - callback(null, { id : newAppId }); - }); + callback(null, { id : newAppId }); }); }); });