2022-11-11 09:48:04 -03:00
|
|
|
package relayer
|
|
|
|
|
|
|
|
import (
|
2023-05-01 19:21:09 -03:00
|
|
|
"context"
|
2022-11-11 09:48:04 -03:00
|
|
|
"fmt"
|
2023-06-26 20:47:33 -03:00
|
|
|
"regexp"
|
2022-11-11 09:48:04 -03:00
|
|
|
|
2023-05-08 23:55:48 +09:00
|
|
|
"github.com/fiatjaf/relayer/v2/storage"
|
2022-11-11 09:48:04 -03:00
|
|
|
"github.com/nbd-wtf/go-nostr"
|
|
|
|
)
|
|
|
|
|
2023-06-26 20:47:33 -03:00
|
|
|
var nip20prefixmatcher = regexp.MustCompile(`^\w+: `)
|
|
|
|
|
2023-06-12 08:19:07 -03:00
|
|
|
// AddEvent has a business rule to add an event to the relayer
|
|
|
|
func AddEvent(ctx context.Context, relay Relay, evt *nostr.Event) (accepted bool, message string) {
|
|
|
|
if evt == nil {
|
|
|
|
return false, ""
|
|
|
|
}
|
|
|
|
|
2023-05-01 19:21:09 -03:00
|
|
|
store := relay.Storage(ctx)
|
2022-11-11 09:48:04 -03:00
|
|
|
advancedSaver, _ := store.(AdvancedSaver)
|
|
|
|
|
2023-06-12 08:19:07 -03:00
|
|
|
if !relay.AcceptEvent(ctx, evt) {
|
2022-12-23 15:55:52 +01:00
|
|
|
return false, "blocked: event blocked by relay"
|
2022-11-11 09:48:04 -03:00
|
|
|
}
|
|
|
|
|
|
|
|
if 20000 <= evt.Kind && evt.Kind < 30000 {
|
|
|
|
// do not store ephemeral events
|
|
|
|
} else {
|
|
|
|
if advancedSaver != nil {
|
2023-06-12 08:19:07 -03:00
|
|
|
advancedSaver.BeforeSave(ctx, evt)
|
2022-11-11 09:48:04 -03:00
|
|
|
}
|
|
|
|
|
2023-06-12 08:19:07 -03:00
|
|
|
if saveErr := store.SaveEvent(ctx, evt); saveErr != nil {
|
2022-12-23 15:55:52 +01:00
|
|
|
switch saveErr {
|
|
|
|
case storage.ErrDupEvent:
|
|
|
|
return true, saveErr.Error()
|
|
|
|
default:
|
2023-06-26 20:47:33 -03:00
|
|
|
errmsg := saveErr.Error()
|
|
|
|
if nip20prefixmatcher.MatchString(errmsg) {
|
|
|
|
return false, errmsg
|
|
|
|
} else {
|
|
|
|
return false, fmt.Sprintf("error: failed to save (%s)", errmsg)
|
|
|
|
}
|
2022-12-23 15:55:52 +01:00
|
|
|
}
|
2022-11-11 09:48:04 -03:00
|
|
|
}
|
|
|
|
|
|
|
|
if advancedSaver != nil {
|
2023-06-12 08:19:07 -03:00
|
|
|
advancedSaver.AfterSave(evt)
|
2022-11-11 09:48:04 -03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-06-12 08:19:07 -03:00
|
|
|
notifyListeners(evt)
|
2022-11-11 09:48:04 -03:00
|
|
|
|
|
|
|
return true, ""
|
|
|
|
}
|