diff --git a/rpc/v2/environments/request.go b/rpc/v2/environments/request.go index 305760fee..85e21f8c4 100644 --- a/rpc/v2/environments/request.go +++ b/rpc/v2/environments/request.go @@ -1,4 +1,4 @@ -package configuration +package environments import ( "go.flipt.io/flipt/rpc/flipt" @@ -28,6 +28,11 @@ func (r *ListResourcesRequest) Request() []flipt.Request { return []flipt.Request{flipt.NewRequest(resourceFrom(r), flipt.ActionRead, flipt.WithNamespace(r.Namespace))} } +// GetTypeUrl delegates to the underlying payloads GetTypeUrl method. +func (r *UpdateResourceRequest) GetTypeUrl() string { + return r.Payload.GetTypeUrl() +} + func (r *UpdateResourceRequest) Request() []flipt.Request { return []flipt.Request{flipt.NewRequest(resourceFrom(r), flipt.ActionUpdate, flipt.WithNamespace(r.Namespace))} } @@ -36,40 +41,8 @@ func (r *DeleteResourceRequest) Request() []flipt.Request { return []flipt.Request{flipt.NewRequest(resourceFrom(r), flipt.ActionDelete, flipt.WithNamespace(r.Namespace))} } -func (r *ListEnvironmentsRequest) Request() []flipt.Request { - return []flipt.Request{flipt.NewRequest(flipt.ResourceEnvironment, flipt.ActionRead)} -} - -func (r *GetCurrentEnvironmentRequest) Request() []flipt.Request { - return []flipt.Request{flipt.NewRequest(flipt.ResourceEnvironment, flipt.ActionRead)} -} - -func (r *BranchEnvironmentRequest) Request() []flipt.Request { - return []flipt.Request{flipt.NewRequest(flipt.ResourceEnvironment, flipt.ActionRead)} -} - -func (r *ListEnvironmentBranchesRequest) Request() []flipt.Request { - return []flipt.Request{flipt.NewRequest(flipt.ResourceEnvironment, flipt.ActionRead)} -} - -func (r *ProposeEvironmentRequest) Request() []flipt.Request { - return []flipt.Request{flipt.NewRequest(flipt.ResourceEnvironment, flipt.ActionRead)} -} - -func (r *ListEnvironmentChangesRequest) Request() []flipt.Request { - return []flipt.Request{flipt.NewRequest(flipt.ResourceEnvironment, flipt.ActionRead)} -} - -func (r *ListCurrentEnvironmentChangesRequest) Request() []flipt.Request { - return []flipt.Request{flipt.NewRequest(flipt.ResourceEnvironment, flipt.ActionRead)} -} - -func (r *NotifySourceRequest) Request() []flipt.Request { - return []flipt.Request{} -} - func resourceFrom(t typed) flipt.Resource { - switch t.GetType() { + switch t.GetTypeUrl() { case "flipt.core.Flag": return flipt.ResourceFlag case "flipt.core.Segment": diff --git a/rpc/v2/environments/validation.go b/rpc/v2/environments/validation.go index 56c7bc6e1..60d3ee16e 100644 --- a/rpc/v2/environments/validation.go +++ b/rpc/v2/environments/validation.go @@ -1,4 +1,4 @@ -package configuration +package environments import "go.flipt.io/flipt/errors" @@ -19,7 +19,11 @@ func (r *GetResourceRequest) Validate() error { } func (r *ListResourcesRequest) Validate() error { - return requireType(r) + if err := requireType(r); err != nil { + return err + } + + return requireNamespace(r) } func (r *UpdateResourceRequest) Validate() error { @@ -31,6 +35,10 @@ func (r *DeleteResourceRequest) Validate() error { } func requireKey(k keyed) error { + if k.GetEnvironment() == "" { + return errors.ErrInvalid("environment must not be empty") + } + if k.GetKey() == "" { return errors.ErrInvalid("key must not be empty") } @@ -39,12 +47,16 @@ func requireKey(k keyed) error { } func requireType(r typed) error { - if r.GetNamespace() == "" { - return errors.ErrInvalid("namespace must not be empty") + if r.GetTypeUrl() == "" { + return errors.ErrInvalid("type must not be empty") } - if r.GetType() == "" { - return errors.ErrInvalid("type must not be empty") + return nil +} + +func requireNamespace(r namespaced) error { + if r.GetNamespace() == "" { + return errors.ErrInvalid("namespace must not be empty") } return nil @@ -52,20 +64,29 @@ func requireType(r typed) error { func requireResource(r interface { keyed + namespaced typed }) error { if err := requireType(r); err != nil { return err } + if err := requireNamespace(r); err != nil { + return err + } + return requireKey(r) } type keyed interface { + GetEnvironment() string GetKey() string } type typed interface { - GetType() string + GetTypeUrl() string +} + +type namespaced interface { GetNamespace() string }