diff --git a/src/appstore.js b/src/appstore.js index 4f3e445af..1371996a2 100644 --- a/src/appstore.js +++ b/src/appstore.js @@ -71,6 +71,17 @@ function getAppstoreConfig(callback) { }); } +function getAppstoreToken(callback) { + assert.strictEqual(typeof callback, 'function'); + + settings.getAppstoreToken(function (error, token) { + if (error) return callback(new AppstoreError(AppstoreError.INTERNAL_ERROR, error)); + if (!token) return callback(new AppstoreError(AppstoreError.BILLING_REQUIRED)); + + callback(null, token); + }); +} + function getSubscription(callback) { assert.strictEqual(typeof callback, 'function'); @@ -97,7 +108,7 @@ function isFreePlan(subscription) { // See app.js install it will create a db record first but remove it again if appstore purchase fails function purchase(appId, data, callback) { assert.strictEqual(typeof appId, 'string'); - assert.strictEqual(typeof data, 'object'); + assert.strictEqual(typeof data, 'object'); // { appstoreId, manifestId } assert(data.appstoreId || data.manifestId); assert.strictEqual(typeof callback, 'function'); @@ -120,7 +131,7 @@ function purchase(appId, data, callback) { function unpurchase(appId, data, callback) { assert.strictEqual(typeof appId, 'string'); - assert.strictEqual(typeof data, 'object'); + assert.strictEqual(typeof data, 'object'); // { appstoreId, manifestId } assert(data.appstoreId || data.manifestId); assert.strictEqual(typeof callback, 'function'); @@ -217,11 +228,11 @@ function sendAliveStatus(callback) { } }; - getAppstoreConfig(function (error, appstoreConfig) { + getAppstoreToken(function (error, token) { if (error) return callback(error); - var url = config.apiServerOrigin() + '/api/v1/users/' + appstoreConfig.userId + '/cloudrons/' + appstoreConfig.cloudronId + '/alive'; - superagent.post(url).send(data).query({ accessToken: appstoreConfig.token }).timeout(30 * 1000).end(function (error, result) { + const url = `${config.apiServerOrigin()}/api/v1/alive`; + superagent.post(url).send(data).query({ accessToken: token }).timeout(30 * 1000).end(function (error, result) { if (error && !error.response) return callback(new AppstoreError(AppstoreError.EXTERNAL_ERROR, error)); if (result.statusCode === 404) return callback(new AppstoreError(AppstoreError.NOT_FOUND)); if (result.statusCode !== 201) return callback(new AppstoreError(AppstoreError.EXTERNAL_ERROR, util.format('Sending alive status failed. %s %j', result.status, result.body))); @@ -331,8 +342,8 @@ function sendFeedback(info, callback) { apps.get(info.appId, callback); } - settings.getAppstoreToken(function (error, token) { - if (error) return callback(new AppstoreError(AppstoreError.INTERNAL_ERROR, error)); + getAppstoreToken(function (error, token) { + if (error) return callback(error); collectAppInfoIfNeeded(function (error, result) { if (error) console.error('Unable to get app info', error); diff --git a/src/test/appstore-test.js b/src/test/appstore-test.js index 3ac43ebe2..bcbac79bc 100644 --- a/src/test/appstore-test.js +++ b/src/test/appstore-test.js @@ -14,7 +14,8 @@ var async = require('async'), database = require('../database.js'), expect = require('expect.js'), nock = require('nock'), - settings = require('../settings.js'); + settings = require('../settings.js'), + settingsdb = require('../settingsdb.js'); const DOMAIN = 'example-appstore-test.com'; const APPSTORE_USER_ID = 'appstoreuserid'; @@ -66,13 +67,13 @@ describe('Appstore', function () { expect(error).to.not.be.ok(); expect(scope.isDone()).to.be.ok(); - done(); + settingsdb.set(settings.APPSTORE_TOKEN_KEY, APPSTORE_TOKEN, done); }); }); it('can send alive status', function (done) { var scope = nock('http://localhost:6060') - .post(`/api/v1/users/${APPSTORE_USER_ID}/cloudrons/${CLOUDRON_ID}/alive?accessToken=${APPSTORE_TOKEN}`, function (body) { + .post(`/api/v1/alive?accessToken=${APPSTORE_TOKEN}`, function (body) { expect(body.version).to.be.a('string'); expect(body.adminFqdn).to.be.a('string'); expect(body.provider).to.be.a('string');