diff --git a/add-event.go b/add-event.go index b2fbe5e..518fde1 100644 --- a/add-event.go +++ b/add-event.go @@ -86,7 +86,11 @@ func (rl *Relay) AddEvent(ctx context.Context, evt *nostr.Event) error { } } + for _, ovw := range rl.OverwriteResponseEvent { + ovw(ctx, evt) + } notifyListeners(evt) + return nil } diff --git a/handlers.go b/handlers.go index 4829477..81dc11a 100644 --- a/handlers.go +++ b/handlers.go @@ -124,12 +124,10 @@ func (rl *Relay) HandleWebsocket(w http.ResponseWriter, r *http.Request) { // check signature (requires the ID to be set) if ok, err := evt.CheckSignature(); err != nil { - reason := "error: failed to verify signature" - ws.WriteJSON(nostr.OKEnvelope{EventID: evt.ID, OK: false, Reason: &reason}) + ws.WriteJSON(nostr.OKEnvelope{EventID: evt.ID, OK: false, Reason: "error: failed to verify signature"}) return } else if !ok { - reason := "invalid: signature is invalid" - ws.WriteJSON(nostr.OKEnvelope{EventID: evt.ID, OK: false, Reason: &reason}) + ws.WriteJSON(nostr.OKEnvelope{EventID: evt.ID, OK: false, Reason: "invalid: signature is invalid"}) return } @@ -139,12 +137,12 @@ func (rl *Relay) HandleWebsocket(w http.ResponseWriter, r *http.Request) { } else { err = rl.AddEvent(ctx, &evt) } - var reason *string + + var reason string if err == nil { ok = true } else { - msg := err.Error() - reason = &msg + reason = err.Error() } ws.WriteJSON(nostr.OKEnvelope{EventID: evt.ID, OK: ok, Reason: reason}) case "COUNT": @@ -236,6 +234,9 @@ func (rl *Relay) HandleWebsocket(w http.ResponseWriter, r *http.Request) { go func(ch chan *nostr.Event) { for event := range ch { + for _, ovw := range rl.OverwriteResponseEvent { + ovw(ctx, event) + } ws.WriteJSON(nostr.EventEnvelope{SubscriptionID: &id, Event: *event}) } eose.Done() @@ -273,8 +274,7 @@ func (rl *Relay) HandleWebsocket(w http.ResponseWriter, r *http.Request) { ctx = context.WithValue(ctx, AUTH_CONTEXT_KEY, pubkey) ws.WriteJSON(nostr.OKEnvelope{EventID: evt.ID, OK: true}) } else { - reason := "error: failed to authenticate" - ws.WriteJSON(nostr.OKEnvelope{EventID: evt.ID, OK: false, Reason: &reason}) + ws.WriteJSON(nostr.OKEnvelope{EventID: evt.ID, OK: false, Reason: "error: failed to authenticate"}) } } } diff --git a/relay.go b/relay.go index 06c6214..e8be0dc 100644 --- a/relay.go +++ b/relay.go @@ -45,6 +45,7 @@ type Relay struct { RejectFilter []func(ctx context.Context, filter nostr.Filter) (reject bool, msg string) RejectCountFilter []func(ctx context.Context, filter nostr.Filter) (reject bool, msg string) OverwriteDeletionOutcome []func(ctx context.Context, target *nostr.Event, deletion *nostr.Event) (acceptDeletion bool, msg string) + OverwriteResponseEvent []func(ctx context.Context, event *nostr.Event) StoreEvent []func(ctx context.Context, event *nostr.Event) error DeleteEvent []func(ctx context.Context, event *nostr.Event) error QueryEvents []func(ctx context.Context, filter nostr.Filter) (chan *nostr.Event, error)