Skip to content

Commit 03f0dcc

Browse files
authored
chore: do not validate contract on reading (#1552)
Signed-off-by: Miguel Martinez <miguel@chainloop.dev>
1 parent 5371cc3 commit 03f0dcc

4 files changed

Lines changed: 26 additions & 11 deletions

File tree

app/controlplane/pkg/biz/workflowcontract.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -476,7 +476,7 @@ func (uc *WorkflowContractUseCase) findProvider(providerName string) (*policies.
476476
// UnmarshalAndValidateRawContract Takes the raw contract + format and will unmarshal the contract and validate it
477477
func UnmarshalAndValidateRawContract(raw []byte, format unmarshal.RawFormat) (*Contract, error) {
478478
contract := &schemav1.CraftingSchema{}
479-
err := unmarshal.UnmarshalFromRaw(raw, format, contract)
479+
err := unmarshal.FromRaw(raw, format, contract, true)
480480
if err != nil {
481481
return nil, NewErrValidation(err)
482482
}

app/controlplane/pkg/data/workflowcontract.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import (
2828
"github.com/chainloop-dev/chainloop/app/controlplane/pkg/data/ent/workflow"
2929
"github.com/chainloop-dev/chainloop/app/controlplane/pkg/data/ent/workflowcontract"
3030
"github.com/chainloop-dev/chainloop/app/controlplane/pkg/data/ent/workflowcontractversion"
31+
"github.com/chainloop-dev/chainloop/app/controlplane/pkg/unmarshal"
3132
"github.com/go-kratos/kratos/v2/log"
3233
"github.com/google/uuid"
3334
"google.golang.org/protobuf/proto"
@@ -311,10 +312,12 @@ func entContractVersionToBizContractVersion(w *ent.WorkflowContractVersion) (*bi
311312
// Scenario 2: contracts that have been updated after the introduction of the raw_body field will have the raw_body field populated
312313
// but we also want to keep the Body field populated for backward compatibility
313314
} else if len(w.Body) == 0 {
314-
contract, err = biz.UnmarshalAndValidateRawContract(w.RawBody, w.RawBodyFormat)
315+
schema := &schemav1.CraftingSchema{}
316+
err := unmarshal.FromRaw(w.RawBody, w.RawBodyFormat, schema, false)
315317
if err != nil {
316318
return nil, fmt.Errorf("failed to unmarshal raw body: %w", err)
317319
}
320+
contract.Schema = schema
318321
}
319322

320323
return &biz.WorkflowContractVersion{

app/controlplane/pkg/policies/policyprovider.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ func unmarshalFromRaw(raw *RawMessage, out proto.Message) error {
191191
return fmt.Errorf("unsupported format: %s", raw.Format)
192192
}
193193

194-
err := unmarshal.UnmarshalFromRaw(raw.Body, format, out)
194+
err := unmarshal.FromRaw(raw.Body, format, out, false)
195195
if err != nil {
196196
return fmt.Errorf("error unmarshalling policy response: %w", err)
197197
}

app/controlplane/pkg/unmarshal/unmarshal.go

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,15 @@ func (RawFormat) Values() (kinds []string) {
4545
return
4646
}
4747

48-
func UnmarshalFromRaw(body []byte, format RawFormat, out proto.Message) error {
49-
validator, err := protovalidate.New()
50-
if err != nil {
51-
return fmt.Errorf("could not create validator: %w", err)
48+
func FromRaw(body []byte, format RawFormat, out proto.Message, doValidate bool) error {
49+
var validator *protovalidate.Validator
50+
var err error
51+
52+
if doValidate {
53+
validator, err = protovalidate.New()
54+
if err != nil {
55+
return fmt.Errorf("could not create validator: %w", err)
56+
}
5257
}
5358

5459
switch format {
@@ -58,7 +63,11 @@ func UnmarshalFromRaw(body []byte, format RawFormat, out proto.Message) error {
5863
}
5964
case RawFormatYAML:
6065
// protoyaml allows validating the contract while unmarshalling
61-
yamlOpts := protoyaml.UnmarshalOptions{Validator: validator}
66+
yamlOpts := protoyaml.UnmarshalOptions{}
67+
if doValidate {
68+
yamlOpts.Validator = validator
69+
}
70+
6271
if err := yamlOpts.Unmarshal(body, out); err != nil {
6372
return fmt.Errorf("error unmarshalling raw message: %w", err)
6473
}
@@ -77,10 +86,13 @@ func UnmarshalFromRaw(body []byte, format RawFormat, out proto.Message) error {
7786
return fmt.Errorf("unsupported format: %s", format)
7887
}
7988

80-
err = validator.Validate(out)
81-
if err != nil {
82-
return fmt.Errorf("error validating raw message: %w", err)
89+
if validator != nil {
90+
err = validator.Validate(out)
91+
if err != nil {
92+
return fmt.Errorf("error validating raw message: %w", err)
93+
}
8394
}
95+
8496
return nil
8597
}
8698

0 commit comments

Comments
 (0)