none.go raw
1 package acl
2
3 import (
4 "next.orly.dev/app/config"
5 "next.orly.dev/pkg/nostr/encoders/bech32encoding"
6 "next.orly.dev/pkg/nostr/encoders/event"
7 "next.orly.dev/pkg/utils"
8 )
9
10 type None struct {
11 cfg *config.C
12 owners [][]byte
13 admins [][]byte
14 }
15
16 func (n *None) Configure(cfg ...any) (err error) {
17 for _, ca := range cfg {
18 switch c := ca.(type) {
19 case *config.C:
20 n.cfg = c
21 }
22 }
23 if n.cfg == nil {
24 return
25 }
26
27 // Load owners
28 for _, owner := range n.cfg.Owners {
29 if len(owner) == 0 {
30 continue
31 }
32 var pk []byte
33 if pk, err = bech32encoding.NpubOrHexToPublicKeyBinary(owner); err != nil {
34 continue
35 }
36 n.owners = append(n.owners, pk)
37 }
38
39 // Load admins
40 for _, admin := range n.cfg.Admins {
41 if len(admin) == 0 {
42 continue
43 }
44 var pk []byte
45 if pk, err = bech32encoding.NpubOrHexToPublicKeyBinary(admin); err != nil {
46 continue
47 }
48 n.admins = append(n.admins, pk)
49 }
50
51 return
52 }
53
54 func (n *None) GetAccessLevel(pub []byte, address string) (level string) {
55 // In serve mode, grant full owner access to everyone
56 if n.cfg != nil && n.cfg.ServeMode {
57 return "owner"
58 }
59
60 // Check owners first
61 for _, v := range n.owners {
62 if utils.FastEqual(v, pub) {
63 return "owner"
64 }
65 }
66
67 // Check admins
68 for _, v := range n.admins {
69 if utils.FastEqual(v, pub) {
70 return "admin"
71 }
72 }
73
74 // Default to write for everyone else
75 return "write"
76 }
77
78 func (n None) GetACLInfo() (name, description, documentation string) {
79 return "none", "no ACL", "blanket write access for all clients"
80 }
81
82 func (n None) Type() string {
83 return "none"
84 }
85
86 func (n None) CheckPolicy(ev *event.E) (allowed bool, err error) {
87 return true, nil
88 }
89
90 func (n None) Syncer() {}
91
92 func init() {
93 Registry.Register(new(None))
94 }
95