@@ -7,6 +7,7 @@ exports = module.exports = {
|
|||||||
sendAliveStatus: sendAliveStatus,
|
sendAliveStatus: sendAliveStatus,
|
||||||
|
|
||||||
getAppUpdate: getAppUpdate,
|
getAppUpdate: getAppUpdate,
|
||||||
|
getBoxUpdate: getBoxUpdate,
|
||||||
|
|
||||||
AppstoreError: AppstoreError
|
AppstoreError: AppstoreError
|
||||||
};
|
};
|
||||||
@@ -170,6 +171,25 @@ function sendAliveStatus(data, callback) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getBoxUpdate(callback) {
|
||||||
|
assert.strictEqual(typeof callback, 'function');
|
||||||
|
|
||||||
|
getAppstoreConfig(function (error, appstoreConfig) {
|
||||||
|
if (error) return callback(error);
|
||||||
|
|
||||||
|
var url = config.apiServerOrigin() + '/api/v1/users/' + appstoreConfig.userId + '/cloudrons/' + appstoreConfig.cloudronId + '/boxupdate';
|
||||||
|
|
||||||
|
superagent.get(url).query({ boxVersion: config.version() }).timeout(10 * 1000).end(function (error, result) {
|
||||||
|
if (error && !error.response) return callback(new AppstoreError(AppstoreError.EXTERNAL_ERROR, error));
|
||||||
|
if (result.statusCode === 204) return callback(null); // no update
|
||||||
|
if (result.statusCode !== 200) return callback(new AppstoreError(AppstoreError.EXTERNAL_ERROR, util.format('Bad response: %s %s', result.statusCode, result.text)));
|
||||||
|
|
||||||
|
// { version, changelog, upgrade, sourceTarballUrl}
|
||||||
|
callback(null, result.body);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function getAppUpdate(app, callback) {
|
function getAppUpdate(app, callback) {
|
||||||
assert.strictEqual(typeof app, 'object');
|
assert.strictEqual(typeof app, 'object');
|
||||||
assert.strictEqual(typeof callback, 'function');
|
assert.strictEqual(typeof callback, 'function');
|
||||||
@@ -184,6 +204,7 @@ function getAppUpdate(app, callback) {
|
|||||||
if (result.statusCode === 204) return callback(null); // no update
|
if (result.statusCode === 204) return callback(null); // no update
|
||||||
if (result.statusCode !== 200) return callback(new AppstoreError(AppstoreError.EXTERNAL_ERROR, util.format('Bad response: %s %s', result.statusCode, result.text)));
|
if (result.statusCode !== 200) return callback(new AppstoreError(AppstoreError.EXTERNAL_ERROR, util.format('Bad response: %s %s', result.statusCode, result.text)));
|
||||||
|
|
||||||
|
// { id, creationDate, manifest }
|
||||||
callback(null, result.body);
|
callback(null, result.body);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -19,9 +19,7 @@ var apps = require('./apps.js'),
|
|||||||
paths = require('./paths.js'),
|
paths = require('./paths.js'),
|
||||||
safe = require('safetydance'),
|
safe = require('safetydance'),
|
||||||
semver = require('semver'),
|
semver = require('semver'),
|
||||||
settings = require('./settings.js'),
|
settings = require('./settings.js');
|
||||||
superagent = require('superagent'),
|
|
||||||
util = require('util');
|
|
||||||
|
|
||||||
var gAppUpdateInfo = { }, // id -> update info { creationDate, manifest }
|
var gAppUpdateInfo = { }, // id -> update info { creationDate, manifest }
|
||||||
gBoxUpdateInfo = null; // { version, changelog, upgrade, sourceTarballUrl }
|
gBoxUpdateInfo = null; // { version, changelog, upgrade, sourceTarballUrl }
|
||||||
@@ -58,54 +56,6 @@ function resetAppUpdateInfo(appId) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function getBoxUpdates(callback) {
|
|
||||||
var currentVersion = config.version();
|
|
||||||
|
|
||||||
// do not crash if boxVersionsUrl is not set
|
|
||||||
if (!config.get('boxVersionsUrl')) return callback(null, null);
|
|
||||||
|
|
||||||
superagent
|
|
||||||
.get(config.get('boxVersionsUrl'))
|
|
||||||
.timeout(10 * 1000)
|
|
||||||
.end(function (error, result) {
|
|
||||||
if (error && !error.response) return callback(error);
|
|
||||||
if (result.statusCode !== 200) return callback(new Error(util.format('Bad status: %s %s', result.statusCode, result.text)));
|
|
||||||
|
|
||||||
var versions = safe.JSON.parse(result.text);
|
|
||||||
|
|
||||||
if (!versions || typeof versions !== 'object') return callback(new Error('versions is not in valid format:' + safe.error));
|
|
||||||
|
|
||||||
var latestVersion = Object.keys(versions).sort(semver.compare).pop();
|
|
||||||
debug('checkBoxUpdates: Latest version is %s etag:%s', latestVersion, result.header['etag']);
|
|
||||||
|
|
||||||
if (!latestVersion) return callback(new Error('No version available'));
|
|
||||||
|
|
||||||
var nextVersion = null, nextVersionInfo = null;
|
|
||||||
var currentVersionInfo = versions[currentVersion];
|
|
||||||
if (!currentVersionInfo) {
|
|
||||||
debug('Cloudron runs on unknown version %s. Offering to update to latest version', currentVersion);
|
|
||||||
nextVersion = latestVersion;
|
|
||||||
nextVersionInfo = versions[latestVersion];
|
|
||||||
} else {
|
|
||||||
nextVersion = currentVersionInfo.next;
|
|
||||||
nextVersionInfo = nextVersion ? versions[nextVersion] : null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nextVersionInfo && typeof nextVersionInfo === 'object') {
|
|
||||||
debug('new version %s available. imageId: %d code: %s', nextVersion, nextVersionInfo.imageId, nextVersionInfo.sourceTarballUrl);
|
|
||||||
callback(null, {
|
|
||||||
version: nextVersion,
|
|
||||||
changelog: nextVersionInfo.changelog,
|
|
||||||
upgrade: nextVersionInfo.upgrade,
|
|
||||||
sourceTarballUrl: nextVersionInfo.sourceTarballUrl
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
debug('no new version available.');
|
|
||||||
callback(null, null);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function checkAppUpdates(callback) {
|
function checkAppUpdates(callback) {
|
||||||
callback = callback || NOOP_CALLBACK; // null when called from a timer task
|
callback = callback || NOOP_CALLBACK; // null when called from a timer task
|
||||||
|
|
||||||
@@ -177,7 +127,7 @@ function checkBoxUpdates(callback) {
|
|||||||
|
|
||||||
gBoxUpdateInfo = null;
|
gBoxUpdateInfo = null;
|
||||||
|
|
||||||
getBoxUpdates(function (error, updateInfo) {
|
appstore.getBoxUpdate(function (error, updateInfo) {
|
||||||
if (error || !updateInfo) return callback(error);
|
if (error || !updateInfo) return callback(error);
|
||||||
|
|
||||||
settings.getUpdateConfig(function (error, updateConfig) {
|
settings.getUpdateConfig(function (error, updateConfig) {
|
||||||
|
|||||||
Reference in New Issue
Block a user