From d13a9e5477700ae033b7a68c30b1678539cc1e69 Mon Sep 17 00:00:00 2001 From: gsovereignty Date: Mon, 29 Jul 2024 19:12:36 +0800 Subject: [PATCH] problem: we are not validating zapper pubkey --- src/components/ProductPurchases.svelte | 47 ++++++++++++++++++++++---- src/lib/event_helpers/rockets.ts | 21 +++++++++++- src/lib/helpers.ts | 20 ++++++++++- 3 files changed, 80 insertions(+), 8 deletions(-) diff --git a/src/components/ProductPurchases.svelte b/src/components/ProductPurchases.svelte index acd793b..24e04c2 100644 --- a/src/components/ProductPurchases.svelte +++ b/src/components/ProductPurchases.svelte @@ -1,12 +1,12 @@ -{#if $purchases.size > 0} - {#each $purchases as [id, purchase], _ (id)} + {#each $validatedZapsNotInRocket as [id, purchase], _ (id)} { console.log(purchase.ZapReceipt.rawEvent()); @@ -89,4 +125,3 @@ {/each} -{/if} diff --git a/src/lib/event_helpers/rockets.ts b/src/lib/event_helpers/rockets.ts index af6fc60..513464b 100644 --- a/src/lib/event_helpers/rockets.ts +++ b/src/lib/event_helpers/rockets.ts @@ -1,5 +1,6 @@ -import { NDKEvent, type NDKTag } from '@nostr-dev-kit/ndk'; +import { NDKEvent, NDKZap, type NDKTag } from '@nostr-dev-kit/ndk'; import { MapOfVotes, MeritRequest, Votes } from './merits'; +import { getAuthorizedZapper } from '@/helpers'; export class Rocket { Event: NDKEvent; @@ -337,6 +338,7 @@ export class ZapPurchase { return false; } Valid(rocket: NDKEvent): boolean { + //todo: validate zapper pubkey is from a LSP specified in rocket let valid = true; if (!this.ValidAmount(rocket)) { @@ -408,3 +410,20 @@ export function isValidUrl(string: string): boolean { export function RocketATagFilter(rocket: NDKEvent): string { return `31108:${rocket.pubkey}:${rocket.dTag}`; } + +export async function ValidateZapPublisher(rocket:NDKEvent, zap:NDKEvent):Promise { + return new Promise((resolve, reject)=>{ + getAuthorizedZapper(rocket).then(pubkey=>{ + if (pubkey == zap.pubkey) { + resolve(true) + } else { + reject() + } + }).catch(reject) + // let z = new NDKZap({ ndk: rocket.ndk!, zappedEvent: rocket, zappedUser: rocket.author }); + // z.getZapEndpoint().then(x=>{ + // console.log(x) + // resolve(true) + // }).catch(()=>{reject(false)}) + }) +} \ No newline at end of file diff --git a/src/lib/helpers.ts b/src/lib/helpers.ts index ea46464..7227511 100644 --- a/src/lib/helpers.ts +++ b/src/lib/helpers.ts @@ -1,4 +1,4 @@ -import type { NDKEvent } from '@nostr-dev-kit/ndk'; +import { NDKZap, type NDKEvent } from '@nostr-dev-kit/ndk'; export function getRocketURL(e: NDKEvent): string { let ignitionID = undefined; @@ -143,3 +143,21 @@ function convertToGitHubApiUrl(issueUrl: string): URL | null { return null; } } + +export async function getAuthorizedZapper(rocket: NDKEvent): Promise { + return new Promise((resolve, reject) => { + let z = new NDKZap({ ndk: rocket.ndk!, zappedEvent: rocket, zappedUser: rocket.author }); + z.getZapEndpoint() + .then((url) => { + if (url) { + url = url.trim().replace('/callback', ''); + fetch(url).then((result) => { + result.json().then((j) => { + resolve(j.nostrPubkey); + }).catch(reject); + }); + } else {(reject())} + }) + .catch(reject); + }); +}