Filter out privileged events for non-admin users, refactor IsPrivileged logic, and improve event handling with additional checks and utilities.

This commit is contained in:
2025-09-07 20:51:32 +01:00
parent 135508c390
commit f102c205f8
3 changed files with 48 additions and 5 deletions

View File

@@ -12,11 +12,14 @@ import (
"encoders.orly/envelopes/reqenvelope"
"encoders.orly/event"
"encoders.orly/filter"
"encoders.orly/hex"
"encoders.orly/kind"
"encoders.orly/reason"
"encoders.orly/tag"
"github.com/dgraph-io/badger/v4"
"lol.mleku.dev/chk"
"lol.mleku.dev/log"
utils "utils.orly"
"utils.orly/normalize"
"utils.orly/pointers"
)
@@ -68,8 +71,48 @@ func (l *Listener) HandleReq(msg []byte) (
err = nil
}
}
// todo: filter out privileged events from the results if the user is not
// authed or authed to a non-privileged pubkey.
var tmp event.S
privCheck:
for _, ev := range events {
if kind.IsPrivileged(ev.Kind) &&
accessLevel != "admin" { // admins can see all events
log.I.F("checking privileged event %s", ev.ID)
pk := l.authedPubkey.Load()
if pk == nil {
continue
}
if utils.FastEqual(ev.Pubkey, pk) {
log.I.F(
"privileged event %s is for logged in pubkey %0x", ev.ID,
pk,
)
tmp = append(tmp, ev)
continue
}
pTags := ev.Tags.GetAll([]byte("p"))
for _, pTag := range pTags {
var pt []byte
if pt, err = hex.Dec(string(pTag.Value())); chk.E(err) {
continue
}
if utils.FastEqual(pt, pk) {
log.I.F(
"privileged event %s is for logged in pubkey %0x",
ev.ID, pk,
)
tmp = append(tmp, ev)
continue privCheck
}
}
log.W.F(
"privileged event %s does not contain the logged in pubkey %0x",
ev.ID, pk,
)
} else {
tmp = append(tmp, ev)
}
}
events = tmp
seen := make(map[string]struct{})
for _, ev := range events {
// track the IDs we've sent

View File

@@ -78,9 +78,9 @@ var Privileged = []*K{
// IsPrivileged returns true if the type is the kind of message nobody else than
// the pubkeys in the event and p tags of the event are party to.
func (k *K) IsPrivileged() (is bool) {
func IsPrivileged(k uint16) (is bool) {
for i := range Privileged {
if k.Equal(Privileged[i].K) {
if k == Privileged[i].K {
return true
}
}

View File

@@ -142,7 +142,7 @@ func (k *S) Unmarshal(b []byte) (r []byte, err error) {
// be privacy protected).
func (k *S) IsPrivileged() (priv bool) {
for i := range k.K {
if k.K[i].IsPrivileged() {
if IsPrivileged(k.K[i].K) {
return true
}
}