diff --git a/src/appstore.js b/src/appstore.js index 2743bd7a4..4f3e445af 100644 --- a/src/appstore.js +++ b/src/appstore.js @@ -331,16 +331,16 @@ function sendFeedback(info, callback) { apps.get(info.appId, callback); } - getAppstoreConfig(function (error, appstoreConfig) { - if (error) return callback(error); + settings.getAppstoreToken(function (error, token) { + if (error) return callback(new AppstoreError(AppstoreError.INTERNAL_ERROR, error)); collectAppInfoIfNeeded(function (error, result) { if (error) console.error('Unable to get app info', error); if (result) info.app = result; - var url = config.apiServerOrigin() + '/api/v1/users/' + appstoreConfig.userId + '/cloudrons/' + appstoreConfig.cloudronId + '/feedback'; + let url = config.apiServerOrigin() + '/api/v1/feedback'; - superagent.post(url).query({ accessToken: appstoreConfig.token }).send(info).timeout(10 * 1000).end(function (error, result) { + superagent.post(url).query({ accessToken: token }).send(info).timeout(10 * 1000).end(function (error, result) { if (error && !error.response) return callback(new AppstoreError(AppstoreError.EXTERNAL_ERROR, error)); if (result.statusCode !== 201) return callback(new AppstoreError(AppstoreError.EXTERNAL_ERROR, util.format('Bad response: %s %s', result.statusCode, result.text))); diff --git a/src/routes/test/support-test.js b/src/routes/test/support-test.js index 3218a585f..cd06ba6a3 100644 --- a/src/routes/test/support-test.js +++ b/src/routes/test/support-test.js @@ -49,7 +49,8 @@ function setup(done) { }); }, - settingsdb.set.bind(null, settings.APPSTORE_CONFIG_KEY, JSON.stringify({ userId: 'USER_ID', cloudronId: 'CLOUDRON_ID', token: 'ACCESS_TOKEN' })) + settingsdb.set.bind(null, settings.APPSTORE_CONFIG_KEY, JSON.stringify({ userId: 'USER_ID', cloudronId: 'CLOUDRON_ID', token: 'ACCESS_TOKEN' })), + settingsdb.set.bind(null, settings.APPSTORE_TOKEN_KEY, 'CLOUDRON_TOKEN') ], done); } @@ -231,7 +232,7 @@ describe('Support API', function () { it('succeeds with ticket type', function (done) { var scope2 = nock(config.apiServerOrigin()) .filteringRequestBody(function (/* unusedBody */) { return ''; }) // strip out body - .post('/api/v1/users/USER_ID/cloudrons/CLOUDRON_ID/feedback?accessToken=ACCESS_TOKEN') + .post('/api/v1/feedback?accessToken=CLOUDRON_TOKEN') .reply(201, { }); superagent.post(SERVER_URL + '/api/v1/support/feedback') @@ -247,7 +248,7 @@ describe('Support API', function () { it('succeeds with app type', function (done) { var scope2 = nock(config.apiServerOrigin()) .filteringRequestBody(function (/* unusedBody */) { return ''; }) // strip out body - .post('/api/v1/users/USER_ID/cloudrons/CLOUDRON_ID/feedback?accessToken=ACCESS_TOKEN') + .post('/api/v1/feedback?accessToken=CLOUDRON_TOKEN') .reply(201, { }); superagent.post(SERVER_URL + '/api/v1/support/feedback') diff --git a/src/settings.js b/src/settings.js index 0d739d4d8..34e766fd7 100644 --- a/src/settings.js +++ b/src/settings.js @@ -38,6 +38,10 @@ exports = module.exports = { getPlatformConfig: getPlatformConfig, setPlatformConfig: setPlatformConfig, + getLicenseKey: getLicenseKey, + getCloudronId: getCloudronId, + getAppstoreToken: getAppstoreToken, + get: get, getAll: getAll, @@ -57,6 +61,9 @@ exports = module.exports = { BOX_AUTOUPDATE_PATTERN_KEY: 'box_autoupdate_pattern', TIME_ZONE_KEY: 'time_zone', CLOUDRON_NAME_KEY: 'cloudron_name', + LICENSE_KEY: 'license_key', + CLOUDRON_ID_KEY: 'cloudron_id', + APPSTORE_TOKEN_KEY: 'appstore_token', // blobs CLOUDRON_AVATAR_KEY: 'cloudron_avatar', // not stored in db but can be used for locked flag @@ -88,6 +95,9 @@ var gDefaults = (function () { result[exports.CLOUDRON_NAME_KEY] = 'Cloudron'; result[exports.DYNAMIC_DNS_KEY] = false; result[exports.UNSTABLE_APPS_KEY] = false; + result[exports.LICENSE_KEY] = ''; + result[exports.CLOUDRON_ID_KEY] = ''; + result[exports.APPSTORE_TOKEN_KEY] = ''; result[exports.BACKUP_CONFIG_KEY] = { provider: 'filesystem', key: '', @@ -431,6 +441,39 @@ function setPlatformConfig(platformConfig, callback) { }); } +function getLicenseKey(callback) { + assert.strictEqual(typeof callback, 'function'); + + settingsdb.get(exports.LICENSE_KEY, function (error, value) { + if (error && error.reason === DatabaseError.NOT_FOUND) return callback(null, gDefaults[exports.LICENSE_KEY]); + if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); + + callback(null, value); + }); +} + +function getCloudronId(callback) { + assert.strictEqual(typeof callback, 'function'); + + settingsdb.get(exports.CLOUDRON_ID_KEY, function (error, value) { + if (error && error.reason === DatabaseError.NOT_FOUND) return callback(null, gDefaults[exports.CLOUDRON_ID_KEY]); + if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); + + callback(null, value); + }); +} + +function getAppstoreToken(callback) { + assert.strictEqual(typeof callback, 'function'); + + settingsdb.get(exports.APPSTORE_TOKEN_KEY, function (error, value) { + if (error && error.reason === DatabaseError.NOT_FOUND) return callback(null, gDefaults[exports.APPSTORE_TOKEN_KEY]); + if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); + + callback(null, value); + }); +} + function setAppstoreConfig(appstoreConfig, callback) { assert.strictEqual(typeof appstoreConfig, 'object'); assert.strictEqual(typeof appstoreConfig.userId, 'string');