clone

a self-hosted multitenant nostr relay with sites, file storage, git hosting, and inbox and outbox delivery

feat/ui-updates
tinyrelay / internal / gates / import_test.go
import_test.go 2.2K
1package gates23import (4 "context"5 "strings"6 "testing"78 "github.com/FelineStateMachine/tinyrelay/internal/event"9 "github.com/FelineStateMachine/tinyrelay/internal/policy"10 "github.com/FelineStateMachine/tinyrelay/internal/relay"11)1213func TestImportDoesNotApplyClientWritePolicy(t *testing.T) {14 p := policy.Defaults(strings.Repeat("a", 64))15 p.Writes = "owner"16 g, err := New(Config{Policy: func() policy.Policy { return p }})17 if err != nil {18 t.Fatal(err)19 }20 e := event.Event{CreatedAt: 10, Kind: 1, Tags: [][]string{}, Content: "pulled"}21 if err := event.Sign(&e, strings.Repeat("1", 64)); err != nil {22 t.Fatal(err)23 }24 if err := g.Import(context.Background(), e, 10); err != nil {25 t.Fatalf("import should skip client write policy: %v", err)26 }27 if err := g.Write(context.Background(), e, relay.Session{}, 10); err == nil {28 t.Fatal("client write unexpectedly accepted")29 }30}3132func TestNIP43RequestsRequireProtectedShape(t *testing.T) {33 for _, tc := range []struct {34 name string35 kind int36 tags [][]string37 }{38 {name: "join claim", kind: event.KIND_NIP43_JOIN, tags: [][]string{{"-"}, {"claim", "code"}}},39 {name: "join without claim is an access request", kind: event.KIND_NIP43_JOIN, tags: [][]string{{"-"}}},40 {name: "leave", kind: event.KIND_NIP43_LEAVE, tags: [][]string{{"-"}}},41 } {42 t.Run(tc.name, func(t *testing.T) {43 e := event.Event{CreatedAt: 10, Kind: tc.kind, Tags: tc.tags}44 if err := event.Sign(&e, strings.Repeat("1", 64)); err != nil {45 t.Fatal(err)46 }47 if err := nip43Shape(e, 10); err != nil {48 t.Fatalf("valid request rejected: %v", err)49 }50 })51 }52 for _, tc := range []struct {53 name string54 kind int55 tags [][]string56 at int6457 }{58 {name: "join outside the time window", kind: event.KIND_NIP43_JOIN, tags: [][]string{{"-"}}, at: 1000},59 {name: "leave without protection", kind: event.KIND_NIP43_LEAVE, tags: [][]string{}, at: 10},60 } {61 t.Run(tc.name, func(t *testing.T) {62 e := event.Event{CreatedAt: tc.at, Kind: tc.kind, Tags: tc.tags}63 if err := event.Sign(&e, strings.Repeat("1", 64)); err != nil {64 t.Fatal(err)65 }66 if err := nip43Shape(e, 10); err == nil {67 t.Fatal("malformed request accepted")68 }69 })70 }71}