Add popup confirm mode, make on-demand mean connect+get_public_key

This commit is contained in:
artur 2024-02-06 11:41:51 +03:00
parent fa4c5d3532
commit 14940a4345
5 changed files with 51 additions and 20 deletions

1
.env
View File

@ -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

View File

@ -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 (
<Modal open={isModalOpened} onClose={handleCloseModal}>
<Modal
open={isModalOpened}
withCloseButton={!isPopup}
onClose={!isPopup ? handleCloseModal : undefined}
>
<Stack gap={'1rem'} paddingTop={'1rem'}>
<Stack
direction={'row'}
@ -128,7 +148,7 @@ export const ModalConfirmConnect = () => {
</StyledToggleButtonsGroup>
<Stack direction={'row'} gap={'1rem'}>
<StyledButton
onClick={() => confirmPending(pendingReqId, false, true)}
onClick={disallow}
varianttype='secondary'
>
Disallow

View File

@ -55,6 +55,7 @@ export const ModalConfirmEvent: FC<ModalConfirmEventProps> = ({
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<ModalConfirmEventProps> = ({
})
})
closeModalAfterRequest()
if (isPopup) window.close();
}
const handleChangeCheckbox = (reqId: string) => () => {
@ -137,8 +139,20 @@ export const ModalConfirmEvent: FC<ModalConfirmEventProps> = ({
return action
}
if (isPopup) {
document.addEventListener('visibilitychange', () => {
if (document.visibilityState == 'hidden') {
confirmPending(false);
}
})
}
return (
<Modal open={isModalOpened} onClose={handleCloseModal}>
<Modal
open={isModalOpened}
withCloseButton={!isPopup}
onClose={!isPopup ? handleCloseModal : undefined}
>
<Stack gap={'1rem'} paddingTop={'1rem'}>
<Stack
direction={'row'}

View File

@ -8,7 +8,7 @@ import NDK, {
NDKPrivateKeySigner,
NDKSigner,
} 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 { getReqPerm, getShortenNpub, isPackagePerm } from '@/utils/helpers/helpers'
import { NostrPowEvent, minePow } from './pow'
@ -647,7 +647,6 @@ export class NoauthBackend {
}
} else {
// just send to db w/o waiting for it
// if (!PERF_TEST)
dbi.addConfirmed({
...req,
allowed: allow,
@ -664,17 +663,18 @@ export class NoauthBackend {
if (index >= 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

View File

@ -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]