refactor ok,false envelopes to be even sleeker
This commit is contained in:
@@ -19,7 +19,7 @@ import (
|
|||||||
type C struct {
|
type C struct {
|
||||||
AppName string `env:"APP_NAME" default:"realy"`
|
AppName string `env:"APP_NAME" default:"realy"`
|
||||||
Listen string `env:"LISTEN" default:"0.0.0.0" usage:"network listen address"`
|
Listen string `env:"LISTEN" default:"0.0.0.0" usage:"network listen address"`
|
||||||
Port int `env:"PORT" default:"8080" usage:"network listen port"`
|
Port int `env:"PORT" default:"3334" usage:"network listen port"`
|
||||||
Pprof bool `env:"PPROF" default:"false" usage:"enable pprof on 127.0.0.1:6060"`
|
Pprof bool `env:"PPROF" default:"false" usage:"enable pprof on 127.0.0.1:6060"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -103,6 +103,8 @@ func NewResponse() *Response { return &Response{} }
|
|||||||
// NewResponseWith creates a new Response with a provided event.T.
|
// NewResponseWith creates a new Response with a provided event.T.
|
||||||
func NewResponseWith(event *event.T) *Response { return &Response{Event: event} }
|
func NewResponseWith(event *event.T) *Response { return &Response{Event: event} }
|
||||||
|
|
||||||
|
func (en *Response) Id() []byte { return en.Event.Id }
|
||||||
|
|
||||||
// Label returns the label of a auth Response envelope.
|
// Label returns the label of a auth Response envelope.
|
||||||
func (en *Response) Label() string { return L }
|
func (en *Response) Label() string { return L }
|
||||||
|
|
||||||
|
|||||||
5
envelopes/eid/eid.go
Normal file
5
envelopes/eid/eid.go
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
package eid
|
||||||
|
|
||||||
|
type Ider interface {
|
||||||
|
Id() []byte
|
||||||
|
}
|
||||||
@@ -29,6 +29,8 @@ func NewSubmission() *Submission { return &Submission{T: &event.T{}} }
|
|||||||
// NewSubmissionWith creates a new eventenvelope.Submission with a provided event.T.
|
// NewSubmissionWith creates a new eventenvelope.Submission with a provided event.T.
|
||||||
func NewSubmissionWith(ev *event.T) *Submission { return &Submission{T: ev} }
|
func NewSubmissionWith(ev *event.T) *Submission { return &Submission{T: ev} }
|
||||||
|
|
||||||
|
func (en *Submission) Id() []byte { return en.T.Id }
|
||||||
|
|
||||||
// Label returns the label of a event eventenvelope.Submission envelope.
|
// Label returns the label of a event eventenvelope.Submission envelope.
|
||||||
func (en *Submission) Label() string { return L }
|
func (en *Submission) Label() string { return L }
|
||||||
|
|
||||||
@@ -99,6 +101,8 @@ func NewResultWith[V string | []byte](s V, ev *event.T) (res *Result, err error)
|
|||||||
return &Result{subscription.MustNew(s), ev}, nil
|
return &Result{subscription.MustNew(s), ev}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (en *Result) Id() []byte { return en.Event.Id }
|
||||||
|
|
||||||
// Label returns the label of a event eventenvelope.Result envelope.
|
// Label returns the label of a event eventenvelope.Result envelope.
|
||||||
func (en *Result) Label() string { return L }
|
func (en *Result) Label() string { return L }
|
||||||
|
|
||||||
|
|||||||
@@ -10,19 +10,17 @@ import (
|
|||||||
"realy.mleku.dev/reason"
|
"realy.mleku.dev/reason"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (a *A) HandleAuth(req []byte,
|
func (a *A) HandleAuth(b []byte, srv interfaces.Server) (msg []byte) {
|
||||||
srv interfaces.Server) (msg []byte) {
|
|
||||||
|
|
||||||
if srv.AuthRequired() || len(srv.Owners()) > 0 {
|
if srv.AuthRequired() || len(srv.Owners()) > 0 {
|
||||||
svcUrl := srv.ServiceURL(a.Listener.Req())
|
svcUrl := srv.ServiceURL(a.Listener.Req())
|
||||||
if svcUrl == "" {
|
if svcUrl == "" {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
log.T.F("received auth response,%s", req)
|
log.T.F("received auth response,%s", b)
|
||||||
var err error
|
var err error
|
||||||
var rem []byte
|
var rem []byte
|
||||||
env := authenvelope.NewResponse()
|
env := authenvelope.NewResponse()
|
||||||
if rem, err = env.Unmarshal(req); chk.E(err) {
|
if rem, err = env.Unmarshal(b); chk.E(err) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if len(rem) > 0 {
|
if len(rem) > 0 {
|
||||||
@@ -32,20 +30,17 @@ func (a *A) HandleAuth(req []byte,
|
|||||||
if valid, err = auth.Validate(env.Event, []byte(a.Listener.Challenge()),
|
if valid, err = auth.Validate(env.Event, []byte(a.Listener.Challenge()),
|
||||||
svcUrl); chk.E(err) {
|
svcUrl); chk.E(err) {
|
||||||
e := err.Error()
|
e := err.Error()
|
||||||
if err = okenvelope.NewFrom(env.Event.Id, false,
|
if err = Ok.Error(a, env, e); chk.E(err) {
|
||||||
reason.Error.F(err.Error())).Write(a.Listener); chk.E(err) {
|
return []byte(e)
|
||||||
return []byte(err.Error())
|
|
||||||
}
|
}
|
||||||
return reason.Error.F(e)
|
return reason.Error.F(e)
|
||||||
} else if !valid {
|
} else if !valid {
|
||||||
if err = okenvelope.NewFrom(env.Event.Id, false,
|
if err = Ok.Error(a, env, "failed to authenticate"); chk.E(err) {
|
||||||
reason.Error.F("failed to authenticate")).Write(a.Listener); chk.E(err) {
|
return
|
||||||
return []byte(err.Error())
|
|
||||||
}
|
}
|
||||||
return reason.Restricted.F("auth response does not validate")
|
return reason.Restricted.F("auth response does not validate")
|
||||||
} else {
|
} else {
|
||||||
if err = okenvelope.NewFrom(env.Event.Id, true,
|
if err = okenvelope.NewFrom(env.Event.Id, true).Write(a.Listener); chk.E(err) {
|
||||||
[]byte{}).Write(a.Listener); chk.E(err) {
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
log.D.F("%s authed to pubkey,%0x", a.Listener.RealRemote(), env.Event.Pubkey)
|
log.D.F("%s authed to pubkey,%0x", a.Listener.RealRemote(), env.Event.Pubkey)
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ import (
|
|||||||
"realy.mleku.dev/kind"
|
"realy.mleku.dev/kind"
|
||||||
"realy.mleku.dev/log"
|
"realy.mleku.dev/log"
|
||||||
"realy.mleku.dev/realy/interfaces"
|
"realy.mleku.dev/realy/interfaces"
|
||||||
"realy.mleku.dev/reason"
|
|
||||||
"realy.mleku.dev/sha256"
|
"realy.mleku.dev/sha256"
|
||||||
"realy.mleku.dev/store"
|
"realy.mleku.dev/store"
|
||||||
"realy.mleku.dev/tag"
|
"realy.mleku.dev/tag"
|
||||||
@@ -55,7 +54,7 @@ func (a *A) HandleEvent(c context.T, req []byte, srv interfaces.Server,
|
|||||||
var reason []byte
|
var reason []byte
|
||||||
ok, reason = srv.AddEvent(c, env.T, a.Listener.Req(), a.Listener.AuthedBytes(), remote)
|
ok, reason = srv.AddEvent(c, env.T, a.Listener.Req(), a.Listener.AuthedBytes(), remote)
|
||||||
log.T.F("event added %v", ok)
|
log.T.F("event added %v", ok)
|
||||||
if err = okenvelope.NewFrom(env.Id, ok, reason).Write(a.Listener); chk.E(err) {
|
if err = okenvelope.NewFrom(env.Id(), ok, reason).Write(a.Listener); chk.E(err) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if after != nil {
|
if after != nil {
|
||||||
@@ -65,20 +64,20 @@ func (a *A) HandleEvent(c context.T, req []byte, srv interfaces.Server,
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (a *A) VerifyEvent(env *eventenvelope.Submission) (err error) {
|
func (a *A) VerifyEvent(env *eventenvelope.Submission) (err error) {
|
||||||
if !bytes.Equal(env.GetIDBytes(), env.Id) {
|
if !bytes.Equal(env.GetIDBytes(), env.Id()) {
|
||||||
if err = a.Invalid(env, "event id is computed incorrectly"); chk.E(err) {
|
if err = Ok.Invalid(a, env, "event id is computed incorrectly"); chk.E(err) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
var ok bool
|
var ok bool
|
||||||
if ok, err = env.Verify(); chk.T(err) {
|
if ok, err = env.Verify(); chk.T(err) {
|
||||||
if err = a.Error(env, "failed to verify signature", err); chk.T(err) {
|
if err = Ok.Error(a, env, "failed to verify signature", err); chk.T(err) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
} else if !ok {
|
} else if !ok {
|
||||||
if err = a.Error(env, "signature is invalid", err); chk.T(err) {
|
if err = Ok.Error(a, env, "signature is invalid", err); chk.T(err) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
@@ -88,7 +87,7 @@ func (a *A) VerifyEvent(env *eventenvelope.Submission) (err error) {
|
|||||||
|
|
||||||
func (a *A) HandleRejectEvent(env *eventenvelope.Submission, notice string) (err error) {
|
func (a *A) HandleRejectEvent(env *eventenvelope.Submission, notice string) (err error) {
|
||||||
if strings.Contains(notice, "mute") {
|
if strings.Contains(notice, "mute") {
|
||||||
if err = a.Blocked(env, notice); chk.E(err) {
|
if err = Ok.Blocked(a, env, notice); chk.E(err) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -101,12 +100,12 @@ func (a *A) HandleRejectEvent(env *eventenvelope.Submission, notice string) (err
|
|||||||
if err = authenvelope.NewChallengeWith(a.Listener.Challenge()).Write(a.Listener); chk.T(err) {
|
if err = authenvelope.NewChallengeWith(a.Listener.Challenge()).Write(a.Listener); chk.T(err) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if err = a.AuthRequired(env, "auth required for storing events"); chk.E(err) {
|
if err = Ok.AuthRequired(a, env, "auth required for storing events"); chk.E(err) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if err = a.Invalid(env, notice); chk.E(err) {
|
if err = Ok.Invalid(a, env, notice); chk.E(err) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
@@ -125,14 +124,14 @@ func (a *A) CheckDelete(c context.T, env *eventenvelope.Submission, sto store.I)
|
|||||||
}
|
}
|
||||||
res, err = sto.QueryEvents(c, &filter.T{IDs: tag.New(evId)})
|
res, err = sto.QueryEvents(c, &filter.T{IDs: tag.New(evId)})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if err = a.Ok("failed to query for target event", reason.Error, env); chk.T(err) {
|
if err = Ok.Error(a, env, "failed to query for target event"); chk.T(err) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
for i := range res {
|
for i := range res {
|
||||||
if res[i].Kind.Equal(kind.Deletion) {
|
if res[i].Kind.Equal(kind.Deletion) {
|
||||||
if err = a.Blocked(env,
|
if err = Ok.Blocked(a, env,
|
||||||
"not processing or storing delete event containing delete event references",
|
"not processing or storing delete event containing delete event references",
|
||||||
); chk.E(err) {
|
); chk.E(err) {
|
||||||
return
|
return
|
||||||
@@ -140,7 +139,7 @@ func (a *A) CheckDelete(c context.T, env *eventenvelope.Submission, sto store.I)
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
if !bytes.Equal(res[i].Pubkey, env.T.Pubkey) {
|
if !bytes.Equal(res[i].Pubkey, env.T.Pubkey) {
|
||||||
if err = a.Blocked(env,
|
if err = Ok.Blocked(a, env,
|
||||||
"cannot delete other users' events (delete by e tag)",
|
"cannot delete other users' events (delete by e tag)",
|
||||||
); chk.E(err) {
|
); chk.E(err) {
|
||||||
return
|
return
|
||||||
@@ -155,14 +154,14 @@ func (a *A) CheckDelete(c context.T, env *eventenvelope.Submission, sto store.I)
|
|||||||
}
|
}
|
||||||
var pk []byte
|
var pk []byte
|
||||||
if pk, err = hex.DecAppend(nil, split[1]); chk.E(err) {
|
if pk, err = hex.DecAppend(nil, split[1]); chk.E(err) {
|
||||||
if err = a.Invalid(env,
|
if err = Ok.Invalid(a, env,
|
||||||
"delete event a tag pubkey value invalid: %s", t.Value()); chk.T(err) {
|
"delete event a tag pubkey value invalid: %s", t.Value()); chk.T(err) {
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
kin := ints.New(uint16(0))
|
kin := ints.New(uint16(0))
|
||||||
if _, err = kin.Unmarshal(split[0]); chk.E(err) {
|
if _, err = kin.Unmarshal(split[0]); chk.E(err) {
|
||||||
if err = a.Invalid(env,
|
if err = Ok.Invalid(a, env,
|
||||||
"delete event a tag kind value invalid: %s", t.Value()); chk.T(err) {
|
"delete event a tag kind value invalid: %s", t.Value()); chk.T(err) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -170,13 +169,13 @@ func (a *A) CheckDelete(c context.T, env *eventenvelope.Submission, sto store.I)
|
|||||||
}
|
}
|
||||||
kk := kind.New(kin.Uint16())
|
kk := kind.New(kin.Uint16())
|
||||||
if kk.Equal(kind.Deletion) {
|
if kk.Equal(kind.Deletion) {
|
||||||
if err = a.Blocked(env, "delete event kind may not be deleted"); chk.E(err) {
|
if err = Ok.Blocked(a, env, "delete event kind may not be deleted"); chk.E(err) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if !kk.IsParameterizedReplaceable() {
|
if !kk.IsParameterizedReplaceable() {
|
||||||
if err = a.Error(env,
|
if err = Ok.Error(a, env,
|
||||||
"delete tags with a tags containing non-parameterized-replaceable events cannot be processed"); chk.E(err) {
|
"delete tags with a tags containing non-parameterized-replaceable events cannot be processed"); chk.E(err) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -184,7 +183,7 @@ func (a *A) CheckDelete(c context.T, env *eventenvelope.Submission, sto store.I)
|
|||||||
}
|
}
|
||||||
if !bytes.Equal(pk, env.T.Pubkey) {
|
if !bytes.Equal(pk, env.T.Pubkey) {
|
||||||
log.I.S(pk, env.T.Pubkey, env.T)
|
log.I.S(pk, env.T.Pubkey, env.T)
|
||||||
if err = a.Blocked(env,
|
if err = Ok.Blocked(a, env,
|
||||||
"cannot delete other users' events (delete by a tag)"); chk.E(err) {
|
"cannot delete other users' events (delete by a tag)"); chk.E(err) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -195,7 +194,8 @@ func (a *A) CheckDelete(c context.T, env *eventenvelope.Submission, sto store.I)
|
|||||||
f.Authors.Append(pk)
|
f.Authors.Append(pk)
|
||||||
f.Tags.AppendTags(tag.New([]byte{'#', 'd'}, split[2]))
|
f.Tags.AppendTags(tag.New([]byte{'#', 'd'}, split[2]))
|
||||||
if res, err = sto.QueryEvents(c, f); err != nil {
|
if res, err = sto.QueryEvents(c, f); err != nil {
|
||||||
if err = a.Error(env, "failed to query for target event", err); chk.T(err) {
|
if err = Ok.Error(a, env,
|
||||||
|
"failed to query for target event"); chk.T(err) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
@@ -222,7 +222,7 @@ func (a *A) CheckDelete(c context.T, env *eventenvelope.Submission, sto store.I)
|
|||||||
}
|
}
|
||||||
res = nil
|
res = nil
|
||||||
}
|
}
|
||||||
if err = okenvelope.NewFrom(env.Id, true).Write(a.Listener); chk.E(err) {
|
if err = okenvelope.NewFrom(env.Id(), true).Write(a.Listener); chk.E(err) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
@@ -230,12 +230,12 @@ func (a *A) CheckDelete(c context.T, env *eventenvelope.Submission, sto store.I)
|
|||||||
|
|
||||||
func (a *A) ProcessDelete(c context.T, target *event.T, env *eventenvelope.Submission, sto store.I) (skip bool, err error) {
|
func (a *A) ProcessDelete(c context.T, target *event.T, env *eventenvelope.Submission, sto store.I) (skip bool, err error) {
|
||||||
if target.Kind.K == kind.Deletion.K {
|
if target.Kind.K == kind.Deletion.K {
|
||||||
if err = a.Error(env, "cannot delete delete event %s", env.Id); chk.E(err) {
|
if err = Ok.Error(a, env, "cannot delete delete event %s", env.Id); chk.E(err) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if target.CreatedAt.Int() > env.T.CreatedAt.Int() {
|
if target.CreatedAt.Int() > env.T.CreatedAt.Int() {
|
||||||
if err = a.Error(env,
|
if err = Ok.Error(a, env,
|
||||||
"not deleting\n%d%\nbecause delete event is older\n%d",
|
"not deleting\n%d%\nbecause delete event is older\n%d",
|
||||||
target.CreatedAt.Int(), env.T.CreatedAt.Int()); chk.E(err) {
|
target.CreatedAt.Int(), env.T.CreatedAt.Int()); chk.E(err) {
|
||||||
return
|
return
|
||||||
@@ -243,13 +243,13 @@ func (a *A) ProcessDelete(c context.T, target *event.T, env *eventenvelope.Submi
|
|||||||
skip = true
|
skip = true
|
||||||
}
|
}
|
||||||
if !bytes.Equal(target.Pubkey, env.Pubkey) {
|
if !bytes.Equal(target.Pubkey, env.Pubkey) {
|
||||||
if err = a.Error(env, "only author can delete event"); chk.E(err) {
|
if err = Ok.Error(a, env, "only author can delete event"); chk.E(err) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if err = sto.DeleteEvent(c, target.EventId()); chk.T(err) {
|
if err = sto.DeleteEvent(c, target.EventId()); chk.T(err) {
|
||||||
if err = a.Error(env, err.Error()); chk.T(err) {
|
if err = Ok.Error(a, env, err.Error()); chk.T(err) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -1,48 +1,51 @@
|
|||||||
package socketapi
|
package socketapi
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"realy.mleku.dev/envelopes/eventenvelope"
|
"realy.mleku.dev/envelopes/eid"
|
||||||
"realy.mleku.dev/envelopes/okenvelope"
|
"realy.mleku.dev/envelopes/okenvelope"
|
||||||
"realy.mleku.dev/reason"
|
"realy.mleku.dev/reason"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (a *A) Ok(format string, prefix reason.R, env *eventenvelope.Submission, params ...any) (err error) {
|
type OK func(a *A, env eid.Ider, format string, params ...any) (err error)
|
||||||
err = okenvelope.NewFrom(env.Id, false, prefix.F(format, params...)).Write(a.Listener)
|
|
||||||
return
|
type OKs struct {
|
||||||
|
AuthRequired OK
|
||||||
|
PoW OK
|
||||||
|
Duplicate OK
|
||||||
|
Blocked OK
|
||||||
|
RateLimited OK
|
||||||
|
Invalid OK
|
||||||
|
Error OK
|
||||||
|
Unsupported OK
|
||||||
|
Restricted OK
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *A) AuthRequired(env *eventenvelope.Submission, format string, params ...any) (err error) {
|
var Ok = OKs{
|
||||||
return okenvelope.NewFrom(env.Id, false, reason.AuthRequired.F(format, params...)).Write(a.Listener)
|
AuthRequired: func(a *A, env eid.Ider, format string, params ...any) (err error) {
|
||||||
}
|
return okenvelope.NewFrom(env.Id(), false, reason.AuthRequired.F(format, params...)).Write(a.Listener)
|
||||||
|
},
|
||||||
func (a *A) PoW(env *eventenvelope.Submission, format string, params ...any) (err error) {
|
PoW: func(a *A, env eid.Ider, format string, params ...any) (err error) {
|
||||||
return okenvelope.NewFrom(env.Id, false, reason.PoW.F(format, params...)).Write(a.Listener)
|
return okenvelope.NewFrom(env.Id(), false, reason.PoW.F(format, params...)).Write(a.Listener)
|
||||||
}
|
},
|
||||||
|
Duplicate: func(a *A, env eid.Ider, format string, params ...any) (err error) {
|
||||||
func (a *A) Duplicate(env *eventenvelope.Submission, format string, params ...any) (err error) {
|
return okenvelope.NewFrom(env.Id(), false, reason.Duplicate.F(format, params...)).Write(a.Listener)
|
||||||
return okenvelope.NewFrom(env.Id, false, reason.Duplicate.F(format, params...)).Write(a.Listener)
|
},
|
||||||
}
|
Blocked: func(a *A, env eid.Ider, format string, params ...any) (err error) {
|
||||||
|
return okenvelope.NewFrom(env.Id(), false, reason.Blocked.F(format, params...)).Write(a.Listener)
|
||||||
func (a *A) Blocked(env *eventenvelope.Submission, format string, params ...any) (err error) {
|
},
|
||||||
return okenvelope.NewFrom(env.Id, false, reason.Blocked.F(format, params...)).Write(a.Listener)
|
RateLimited: func(a *A, env eid.Ider, format string, params ...any) (err error) {
|
||||||
}
|
return okenvelope.NewFrom(env.Id(), false, reason.RateLimited.F(format, params...)).Write(a.Listener)
|
||||||
|
},
|
||||||
func (a *A) RateLimited(env *eventenvelope.Submission, format string, params ...any) (err error) {
|
Invalid: func(a *A, env eid.Ider, format string, params ...any) (err error) {
|
||||||
return okenvelope.NewFrom(env.Id, false, reason.RateLimited.F(format, params...)).Write(a.Listener)
|
return okenvelope.NewFrom(env.Id(), false, reason.Invalid.F(format, params...)).Write(a.Listener)
|
||||||
}
|
},
|
||||||
|
Error: func(a *A, env eid.Ider, format string, params ...any) (err error) {
|
||||||
func (a *A) Invalid(env *eventenvelope.Submission, format string, params ...any) (err error) {
|
return okenvelope.NewFrom(env.Id(), false, reason.Error.F(format, params...)).Write(a.Listener)
|
||||||
return okenvelope.NewFrom(env.Id, false, reason.Invalid.F(format, params...)).Write(a.Listener)
|
},
|
||||||
}
|
Unsupported: func(a *A, env eid.Ider, format string, params ...any) (err error) {
|
||||||
|
return okenvelope.NewFrom(env.Id(), false, reason.Unsupported.F(format, params...)).Write(a.Listener)
|
||||||
func (a *A) Error(env *eventenvelope.Submission, format string, params ...any) (err error) {
|
},
|
||||||
return okenvelope.NewFrom(env.Id, false, reason.Error.F(format, params...)).Write(a.Listener)
|
Restricted: func(a *A, env eid.Ider, format string, params ...any) (err error) {
|
||||||
}
|
return okenvelope.NewFrom(env.Id(), false, reason.Restricted.F(format, params...)).Write(a.Listener)
|
||||||
|
},
|
||||||
func (a *A) Unsupported(env *eventenvelope.Submission, format string, params ...any) (err error) {
|
|
||||||
return okenvelope.NewFrom(env.Id, false, reason.Unsupported.F(format, params...)).Write(a.Listener)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (a *A) Restricted(env *eventenvelope.Submission, format string, params ...any) (err error) {
|
|
||||||
return okenvelope.NewFrom(env.Id, false, reason.Restricted.F(format, params...)).Write(a.Listener)
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user