From d678f2383deca3599f9c7796a7d5068c24d2882a Mon Sep 17 00:00:00 2001 From: Rob McVey Date: Wed, 5 Sep 2018 11:58:41 -0700 Subject: [PATCH 1/2] Added ability to query chrome extensions on Device --- resolvers/Device.js | 20 ++++++++++++++++++++ schema.graphql | 11 +++++++++++ 2 files changed, 31 insertions(+) diff --git a/resolvers/Device.js b/resolvers/Device.js index cdb3a408..b4148a9a 100644 --- a/resolvers/Device.js +++ b/resolvers/Device.js @@ -77,6 +77,26 @@ const Device = { return hardwareSerial }, + async extensions (root, args, context) { + const chrome = await OSQuery.all('chrome_extensions') + const ff = await OSQuery.all('firefox_addons') + let safari = [] + if (context.platform === 'darwin') { + safari = await OSQuery.all('safari_extensions') + } + return [].concat( + chrome.map( + ({ name, version, identifier, path, author }) => ({ name, path, version, identifier, author, browser: 'chrome' }) + ), + ff.map( + ({ name, version, identifier, path, creator: author }) => ({ name, path, version, identifier, author, browser: 'firefox' }) + ), + safari.map( + ({ name, version, identifier, path, creator: author }) => ({ name, path, version, identifier, author, browser: 'safari' }) + ), + ) + }, + async applications (root, args, context) { const os = PlatformResolvers[context.platform] if ('applications' in os) { diff --git a/schema.graphql b/schema.graphql index 798ba0d0..679919df 100644 --- a/schema.graphql +++ b/schema.graphql @@ -36,6 +36,8 @@ type Device { hardwareSerial: String # installed applications applications: [Application] + # browser extensions + extensions: [Extension] # current IP addresses ipAddresses: [IpAddress] # interface_details @@ -88,6 +90,15 @@ type Application { installDate: String } +type Extension { + name: String! + path: String! + version: String! + author: String! + identifier: String! + browser: String! +} + # A DevicePolicy is a description of the desired state of a set of pre-selected device features input DevicePolicy { # current operation system version, use [semver](https://www.nodesource.com/blog/semver-a-primer/) strings to define requirement From 70f71e09dc3d41414ae0c1a3888bcbb722780a13 Mon Sep 17 00:00:00 2001 From: Rob McVey Date: Wed, 5 Sep 2018 16:27:15 -0700 Subject: [PATCH 2/2] Added specific browser enum, added ability to filter extensions by browser --- resolvers/Device.js | 43 ++++++++++++++++++++++++++++--------------- schema.graphql | 9 ++++++++- 2 files changed, 36 insertions(+), 16 deletions(-) diff --git a/resolvers/Device.js b/resolvers/Device.js index b4148a9a..8fc6fabc 100644 --- a/resolvers/Device.js +++ b/resolvers/Device.js @@ -78,23 +78,36 @@ const Device = { }, async extensions (root, args, context) { - const chrome = await OSQuery.all('chrome_extensions') - const ff = await OSQuery.all('firefox_addons') + const { browser = "all" } = args + let chrome = [] + let firefox = [] let safari = [] - if (context.platform === 'darwin') { - safari = await OSQuery.all('safari_extensions') + + if (['all', 'chrome'].includes(browser)) { + chrome = await OSQuery.all('chrome_extensions').then(results => + results.map(({ name, version, identifier, path, author }) => + ({ name, path, version, identifier, author, browser: 'chrome' }) + ) + ) + } + + if (['all', 'firefox'].includes(browser)) { + firefox = await OSQuery.all('firefox_addons').then(results => + results.map(({ name, version, identifier, path, creator: author }) => + ({ name, path, version, identifier, author, browser: 'firefox' }) + ) + ) } - return [].concat( - chrome.map( - ({ name, version, identifier, path, author }) => ({ name, path, version, identifier, author, browser: 'chrome' }) - ), - ff.map( - ({ name, version, identifier, path, creator: author }) => ({ name, path, version, identifier, author, browser: 'firefox' }) - ), - safari.map( - ({ name, version, identifier, path, creator: author }) => ({ name, path, version, identifier, author, browser: 'safari' }) - ), - ) + + if (['all', 'safari'].includes(browser)) { + safari = await OSQuery.all('safari_extensions').then(results => + results.map(({ name, version, identifier, path, creator: author }) => + ({ name, path, version, identifier, author, browser: 'safari' }) + ) + ) + } + + return chrome.concat(firefox).concat(safari) }, async applications (root, args, context) { diff --git a/schema.graphql b/schema.graphql index 679919df..45282f39 100644 --- a/schema.graphql +++ b/schema.graphql @@ -37,7 +37,7 @@ type Device { # installed applications applications: [Application] # browser extensions - extensions: [Extension] + extensions(browser: Browser): [Extension] # current IP addresses ipAddresses: [IpAddress] # interface_details @@ -251,6 +251,13 @@ input VersionBracket { nudge: Semver } +enum Browser { + chrome + firefox + safari + all +} + # possible states that a device 'feature' can be in enum FeatureState { PASS