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