Add popup confirm mode, make on-demand mean connect+get_public_key
This commit is contained in:
parent
fa4c5d3532
commit
14940a4345
1
.env
1
.env
@ -4,5 +4,4 @@ REACT_APP_WEB_PUSH_PUBKEY=BNW_39YcKbV4KunFxFhvMW5JUs8AljfFnGUeZpaerO-gwCoWyQat5o
|
|||||||
#REACT_APP_NOAUTHD_URL=http://localhost:8000
|
#REACT_APP_NOAUTHD_URL=http://localhost:8000
|
||||||
REACT_APP_NOAUTHD_URL=https://noauthd.nsec.app
|
REACT_APP_NOAUTHD_URL=https://noauthd.nsec.app
|
||||||
REACT_APP_DOMAIN=nsec.app
|
REACT_APP_DOMAIN=nsec.app
|
||||||
REACT_APP_APP_DOMAIN=use.nsec.app
|
|
||||||
REACT_APP_RELAY=wss://relay.nsec.app
|
REACT_APP_RELAY=wss://relay.nsec.app
|
@ -27,6 +27,7 @@ export const ModalConfirmConnect = () => {
|
|||||||
const [searchParams] = useSearchParams()
|
const [searchParams] = useSearchParams()
|
||||||
const appNpub = searchParams.get('appNpub') || ''
|
const appNpub = searchParams.get('appNpub') || ''
|
||||||
const pendingReqId = searchParams.get('reqId') || ''
|
const pendingReqId = searchParams.get('reqId') || ''
|
||||||
|
const isPopup = searchParams.get('popup') === 'true'
|
||||||
|
|
||||||
const triggerApp = apps.find((app) => app.appNpub === appNpub)
|
const triggerApp = apps.find((app) => app.appNpub === appNpub)
|
||||||
const { name, icon = '' } = triggerApp || {}
|
const { name, icon = '' } = triggerApp || {}
|
||||||
@ -68,17 +69,36 @@ export const ModalConfirmConnect = () => {
|
|||||||
console.log('confirmed', id, allow, remember, options)
|
console.log('confirmed', id, allow, remember, options)
|
||||||
closeModalAfterRequest()
|
closeModalAfterRequest()
|
||||||
})
|
})
|
||||||
|
if (isPopup) window.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
const allow = () => {
|
const allow = () => {
|
||||||
const options: any = {};
|
const options: any = {};
|
||||||
if (selectedActionType === ACTION_TYPE.BASIC)
|
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)
|
confirmPending(pendingReqId, true, true, options)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const disallow = () => {
|
||||||
|
confirmPending(pendingReqId, false, true)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isPopup) {
|
||||||
|
document.addEventListener('visibilitychange', function() {
|
||||||
|
if (document.visibilityState == 'hidden') {
|
||||||
|
disallow();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Modal open={isModalOpened} onClose={handleCloseModal}>
|
<Modal
|
||||||
|
open={isModalOpened}
|
||||||
|
withCloseButton={!isPopup}
|
||||||
|
onClose={!isPopup ? handleCloseModal : undefined}
|
||||||
|
>
|
||||||
<Stack gap={'1rem'} paddingTop={'1rem'}>
|
<Stack gap={'1rem'} paddingTop={'1rem'}>
|
||||||
<Stack
|
<Stack
|
||||||
direction={'row'}
|
direction={'row'}
|
||||||
@ -128,7 +148,7 @@ export const ModalConfirmConnect = () => {
|
|||||||
</StyledToggleButtonsGroup>
|
</StyledToggleButtonsGroup>
|
||||||
<Stack direction={'row'} gap={'1rem'}>
|
<Stack direction={'row'} gap={'1rem'}>
|
||||||
<StyledButton
|
<StyledButton
|
||||||
onClick={() => confirmPending(pendingReqId, false, true)}
|
onClick={disallow}
|
||||||
varianttype='secondary'
|
varianttype='secondary'
|
||||||
>
|
>
|
||||||
Disallow
|
Disallow
|
||||||
|
@ -55,6 +55,7 @@ export const ModalConfirmEvent: FC<ModalConfirmEventProps> = ({
|
|||||||
const [searchParams] = useSearchParams()
|
const [searchParams] = useSearchParams()
|
||||||
|
|
||||||
const appNpub = searchParams.get('appNpub') || ''
|
const appNpub = searchParams.get('appNpub') || ''
|
||||||
|
const isPopup = searchParams.get('popup') === 'true'
|
||||||
|
|
||||||
const { npub = '' } = useParams<{ npub: string }>()
|
const { npub = '' } = useParams<{ npub: string }>()
|
||||||
const apps = useAppSelector((state) => selectAppsByNpub(state, npub))
|
const apps = useAppSelector((state) => selectAppsByNpub(state, npub))
|
||||||
@ -118,6 +119,7 @@ export const ModalConfirmEvent: FC<ModalConfirmEventProps> = ({
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
closeModalAfterRequest()
|
closeModalAfterRequest()
|
||||||
|
if (isPopup) window.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleChangeCheckbox = (reqId: string) => () => {
|
const handleChangeCheckbox = (reqId: string) => () => {
|
||||||
@ -137,8 +139,20 @@ export const ModalConfirmEvent: FC<ModalConfirmEventProps> = ({
|
|||||||
return action
|
return action
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isPopup) {
|
||||||
|
document.addEventListener('visibilitychange', () => {
|
||||||
|
if (document.visibilityState == 'hidden') {
|
||||||
|
confirmPending(false);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Modal open={isModalOpened} onClose={handleCloseModal}>
|
<Modal
|
||||||
|
open={isModalOpened}
|
||||||
|
withCloseButton={!isPopup}
|
||||||
|
onClose={!isPopup ? handleCloseModal : undefined}
|
||||||
|
>
|
||||||
<Stack gap={'1rem'} paddingTop={'1rem'}>
|
<Stack gap={'1rem'} paddingTop={'1rem'}>
|
||||||
<Stack
|
<Stack
|
||||||
direction={'row'}
|
direction={'row'}
|
||||||
|
@ -8,7 +8,7 @@ import NDK, {
|
|||||||
NDKPrivateKeySigner,
|
NDKPrivateKeySigner,
|
||||||
NDKSigner,
|
NDKSigner,
|
||||||
} from '@nostr-dev-kit/ndk'
|
} from '@nostr-dev-kit/ndk'
|
||||||
import { NOAUTHD_URL, WEB_PUSH_PUBKEY, NIP46_RELAYS, MIN_POW, MAX_POW, KIND_RPC, APP_DOMAIN } from '../utils/consts'
|
import { NOAUTHD_URL, WEB_PUSH_PUBKEY, NIP46_RELAYS, MIN_POW, MAX_POW, KIND_RPC } from '../utils/consts'
|
||||||
import { Nip04 } from './nip04'
|
import { Nip04 } from './nip04'
|
||||||
import { getReqPerm, getShortenNpub, isPackagePerm } from '@/utils/helpers/helpers'
|
import { getReqPerm, getShortenNpub, isPackagePerm } from '@/utils/helpers/helpers'
|
||||||
import { NostrPowEvent, minePow } from './pow'
|
import { NostrPowEvent, minePow } from './pow'
|
||||||
@ -647,7 +647,6 @@ export class NoauthBackend {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// just send to db w/o waiting for it
|
// just send to db w/o waiting for it
|
||||||
// if (!PERF_TEST)
|
|
||||||
dbi.addConfirmed({
|
dbi.addConfirmed({
|
||||||
...req,
|
...req,
|
||||||
allowed: allow,
|
allowed: allow,
|
||||||
@ -664,17 +663,18 @@ export class NoauthBackend {
|
|||||||
if (index >= 0) self.confirmBuffer.splice(index, 1)
|
if (index >= 0) self.confirmBuffer.splice(index, 1)
|
||||||
|
|
||||||
if (remember) {
|
if (remember) {
|
||||||
let perm = getReqPerm(req)
|
let newPerms = [getReqPerm(req)]
|
||||||
if (allow && options && options.perm) perm = options.perm
|
if (allow && options && options.perms) newPerms = options.perms
|
||||||
|
|
||||||
await dbi.addPerm({
|
for (const p of newPerms)
|
||||||
id: req.id,
|
await dbi.addPerm({
|
||||||
npub: req.npub,
|
id: req.id,
|
||||||
appNpub: req.appNpub,
|
npub: req.npub,
|
||||||
perm,
|
appNpub: req.appNpub,
|
||||||
value: allow ? '1' : '0',
|
perm: p,
|
||||||
timestamp: Date.now(),
|
value: allow ? '1' : '0',
|
||||||
})
|
timestamp: Date.now(),
|
||||||
|
})
|
||||||
|
|
||||||
this.perms = await dbi.listPerms()
|
this.perms = await dbi.listPerms()
|
||||||
|
|
||||||
@ -689,7 +689,6 @@ export class NoauthBackend {
|
|||||||
)
|
)
|
||||||
for (const r of otherReqs) {
|
for (const r of otherReqs) {
|
||||||
const perm = this.getPerm(r.req)
|
const perm = this.getPerm(r.req)
|
||||||
// if (r.req.method === req.method) {
|
|
||||||
if (perm) {
|
if (perm) {
|
||||||
r.cb(perm === '1', false)
|
r.cb(perm === '1', false)
|
||||||
}
|
}
|
||||||
@ -728,7 +727,7 @@ export class NoauthBackend {
|
|||||||
|
|
||||||
// OAuth flow
|
// OAuth flow
|
||||||
const confirmMethod = method === 'connect' ? 'confirm-connect' : 'confirm-event'
|
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)
|
backend.rpc.sendResponse(id, remotePubkey, 'auth_url', KIND_RPC, authUrl)
|
||||||
|
|
||||||
// show notifs
|
// show notifs
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
export const NOAUTHD_URL = process.env.REACT_APP_NOAUTHD_URL
|
export const NOAUTHD_URL = process.env.REACT_APP_NOAUTHD_URL
|
||||||
export const WEB_PUSH_PUBKEY = process.env.REACT_APP_WEB_PUSH_PUBKEY
|
export const WEB_PUSH_PUBKEY = process.env.REACT_APP_WEB_PUSH_PUBKEY
|
||||||
export const DOMAIN = process.env.REACT_APP_DOMAIN
|
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 RELAY = process.env.REACT_APP_RELAY || 'wss://relay.nsec.app'
|
||||||
export const NIP46_RELAYS = [RELAY]
|
export const NIP46_RELAYS = [RELAY]
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user