Introduce ACL registry with follows implementation, enhance SaveEvent for replaceable kinds, and refactor filter-based serial fetching. Update configs and dependencies.

This commit is contained in:
2025-09-07 16:13:07 +01:00
parent b6ea3d5181
commit f5a8c094e4
10 changed files with 293 additions and 17 deletions

View File

@@ -32,6 +32,8 @@ type C struct {
Pprof string `env:"ORLY_PPROF" usage:"enable pprof in modes: cpu,memory,allocation"`
IPWhitelist []string `env:"ORLY_IP_WHITELIST" usage:"comma-separated list of IP addresses to allow access from, matches on prefixes to allow private subnets, eg 10.0.0 = 10.0.0.0/8"`
Admins []string `env:"ORLY_ADMINS" usage:"comma-separated list of admin npubs"`
Owners []string `env:"ORLY_OWNERS" usage:"comma-separated list of owner npubs, who have full control of the relay for wipe and restart and other functions"`
ACLMode string `env:"ORLY_ACL_MODE" usage:"ACL mode: follows,none" default:"follows"`
}
// New creates and initializes a new configuration object for the relay

View File

@@ -3,7 +3,6 @@ package app
import (
"fmt"
database "database.orly"
"database.orly/indexes/types"
"encoders.orly/envelopes/eventenvelope"
"encoders.orly/event"
@@ -21,22 +20,11 @@ import (
func (l *Listener) GetSerialsFromFilter(f *filter.F) (
sers types.Uint40s, err error,
) {
var idxs []database.Range
if idxs, err = database.GetIndexesFromFilter(f); chk.E(err) {
return
}
for _, idx := range idxs {
var s types.Uint40s
if s, err = l.GetSerialsByRange(idx); chk.E(err) {
continue
}
sers = append(sers, s...)
}
return
return l.D.GetSerialsFromFilter(f)
}
func (l *Listener) HandleDelete(env *eventenvelope.Submission) {
log.T.C(
log.I.C(
func() string {
return fmt.Sprintf(
"delete event\n%s", env.E.Serialize(),

View File

@@ -4,6 +4,7 @@ import (
"fmt"
"strings"
acl "acl.orly"
"encoders.orly/envelopes/eventenvelope"
"encoders.orly/kind"
"lol.mleku.dev/chk"
@@ -69,9 +70,15 @@ func (l *Listener) HandleEvent(msg []byte) (err error) {
}
}
// store the event
log.I.F("saving event %0x, %s", env.E.ID, env.E.Serialize())
if _, _, err = l.SaveEvent(l.Ctx, env.E); chk.E(err) {
return
}
// if a follow list was saved, reconfigure ACLs now that it is persisted
if env.E.Kind == kind.FollowList.K {
if err = acl.Registry.Configure(); chk.E(err) {
}
}
l.publishers.Deliver(env.E)
// Send a success response storing
if err = Ok.Ok(l, env, ""); chk.E(err) {