diff --git a/src/settings.js b/src/settings.js index 37e9a8920..501bb2a50 100644 --- a/src/settings.js +++ b/src/settings.js @@ -62,19 +62,18 @@ exports = module.exports = { }; var addons = require('./addons.js'), + appstore = require('./appstore.js'), + AppstoreError = require('./appstore.js').AppstoreError, assert = require('assert'), backups = require('./backups.js'), BackupsError = backups.BackupsError, - config = require('./config.js'), constants = require('./constants.js'), CronJob = require('cron').CronJob, DatabaseError = require('./databaseerror.js'), - debug = require('debug')('box:settings'), moment = require('moment-timezone'), paths = require('./paths.js'), safe = require('safetydance'), settingsdb = require('./settingsdb.js'), - superagent = require('superagent'), util = require('util'), _ = require('underscore'); @@ -412,61 +411,24 @@ function setAppstoreConfig(appstoreConfig, callback) { assert.strictEqual(typeof appstoreConfig, 'object'); assert.strictEqual(typeof callback, 'function'); - getAppstoreConfig(function (error, oldConfig) { - if (error) return callback(error); + appstore.registerCloudron(appstoreConfig, function (error, cloudronId) { + if (error && error.reason === AppstoreError.EXTERNAL_ERROR) return callback(new SettingsError(SettingsError.EXTERNAL_ERROR, error.message)); + if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); - var cloudronId = oldConfig.cloudronId; + let data = { + userId: appstoreConfig.userId, + token: appstoreConfig.token, + cloudronId: cloudronId + }; - function setNewConfig() { - var data = { - userId: appstoreConfig.userId, - token: appstoreConfig.token, - cloudronId: cloudronId - }; + settingsdb.set(exports.APPSTORE_CONFIG_KEY, JSON.stringify(data), function (error) { + if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); - settingsdb.set(exports.APPSTORE_CONFIG_KEY, JSON.stringify(data), function (error) { - if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); + gEvents.emit(exports.APPSTORE_CONFIG_KEY, appstoreConfig); - gEvents.emit(exports.APPSTORE_CONFIG_KEY, appstoreConfig); - - callback(null); - }); - } - - function registerCloudron() { - const url = config.apiServerOrigin() + '/api/v1/users/' + appstoreConfig.userId + '/cloudrons'; - const data = { - domain: config.adminDomain() - }; - - superagent.post(url).send(data).query({ accessToken: appstoreConfig.token }).timeout(30 * 1000).end(function (error, result) { - if (error && !error.response) return callback(new SettingsError(SettingsError.EXTERNAL_ERROR, error.message)); - if (result.statusCode === 401) return callback(new SettingsError(SettingsError.EXTERNAL_ERROR, 'invalid appstore token')); - if (result.statusCode !== 201) return callback(new SettingsError(SettingsError.EXTERNAL_ERROR, 'unable to register cloudron')); - - cloudronId = result.body.cloudron.id; - - debug(`setAppstoreConfig: Cloudron registered with id ${cloudronId}`); - - setNewConfig(); - }); - } - - if (!cloudronId) return registerCloudron(); - - // verify that cloudron belongs to this user - const url = config.apiServerOrigin() + '/api/v1/users/' + appstoreConfig.userId + '/cloudrons/' + oldConfig.cloudronId; - superagent.get(url).query({ accessToken: appstoreConfig.token }).timeout(30 * 1000).end(function (error, result) { - if (error && !error.response) return callback(new SettingsError(SettingsError.EXTERNAL_ERROR, error.message)); - if (result.statusCode === 401) return callback(new SettingsError(SettingsError.EXTERNAL_ERROR, 'invalid appstore token')); - if (result.statusCode === 403) return callback(new SettingsError(SettingsError.EXTERNAL_ERROR, 'wrong user')); - if (result.statusCode === 404) return registerCloudron(); - if (result.statusCode !== 200) return callback(new SettingsError(SettingsError.EXTERNAL_ERROR, 'unknown error')); - - setNewConfig(); + callback(null); }); }); - } function getAll(callback) {