Documentation
¶
Index ¶
- Constants
- Variables
- func ConfigureAuth(request *Request, path, params string) (string, string)
- func NewAdapter(client Client) framework.Adapter[Config]
- func ParseResponse(body []byte) (objects []map[string]any, nextCursor *pagination.CompositeCursor[int64], ...)
- 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 Client
- type Config
- type Datasource
- type DatasourceResponse
- type EndpointInfo
- type Entity
- type Request
- type Response
- type ResponseMetadata
Constants ¶
const ( User = "User" Group = "Group" Phone = "Phone" Endpoint = "Endpoint" RFC2822 = "Mon, 02 Jan 2006 15:04:05 -0700" )
Variables ¶
var ( // ValidEntityExternalIDs is a set of valid external IDs of entities that can be queried. // The map value is the Entity struct which contains the unique ID attribute. ValidEntityExternalIDs = map[string]Entity{ User: { // contains filtered or unexported fields }, Endpoint: { // contains filtered or unexported fields }, Group: { // contains filtered or unexported fields }, Phone: { // contains filtered or unexported fields }, } )
Functions ¶
func NewAdapter ¶
NewAdapter instantiates a new Adapter.
func ParseResponse ¶
func ParseResponse(body []byte) ( objects []map[string]any, nextCursor *pagination.CompositeCursor[int64], err *framework.Error, )
Types ¶
type Adapter ¶
type Adapter struct {
DuoClient Client
}
Adapter implements the framework.Adapter interface to query pages of objects from datasources.
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.
type Client ¶
type Client interface {
GetPage(ctx context.Context, request *Request) (*Response, *framework.Error)
}
Client is a client that allows querying the datasource which contains JSON objects.
type Config ¶
type Config struct {
// Common configuration
*config.CommonConfig
// APIVersion is the version of the Duo API to use.
APIVersion string `json:"apiVersion,omitempty"`
}
Config is the configuration passed in each GetPage calls to the adapter. Duo Adapter configuration example: nolint: godot
{
"requestTimeoutSeconds": 10,
"localTimeZoneOffset": 43200,
"apiVersion": "v1"
}
type Datasource ¶
Datasource directly implements a Client interface to allow querying an external datasource.
type DatasourceResponse ¶
type DatasourceResponse struct {
Stat *string `json:"stat"`
Metadata *ResponseMetadata `json:"metadata,omitempty"`
Objects []map[string]interface{} `json:"response"`
}
Duo API response format.
type EndpointInfo ¶
func ConstructEndpoint ¶
func ConstructEndpoint(request *Request) (*EndpointInfo, *framework.Error)
ConstructEndpoint constructs and returns the endpoint to query the datasource.
type Entity ¶
type Entity struct {
// contains filtered or unexported fields
}
Entity contains entity specific information, such as the entity's unique ID attribute and the endpoint path to query that entity.
type Request ¶
type Request struct {
// BaseURL is the Base URL of the datasource to query.
BaseURL string
// Duo application's integration key
IntegrationKey string
// Duo Admin API application's secret key.
Secret string
// 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[int64]
// APIVersion the API version to use.
APIVersion string
// 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
}
Request is a request to the datasource.
type Response ¶
type Response struct {
// StatusCode is an HTTP status code.
StatusCode int
// RetryAfterHeader is the Retry-After response HTTP header, if set.
RetryAfterHeader string
// Objects is the list of items returned by the datasource.
// 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 *pagination.CompositeCursor[int64]
}
Response is a response returned by the datasource.
type ResponseMetadata ¶
type ResponseMetadata struct {
NextOffset *int64 `json:"next_offset,omitempty"`
}
Duo API Metadata format used for pagination.