well-goknown/nostr/policies.go

44 lines
1.2 KiB
Go
Raw Permalink Normal View History

2024-08-17 19:18:55 +00:00
package nostr
import (
"context"
"fmt"
"git.devvul.com/asara/gologger"
"git.devvul.com/asara/well-goknown/config"
"github.com/fiatjaf/khatru"
"github.com/nbd-wtf/go-nostr"
)
func RejectUnregisteredNpubs(ctx context.Context, event *nostr.Event) (reject bool, msg string) {
var err error
l := gologger.Get(config.GetConfig().LogLevel).With().Str("context", "nostr-reject-unregistered").Logger()
// always allow auth messages
if event.Kind == 22242 {
return false, ""
}
// ensure pubkey has authenticated
authenticatedUser := khatru.GetAuthed(ctx)
if authenticatedUser == "" {
l.Debug().Msgf("pubkey not authed: %s", event.PubKey)
return true, fmt.Sprintf("auth-required: interacting with this relay requires authentication")
}
npubs := []string{authenticatedUser}
// add recipients to npubs list
if event.Kind == 4 || event.Kind == 14 {
for _, npub := range event.Tags.GetAll([]string{"p"}) {
npubs = append(npubs, npub.Value())
}
}
// check if npubs are registered
if authz := checknPubsInDb(npubs); authz == false {
l.Debug().Msgf("kind: %v, pubkey: %s, error: %s", event.Kind, event.PubKey, err.Error())
return true, fmt.Sprintf("restricted: pubkey %s is not registered to any users", authenticatedUser)
}
return false, ""
}