From e96f5835c4414288139173b1ba286d73152541f2 Mon Sep 17 00:00:00 2001 From: Sebastian Hildebrandt Date: Sun, 13 Jan 2019 12:02:34 +0100 Subject: [PATCH] system(), bios(), baseboard - nonroot fallback --- lib/system.js | 76 +++++++++++++++++++++++++++++++++++---------------- 1 file changed, 53 insertions(+), 23 deletions(-) diff --git a/lib/system.js b/lib/system.js index 1ac33a9..f044426 100644 --- a/lib/system.js +++ b/lib/system.js @@ -13,6 +13,7 @@ // ---------------------------------------------------------------------------------- const exec = require('child_process').exec; +const execSync = require('child_process').execSync; const fs = require('fs'); const util = require('./util'); @@ -49,12 +50,24 @@ function system(callback) { result.serial = util.getValue(lines, 'serial number'); result.uuid = util.getValue(lines, 'uuid'); result.sku = util.getValue(lines, 'sku number'); - if (result.serial.toLowerCase().indexOf('o.e.m.') !== -1) result.serial = '-'; - if (result.manufacturer.toLowerCase().indexOf('o.e.m.') !== -1) result.manufacturer = ''; - if (result.model.toLowerCase().indexOf('o.e.m.') !== -1) result.model = 'Computer'; - if (result.version.toLowerCase().indexOf('o.e.m.') !== -1) result.version = ''; - if (result.sku.toLowerCase().indexOf('o.e.m.') !== -1) result.sku = '-'; // } + // Non-Root values + const cmd = `echo -n "product_name: "; cat /sys/devices/virtual/dmi/id/product_name 2>&1; + echo -n "product_serial: "; cat /sys/devices/virtual/dmi/id/product_serial 2>&1; + echo -n "product_uuid: "; cat /sys/devices/virtual/dmi/id/product_uuid 2>&1; + echo -n "product_version: "; cat /sys/devices/virtual/dmi/id/product_version 2>&1; + echo -n "sys_vendor: "; cat /sys/devices/virtual/dmi/id/sys_vendor 2>&1;`; + lines = execSync(cmd).toString().split('\n'); + result.manufacturer = result.manufacturer === '' ? util.getValue(lines, 'sys_vendor') : result.manufacturer; + result.model = result.model === '' ? util.getValue(lines, 'product_name') : result.model; + result.version = result.version === '' ? util.getValue(lines, 'product_version') : result.version; + result.serial = result.serial === '' ? util.getValue(lines, 'product_serial') : result.serial; + result.uuid = result.uuid === '' ? util.getValue(lines, 'product_uuid') : result.uuid; + if (!result.serial || result.serial.toLowerCase().indexOf('o.e.m.') !== -1) result.serial = '-'; + if (!result.manufacturer || result.manufacturer.toLowerCase().indexOf('o.e.m.') !== -1) result.manufacturer = ''; + if (!result.model || result.model.toLowerCase().indexOf('o.e.m.') !== -1) result.model = 'Computer'; + if (!result.version || result.version.toLowerCase().indexOf('o.e.m.') !== -1) result.version = ''; + if (!result.sku || result.sku.toLowerCase().indexOf('o.e.m.') !== -1) result.sku = '-'; // detect docker if (fs.existsSync('/.dockerenv') || fs.existsSync('/.dockerinit')) { result.model = 'Docker Container'; @@ -237,14 +250,21 @@ function bios(callback) { cmd = 'dmidecode --type 0 2>/dev/null'; } exec(cmd, function (error, stdout) { - if (!error) { - let lines = stdout.toString().split('\n'); - result.vendor = util.getValue(lines, 'Vendor'); - result.version = util.getValue(lines, 'Version'); - const datetime = util.getValue(lines, 'Release Date'); - result.releaseDate = util.parseDateTime(datetime).date; - result.revision = util.getValue(lines, 'BIOS Revision'); - } + let lines = stdout.toString().split('\n'); + result.vendor = util.getValue(lines, 'Vendor'); + result.version = util.getValue(lines, 'Version'); + let datetime = util.getValue(lines, 'Release Date'); + result.releaseDate = util.parseDateTime(datetime).date; + result.revision = util.getValue(lines, 'BIOS Revision'); + // Non-Root values + const cmd = `echo -n "bios_date: "; cat /sys/devices/virtual/dmi/id/bios_date 2>&1; + echo -n "bios_vendor: "; cat /sys/devices/virtual/dmi/id/bios_vendor 2>&1; + echo -n "bios_version: "; cat /sys/devices/virtual/dmi/id/bios_version 2>&1;`; + lines = execSync(cmd).toString().split('\n'); + result.vendor = !result.vendor ? util.getValue(lines, 'bios_vendor') : result.vendor; + result.version = !result.version ? util.getValue(lines, 'bios_version') : result.version; + datetime = util.getValue(lines, 'bios_date'); + result.releaseDate = !result.releaseDate ? util.parseDateTime(datetime).date : result.releaseDate; if (callback) { callback(result); } resolve(result); @@ -321,16 +341,26 @@ function baseboard(callback) { cmd = 'dmidecode -t 2 2>/dev/null'; } exec(cmd, function (error, stdout) { - if (!error) { - let lines = stdout.toString().split('\n'); - result.manufacturer = util.getValue(lines, 'Manufacturer'); - result.model = util.getValue(lines, 'Product Name'); - result.version = util.getValue(lines, 'Version'); - result.serial = util.getValue(lines, 'Serial Number'); - result.assetTag = util.getValue(lines, 'Asset Tag'); - if (result.serial.toLowerCase().indexOf('o.e.m.') !== -1) result.serial = '-'; - if (result.assetTag.toLowerCase().indexOf('o.e.m.') !== -1) result.assetTag = '-'; - } + let lines = stdout.toString().split('\n'); + result.manufacturer = util.getValue(lines, 'Manufacturer'); + result.model = util.getValue(lines, 'Product Name'); + result.version = util.getValue(lines, 'Version'); + result.serial = util.getValue(lines, 'Serial Number'); + result.assetTag = util.getValue(lines, 'Asset Tag'); + // Non-Root values + const cmd = `echo -n "board_asset_tag: "; cat /sys/devices/virtual/dmi/id/board_asset_tag 2>&1; + echo -n "board_name: "; cat /sys/devices/virtual/dmi/id/board_name 2>&1; + echo -n "board_serial: "; cat /sys/devices/virtual/dmi/id/board_serial 2>&1; + echo -n "board_vendor: "; cat /sys/devices/virtual/dmi/id/board_vendor 2>&1; + echo -n "board_version: "; cat /sys/devices/virtual/dmi/id/board_version 2>&1;`; + lines = execSync(cmd).toString().split('\n'); + result.manufacturer = !result.manufacturer ? util.getValue(lines, 'board_vendor') : result.manufacturer; + result.model = !result.model ? util.getValue(lines, 'board_name') : result.model; + result.version = !result.version ? util.getValue(lines, 'board_version') : result.version; + result.serial = !result.serial ? util.getValue(lines, 'board_serial') : result.serial; + result.assetTag = !result.assetTag ? util.getValue(lines, 'board_asset_tag') : result.assetTag; + if (result.serial.toLowerCase().indexOf('o.e.m.') !== -1) result.serial = '-'; + if (result.assetTag.toLowerCase().indexOf('o.e.m.') !== -1) result.assetTag = '-'; if (callback) { callback(result); } resolve(result);