Documentation
¶
Index ¶
- Constants
- Variables
- func ConstructEndpoint(request *Request) string
- func NewAdapter(client Client) framework.Adapter[Config]
- func ParseResponse(body []byte) (objects []map[string]any, nextCursor *string, err *framework.Error)
- type Adapter
- func (a *Adapter) GetPage(ctx context.Context, request *framework.Request[Config]) framework.Response
- func (a *Adapter) RequestPageFromDatasource(ctx context.Context, request *framework.Request[Config]) framework.Response
- func (a *Adapter) ValidateGetPageRequest(ctx context.Context, request *framework.Request[Config]) *framework.Error
- type Auth
- type AuthResponse
- type Client
- type Config
- type Datasource
- type DatasourceResponse
- type EntityConfig
- type Request
- type Response
Constants ¶
const ( EntityTypeHosts = "hosts" EntityTypeHostSets = "host-sets" EntityTypeCredentials = "credentials" EntityTypeCredentialLibraries = "credential-libraries" EntityTypeAccounts = "accounts" EntityTypeHostCatalogs = "host-catalogs" EntityTypeCredentialStores = "credential-stores" EntityTypeAuthMethods = "auth-methods" ParamHostCatalogID = "host_catalog_id" ParamCredentialStoreID = "credential_store_id" ParamAuthMethodID = "auth_method_id" APIVersion = "v1" )
Variables ¶
var (
CursorsWithParentEntity = map[string]struct{}{
EntityTypeAccounts: {},
EntityTypeCredentials: {},
EntityTypeCredentialLibraries: {},
EntityTypeHosts: {},
EntityTypeHostSets: {},
}
)
Functions ¶
func ConstructEndpoint ¶
ConstructEndpoint constructs and returns the endpoint to query the datasource.
func NewAdapter ¶
NewAdapter creates a new instance of the HashiCorp adapter with the provided client. It implements the framework.Adapter interface with Config type parameter.
Types ¶
type Adapter ¶
type Adapter struct {
HashicorpClient Client
SSRFValidator validation.SSRFValidator
}
Adapter implements the framework.Adapter interface to query pages of objects from datasources. It handles pagination and authentication for HashiCorp API requests.
func (*Adapter) GetPage ¶
func (a *Adapter) GetPage(ctx context.Context, request *framework.Request[Config]) framework.Response
GetPage is called by SGNL's ingestion service to query a page of objects from a datasource. It validates the request and delegates the actual data fetching to RequestPageFromDatasource.
func (*Adapter) RequestPageFromDatasource ¶
func (a *Adapter) RequestPageFromDatasource( ctx context.Context, request *framework.Request[Config], ) framework.Response
RequestPageFromDatasource handles the actual data fetching from the HashiCorp API. It processes the request configuration, handles pagination, and converts the response into the expected format for SGNL's ingestion service.
type AuthResponse ¶
type Client ¶
type Client interface {
GetPage(ctx context.Context, request *Request) (*Response, *framework.Error)
}
Client is a client that allows querying the HashiCorp datasource which contains JSON objects.
type Config ¶
type Config struct {
// Common configuration
*config.CommonConfig
AuthMethodID string `json:"authMethodId,omitempty"`
EntityConfig map[string]EntityConfig `json:"entityConfig,omitempty"`
}
type Datasource ¶
Datasource directly implements a Client interface to allow querying an external datasource.
type DatasourceResponse ¶
type EntityConfig ¶
type EntityConfig struct {
ScopeID string `json:"scopeId,omitempty"`
Filter string `json:"filter,omitempty"`
}
Config is the configuration passed in each GetPage calls to the adapter. Adapter configuration example: nolint: godot
{
"requestTimeoutSeconds": 10,
"authMethodId": "test-auth-method-id",
"entityConfig": {
"hosts": {
"scope_id": "global",
"filter": ""
}
}
}
type Request ¶
type Request struct {
// BaseURL is the Base URL of the datasource to query.
BaseURL string
// Auth is the authentication information to authenticate a request.
Auth
// PageSize is the maximum number of objects to return from the entity.
PageSize int64
// EntityExternalID is the external ID of the entity.
// The external ID should match the API's resource name.
EntityExternalID string
// Cursor identifies the first object of the page to return, as returned by
// the last request for the entity.
// nil in the request for the first page.
Cursor *pagination.CompositeCursor[string]
// Filter contains the optional filter to apply to the current request.
Filter *string
// Attributes contains the list of attributes to request along with the current request.
Attributes []*framework.AttributeConfig
// RequestTimeoutSeconds is the timeout duration for requests made to datasources.
// This should be set to the number of seconds to wait before timing out.
RequestTimeoutSeconds int
// EntityConfig is the configuration for the each entity.
EntityConfig map[string]EntityConfig
AdditionalParams map[string]string
// contains filtered or unexported fields
}
Request is a request to HashiCorp.
type Response ¶
type Response struct {
// StatusCode is an HTTP status code.
StatusCode int
// Objects is the list of
// May be empty.
Objects []map[string]any
// NextCursor is the cursor that identifies the first object of the next page.
// nil if this is the last page in this full sync.
NextCursor *string
// RetryAfter is the number of seconds to wait before retrying the request.
RetryAfterHeader string
}
Response is a response returned by the datasource.