diff --git a/app/config/config.go b/app/config/config.go index 65ec8d1..596e30f 100644 --- a/app/config/config.go +++ b/app/config/config.go @@ -29,6 +29,7 @@ type C struct { Port int `env:"ORLY_PORT" default:"3334" usage:"port to listen on"` LogLevel string `env:"ORLY_LOG_LEVEL" default:"info" usage:"relay log level: fatal error warn info debug trace"` DBLogLevel string `env:"ORLY_DB_LOG_LEVEL" default:"info" usage:"database log level: fatal error warn info debug trace"` + LogToStdout bool `env:"ORLY_LOG_TO_STDOUT" usage:"log to stdout instead of stderr"` 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"` @@ -73,6 +74,9 @@ func New() (cfg *C, err error) { PrintHelp(cfg, os.Stderr) os.Exit(0) } + if cfg.LogToStdout { + lol.Writer = os.Stdout + } lol.SetLogLevel(cfg.LogLevel) return } diff --git a/app/handle-delete.go b/app/handle-delete.go index e466eff..327b60f 100644 --- a/app/handle-delete.go +++ b/app/handle-delete.go @@ -87,10 +87,16 @@ func (l *Listener) HandleDelete(env *eventenvelope.Submission) { // if e tags are found, delete them if the author is signer, or one of // the owners is signer if utils.FastEqual(t.Key(), []byte("e")) { - var dst []byte - if _, err = hex.DecBytes(dst, t.Value()); chk.E(err) { + val := t.Value() + if len(val) == 0 { continue } + var dst []byte + if b, e := hex.Dec(string(val)); chk.E(e) { + continue + } else { + dst = b + } f := &filter.F{ Ids: tag.NewFromBytesSlice(dst), } diff --git a/app/handle-req.go b/app/handle-req.go index 90ea92c..1428412 100644 --- a/app/handle-req.go +++ b/app/handle-req.go @@ -113,8 +113,6 @@ privCheck: events = tmp seen := make(map[string]struct{}) for _, ev := range events { - // track the IDs we've sent - seen[string(ev.ID)] = struct{}{} var res *eventenvelope.Result if res, err = eventenvelope.NewResultWith( env.Subscription, ev, @@ -124,6 +122,8 @@ privCheck: if err = res.Write(l); chk.E(err) { return } + // track the IDs we've sent (use hex encoding for stable key) + seen[hex.Enc(ev.ID)] = struct{}{} } // write the EOSE to signal to the client that all events found have been // sent. @@ -143,11 +143,11 @@ privCheck: } else { // remove the IDs that we already sent var notFounds [][]byte - for _, ev := range events { - if _, ok := seen[string(ev.ID)]; ok { + for _, id := range f.Ids.T { + if _, ok := seen[hex.Enc(id)]; ok { continue } - notFounds = append(notFounds, ev.ID) + notFounds = append(notFounds, id) } // if all were found, don't add to subbedFilters if len(notFounds) == 0 { diff --git a/scripts/relaytester-test.sh b/scripts/relaytester-test.sh index e93da94..cfea322 100755 --- a/scripts/relaytester-test.sh +++ b/scripts/relaytester-test.sh @@ -8,11 +8,13 @@ if ! command -v "relay-tester" &> /dev/null; then exit fi rm -rf ~/.local/share/ORLY -export ORLY_LOG_LEVEL=off +export ORLY_LOG_LEVEL=trace +export ORLY_LOG_TO_STDOUT=true export ORLY_LISTEN=127.0.0.1 export ORLY_PORT=3334 export ORLY_IP_WHITELIST=127.0.0 -export ORLY_ADMINS=nsec12l4072hvvyjpmkyjtdxn48xf8qj299zw60u7ddg58s2aphv3rpjqtg0tvr,nsec1syvtjgqauyeezgrev5nqrp36d87apjk87043tgu2usgv8umyy6wq4yl6tu +export ORLY_ADMINS=8118b9201de133912079652601863a69fdd0cac7f3eb15a38ae410c3f364269c,57eaff2aec61241dd8925b4d3a9cc93824a2944ed3f9e6b5143c15d0dd911864 +export ORLY_ACL_MODE=none go run . & sleep 2 relay-tester ws://127.0.0.1:3334 nsec12l4072hvvyjpmkyjtdxn48xf8qj299zw60u7ddg58s2aphv3rpjqtg0tvr nsec1syvtjgqauyeezgrev5nqrp36d87apjk87043tgu2usgv8umyy6wq4yl6tu