diff --git a/src/appdb.js b/src/appdb.js index 2e992f4e1..6352491f4 100644 --- a/src/appdb.js +++ b/src/appdb.js @@ -1,26 +1,27 @@ 'use strict'; exports = module.exports = { - get: get, - add: add, - exists: exists, - del: del, - update: update, - getAll: getAll, - getPortBindings: getPortBindings, - delPortBinding: delPortBinding, + get, + add, + exists, + del, + update, + getAll, + getPortBindings, + delPortBinding, - setAddonConfig: setAddonConfig, - getAddonConfig: getAddonConfig, - getAddonConfigByAppId: getAddonConfigByAppId, - getAddonConfigByName: getAddonConfigByName, - unsetAddonConfig: unsetAddonConfig, - unsetAddonConfigByAppId: unsetAddonConfigByAppId, - getAppIdByAddonConfigValue: getAppIdByAddonConfigValue, + setAddonConfig, + getAddonConfig, + getAddonConfigByAppId, + getAddonConfigByName, + unsetAddonConfig, + unsetAddonConfigByAppId, + getAppIdByAddonConfigValue, + getByIpAddress, - setHealth: setHealth, - setTask: setTask, - getAppStoreIds: getAppStoreIds, + setHealth, + setTask, + getAppStoreIds, // subdomain table types SUBDOMAIN_TYPE_PRIMARY: 'primary', @@ -154,6 +155,26 @@ function get(id, callback) { }); } +function getByIpAddress(ip, callback) { + assert.strictEqual(typeof ip, 'string'); + assert.strictEqual(typeof callback, 'function'); + + database.query(`${APPS_QUERY} WHERE apps.containerIp = ?`, [ ip ], function (error, result) { + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (result.length === 0) return callback(new BoxError(BoxError.NOT_FOUND, 'App not found')); + + database.query('SELECT ' + SUBDOMAIN_FIELDS + ' FROM subdomains WHERE appId = ? AND type = ?', [ result[0].id, exports.SUBDOMAIN_TYPE_REDIRECT ], function (error, alternateDomains) { + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + + result[0].alternateDomains = alternateDomains; + + postProcess(result[0]); + + callback(null, result[0]); + }); + }); +} + function getAll(callback) { assert.strictEqual(typeof callback, 'function'); diff --git a/src/apps.js b/src/apps.js index 8e29dcde5..97c7e3770 100644 --- a/src/apps.js +++ b/src/apps.js @@ -514,6 +514,18 @@ function getByIpAddress(ip, callback) { // this is only used by the ldap test. the apps tests still uses proper docker if (constants.TEST && exports._MOCK_GET_BY_IP_APP_ID) return get(exports._MOCK_GET_BY_IP_APP_ID, callback); + appdb.getByIpAddress(ip, function (error, app) { + if (error) return callback(error); + + getDomainObjectMap(function (error, domainObjectMap) { + if (error) return callback(error); + + postProcess(app, domainObjectMap); + + callback(null, app); + }); + }); + docker.getContainerIdByIp(ip, function (error, containerId) { if (error) return callback(error); diff --git a/src/docker.js b/src/docker.js index 0fb4be720..148d89187 100644 --- a/src/docker.js +++ b/src/docker.js @@ -353,7 +353,7 @@ function createSubcontainer(app, name, cmd, options, callback) { } }; } else { - containerOptions.HostConfig.NetworkMode = `container:${app.containerId}`; + containerOptions.HostConfig.NetworkMode = `container:${app.containerId}`; // scheduler containers must have same IP as app for various addon auth } var capabilities = manifest.capabilities || [];