mirror of https://github.com/hashicorp/boundary
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
287 lines
7.6 KiB
287 lines
7.6 KiB
// Copyright (c) HashiCorp, Inc.
|
|
// SPDX-License-Identifier: BUSL-1.1
|
|
|
|
package target
|
|
|
|
import (
|
|
"net"
|
|
"time"
|
|
|
|
"github.com/hashicorp/boundary/globals"
|
|
talias "github.com/hashicorp/boundary/internal/alias/target"
|
|
intglobals "github.com/hashicorp/boundary/internal/globals"
|
|
"github.com/hashicorp/boundary/internal/pagination"
|
|
"github.com/hashicorp/boundary/internal/perms"
|
|
)
|
|
|
|
// 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
|
|
WithDefaultClientPort uint32
|
|
WithLimit int
|
|
WithProjectId string
|
|
WithProjectIds []string
|
|
WithProjectName string
|
|
WithUserId string
|
|
WithType globals.Subtype
|
|
WithHostSources []string
|
|
WithCredentialLibraries []*CredentialLibrary
|
|
WithStaticCredentials []*StaticCredential
|
|
WithSessionMaxSeconds uint32
|
|
WithSessionConnectionLimit int32
|
|
WithPermissions []perms.Permission
|
|
WithPublicId string
|
|
WithWorkerFilter string
|
|
WithTestWorkerFilter string
|
|
WithEgressWorkerFilter string
|
|
WithIngressWorkerFilter string
|
|
WithTargetIds []string
|
|
WithAddress string
|
|
WithStorageBucketId string
|
|
WithEnableSessionRecording bool
|
|
WithNetResolver intglobals.NetIpResolver
|
|
WithStartPageAfterItem pagination.Item
|
|
withAliases []*talias.Alias
|
|
}
|
|
|
|
func getDefaultOptions() options {
|
|
return options{
|
|
WithName: "",
|
|
WithDescription: "",
|
|
WithLimit: 0,
|
|
WithDefaultPort: 0,
|
|
WithDefaultClientPort: 0,
|
|
WithProjectId: "",
|
|
WithProjectIds: nil,
|
|
WithProjectName: "",
|
|
WithUserId: "",
|
|
WithType: "",
|
|
WithHostSources: nil,
|
|
WithCredentialLibraries: nil,
|
|
WithStaticCredentials: nil,
|
|
WithSessionMaxSeconds: uint32((8 * time.Hour).Seconds()),
|
|
WithSessionConnectionLimit: -1,
|
|
WithPermissions: nil,
|
|
WithPublicId: "",
|
|
WithWorkerFilter: "",
|
|
WithTestWorkerFilter: "",
|
|
WithEgressWorkerFilter: "",
|
|
WithIngressWorkerFilter: "",
|
|
WithAddress: "",
|
|
WithNetResolver: net.DefaultResolver,
|
|
}
|
|
}
|
|
|
|
// 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
|
|
}
|
|
}
|
|
|
|
// WithDefaultClientPort provides an option to specify the default client listening port.
|
|
func WithDefaultClientPort(p uint32) Option {
|
|
return func(o *options) {
|
|
o.WithDefaultClientPort = p
|
|
}
|
|
}
|
|
|
|
// WithProjectId provides an option to search by a project id
|
|
func WithProjectId(projectId string) Option {
|
|
return func(o *options) {
|
|
o.WithProjectId = projectId
|
|
}
|
|
}
|
|
|
|
// WithProjectId provides an option to search by multiple project id
|
|
func WithProjectIds(projectIds []string) Option {
|
|
return func(o *options) {
|
|
o.WithProjectIds = projectIds
|
|
}
|
|
}
|
|
|
|
// WithProjectId provides an option to search by a project name
|
|
func WithProjectName(projectName string) Option {
|
|
return func(o *options) {
|
|
o.WithProjectName = projectName
|
|
}
|
|
}
|
|
|
|
// 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 globals.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
|
|
}
|
|
}
|
|
|
|
// WithStaticCredentials provides an option for providing a list of static credentials.
|
|
func WithStaticCredentials(c []*StaticCredential) Option {
|
|
return func(o *options) {
|
|
o.WithStaticCredentials = c
|
|
}
|
|
}
|
|
|
|
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
|
|
}
|
|
}
|
|
|
|
// WithTestWorkerFilter provides an optional worker filter used only in testing
|
|
func WithTestWorkerFilter(filter string) Option {
|
|
return func(o *options) {
|
|
o.WithTestWorkerFilter = filter
|
|
}
|
|
}
|
|
|
|
// WithEgressWorkerFilter provides an optional egress worker filter
|
|
func WithEgressWorkerFilter(filter string) Option {
|
|
return func(o *options) {
|
|
o.WithEgressWorkerFilter = filter
|
|
}
|
|
}
|
|
|
|
// WithIngressWorkerFilter provides an optional ingress worker filter
|
|
func WithIngressWorkerFilter(filter string) Option {
|
|
return func(o *options) {
|
|
o.WithIngressWorkerFilter = filter
|
|
}
|
|
}
|
|
|
|
// WithTargetIds provides an option to search by specific target IDs
|
|
func WithTargetIds(with []string) Option {
|
|
return func(o *options) {
|
|
o.WithTargetIds = with
|
|
}
|
|
}
|
|
|
|
// WithPermissions is used by this repo to restrict a list
|
|
// request's results based on the given set of permissions.
|
|
func WithPermissions(perms []perms.Permission) Option {
|
|
return func(o *options) {
|
|
o.WithPermissions = perms
|
|
}
|
|
}
|
|
|
|
// WithAddress provides an optional network address
|
|
func WithAddress(address string) Option {
|
|
return func(o *options) {
|
|
o.WithAddress = address
|
|
}
|
|
}
|
|
|
|
// WithEnableSessionRecording provides an option to enable session recording on
|
|
// the target
|
|
func WithEnableSessionRecording(enable bool) Option {
|
|
return func(o *options) {
|
|
o.WithEnableSessionRecording = enable
|
|
}
|
|
}
|
|
|
|
// WithStorageBucketId provides an option to set a storage bucket on a target
|
|
func WithStorageBucketId(id string) Option {
|
|
return func(o *options) {
|
|
o.WithStorageBucketId = id
|
|
}
|
|
}
|
|
|
|
// WithNetResolver provides an option to specify a custom DNS resolver
|
|
func WithNetResolver(resolver intglobals.NetIpResolver) Option {
|
|
return func(o *options) {
|
|
o.WithNetResolver = resolver
|
|
}
|
|
}
|
|
|
|
// WithStartPageAfterItem is used to paginate over the results.
|
|
// The next page will start after the provided item.
|
|
func WithStartPageAfterItem(item pagination.Item) Option {
|
|
return func(o *options) {
|
|
o.WithStartPageAfterItem = item
|
|
}
|
|
}
|
|
|
|
// WithAliases provides an option to provide aliases.
|
|
func WithAliases(in []*talias.Alias) Option {
|
|
return func(o *options) {
|
|
o.withAliases = in
|
|
}
|
|
}
|