From 87f60d953c2471a8c4c569a83d0458e285f41021 Mon Sep 17 00:00:00 2001 From: Pujit Mehrotra Date: Wed, 25 Sep 2024 10:38:42 -0400 Subject: [PATCH] fix: use correct ini encoder in notification service --- .../core/utils/files/safe-ini-serializer.ts | 21 +++++++++++++++++++ .../notifications/notifications.service.ts | 2 +- 2 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 api/src/core/utils/files/safe-ini-serializer.ts diff --git a/api/src/core/utils/files/safe-ini-serializer.ts b/api/src/core/utils/files/safe-ini-serializer.ts new file mode 100644 index 000000000..a0f0d7d62 --- /dev/null +++ b/api/src/core/utils/files/safe-ini-serializer.ts @@ -0,0 +1,21 @@ +import { Serializer } from 'multi-ini'; + +const serializer = new Serializer({ keep_quotes: false }); + +const replacer = (_, value: unknown) => { + if (typeof value === 'boolean') { + return value ? 'true' : 'false'; + } + + return value; +}; + +/** + * + * @param object Any object to serialize + * @returns String converted to ini with multi-ini, with any booleans string escaped to prevent a crash + */ +export const safelySerializeObjectToIni = (object: object): string => { + const safeObject = JSON.parse(JSON.stringify(object, replacer)); + return serializer.serialize(safeObject); +}; diff --git a/api/src/unraid-api/graph/resolvers/notifications/notifications.service.ts b/api/src/unraid-api/graph/resolvers/notifications/notifications.service.ts index 398257c1e..5cf929a5e 100644 --- a/api/src/unraid-api/graph/resolvers/notifications/notifications.service.ts +++ b/api/src/unraid-api/graph/resolvers/notifications/notifications.service.ts @@ -19,7 +19,7 @@ import { FSWatcher, watch } from 'chokidar'; import { FileLoadStatus } from '@app/store/types'; import { pubsub, PUBSUB_CHANNEL } from '@app/core/pubsub'; import { fileExists } from '@app/core/utils/files/file-exists'; -import { encode as encodeIni } from 'ini'; +import { safelySerializeObjectToIni as encodeIni } from '@app/core/utils/files/safe-ini-serializer'; @Injectable() export class NotificationsService {