This uses the prefetch method to fetch resource IDs and validate them for authz by the user before then fetching the full list of targets.
172 lines
4.2 KiB
Go
172 lines
4.2 KiB
Go
package target
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/hashicorp/boundary/internal/types/subtypes"
|
|
)
|
|
|
|
// 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
|
|
type Option func(*options)
|
|
|
|
// options = how options are represented
|
|
type options struct {
|
|
WithName string
|
|
WithDescription string
|
|
WithDefaultPort uint32
|
|
WithLimit int
|
|
WithScopeId string
|
|
WithScopeIds []string
|
|
WithScopeName string
|
|
WithUserId string
|
|
WithType subtypes.Subtype
|
|
WithHostSources []string
|
|
WithCredentialLibraries []*CredentialLibrary
|
|
WithSessionMaxSeconds uint32
|
|
WithSessionConnectionLimit int32
|
|
WithPublicId string
|
|
WithWorkerFilter string
|
|
WithTargetIds []string
|
|
}
|
|
|
|
func getDefaultOptions() options {
|
|
return options{
|
|
WithName: "",
|
|
WithDescription: "",
|
|
WithLimit: 0,
|
|
WithDefaultPort: 0,
|
|
WithScopeId: "",
|
|
WithScopeIds: nil,
|
|
WithScopeName: "",
|
|
WithUserId: "",
|
|
WithType: "",
|
|
WithHostSources: nil,
|
|
WithCredentialLibraries: nil,
|
|
WithSessionMaxSeconds: uint32((8 * time.Hour).Seconds()),
|
|
WithSessionConnectionLimit: 1,
|
|
WithPublicId: "",
|
|
WithWorkerFilter: "",
|
|
}
|
|
}
|
|
|
|
// WithDescription provides an optional description
|
|
func WithDescription(desc string) Option {
|
|
return func(o *options) {
|
|
o.WithDescription = desc
|
|
}
|
|
}
|
|
|
|
// WithName provides an option to search by a friendly name
|
|
func WithName(name string) Option {
|
|
return func(o *options) {
|
|
o.WithName = name
|
|
}
|
|
}
|
|
|
|
// WithLimit provides an option to provide a limit. Intentionally allowing
|
|
// negative integers. If WithLimit < 0, then unlimited results are returned.
|
|
// If WithLimit == 0, then default limits are used for results.
|
|
func WithLimit(limit int) Option {
|
|
return func(o *options) {
|
|
o.WithLimit = limit
|
|
}
|
|
}
|
|
|
|
// WithDefaultPort provides an option to specify the default target port.
|
|
func WithDefaultPort(p uint32) Option {
|
|
return func(o *options) {
|
|
o.WithDefaultPort = p
|
|
}
|
|
}
|
|
|
|
// WithScopeId provides an option to search by a scope id
|
|
func WithScopeId(scopeId string) Option {
|
|
return func(o *options) {
|
|
o.WithScopeId = scopeId
|
|
}
|
|
}
|
|
|
|
// WithScopeId provides an option to search by multiple scope id
|
|
func WithScopeIds(scopeIds []string) Option {
|
|
return func(o *options) {
|
|
o.WithScopeIds = scopeIds
|
|
}
|
|
}
|
|
|
|
// WithScopeId provides an option to search by a scope name
|
|
func WithScopeName(scopeName string) Option {
|
|
return func(o *options) {
|
|
o.WithScopeName = scopeName
|
|
}
|
|
}
|
|
|
|
// WithUserId provides an option to search by a user public id
|
|
func WithUserId(userId string) Option {
|
|
return func(o *options) {
|
|
o.WithUserId = userId
|
|
}
|
|
}
|
|
|
|
// WithType provides an option to search by a target type
|
|
func WithType(t subtypes.Subtype) Option {
|
|
return func(o *options) {
|
|
o.WithType = t
|
|
}
|
|
}
|
|
|
|
// WithHostSources provides an option for providing a list of host source ids
|
|
func WithHostSources(hs []string) Option {
|
|
return func(o *options) {
|
|
o.WithHostSources = hs
|
|
}
|
|
}
|
|
|
|
// WithCredentialLibraries provides an option for providing a list of credential libraries.
|
|
func WithCredentialLibraries(cl []*CredentialLibrary) Option {
|
|
return func(o *options) {
|
|
o.WithCredentialLibraries = cl
|
|
}
|
|
}
|
|
|
|
func WithSessionMaxSeconds(dur uint32) Option {
|
|
return func(o *options) {
|
|
o.WithSessionMaxSeconds = dur
|
|
}
|
|
}
|
|
|
|
func WithSessionConnectionLimit(limit int32) Option {
|
|
return func(o *options) {
|
|
o.WithSessionConnectionLimit = limit
|
|
}
|
|
}
|
|
|
|
// WithPublicId provides an optional public id
|
|
func WithPublicId(id string) Option {
|
|
return func(o *options) {
|
|
o.WithPublicId = id
|
|
}
|
|
}
|
|
|
|
// WithWorkerFilter provides an optional worker filter
|
|
func WithWorkerFilter(filter string) Option {
|
|
return func(o *options) {
|
|
o.WithWorkerFilter = filter
|
|
}
|
|
}
|
|
|
|
// WithTargetIds provides an option to search by specific target IDs
|
|
func WithTargetIds(with []string) Option {
|
|
return func(o *options) {
|
|
o.WithTargetIds = with
|
|
}
|
|
}
|