diff --git a/server/ui-src/components/AppSettings.vue b/server/ui-src/components/AppSettings.vue index fefe15d..526f56f 100644 --- a/server/ui-src/components/AppSettings.vue +++ b/server/ui-src/components/AppSettings.vue @@ -14,9 +14,7 @@ export default { timezones, chaosConfig: false, chaosUpdated: false, - defaultReleaseAddressesOptions: localStorage.getItem("defaultReleaseAddresses") - ? JSON.parse(localStorage.getItem("defaultReleaseAddresses")) - : [], // set with default release addresses + defaultReleaseAddressesOptions: mailbox.defaultReleaseAddresses.slice(), // set with default release addresses }; }, diff --git a/server/ui-src/stores/mailbox.js b/server/ui-src/stores/mailbox.js index 1fea4d8..63ad827 100644 --- a/server/ui-src/stores/mailbox.js +++ b/server/ui-src/stores/mailbox.js @@ -2,6 +2,21 @@ import { reactive, watch } from "vue"; +// Parse and validate a string[] from localStorage, returning [] on any invalid value. +const storageToStringArray = (key) => { + try { + const raw = localStorage.getItem(key); + if (!raw) return []; + const parsed = JSON.parse(raw); + if (Array.isArray(parsed) && parsed.every((v) => typeof v === "string")) { + return parsed; + } + } catch { + // ignore malformed JSON + } + return []; +}; + // global mailbox info export const mailbox = reactive({ total: 0, // total number of messages in database @@ -20,9 +35,7 @@ export const mailbox = reactive({ appInfo: {}, // application information uiConfig: {}, // configuration for UI lastMessage: false, // return scrolling - defaultReleaseAddresses: localStorage.getItem("defaultReleaseAddresses") - ? JSON.parse(localStorage.getItem("defaultReleaseAddresses")) - : [], // default release addresses for released messages + defaultReleaseAddresses: storageToStringArray("defaultReleaseAddresses"), // default release addresses for released messages // settings showTagColors: !localStorage.getItem("hideTagColors"),