From 7c39cd89602b37e007b572bac3171e547f2d5dee Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Tue, 11 Oct 2022 11:15:33 -0700 Subject: [PATCH] Private widget options API --- src/utils/config/api-response.js | 9 ++++++--- src/utils/config/config.js | 13 +++++++++++++ src/utils/config/service-helpers.js | 21 ++++++++++++++++++++- 3 files changed, 39 insertions(+), 4 deletions(-) diff --git a/src/utils/config/api-response.js b/src/utils/config/api-response.js index 809927d1..778877eb 100644 --- a/src/utils/config/api-response.js +++ b/src/utils/config/api-response.js @@ -4,7 +4,7 @@ import path from "path"; import yaml from "js-yaml"; -import checkAndCopyConfig from "utils/config/config"; +import checkAndCopyConfig, { sanitizePrivateOptions } from "utils/config/config"; import { servicesFromConfig, servicesFromDocker, cleanServiceGroups } from "utils/config/service-helpers"; export async function bookmarksResponse() { @@ -38,9 +38,12 @@ export async function widgetsResponse() { if (!widgets) return []; // map easy to write YAML objects into easy to consume JS arrays - const widgetsArray = widgets.map((group) => ({ + const widgetsArray = widgets.map((group, index) => ({ type: Object.keys(group)[0], - options: { ...group[Object.keys(group)[0]] }, + options: { + index, + ...sanitizePrivateOptions(group[Object.keys(group)[0]]) + }, })); return widgetsArray; diff --git a/src/utils/config/config.js b/src/utils/config/config.js index 16861de8..1f6d13fc 100644 --- a/src/utils/config/config.js +++ b/src/utils/config/config.js @@ -34,3 +34,16 @@ export function getSettings() { const fileContents = readFileSync(settingsYaml, "utf8"); return yaml.load(fileContents); } + +export function sanitizePrivateOptions(options, privateOnly = false) { + const privateOptions = ["url", "username", "password", "key"]; + const sanitizedOptions = {}; + Object.keys(options).forEach((key) => { + if (!privateOnly && !privateOptions.includes(key)) { + sanitizedOptions[key] = options[key]; + } else if (privateOnly && privateOptions.includes(key)) { + sanitizedOptions[key] = options[key]; + } + }); + return sanitizedOptions; +} \ No newline at end of file diff --git a/src/utils/config/service-helpers.js b/src/utils/config/service-helpers.js index 99ce34d1..ba58b991 100644 --- a/src/utils/config/service-helpers.js +++ b/src/utils/config/service-helpers.js @@ -5,7 +5,7 @@ import yaml from "js-yaml"; import Docker from "dockerode"; import * as shvl from "shvl"; -import checkAndCopyConfig from "utils/config/config"; +import checkAndCopyConfig, { sanitizePrivateOptions } from "utils/config/config"; import getDockerArguments from "utils/config/docker"; export async function servicesFromConfig() { @@ -166,3 +166,22 @@ export default async function getServiceWidget(group, service) { return false; } + +export async function getPrivateWidgetOptions(type, index) { + checkAndCopyConfig("widgets.yaml"); + + const widgetsYaml = path.join(process.cwd(), "config", "widgets.yaml"); + const fileContents = await fs.readFile(widgetsYaml, "utf8"); + const widgets = yaml.load(fileContents); + + if (!widgets) return []; + + const privateOptions = widgets.map((group, widgetIndex) => ({ + type: Object.keys(group)[0], + index: widgetIndex, + options: sanitizePrivateOptions(group[Object.keys(group)[0]], true), + })); + + return (type !== undefined && index !== undefined) ? privateOptions.find(o => o.type === type && o.index === parseInt(index, 10))?.options : privateOptions; +} + \ No newline at end of file