Skip to content

Commit 519d3fc

Browse files
authored
Validate event context key (#5339)
1 parent 00463a6 commit 519d3fc

File tree

8 files changed

+377
-276
lines changed

8 files changed

+377
-276
lines changed

pkg/app/pipectl/cmd/event/register.go

+18-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ package event
1717
import (
1818
"context"
1919
"fmt"
20+
"regexp"
2021

2122
"github.com/spf13/cobra"
2223
"go.uber.org/zap"
@@ -25,6 +26,8 @@ import (
2526
"github.com/pipe-cd/pipecd/pkg/cli"
2627
)
2728

29+
var eventKeyFormatRegex = regexp.MustCompile(`^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$`)
30+
2831
type register struct {
2932
root *command
3033

@@ -47,7 +50,7 @@ func newRegisterCommand(root *command) *cobra.Command {
4750
cmd.Flags().StringVar(&r.name, "name", r.name, "The name of event.")
4851
cmd.Flags().StringVar(&r.data, "data", r.data, "The string value of event data.")
4952
cmd.Flags().StringToStringVar(&r.labels, "labels", r.labels, "The list of labels for event. Format: key=value,key2=value2")
50-
cmd.Flags().StringToStringVar(&r.contexts, "contexts", r.contexts, "The list of the values for the event context. Format: key=value,key2=value2")
53+
cmd.Flags().StringToStringVar(&r.contexts, "contexts", r.contexts, "The list of the values for the event context. Format: key=value,key2=value2. The Key Format is [a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$")
5154

5255
cmd.MarkFlagRequired("name")
5356
cmd.MarkFlagRequired("data")
@@ -56,6 +59,10 @@ func newRegisterCommand(root *command) *cobra.Command {
5659
}
5760

5861
func (r *register) run(ctx context.Context, input cli.Input) error {
62+
if err := r.validateEventContexts(); err != nil {
63+
return fmt.Errorf("failed to validate event context: %w", err)
64+
}
65+
5966
cli, err := r.root.clientOptions.NewClient(ctx)
6067
if err != nil {
6168
return fmt.Errorf("failed to initialize client: %w", err)
@@ -79,3 +86,13 @@ func (r *register) run(ctx context.Context, input cli.Input) error {
7986
)
8087
return nil
8188
}
89+
90+
func (r *register) validateEventContexts() error {
91+
for key := range r.contexts {
92+
if !eventKeyFormatRegex.MatchString(key) {
93+
return fmt.Errorf("invalid format key '%s', should be ^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$", key)
94+
}
95+
}
96+
97+
return nil
98+
}

pkg/app/server/service/apiservice/service.pb.go

+247-243
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/app/server/service/apiservice/service.pb.validate.go

+49-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/app/server/service/apiservice/service.proto

+1-1
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ message RegisterEventRequest {
229229
string name = 1 [(validate.rules).string.min_len = 1];
230230
string data = 2 [(validate.rules).string.min_len = 1];
231231
map<string,string> labels = 3 [(validate.rules).map.keys.string.min_len = 1, (validate.rules).map.values.string.min_len = 1];
232-
map<string,string> contexts = 4;
232+
map<string,string> contexts = 4 [(validate.rules).map.keys.string.min_len = 1, (validate.rules).map.keys.string.pattern = "^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$", (validate.rules).map.values.string.min_len = 1];
233233
}
234234

235235
message RegisterEventResponse {

pkg/datastore/eventstore.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ func (s *eventStore) Add(ctx context.Context, e model.Event) error {
101101
e.UpdatedAt = now
102102
}
103103
if err := e.Validate(); err != nil {
104-
return err
104+
return fmt.Errorf("failed to validate event: %w: %w", ErrInvalidArgument, err)
105105
}
106106
return s.ds.Create(ctx, s.col, e.Id, &e)
107107
}

pkg/model/event.pb.go

+31-27
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/model/event.pb.validate.go

+28-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/model/event.proto

+2-1
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,10 @@ message Event {
4646
EventStatus status = 8 [(validate.rules).enum.defined_only = true];
4747
string status_description = 9;
4848
// The key/value pairs that are attached to event.
49+
// The key is like 'test-hoge-fuga'
4950
// This is intended to add more information from event trigger side.
5051
// E.g. send the app code commit hash to Deployment.
51-
map<string,string> contexts = 10;
52+
map<string,string> contexts = 10 [(validate.rules).map.keys.string.pattern = "^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$"];
5253

5354
// Unix time when the event was handled.
5455
int64 handled_at = 13;

0 commit comments

Comments
 (0)