diff --git a/extension/common.js b/extension/common.js index 0c87043..6452f7c 100644 --- a/extension/common.js +++ b/extension/common.js @@ -81,3 +81,9 @@ export async function updatePermission(host, permission) { } browser.storage.local.set({permissions}) } + +export async function removePermissions(host) { + let {permissions = {}} = await browser.storage.local.get('permissions') + delete permissions[host] + browser.storage.local.set({permissions}) +} diff --git a/extension/options.jsx b/extension/options.jsx index a8f15ce..f571589 100644 --- a/extension/options.jsx +++ b/extension/options.jsx @@ -3,7 +3,11 @@ import React, {useState, useCallback, useEffect} from 'react' import {render} from 'react-dom' import {generatePrivateKey, nip19} from 'nostr-tools' -import {getPermissionsString, readPermissions} from './common' +import { + getPermissionsString, + readPermissions, + removePermissions +} from './common' function Options() { let [key, setKey] = useState('') @@ -34,18 +38,7 @@ function Options() { }, []) useEffect(() => { - readPermissions().then(permissions => { - setPermissions( - Object.entries(permissions).map( - ([host, {level, condition, created_at}]) => ({ - host, - level, - condition, - created_at - }) - ) - ) - }) + loadPermissions() }, []) return ( @@ -123,6 +116,7 @@ function Options() { permissions condition since + @@ -138,6 +132,11 @@ function Options() { .split('T') .join(' ')} + + + ))} @@ -216,6 +215,31 @@ function Options() { setNewRelayURL('') } + async function handleRevoke(e) { + e.preventDefault() + let host = e.target.dataset.domain + if (window.confirm(`revoke all permissions from ${host}?`)) { + await removePermissions(host) + showMessage(`removed permissions from ${host}`) + loadPermissions() + } + } + + function loadPermissions() { + readPermissions().then(permissions => { + setPermissions( + Object.entries(permissions).map( + ([host, {level, condition, created_at}]) => ({ + host, + level, + condition, + created_at + }) + ) + ) + }) + } + async function saveRelays() { await browser.storage.local.set({ relays: Object.fromEntries(