diff --git a/src/appstore.js b/src/appstore.js index afa3b38b0..320fba2eb 100644 --- a/src/appstore.js +++ b/src/appstore.js @@ -5,6 +5,9 @@ exports = module.exports = { getApp: getApp, getAppVersion: getAppVersion, + trackBeginSetup: trackBeginSetup, + trackFinishedSetup: trackFinishedSetup, + registerWithLoginCredentials: registerWithLoginCredentials, registerWithLicense: registerWithLicense, @@ -375,6 +378,30 @@ function registerCloudron(data, callback) { }); } +// This works without a Cloudron token as this Cloudron was not yet registered +function trackBeginSetup(provider) { + assert.strictEqual(typeof provider, 'string'); + + const url = `${settings.apiServerOrigin()}/api/v1/helper/setup_begin`; + + superagent.post(url).send({ provider }).timeout(30 * 1000).end(function (error, result) { + if (error && !error.response) return console.error(error.message); + if (result.statusCode !== 200) return console.error(error.message); + }); +} + +// This works without a Cloudron token as this Cloudron was not yet registered +function trackFinishedSetup(domain) { + assert.strictEqual(typeof domain, 'string'); + + const url = `${settings.apiServerOrigin()}/api/v1/helper/setup_finished`; + + superagent.post(url).send({ domain }).timeout(30 * 1000).end(function (error, result) { + if (error && !error.response) return console.error(error.message); + if (result.statusCode !== 200) return console.error(error.message); + }); +} + function registerWithLicense(license, domain, callback) { assert.strictEqual(typeof license, 'string'); assert.strictEqual(typeof domain, 'string'); diff --git a/src/routes/provision.js b/src/routes/provision.js index ce284927c..cacf0cc4c 100644 --- a/src/routes/provision.js +++ b/src/routes/provision.js @@ -9,6 +9,7 @@ exports = module.exports = { }; var assert = require('assert'), + appstore = require('../appstore.js'), auditSource = require('../auditsource.js'), BoxError = require('../boxerror.js'), debug = require('debug')('box:routes/setup'), @@ -62,6 +63,8 @@ function setup(req, res, next) { if (error) return next(BoxError.toHttpError(error)); next(new HttpSuccess(200, {})); + + appstore.trackFinishedSetup(dnsConfig.domain); }); } @@ -116,5 +119,10 @@ function getStatus(req, res, next) { if (error) return next(BoxError.toHttpError(error)); next(new HttpSuccess(200, status)); + + // check if Cloudron is not in setup state nor activated and let appstore know of the attempt + if (!status.activated && !status.setup.active && !status.restore.active) { + appstore.trackBeginSetup(status.provider); + } }); }