proxy

package
v1.17.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 26, 2023 License: Apache-2.0 Imports: 21 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func GetSessionSecret added in v1.6.0

func GetSessionSecret(ctx context.Context, client stripe.RequestPerformer, deviceName string) (string, error)

GetSessionSecret creates a session and returns the webhook signing secret.

Types

type Config

type Config struct {
	// DeviceName is the name of the device sent to Stripe to help identify the device
	DeviceName string

	// Client is a configured stripe client used to execute authenticated calls to the Stripe API.
	Client stripe.RequestPerformer

	// URL to which events are forwarded to
	ForwardURL string
	// Headers to inject when forwarding events
	ForwardHeaders []string
	// URL to which Connect events are forwarded to
	ForwardConnectURL string
	// Headers to inject when forwarding Connect events
	ForwardConnectHeaders []string
	// UseConfiguredWebhooks loads webhooks config from user's account
	UseConfiguredWebhooks bool

	// List of events to listen and proxy
	Events []string

	// WebSocketFeature is the feature specified for the websocket connection
	WebSocketFeature string
	// Indicates whether to print full JSON objects to stdout
	PrintJSON bool

	// Specifies the format to print to stdout.
	Format string

	// Indicates whether to filter events formatted with the default or latest API version
	UseLatestAPIVersion bool
	// Indicates whether to skip certificate verification when forwarding webhooks to HTTPS endpoints
	SkipVerify bool
	// The logger used to log messages to stdin/err
	Log *log.Logger
	// Force use of unencrypted ws:// protocol instead of wss://
	NoWSS bool
	// Override default timeout
	Timeout int64

	// OutCh is the channel to send logs and statuses to for processing in other packages
	OutCh chan websocket.IElement
}

Config provides the configuration of a Proxy

type EndpointClient added in v0.2.6

type EndpointClient struct {
	// URL the client sends POST requests to
	URL string
	// contains filtered or unexported fields
}

EndpointClient is the client used to POST webhook requests to the local endpoint.

func NewEndpointClient added in v0.2.6

func NewEndpointClient(url string, headers []string, connect bool, events []string, cfg *EndpointConfig) *EndpointClient

NewEndpointClient returns a new EndpointClient.

func (*EndpointClient) Post added in v0.2.6

func (c *EndpointClient) Post(evtCtx eventContext, body string, headers map[string]string) error

Post sends a message to the local endpoint.

func (*EndpointClient) SupportsEventType added in v0.2.6

func (c *EndpointClient) SupportsEventType(connect bool, eventType string) bool

SupportsEventType takes an event of a webhook and compares it to the internal list of supported events

type EndpointConfig added in v0.2.6

type EndpointConfig struct {
	HTTPClient *http.Client

	Log *log.Logger

	ResponseHandler EndpointResponseHandler

	// OutCh is the channel to send data and statuses to for processing in other packages
	OutCh chan websocket.IElement
}

EndpointConfig contains the optional configuration parameters of an EndpointClient.

type EndpointResponse added in v1.6.0

type EndpointResponse struct {
	Event *StripeEvent
	Resp  *http.Response
}

EndpointResponse describes the response to a Stripe event from an endpoint

type EndpointResponseHandler added in v0.2.6

type EndpointResponseHandler interface {
	ProcessResponse(eventContext, string, *http.Response)
}

EndpointResponseHandler handles a response from the endpoint.

type EndpointResponseHandlerFunc added in v0.2.6

type EndpointResponseHandlerFunc func(eventContext, string, *http.Response)

EndpointResponseHandlerFunc is an adapter to allow the use of ordinary functions as response handlers. If f is a function with the appropriate signature, ResponseHandler(f) is a ResponseHandler that calls f.

func (EndpointResponseHandlerFunc) ProcessResponse added in v0.2.6

func (f EndpointResponseHandlerFunc) ProcessResponse(evtCtx eventContext, forwardURL string, resp *http.Response)

ProcessResponse calls f(evtCtx, forwardURL, resp).

type EndpointRoute added in v0.2.6

type EndpointRoute struct {
	// URL is the endpoint's URL.
	URL string

	// Headers to forward to endpoints
	ForwardHeaders []string

	// Connect indicates whether the endpoint should receive normal (when false) or Connect (when true) events.
	Connect bool

	// EventTypes is the list of event types that should be sent to the endpoint.
	EventTypes []string

	// Status is whether or not the endpoint is enabled.
	Status string
}

EndpointRoute describes a local endpoint's routing configuration.

