Documentation ¶
Overview ¶
Package sdk provide an abstraction for communication with API.
Index ¶
- Constants
- func IsObjectAvailable(o Object) bool
- func OktaAuthServer(oktaOrgURL, oktaAuthServer string) (*url.URL, error)
- func OktaKeysEndpoint(authServerURL *url.URL) *url.URL
- func OktaTokenEndpoint(authServerURL *url.URL) *url.URL
- type AccessTokenParser
- type AccessTokenPostRequestHook
- type AccessTokenProvider
- type AnyJSONObj
- type Client
- func (c *Client) ApplyObjects(ctx context.Context, objects []AnyJSONObj, dryRun bool) error
- func (c *Client) DeleteObjects(ctx context.Context, objects []AnyJSONObj, dryRun bool) error
- func (c *Client) DeleteObjectsByName(ctx context.Context, project string, object Object, dryRun bool, ...) error
- func (c *Client) GetAWSExternalID(ctx context.Context, project string) (string, error)
- func (c *Client) GetAgentCredentials(ctx context.Context, project, agentsName string) (creds M2MAppCredentials, err error)
- func (c *Client) GetApiURL() url.URL
- func (c *Client) GetObjects(ctx context.Context, project string, object Object, ...) ([]AnyJSONObj, error)
- func (c *Client) GetObjectsWithParams(ctx context.Context, project string, object Object, q url.Values) (response Response, err error)
- func (c *Client) PostMetrics(ctx context.Context, points influx.Points) error
- func (c *Client) SetAccessToken(token string) error
- func (c *Client) SetApiURL(u string) error
- type ClientBuilder
- func (b *ClientBuilder) Build() (*Client, error)
- func (b *ClientBuilder) WithApiURL(apiURL string) *ClientBuilder
- func (b *ClientBuilder) WithCredentials(credentials *Credentials) *ClientBuilder
- func (b *ClientBuilder) WithDefaultCredentials(oktaOrgURL, oktaAuthServer, clientID, clientSecret string) *ClientBuilder
- func (b *ClientBuilder) WithHTTPClient(client *http.Client) *ClientBuilder
- func (b *ClientBuilder) WithOfflineMode() *ClientBuilder
- func (b *ClientBuilder) WithTimeout(timeout time.Duration) *ClientBuilder
- type Credentials
- func (creds *Credentials) RefreshAccessToken(ctx context.Context) (updated bool, err error)
- func (creds *Credentials) RoundTrip(req *http.Request) (*http.Response, error)
- func (creds *Credentials) SetAccessToken(token string) error
- func (creds *Credentials) SetAuthorizationHeader(r *http.Request)
- func (creds *Credentials) SetOfflineMode()
- type JWTParser
- type M2MAppCredentials
- type Object
- type OktaClient
- type Response
Constants ¶
const ( HeaderOrganization = "organization" HeaderProject = "project" HeaderAuthorization = "Authorization" HeaderUserAgent = "User-Agent" HeaderTruncatedLimitMax = "Truncated-Limit-Max" HeaderTraceID = "trace-id" )
HTTP headers keys used across app
const ( QueryKeyName = "name" QueryKeyTime = "t" QueryKeyFrom = "from" QueryKeyTo = "to" QueryKeySeries = "series" QueryKeySteps = "steps" QueryKeySlo = "slo" QueryKeyTimeWindow = "window" QueryKeyPercentiles = "q" QueryKeyPermissionFilter = "pf" QueryKeyLabelsFilter = "labels" QueryKeyServiceName = "service_name" QueryKeyDryRun = "dry_run" QueryKeyTextSearch = "text_search" QueryKeySystemAnnotations = "system_annotations" QueryKeyUserAnnotations = "user_annotations" QueryKeyAlertPolicy = "alert_policy" QueryKeyObjective = "objective" QueryKeyObjectiveValue = "objective_value" QueryKeyResolved = "resolved" QueryKeyTriggered = "triggered" )
HTTP GET query keys used across app
const DefaultProject = "default"
DefaultProject is a value of the default project.
const ProjectsWildcard = "*"
ProjectsWildcard is used in HeaderProject when requesting for all projects.
const (
Timeout = 10 * time.Second
)
Timeout use for every request
Variables ¶
This section is empty.
Functions ¶
func IsObjectAvailable ¶
IsObjectAvailable returns true if given object is available in SDK.
func OktaAuthServer ¶ added in v0.8.2
Types ¶
type AccessTokenParser ¶ added in v0.8.2
AccessTokenParser parses and verifies fetched access token.
type AccessTokenPostRequestHook ¶ added in v0.8.2
AccessTokenPostRequestHook is run whenever a new token request finishes successfully. It can be used, for example, to update persistent access token storage.
type AccessTokenProvider ¶ added in v0.8.2
type AccessTokenProvider interface {
RequestAccessToken(ctx context.Context, clientID, clientSecret string) (token string, err error)
}
AccessTokenProvider fetches the access token based on client it and client secret.
type AnyJSONObj ¶
type AnyJSONObj = map[string]interface{}
AnyJSONObj can store a generic representation on any valid JSON.
type Client ¶
type Client struct { HTTP *http.Client Credentials *Credentials UserAgent string // contains filtered or unexported fields }
Client represents API high level client.
func DefaultClient ¶ added in v0.8.2
func DefaultClient(clientID, clientSecret, oktaOrgURL, oktaAuthServer, userAgent string) (*Client, error)
DefaultClient returns fully configured instance of API Client with default auth chain and HTTP client.
func (*Client) ApplyObjects ¶
ApplyObjects applies (create or update) list of objects passed as argument via API.
func (*Client) DeleteObjects ¶
DeleteObjects deletes list of objects passed as argument via API.
func (*Client) DeleteObjectsByName ¶
func (c *Client) DeleteObjectsByName(ctx context.Context, project string, object Object, dryRun bool, names ...string) error
DeleteObjectsByName makes a call to endpoint for deleting objects with passed names and object types.
func (*Client) GetAWSExternalID ¶
func (*Client) GetAgentCredentials ¶ added in v0.2.0
func (c *Client) GetAgentCredentials(ctx context.Context, project, agentsName string) (creds M2MAppCredentials, err error)
GetAgentCredentials gets agent credentials from Okta.
func (*Client) GetApiURL ¶ added in v0.8.2
GetApiURL retrieves the API URL of the configured Client instance.
func (*Client) GetObjects ¶ added in v0.8.2
func (c *Client) GetObjects( ctx context.Context, project string, object Object, filterLabel map[string][]string, names ...string, ) ([]AnyJSONObj, error)
GetObjects returns array of supported type of Objects, when names are passed - query for these names otherwise returns list of all available objects.
func (*Client) GetObjectsWithParams ¶ added in v0.8.2
func (*Client) PostMetrics ¶
func (*Client) SetAccessToken ¶ added in v0.8.2
SetAccessToken provisions an initial token for the Client to use. It should be used before executing the first request with the Client, as the Client, before executing request, will fetch a new token if none was provided.
type ClientBuilder ¶ added in v0.8.2
type ClientBuilder struct {
// contains filtered or unexported fields
}
ClientBuilder allows constructing Client using builder pattern (https://refactoring.guru/design-patterns/builder).
func NewClientBuilder ¶ added in v0.8.2
func NewClientBuilder(userAgent string) *ClientBuilder
NewClientBuilder creates a new ClientBuilder instance. To fully configure the Client you must also supply ClientBuilder with Credentials instance, either by running ClientBuilder.WithDefaultCredentials or ClientBuilder.WithCredentials. Recommended usage:
NewClientBuilder().WithDefaultCredentials().Build()
func (*ClientBuilder) Build ¶ added in v0.8.2
func (b *ClientBuilder) Build() (*Client, error)
Build figures out which parts were supplied for ClientBuilder and sets the defaults for the Client it constructs.
func (*ClientBuilder) WithApiURL ¶ added in v0.8.2
func (b *ClientBuilder) WithApiURL(apiURL string) *ClientBuilder
WithApiURL should only be used for development workflows as the URL is constructed from JWT claims.
func (*ClientBuilder) WithCredentials ¶ added in v0.8.2
func (b *ClientBuilder) WithCredentials(credentials *Credentials) *ClientBuilder
WithCredentials allows setting an initialized Credentials instance.
func (*ClientBuilder) WithDefaultCredentials ¶ added in v0.8.2
func (b *ClientBuilder) WithDefaultCredentials(oktaOrgURL, oktaAuthServer, clientID, clientSecret string) *ClientBuilder
WithDefaultCredentials instructs the ClientBuilder to supply a default Credentials instance. It is recommended for most use cases over WithCredentials.
func (*ClientBuilder) WithHTTPClient ¶ added in v0.8.2
func (b *ClientBuilder) WithHTTPClient(client *http.Client) *ClientBuilder
WithHTTPClient allows supplying a custom http.Client for the client to use. Note that the access token life cycle management is done by Credentials, which become part of default http.Client request middleware chain, making sure the token is up to date before each request.
func (*ClientBuilder) WithOfflineMode ¶ added in v0.8.2
func (b *ClientBuilder) WithOfflineMode() *ClientBuilder
WithOfflineMode if used will turn the Client.Credentials into a noop. If used in conjunction with WithCredentials or WithDefaultCredentials will render them useless.
func (*ClientBuilder) WithTimeout ¶ added in v0.8.2
func (b *ClientBuilder) WithTimeout(timeout time.Duration) *ClientBuilder
WithTimeout will only work for default HTTP client, it won't affect the client supplied with WithHTTPClient.
type Credentials ¶ added in v0.8.2
type Credentials struct { // Required to fetch the token. ClientID string ClientSecret string // Set after the token is fetched. AccessToken string // Extracted from claims. // Organization and Environment, if accessed before the first request // is executed, will be empty as the token was not yet fetched. // To force them to be set earlier you could provide the access token // to Credentials or call Credentials.RefreshAccessToken manually. Organization string Environment string HTTP *http.Client // TokenParser is used to verify the token and its claims. TokenParser AccessTokenParser // TokenProvider is used to provide an access token. TokenProvider AccessTokenProvider // PostRequestHook is not run in offline mode. PostRequestHook AccessTokenPostRequestHook // contains filtered or unexported fields }
Credentials stores and manages IDP app credentials and claims. It governs access token life cycle, providing means of refreshing it and exposing claims delivered with the token. Currently, the only supported IDP is Okta.
func DefaultCredentials ¶ added in v0.8.2
func DefaultCredentials(clientID, clientSecret string, authServerURL *url.URL) (*Credentials, error)
func (*Credentials) RefreshAccessToken ¶ added in v0.8.2
func (creds *Credentials) RefreshAccessToken(ctx context.Context) (updated bool, err error)
RefreshAccessToken checks the AccessToken expiry with an offset to detect if the token is soon to be expired. If so, it wll request a new token and update the Credentials state. If the token was not yet set, it will request a new one all the same.
func (*Credentials) RoundTrip ¶ added in v0.8.2
RoundTrip will wrap any errors returned from RefreshAccessToken in retryhttp.NonRetryableError to ensure the request is not retried by the wrapping client.
func (*Credentials) SetAccessToken ¶ added in v0.8.2
func (creds *Credentials) SetAccessToken(token string) error
SetAccessToken allows setting new access token without using TokenProvider. The provided token will be still parsed using setNewToken function. In offline mode this is a noop.
func (*Credentials) SetAuthorizationHeader ¶ added in v0.8.2
func (creds *Credentials) SetAuthorizationHeader(r *http.Request)
SetAuthorizationHeader sets an authorization header which should be included if access token was set in request to the resource server.
func (*Credentials) SetOfflineMode ¶ added in v0.8.2
func (creds *Credentials) SetOfflineMode()
SetOfflineMode turns RefreshAccessToken into a noop.
type JWTParser ¶ added in v0.8.2
func NewJWTParser ¶ added in v0.8.2
type M2MAppCredentials ¶ added in v0.2.0
type M2MAppCredentials struct { ClientID string `json:"client_id"` ClientSecret string `json:"client_secret"` }
M2MAppCredentials is used for storing client_id and client_secret.
type Object ¶
type Object string
Object represents available objects in API to perform operations.
const ( ObjectSLO Object = "SLO" ObjectService Object = "Service" ObjectAgent Object = "Agent" ObjectAlertPolicy Object = "AlertPolicy" ObjectAlertSilence Object = "AlertSilence" // ObjectAlert represents object used only to return list of Alerts. Applying and deleting alerts is disabled. ObjectAlert Object = "Alert" // ObjectProject represents object used only to return list of Projects. // Applying and deleting projects is not supported. ObjectProject Object = "Project" ObjectAlertMethod Object = "AlertMethod" // ObjectMetricSource represents ephemeral object used only to return concatenated list of Agents and Directs. ObjectMetricSource Object = "MetricSource" ObjectDirect Object = "Direct" ObjectDataExport Object = "DataExport" ObjectUsageSummary Object = "UsageSummary" ObjectRoleBinding Object = "RoleBinding" ObjectSLOErrorBudgetStatus Object = "SLOErrorBudgetStatus" ObjectAnnotation Object = "Annotation" ObjectGroup Object = "Group" )
List of available objects in API.
func ObjectName ¶
type OktaClient ¶ added in v0.8.2
func NewOktaClient ¶ added in v0.8.2
func NewOktaClient(authServerURL *url.URL) *OktaClient
func (*OktaClient) RequestAccessToken ¶ added in v0.8.2
type Response ¶ added in v0.8.0
type Response struct { Objects []AnyJSONObj TruncatedMax int }
Directories ¶
Path | Synopsis |
---|---|
Package definitions provides functions for reading, parsing and converting object's definitions.
|
Package definitions provides functions for reading, parsing and converting object's definitions. |