Files
threshold/internal/servers/controller/handlers/options.go
T
Todd a4ea99047f Remove Prefix Id and Plugin Name fields (#1563)
* Remove Prefix Id and Plugin Name fields.  Creating catalogs now require either the plugin id or the name of the plugin resource (but not both).  Host Catalogs and Host Sets API resources now have a read only plugin field populated with plugin info.  Host Catalogs have a plugin id field as a top level field.
2021-09-24 13:16:13 -07:00

113 lines
3.3 KiB
Go

package handlers
import (
"github.com/hashicorp/boundary/internal/perms"
"github.com/hashicorp/boundary/sdk/pbs/controller/api/resources/plugins"
"github.com/hashicorp/boundary/sdk/pbs/controller/api/resources/scopes"
"google.golang.org/protobuf/types/known/structpb"
)
// GetOpts - iterate the inbound Options and return a struct
func GetOpts(opt ...Option) options {
opts := getDefaultOptions()
for _, o := range opt {
o(&opts)
}
return opts
}
// Option - how Options are passed as arguments. Some of these are used for
// types within the handlers package, and some are for handlers to re-use across
// the various handler types.
type Option func(*options)
// options = how options are represented
type options struct {
withDiscardUnknownFields bool
WithUserIsAnonymous bool
WithOutputFields *perms.OutputFieldsMap
WithScope *scopes.ScopeInfo
WithPlugin *plugins.PluginInfo
WithAuthorizedActions []string
WithAuthorizedCollectionActions map[string]*structpb.ListValue
WithManagedGroupIds []string
WithMemberIds []string
}
func getDefaultOptions() options {
return options{}
}
// WithDiscardUnknownFields provides an option to cause StructToProto to ignore
// unknown fields. This is useful in some instances when we need to unmarshal a
// value from a pb.Struct after we've added some custom extra fields.
func WithDiscardUnknownFields(discard bool) Option {
return func(o *options) {
o.withDiscardUnknownFields = discard
}
}
// DEPRECATED: Superceded by WithOutputFields. Will be removed once all handlers
// have been migrated to that.
func WithUserIsAnonymous(anonListing bool) Option {
return func(o *options) {
o.WithUserIsAnonymous = anonListing
}
}
// WithOutputFields provides an option when creating responses to only include
// specific fields
func WithOutputFields(fields *perms.OutputFieldsMap) Option {
return func(o *options) {
o.WithOutputFields = fields
}
}
// WithScope provides an option when creating responses to include the given
// scope if allowed
func WithScope(scp *scopes.ScopeInfo) Option {
return func(o *options) {
o.WithScope = scp
}
}
// WithPlugin provides an option when creating responses to include the given
// plugin if allowed
func WithPlugin(plg *plugins.PluginInfo) Option {
return func(o *options) {
o.WithPlugin = plg
}
}
// WithAuthorizedActions provides an option when creating responses to include the given
// authorized actions if allowed
func WithAuthorizedActions(acts []string) Option {
return func(o *options) {
o.WithAuthorizedActions = acts
}
}
// WithAuthorizedCollectionActions provides an option when creating responses to include the given
// authorized collection actions if allowed
func WithAuthorizedCollectionActions(colActs map[string]*structpb.ListValue) Option {
return func(o *options) {
o.WithAuthorizedCollectionActions = colActs
}
}
// WithManagedGroupIds provides an option when creating responses to include the given
// managed group IDs if allowed
func WithManagedGroupIds(ids []string) Option {
return func(o *options) {
o.WithManagedGroupIds = ids
}
}
// WithMemberIds provides an option when creating responses to include the given
// member IDs if allowed
func WithMemberIds(ids []string) Option {
return func(o *options) {
o.WithMemberIds = ids
}
}