tinyrelayfile
tinyrelay/internal/gates/import_test.go/

internal/gates/import_test.go raw
1package gates
2
3import (
4 "context"
5 "strings"
6 "testing"
7
8 "github.com/FelineStateMachine/tinyrelay/internal/event"
9 "github.com/FelineStateMachine/tinyrelay/internal/policy"
10 "github.com/FelineStateMachine/tinyrelay/internal/relay"
11)
12
13func 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}
31
32func TestNIP43RequestsRequireProtectedShape(t *testing.T) {
33 for _, tc := range []struct {
34 name string
35 kind int
36 tags [][]string
37 }{
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 string
54 kind int
55 tags [][]string
56 at int64
57 }{
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}

About

ownerc01503e8035f
visibilitypublic
headd730679639bf

Maintainers

  • c01503e8035f owner
  • ba1b5beed5b5 agent hermes

Clone

  • https://012.run/npub1cq2s86qrtadf36eqq3epm38wmhdynrrcwxf84eldk3f94dkv7ttsrulrz5/tinyrelay.git

Refs