gateway

package
v0.0.0-...-589da53 Latest Latest
Warning

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

Go to latest
Published: May 30, 2023 License: MIT Imports: 21 Imported by: 0

README

API Gateways

This package provides GraphQL & REST gateways. These are connected in to the core via GRPC.

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrMaxSubscriptionReached = func(ip string, max uint32) error {
	return fmt.Errorf("max subscriptions count (%v) reached for ip (%s)", max, ip)
}

Functions

func Chain

func Chain(f http.Handler, m ...func(http.Handler) http.Handler) http.Handler

Chain builds the middleware Chain recursively, functions are first class.

func GenerateTlsConfig

func GenerateTlsConfig(g *Config, furyPaths paths.Paths) (*tls.Config, http.Handler, error)

func MetricCollectionMiddleware

func MetricCollectionMiddleware(next http.Handler) http.Handler

MetricCollectionMiddleware records the request and the time taken to service it.

func RemoteAddrMiddleware

func RemoteAddrMiddleware(log *logging.Logger, next http.Handler) http.Handler

RemoteAddrMiddleware is a middleware adding to the current request context the address of the caller.

func WithAddHeadersMiddleware

func WithAddHeadersMiddleware(next http.Handler) http.Handler

Types

type Config

type Config struct {
	ServerConfig
	Level                    encoding.LogLevel        `long:"log-level" choice:"debug" choice:"info" choice:"warning"`
	Timeout                  encoding.Duration        `long:"timeout"`
	Node                     ServerConfig             `group:"Node" namespace:"node"`
	GraphQL                  GraphqlServiceConfig     `group:"GraphQL" namespace:"graphql"`
	REST                     RESTGatewayServiceConfig `group:"REST" namespace:"rest"`
	SubscriptionRetries      int                      `long:"subscription-retries" description:" "`
	GraphQLPlaygroundEnabled encoding.Bool            `long:"graphql-playground" description:"Enables the GraphQL playground"`
	MaxSubscriptionPerClient uint32                   `long:"max-subscription-per-client" description:"Maximum graphql subscriptions allowed per client"`
	CORS                     libhttp.CORSConfig       `group:"CORS" namespace:"cors"`
	HTTPSEnabled             encoding.Bool            `long:"https-enabled" description:"If true, GraphQL gateway will require an HTTPS connection"`
	AutoCertDomain           string                   `long:"auto-cert-domain" description:"Automatically generate and sign https certificate via LetsEncrypt"`
	CertificateFile          string                   `long:"certificate-file" description:"Path to SSL certificate, if using HTTPS but not autocert"`
	KeyFile                  string                   `long:"key-file" description:"Path to private key, if using HTTPS but not autocert"`
	RateLimit                ratelimit.Config         `group:"RateLimits" namespace:"rate-limits"`
}

Config represents the general configuration for the gateway.

func NewDefaultConfig

func NewDefaultConfig() Config

NewDefaultConfig creates an instance of the package specific configuration, given a pointer to a logger instance to be used for logging within the package.

type GraphqlServiceConfig

type GraphqlServiceConfig struct {
	Enabled         encoding.Bool `long:"enabled" description:"Start the GraphQl gateway"`
	ComplexityLimit int           `long:"complexity-limit"`
	Endpoint        string        `long:"endpoint" description:"Endpoint to expose the graphql API at"`
}

GraphqlServiceConfig represents the configuration of the gateway.

type InjectableResponseWriter

type InjectableResponseWriter struct {
	http.ResponseWriter
	http.Hijacker
	// contains filtered or unexported fields
}

func InjectableWriterFromContext

func InjectableWriterFromContext(ctx context.Context) (*InjectableResponseWriter, bool)

func (*InjectableResponseWriter) SetHeaders

func (i *InjectableResponseWriter) SetHeaders(headers http.Header)

func (*InjectableResponseWriter) Write

func (i *InjectableResponseWriter) Write(data []byte) (int, error)

type RESTGatewayServiceConfig

type RESTGatewayServiceConfig struct {
	Enabled    encoding.Bool `long:"enabled" choice:"true" choice:"false" description:"Start the REST gateway"`
	APMEnabled encoding.Bool `long:"apm-enabled" choice:"true" choice:"false" description:" "`
}

RESTGatewayServiceConfig represent the configuration of the rest service.

type ServerConfig

type ServerConfig struct {
	Port int    `long:"port" description:"Listen for connection on port <port>"`
	IP   string `long:"ip" description:"Bind to address <ip>"`
}

ServerConfig represent the configuration of a server in fury.

type SubscriptionRateLimiter

type SubscriptionRateLimiter struct {
	MaxSubscriptions uint32
	// contains filtered or unexported fields
}

func NewSubscriptionRateLimiter

func NewSubscriptionRateLimiter(
	log *logging.Logger,
	maxSubscriptions uint32,
) *SubscriptionRateLimiter

func (*SubscriptionRateLimiter) Dec

func (s *SubscriptionRateLimiter) Dec(ip string)

func (*SubscriptionRateLimiter) Inc

func (*SubscriptionRateLimiter) WithGrpcInterceptor

func (s *SubscriptionRateLimiter) WithGrpcInterceptor(ipGetterFunc ipGetter) grpc.StreamServerInterceptor

func (*SubscriptionRateLimiter) WithSubscriptionRateLimiter

func (s *SubscriptionRateLimiter) WithSubscriptionRateLimiter(next http.Handler) http.Handler

Directories

Path Synopsis
Package gql contains code for running the GraphQL-to-gRPC gateway.
Package gql contains code for running the GraphQL-to-gRPC gateway.
mocks
Package mocks is a generated GoMock package.
Package mocks is a generated GoMock package.
Package rest contains code for running the REST-to-gRPC gateway.
Package rest contains code for running the REST-to-gRPC gateway.

Jump to

Keyboard shortcuts

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