Remove disallow/remember on popup close, add pause before sending auth_url

This commit is contained in:
artur
2024-02-19 19:31:02 +03:00
parent ecf27d8d23
commit 3de4a508be
3 changed files with 29 additions and 15 deletions

View File

@@ -172,7 +172,9 @@ export const ModalConfirmConnect = () => {
if (isPopup) {
document.addEventListener('visibilitychange', () => {
if (document.visibilityState === 'hidden') {
disallow()
// FIXME it should be 'ignore once',
// not 'disallow & remember' - this is too strict
// disallow()
}
})
}

View File

@@ -13,7 +13,7 @@ import { DOMAIN } from '@/utils/consts'
import { fetchNip05 } from '@/utils/helpers/helpers'
import { Stack, Typography, useTheme } from '@mui/material'
import { ChangeEvent, Fragment, useCallback, useEffect, useState } from 'react'
import { useParams, useSearchParams } from 'react-router-dom'
import { useParams } from 'react-router-dom'
import { useDebounce } from 'use-debounce'
import { StyledSettingContainer } from './styled'
import { SectionTitle } from '@/shared/SectionTitle/SectionTitle'
@@ -55,7 +55,7 @@ export const ModalEditName = () => {
setIsAvailable(true)
setIsChecking(false)
}
}, [debouncedName])
}, [debouncedName, npub])
useEffect(() => {
checkIsUsernameAvailable()

View File

@@ -693,7 +693,7 @@ export class NoauthBackend {
}
private getDecision(backend: Nip46Backend, req: DbPending): DECISION {
if (!(req.method in backend.handlers)) return DECISION.IGNORE;
if (!(req.method in backend.handlers)) return DECISION.IGNORE
const reqPerm = getReqPerm(req)
const appPerms = this.perms.filter((p) => p.npub === req.npub && p.appNpub === req.appNpub)
@@ -913,12 +913,22 @@ export class NoauthBackend {
const confirmMethod = isConnect ? 'confirm-connect' : 'confirm-event'
const authUrl = `${self.swg.location.origin}/key/${npub}?${confirmMethod}=true&appNpub=${appNpub}&reqId=${id}&popup=true`
console.log('sending authUrl', authUrl, 'for', req)
// NOTE: if you set 'Update on reload' in the Chrome SW console
// then this message will cause a new tab opened by the peer,
// which will cause SW (this code) to reload, to fetch
// the pending requests and to re-send this event,
// looping for 10 seconds (our request age threshold)
backend.rpc.sendResponse(id, remotePubkey, 'auth_url', KIND_RPC, authUrl)
// NOTE: don't send auth_url immediately, wait some time
// to make sure other bunkers aren't replying
setTimeout(() => {
// request still there? (not dropped by the watcher)
if (self.confirmBuffer.find((r) => r.req.id === id)) {
// NOTE: if you set 'Update on reload' in the Chrome SW console
// then this message will cause a new tab opened by the peer,
// which will cause SW (this code) to reload, to fetch
// the pending requests and to re-send this event,
// looping for 10 seconds (our request age threshold)
backend.rpc.sendResponse(id, remotePubkey, 'auth_url', KIND_RPC, authUrl)
} else {
console.log("skip sending auth_url")
}
}, 500)
// show notifs
// this.notify()
@@ -941,6 +951,8 @@ export class NoauthBackend {
const backend = new Nip46Backend(ndk, signer, this.allowPermitCallback.bind(this)) // , () => Promise.resolve(true)
const watcher = new Watcher(ndk, signer, (id) => {
// drop pending request
const index = self.confirmBuffer.findIndex((r) => r.req.id === id)
if (index >= 0) self.confirmBuffer.splice(index, 1)
dbi.removePending(id).then(() => this.updateUI())
})
this.keys.push({ npub, backend, signer, ndk, backoff, watcher })
@@ -1156,7 +1168,7 @@ export class NoauthBackend {
}
private async editName(npub: string, name: string) {
const key = this.enckeys.find((k) => k.npub == npub)
const key = this.enckeys.find((k) => k.npub === npub)
if (!key) throw new Error('Npub not found')
if (key.name) {
try {
@@ -1175,10 +1187,10 @@ export class NoauthBackend {
}
private async transferName(npub: string, name: string, newNpub: string) {
const key = this.enckeys.find(k => k.npub === npub)
if (!key) throw new Error("Npub not found")
if (!name) throw new Error("Empty name")
if (key.name !== name) throw new Error("Name changed, please reload")
const key = this.enckeys.find((k) => k.npub === npub)
if (!key) throw new Error('Npub not found')
if (!name) throw new Error('Empty name')
if (key.name !== name) throw new Error('Name changed, please reload')
await this.sendTransferNameToServer(npub, key.name, newNpub)
await dbi.editName(npub, '')
key.name = ''