diff --git a/src/eventlog.js b/src/eventlog.js index 97b8c330d..b23e73eef 100644 --- a/src/eventlog.js +++ b/src/eventlog.js @@ -4,6 +4,7 @@ exports = module.exports = { add, upsertLoginEvent, get, + getActivationEvent, listPaged, cleanup, _clear: clear, @@ -145,7 +146,14 @@ async function upsertLoginEvent(action, source, data) { async function get(id) { assert.strictEqual(typeof id, 'string'); - const result = await database.query('SELECT ' + EVENTLOG_FIELDS + ' FROM eventlog WHERE id = ?', [ id ]); + const result = await database.query(`SELECT ${EVENTLOG_FIELDS} FROM eventlog WHERE id = ?`, [ id ]); + if (result.length === 0) return null; + + return postProcess(result[0]); +} + +async function getActivationEvent() { + const result = await database.query(`SELECT ${EVENTLOG_FIELDS} FROM eventlog WHERE action = ? ORDER BY creationTime`, [ exports.ACTION_ACTIVATE ]); if (result.length === 0) return null; return postProcess(result[0]); diff --git a/src/routes/test/system-test.js b/src/routes/test/system-test.js index b7d8e2e48..70e120cc6 100644 --- a/src/routes/test/system-test.js +++ b/src/routes/test/system-test.js @@ -45,6 +45,7 @@ describe('System', function () { expect(response.body.info.productName).to.be.a('string'); expect(response.body.info.uptimeSecs).to.be.a('number'); expect(response.body.info.rebootRequired).to.be.a('boolean'); + expect(response.body.info.activationTime).to.be.a('boolean'); }); }); diff --git a/src/system.js b/src/system.js index f5bd04601..3d2236413 100644 --- a/src/system.js +++ b/src/system.js @@ -26,6 +26,7 @@ const apps = require('./apps.js'), debug = require('debug')('box:disks'), df = require('./df.js'), docker = require('./docker.js'), + eventlog = require('./eventlog.js'), fs = require('fs'), logs = require('./logs.js'), notifications = require('./notifications.js'), @@ -287,11 +288,14 @@ async function getInfo() { const sysVendor = safe.fs.readFileSync('/sys/devices/virtual/dmi/id/sys_vendor', 'utf8'); const productName = safe.fs.readFileSync('/sys/devices/virtual/dmi/id/product_name', 'utf8'); + const activationTime = (await eventlog.getActivationEvent())?.creationTime || null; + return { - sysVendor, - productName, + sysVendor: sysVendor.trim(), + productName: productName.trim(), uptimeSecs, - rebootRequired + rebootRequired, + activationTime }; }