Make settings logic use the appstore model code

This commit is contained in:
Girish Ramakrishnan
2019-02-25 18:17:32 -08:00
parent 68304a3fc1
commit db93cdd95f

View File

@@ -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) {