You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
2.5 KiB
72 lines
2.5 KiB
package app |
|
|
|
import ( |
|
"git.mleku.dev/mleku/nostr/encoders/envelopes/eventenvelope" |
|
"git.mleku.dev/mleku/nostr/encoders/envelopes/okenvelope" |
|
"git.mleku.dev/mleku/nostr/encoders/reason" |
|
"next.orly.dev/pkg/event/authorization" |
|
"next.orly.dev/pkg/event/routing" |
|
"next.orly.dev/pkg/event/validation" |
|
) |
|
|
|
// sendValidationError sends an appropriate OK response for a validation failure. |
|
func (l *Listener) sendValidationError(env eventenvelope.I, result validation.Result) error { |
|
var r []byte |
|
switch result.Code { |
|
case validation.ReasonBlocked: |
|
r = reason.Blocked.F(result.Msg) |
|
case validation.ReasonInvalid: |
|
r = reason.Invalid.F(result.Msg) |
|
case validation.ReasonError: |
|
r = reason.Error.F(result.Msg) |
|
default: |
|
r = reason.Error.F(result.Msg) |
|
} |
|
return okenvelope.NewFrom(env.Id(), false, r).Write(l) |
|
} |
|
|
|
// sendAuthorizationDenied sends an appropriate OK response for an authorization denial. |
|
func (l *Listener) sendAuthorizationDenied(env eventenvelope.I, decision authorization.Decision) error { |
|
var r []byte |
|
if decision.RequireAuth { |
|
r = reason.AuthRequired.F(decision.DenyReason) |
|
} else { |
|
r = reason.Blocked.F(decision.DenyReason) |
|
} |
|
return okenvelope.NewFrom(env.Id(), false, r).Write(l) |
|
} |
|
|
|
// sendRoutingError sends an appropriate OK response for a routing error. |
|
func (l *Listener) sendRoutingError(env eventenvelope.I, result routing.Result) error { |
|
if result.Error != nil { |
|
return okenvelope.NewFrom(env.Id(), false, reason.Error.F(result.Error.Error())).Write(l) |
|
} |
|
return nil |
|
} |
|
|
|
// sendProcessingError sends an appropriate OK response for a processing failure. |
|
func (l *Listener) sendProcessingError(env eventenvelope.I, msg string) error { |
|
return okenvelope.NewFrom(env.Id(), false, reason.Error.F(msg)).Write(l) |
|
} |
|
|
|
// sendProcessingBlocked sends an appropriate OK response for a blocked event. |
|
func (l *Listener) sendProcessingBlocked(env eventenvelope.I, msg string) error { |
|
return okenvelope.NewFrom(env.Id(), false, reason.Blocked.F(msg)).Write(l) |
|
} |
|
|
|
// sendRawValidationError sends an OK response for raw JSON validation failure (before unmarshal). |
|
// Since we don't have an event ID at this point, we pass nil. |
|
func (l *Listener) sendRawValidationError(result validation.Result) error { |
|
var r []byte |
|
switch result.Code { |
|
case validation.ReasonBlocked: |
|
r = reason.Blocked.F(result.Msg) |
|
case validation.ReasonInvalid: |
|
r = reason.Invalid.F(result.Msg) |
|
case validation.ReasonError: |
|
r = reason.Error.F(result.Msg) |
|
default: |
|
r = reason.Error.F(result.Msg) |
|
} |
|
return okenvelope.NewFrom(nil, false, r).Write(l) |
|
}
|
|
|