From 14940a4345829b4152e2bf1219b35d95cf56684f Mon Sep 17 00:00:00 2001 From: artur Date: Tue, 6 Feb 2024 11:41:51 +0300 Subject: [PATCH] Add popup confirm mode, make on-demand mean connect+get_public_key --- .env | 1 - .../ModalConfirmConnect.tsx | 26 +++++++++++++++--- .../ModalConfirmEvent/ModalConfirmEvent.tsx | 16 ++++++++++- src/modules/backend.ts | 27 +++++++++---------- src/utils/consts.ts | 1 - 5 files changed, 51 insertions(+), 20 deletions(-) diff --git a/.env b/.env index a1fb25b..34178eb 100644 --- a/.env +++ b/.env @@ -4,5 +4,4 @@ REACT_APP_WEB_PUSH_PUBKEY=BNW_39YcKbV4KunFxFhvMW5JUs8AljfFnGUeZpaerO-gwCoWyQat5o #REACT_APP_NOAUTHD_URL=http://localhost:8000 REACT_APP_NOAUTHD_URL=https://noauthd.nsec.app REACT_APP_DOMAIN=nsec.app -REACT_APP_APP_DOMAIN=use.nsec.app REACT_APP_RELAY=wss://relay.nsec.app \ No newline at end of file diff --git a/src/components/Modal/ModalConfirmConnect/ModalConfirmConnect.tsx b/src/components/Modal/ModalConfirmConnect/ModalConfirmConnect.tsx index e0c9549..4377002 100644 --- a/src/components/Modal/ModalConfirmConnect/ModalConfirmConnect.tsx +++ b/src/components/Modal/ModalConfirmConnect/ModalConfirmConnect.tsx @@ -27,6 +27,7 @@ export const ModalConfirmConnect = () => { const [searchParams] = useSearchParams() const appNpub = searchParams.get('appNpub') || '' const pendingReqId = searchParams.get('reqId') || '' + const isPopup = searchParams.get('popup') === 'true' const triggerApp = apps.find((app) => app.appNpub === appNpub) const { name, icon = '' } = triggerApp || {} @@ -68,17 +69,36 @@ export const ModalConfirmConnect = () => { console.log('confirmed', id, allow, remember, options) closeModalAfterRequest() }) + if (isPopup) window.close(); } const allow = () => { const options: any = {}; if (selectedActionType === ACTION_TYPE.BASIC) - options.perm = ACTION_TYPE.BASIC; + options.perms = [ACTION_TYPE.BASIC]; + // else + // options.perms = ['connect','get_public_key']; confirmPending(pendingReqId, true, true, options) } + const disallow = () => { + confirmPending(pendingReqId, false, true) + } + + if (isPopup) { + document.addEventListener('visibilitychange', function() { + if (document.visibilityState == 'hidden') { + disallow(); + } + }) + } + return ( - + { confirmPending(pendingReqId, false, true)} + onClick={disallow} varianttype='secondary' > Disallow diff --git a/src/components/Modal/ModalConfirmEvent/ModalConfirmEvent.tsx b/src/components/Modal/ModalConfirmEvent/ModalConfirmEvent.tsx index 85ae45e..21550d2 100644 --- a/src/components/Modal/ModalConfirmEvent/ModalConfirmEvent.tsx +++ b/src/components/Modal/ModalConfirmEvent/ModalConfirmEvent.tsx @@ -55,6 +55,7 @@ export const ModalConfirmEvent: FC = ({ const [searchParams] = useSearchParams() const appNpub = searchParams.get('appNpub') || '' + const isPopup = searchParams.get('popup') === 'true' const { npub = '' } = useParams<{ npub: string }>() const apps = useAppSelector((state) => selectAppsByNpub(state, npub)) @@ -118,6 +119,7 @@ export const ModalConfirmEvent: FC = ({ }) }) closeModalAfterRequest() + if (isPopup) window.close(); } const handleChangeCheckbox = (reqId: string) => () => { @@ -137,8 +139,20 @@ export const ModalConfirmEvent: FC = ({ return action } + if (isPopup) { + document.addEventListener('visibilitychange', () => { + if (document.visibilityState == 'hidden') { + confirmPending(false); + } + }) + } + return ( - + = 0) self.confirmBuffer.splice(index, 1) if (remember) { - let perm = getReqPerm(req) - if (allow && options && options.perm) perm = options.perm + let newPerms = [getReqPerm(req)] + if (allow && options && options.perms) newPerms = options.perms - await dbi.addPerm({ - id: req.id, - npub: req.npub, - appNpub: req.appNpub, - perm, - value: allow ? '1' : '0', - timestamp: Date.now(), - }) + for (const p of newPerms) + await dbi.addPerm({ + id: req.id, + npub: req.npub, + appNpub: req.appNpub, + perm: p, + value: allow ? '1' : '0', + timestamp: Date.now(), + }) this.perms = await dbi.listPerms() @@ -689,7 +689,6 @@ export class NoauthBackend { ) for (const r of otherReqs) { const perm = this.getPerm(r.req) - // if (r.req.method === req.method) { if (perm) { r.cb(perm === '1', false) } @@ -728,7 +727,7 @@ export class NoauthBackend { // OAuth flow const confirmMethod = method === 'connect' ? 'confirm-connect' : 'confirm-event' - const authUrl = `https://${APP_DOMAIN}/key/${npub}?${confirmMethod}=true&appNpub=${appNpub}&reqId=${id}` + const authUrl = `${self.swg.location.origin}/key/${npub}?${confirmMethod}=true&appNpub=${appNpub}&reqId=${id}&popup=true` backend.rpc.sendResponse(id, remotePubkey, 'auth_url', KIND_RPC, authUrl) // show notifs diff --git a/src/utils/consts.ts b/src/utils/consts.ts index 70ffc1e..6c47555 100644 --- a/src/utils/consts.ts +++ b/src/utils/consts.ts @@ -1,7 +1,6 @@ export const NOAUTHD_URL = process.env.REACT_APP_NOAUTHD_URL export const WEB_PUSH_PUBKEY = process.env.REACT_APP_WEB_PUSH_PUBKEY export const DOMAIN = process.env.REACT_APP_DOMAIN -export const APP_DOMAIN = process.env.REACT_APP_APP_DOMAIN export const RELAY = process.env.REACT_APP_RELAY || 'wss://relay.nsec.app' export const NIP46_RELAYS = [RELAY]