-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathmiddleware_kind_denylist.go
More file actions
53 lines (43 loc) · 1.42 KB
/
Copy pathmiddleware_kind_denylist.go
File metadata and controls
53 lines (43 loc) · 1.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package mocrelay
import (
"context"
)
// NewKindDenylistMiddlewareBase returns a middleware base that rejects events
// whose kind is in kinds. This is useful for legal compliance (e.g., rejecting
// DM-related kinds for Japanese telecommunications law compliance).
func NewKindDenylistMiddlewareBase(kinds []int64) SimpleMiddlewareBase {
denylist := make(map[int64]struct{}, len(kinds))
for _, k := range kinds {
denylist[k] = struct{}{}
}
return &kindDenylistMiddleware{denylist: denylist}
}
type kindDenylistMiddleware struct {
denylist map[int64]struct{}
}
func (m *kindDenylistMiddleware) OnStart(ctx context.Context) (context.Context, *ServerMsg, error) {
return ctx, nil, nil
}
func (m *kindDenylistMiddleware) OnEnd(ctx context.Context) (*ServerMsg, error) {
return nil, nil
}
func (m *kindDenylistMiddleware) HandleClientMsg(ctx context.Context, msg *ClientMsg) (*ClientMsg, *ServerMsg, error) {
if msg.Type != MsgTypeEvent {
return msg, nil, nil
}
if msg.Event == nil {
return msg, nil, nil
}
if _, denied := m.denylist[msg.Event.Kind]; denied {
logRejection(ctx, "kind_denylist", "kind_blocked",
"event_id", msg.Event.ID,
"kind", msg.Event.Kind,
)
resp := NewServerOKMsg(msg.Event.ID, false, "blocked: kind not allowed")
return nil, resp, nil
}
return msg, nil, nil
}
func (m *kindDenylistMiddleware) HandleServerMsg(ctx context.Context, msg *ServerMsg) (*ServerMsg, error) {
return msg, nil
}