type FailedToPostError added in v1.6.0

type FailedToPostError struct {
	Err error
}

FailedToPostError describes a failure to send a POST request to an endpoint

func (FailedToPostError) Error added in v1.6.0

func (f FailedToPostError) Error() string

type FailedToReadResponseError added in v1.6.0

type FailedToReadResponseError struct {
	Err error
}

FailedToReadResponseError describes a failure to read the response from an endpoint

func (FailedToReadResponseError) Error added in v1.6.0

type Proxy

type Proxy struct {
	// contains filtered or unexported fields
}

A Proxy opens a websocket connection with Stripe, listens for incoming webhook events, forwards them to the local endpoint and sends the response back to Stripe.

func Init added in v1.6.0

func Init(ctx context.Context, cfg *Config) (*Proxy, error)

Init initializes a new Proxy

func (*Proxy) IsConnected added in v1.7.13

func (p *Proxy) IsConnected() <-chan struct{}

IsConnected returns a channel that signals the proxy has finished connecting. can only be called after webSocketClient is initialized

func (*Proxy) Run

func (p *Proxy) Run(ctx context.Context) error

Run sets the websocket connection and starts the Goroutines to forward incoming events to the local endpoint.

type StripeEvent added in v1.6.0

type StripeEvent struct {
	Account         string                 `json:"account"`
	APIVersion      string                 `json:"api_version"`
	Created         int                    `json:"created"`
	Data            map[string]interface{} `json:"data"`
	ID              string                 `json:"id"`
	Livemode        bool                   `json:"livemode"`
	PendingWebhooks int                    `json:"pending_webhooks"`
	Type            string                 `json:"type"`
	RequestData     interface{}            `json:"request"`
	Request         StripeRequest
}

StripeEvent is a representation of a Stripe `event` object we define RequestData as an interface for backwards compatibility Request will hold the deserialized request data

func (*StripeEvent) IsConnect added in v1.6.0

func (e *StripeEvent) IsConnect() bool

IsConnect return true or false if *StripeEvent is connect or not.

func (*StripeEvent) URLForEventID added in v1.6.0

func (e *StripeEvent) URLForEventID() string

URLForEventID builds a full URL from a StripeEvent ID.

func (*StripeEvent) URLForEventType added in v1.6.0

func (e *StripeEvent) URLForEventType() string

URLForEventType builds a full URL from a StripeEvent Type.

type StripeRequest added in v1.7.0

type StripeRequest struct {
	ID             string
	IdempotencyKey string
}

StripeRequest is a representation of the Request field in a Stripe `event` object

func ExtractRequestData added in v1.7.0

func ExtractRequestData(data interface{}) (StripeRequest, error)

ExtractRequestData takes an interface with request data from a Stripe event payload and properly parses it into a StripeRequest struct before returning it

type WebhookEventProcessor added in v1.14.1

type WebhookEventProcessor struct {
	// contains filtered or unexported fields
}

WebhookEventProcessor encapsulates logic around processing and forwarding webhook events.

func NewWebhookEventProcessor added in v1.14.1

func NewWebhookEventProcessor(sendMessage func(*websocket.OutgoingMessage), routes []EndpointRoute, cfg *WebhookEventProcessorConfig) *WebhookEventProcessor

NewWebhookEventProcessor constructs a WebhookEventProcessor from the provided websocket delivery function, route table, and config.

func (*WebhookEventProcessor) ProcessEvent added in v1.14.1

func (p *WebhookEventProcessor) ProcessEvent(msg websocket.IncomingMessage)

ProcessEvent processes webhook events, notifying listeners via the configured OutCh, sending acknowledgements with the configured websocket sender, and forwarding events to configured endpoints.

ProcessEvent implements the websocket.EndpointResponseHandler interface.

type WebhookEventProcessorConfig added in v1.14.1

type WebhookEventProcessorConfig struct {
	// The logger used to log messages to stdin/err
	Log *log.Logger

	// List of events to listen and proxy
	Events []string

	// OutCh is the channel to send logs and statuses to for processing in other packages
	OutCh chan websocket.IElement

	// Indicates whether to filter events formatted with the default or latest API version
	UseLatestAPIVersion bool

	// Indicates whether to skip certificate verification when forwarding webhooks to HTTPS endpoints
	SkipVerify bool

	// Override default timeout
	Timeout int64
}

WebhookEventProcessorConfig defines the external inputs that infuence the behavior of a WebhookEventProcessor.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL