You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
94 lines
1.7 KiB
94 lines
1.7 KiB
package acl |
|
|
|
import ( |
|
"next.orly.dev/app/config" |
|
"git.mleku.dev/mleku/nostr/encoders/bech32encoding" |
|
"git.mleku.dev/mleku/nostr/encoders/event" |
|
"next.orly.dev/pkg/utils" |
|
) |
|
|
|
type None struct { |
|
cfg *config.C |
|
owners [][]byte |
|
admins [][]byte |
|
} |
|
|
|
func (n *None) Configure(cfg ...any) (err error) { |
|
for _, ca := range cfg { |
|
switch c := ca.(type) { |
|
case *config.C: |
|
n.cfg = c |
|
} |
|
} |
|
if n.cfg == nil { |
|
return |
|
} |
|
|
|
// Load owners |
|
for _, owner := range n.cfg.Owners { |
|
if len(owner) == 0 { |
|
continue |
|
} |
|
var pk []byte |
|
if pk, err = bech32encoding.NpubOrHexToPublicKeyBinary(owner); err != nil { |
|
continue |
|
} |
|
n.owners = append(n.owners, pk) |
|
} |
|
|
|
// Load admins |
|
for _, admin := range n.cfg.Admins { |
|
if len(admin) == 0 { |
|
continue |
|
} |
|
var pk []byte |
|
if pk, err = bech32encoding.NpubOrHexToPublicKeyBinary(admin); err != nil { |
|
continue |
|
} |
|
n.admins = append(n.admins, pk) |
|
} |
|
|
|
return |
|
} |
|
|
|
func (n *None) GetAccessLevel(pub []byte, address string) (level string) { |
|
// In serve mode, grant full owner access to everyone |
|
if n.cfg != nil && n.cfg.ServeMode { |
|
return "owner" |
|
} |
|
|
|
// Check owners first |
|
for _, v := range n.owners { |
|
if utils.FastEqual(v, pub) { |
|
return "owner" |
|
} |
|
} |
|
|
|
// Check admins |
|
for _, v := range n.admins { |
|
if utils.FastEqual(v, pub) { |
|
return "admin" |
|
} |
|
} |
|
|
|
// Default to write for everyone else |
|
return "write" |
|
} |
|
|
|
func (n None) GetACLInfo() (name, description, documentation string) { |
|
return "none", "no ACL", "blanket write access for all clients" |
|
} |
|
|
|
func (n None) Type() string { |
|
return "none" |
|
} |
|
|
|
func (n None) CheckPolicy(ev *event.E) (allowed bool, err error) { |
|
return true, nil |
|
} |
|
|
|
func (n None) Syncer() {} |
|
|
|
func init() { |
|
Registry.Register(new(None)) |
|
}
|
|
|