Remove validate.schema as a trap door

This commit is contained in:
ekzyis 2024-07-17 03:32:00 +02:00
parent 6a5713034b
commit 5d03e08514
2 changed files with 19 additions and 23 deletions

View File

@ -19,9 +19,6 @@ export function generateSchema (wallet) {
return validator return validator
} }
// complex validation
if (field.validate.schema) return field.validate.schema
const { type: validationType, words, min, max } = field.validate const { type: validationType, words, min, max } = field.validate
let validator let validator

View File

@ -10,29 +10,28 @@ export const fields = [
label: 'connection', label: 'connection',
type: 'password', type: 'password',
validate: { validate: {
schema: string() type: 'string',
.required('required') test: async (nwcUrl, context) => {
.test(async (nwcUrl, context) => { // run validation in sequence to control order of errors
// run validation in sequence to control order of errors // inspired by https://github.com/jquense/yup/issues/851#issuecomment-1049705180
// inspired by https://github.com/jquense/yup/issues/851#issuecomment-1049705180 try {
await string().required('required').validate(nwcUrl)
await string().matches(/^nostr\+?walletconnect:\/\//, { message: 'must start with nostr+walletconnect://' }).validate(nwcUrl)
let relayUrl, walletPubkey, secret
try { try {
await string().required('required').validate(nwcUrl) ({ relayUrl, walletPubkey, secret } = parseNwcUrl(nwcUrl))
await string().matches(/^nostr\+?walletconnect:\/\//, { message: 'must start with nostr+walletconnect://' }).validate(nwcUrl) } catch {
let relayUrl, walletPubkey, secret
try {
({ relayUrl, walletPubkey, secret } = parseNwcUrl(nwcUrl))
} catch {
// invalid URL error. handle as if pubkey validation failed to not confuse user. // invalid URL error. handle as if pubkey validation failed to not confuse user.
throw new Error('pubkey must be 64 hex chars') throw new Error('pubkey must be 64 hex chars')
}
await string().required('pubkey required').trim().matches(NOSTR_PUBKEY_HEX, 'pubkey must be 64 hex chars').validate(walletPubkey)
await string().required('relay url required').trim().wss('relay must use wss://').validate(relayUrl)
await string().required('secret required').trim().matches(/^[0-9a-fA-F]{64}$/, 'secret must be 64 hex chars').validate(secret)
} catch (err) {
return context.createError({ message: err.message })
} }
return true await string().required('pubkey required').trim().matches(NOSTR_PUBKEY_HEX, 'pubkey must be 64 hex chars').validate(walletPubkey)
}) await string().required('relay url required').trim().wss('relay must use wss://').validate(relayUrl)
await string().required('secret required').trim().matches(/^[0-9a-fA-F]{64}$/, 'secret must be 64 hex chars').validate(secret)
} catch (err) {
return context.createError({ message: err.message })
}
return true
}
} }
} }
] ]