Allow envoy resources to implement custom error wrappers

Custom error wrappers allow additional context for more complex
cases.
This commit is contained in:
Tomaž Jerman
2022-10-19 16:48:42 +02:00
parent a8d2fef3cc
commit e2ac9c4f3e
5 changed files with 22 additions and 2 deletions
+9
View File
@@ -62,6 +62,15 @@ func NewRbacRule(res *rbac.Rule, refRole, refRes *Ref, refResource string, refPa
return r
}
func (r *RbacRule) WrapError(act string, err error) error {
return fmt.Errorf("%s %s %v: %s",
act,
r.ResourceType(),
fmt.Sprintf("{ role: %s, resource: %s, operation: %s, access: %s }", r.RefRole.Identifiers.First(), r.RefResource, r.Res.Operation, r.Res.Access),
err,
)
}
func (r *RbacRule) Resource() interface{} {
return r.Res
}
+4
View File
@@ -16,6 +16,10 @@ type (
ReRef(old RefSet, new RefSet)
}
ErrorWrapper interface {
WrapError(act string, err error) error
}
InterfaceSet []Interface
IdentifiableInterface interface {
+7 -1
View File
@@ -216,7 +216,13 @@ func (se *storeEncoder) makePayload(ctx context.Context, s store.Storer, dal dal
}
func (se *storeEncoder) WrapError(act string, res resource.Interface, err error) error {
return fmt.Errorf("store encoder %s %s %v: %s", act, res.ResourceType(), res.Identifiers().StringSlice(), err)
if ww, ok := res.(resource.ErrorWrapper); ok {
err = ww.WrapError(act, err)
} else {
err = fmt.Errorf("%s %s %v: %s", act, res.ResourceType(), res.Identifiers().StringSlice(), err)
}
return fmt.Errorf("store encoder %s", err)
}
func resourceErrIdentifierNotUnique(i string) error {
+1 -1
View File
@@ -373,7 +373,7 @@ func (n *rbacRule) makeRBACResource(pl *payload) (string, error) {
// @todo if we wish to support rbac for external stuff, this needs to pass through.
// this also requires some tweaks in the path ID thing.
return "", fmt.Errorf("unsupported resource type '%s' for RBAC store encode", n.rule.Resource)
return "", fmt.Errorf("unsupported resource type '%s' for RBAC store encode", rt)
}
func (n *rbacRule) handleComposeRecord(pp []resource.Interface) bool {
+1
View File
@@ -46,6 +46,7 @@ func (rr rbacRuleSet) decodeRbac(a rbac.Access, rules *yaml.Node) (oo rbacRuleSe
res: &rbac.Rule{
Access: a,
Operation: op.Value,
Resource: res,
},
refRole: resource.MakeRef(types.RoleResourceType, resource.MakeIdentifiers(roleRef)),
}