123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- import { promises as fs } from "fs";
- import path from "path";
- import yaml from "js-yaml";
- import checkAndCopyConfig, { CONF_DIR, substituteEnvironmentVars } from "utils/config/config";
- export async function widgetsFromConfig() {
- checkAndCopyConfig("widgets.yaml");
- const widgetsYaml = path.join(CONF_DIR, "widgets.yaml");
- const rawFileContents = await fs.readFile(widgetsYaml, "utf8");
- const fileContents = substituteEnvironmentVars(rawFileContents);
- const widgets = yaml.load(fileContents);
- if (!widgets) return [];
- // map easy to write YAML objects into easy to consume JS arrays
- const widgetsArray = widgets.map((group, index) => ({
- type: Object.keys(group)[0],
- options: {
- index,
- ...group[Object.keys(group)[0]]
- },
- }));
- return widgetsArray;
- }
- export async function cleanWidgetGroups(widgets) {
- return widgets.map((widget, index) => {
- const sanitizedOptions = widget.options;
- const optionKeys = Object.keys(sanitizedOptions);
-
- // delete private options from the sanitized options
- ["username", "password", "key"].forEach((pO) => {
- if (optionKeys.includes(pO)) {
- delete sanitizedOptions[pO];
- }
- });
-
- // delete url from the sanitized options if the widget is not a search or glances widgeth
- if (widget.type !== "search" && widget.type !== "glances" && optionKeys.includes("url")) {
- delete sanitizedOptions.url;
- }
- return {
- type: widget.type,
- options: {
- index,
- ...sanitizedOptions
- },
- }
- });
- }
- export async function getPrivateWidgetOptions(type, widgetIndex) {
- const widgets = await widgetsFromConfig();
-
- const privateOptions = widgets.map((widget) => {
- const {
- index,
- url,
- username,
- password,
- key
- } = widget.options;
- return {
- type: widget.type,
- options: {
- index,
- url,
- username,
- password,
- key
- },
- }
- });
-
- return (type !== undefined && widgetIndex !== undefined) ? privateOptions.find(o => o.type === type && o.options.index === parseInt(widgetIndex, 10))?.options : privateOptions;
- }
|