From bc7b86a242673d7831f6105d000995d9f4d63e09 Mon Sep 17 00:00:00 2001 From: vnugent Date: Sun, 19 Nov 2023 14:50:46 -0500 Subject: hasty not working update to get my workspace clean --- extension/src/features/permissions.ts | 80 +++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 extension/src/features/permissions.ts (limited to 'extension/src/features/permissions.ts') diff --git a/extension/src/features/permissions.ts b/extension/src/features/permissions.ts new file mode 100644 index 0000000..c06257b --- /dev/null +++ b/extension/src/features/permissions.ts @@ -0,0 +1,80 @@ +// Copyright (C) 2023 Vaughn Nugent +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +import { useStorageAsync } from "@vueuse/core"; +import { find, isEmpty, merge, remove } from "lodash"; +import { storage } from "webextension-polyfill"; +import { useAuthApi } from "./auth-api"; +import { useSettingsApi } from "./settings"; + +const permissions = useStorageAsync("permissions", [], storage.local); + +export const setAutoAllow = async (origin, mKind, keyId) => { + permissions.value.push({ origin, mKind, keyId, }) +} + +/** + * Determines if the user has previously allowed the origin to use the key to sign events + * of the desired kind + * @param {*} origin The site origin requesting the permission + * @param {*} mKind The kind of message being signed + * @param {*} keyId The keyId of the key being used to sign the message + */ +export const isAutoAllow = async (origin, mKind, keyId) => { + return find(permissions.value, p => p.origin === origin && p.mKind === mKind && p.keyId === keyId) !== undefined +} + +/** + * Removes the auto allow permission from the list + * @param {*} origin The site origin requesting the permission + * @param {*} mKind The message kind being signed + * @param {*} keyId The keyId of the key being used to sign the message + */ +export const removeAutoAllow = async (origin, mKind, keyId) => { + //Remove the permission from the list + remove(permissions.value, p => p.origin === origin && p.mKind === mKind && p.keyId === keyId); +} + + +export const useSitePermissions = (() => { + + const { apiCall, handleProtectedMessage } = useAuthApi(); + const { currentConfig } = useSettingsApi(); + + + const getCurrentPerms = async () => { + const { permissions } = await storage.local.get('permissions'); + + //Store a default config if none exists + if (isEmpty(permissions)) { + await storage.local.set({ siteConfig: defaultConfig }); + } + + //Merge the default config with the site config + return merge(defaultConfig, siteConfig) + } + + const onIsSiteEnabled = handleProtectedMessage(async (data) => { + + }) + + return () => { + return { + onCreateIdentity, + onUpdateIdentity + } + } + +})() \ No newline at end of file -- cgit