router

package
v0.22.0 Latest Latest
Warning

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

Go to latest
Published: Feb 10, 2017 License: Apache-2.0 Imports: 23 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type AccessKeyType

type AccessKeyType int

AccessKeyType is the type of the access key specified in client request

const (
	// NoAccessKey denotes that an access key is not specified
	NoAccessKey AccessKeyType = 0 + iota

	// ClientAccessKey denotes that a client access key is specified
	ClientAccessKey

	// MasterAccessKey denotes that a master aclieneccess key is specified
	MasterAccessKey
)

func (AccessKeyType) String

func (i AccessKeyType) String() string

type AccessToken

type AccessToken interface {
	// IssuedAt returns the time when the access token is issued. If the
	// information is not available, the IsZero method of the
	// returned time is true.
	IssuedAt() time.Time
}

AccessToken is an interface to access information about the Access Token in the payload.

type CORSMiddleware

type CORSMiddleware struct {
	Origin string
	Next   http.Handler
}

func (*CORSMiddleware) ServeHTTP

func (cors *CORSMiddleware) ServeHTTP(w http.ResponseWriter, r *http.Request)

type ContextKey added in v0.18.0

type ContextKey string
var AccessKeyTypeContextKey ContextKey = "AccessKeyType"
var UserIDContextKey ContextKey = "UserID"

type Gateway

type Gateway struct {
	ParamMatch *regexp.Regexp
	// contains filtered or unexported fields
}

Gateway is a man in the middle to inject dependency It currently bind to HTTP method, it disregard path.

func NewGateway

func NewGateway(pattern string, path string, mux *http.ServeMux) *Gateway

func (*Gateway) GET

func (g *Gateway) GET(handler Handler, preprocessors ...Processor)

GET register a URL handler by method GET

func (*Gateway) Handle

func (g *Gateway) Handle(method string, handler Handler, preprocessors ...Processor)

Handle registers a handler matched by a request's method and URL's path. Pattern is a regexp that defines a matched URL.

func (*Gateway) POST

func (g *Gateway) POST(handler Handler, preprocessors ...Processor)

POST register a URL handler by method POST

func (*Gateway) PUT

func (g *Gateway) PUT(handler Handler, preprocessors ...Processor)

PUT register a URL handler by method PUT

func (*Gateway) ServeHTTP

func (g *Gateway) ServeHTTP(w http.ResponseWriter, req *http.Request)

type Handler

type Handler interface {
	Setup()
	GetPreprocessors() []Processor
	Handle(*Payload, *Response)
}

Handler specifies the interface of a request handler

func NewFuncHandler

func NewFuncHandler(f HandlerFunc) Handler

NewFuncHandler is intend for using in test, not actual code.

type HandlerFunc

type HandlerFunc func(*Payload, *Response)

HandlerFunc specifies the function signature of a request handler function

type HandlerInjector

type HandlerInjector struct {
	ServiceGraph    *inject.Graph
	PreprocessorMap *PreprocessorRegistry
}

HandlerInjector is standard way to inject Services and Preprocessors specified by the Handler struct.

func (*HandlerInjector) Inject

func (i *HandlerInjector) Inject(h Handler) Handler

func (*HandlerInjector) InjectProcessors

func (i *HandlerInjector) InjectProcessors(h Handler) Handler

func (*HandlerInjector) InjectServices

func (i *HandlerInjector) InjectServices(h Handler) Handler

type LoggingMiddleware

type LoggingMiddleware struct {
	Skips       []string
	MimeConcern []string
	Next        http.Handler
	ByteLimit   *int
}

func (*LoggingMiddleware) ServeHTTP

func (l *LoggingMiddleware) ServeHTTP(w http.ResponseWriter, r *http.Request)

type Payload

type Payload struct {
	// the raw http.Request of this payload
	// Think twice before accessing it
	Req *http.Request
	// URL parameters
	Params []string

	// Map of params such as Auth, TimeSteam, version
	Meta map[string]interface{}
	// Map of action payload
	Data map[string]interface{}

	Context context.Context

	AppName    string
	UserInfoID string
	UserInfo   *skydb.UserInfo
	AccessKey  AccessKeyType

	// AccessToken stores access token for this payload.
	//
	// The field is injected by preprocessor. The field
	// is nil if the AccessToken does not exist or is not valid.
	AccessToken AccessToken

	DBConn   skydb.Conn
	Database skydb.Database
}

Payload is for passing payload to the actual handler

func (*Payload) APIKey

func (p *Payload) APIKey() string

APIKey returns the api key in the request.

func (*Payload) AccessTokenString

func (p *Payload) AccessTokenString() string

AccessTokenString return the user input string TODO: accept all header, json payload, query string(in order)

func (*Payload) HasMasterKey

func (p *Payload) HasMasterKey() bool

HasMasterKey returns whether the payload has master access key

func (*Payload) RouteAction

func (p *Payload) RouteAction() string

RouteAction must exist for every request

type PreprocessorRegistry

type PreprocessorRegistry map[string]Processor

PreprocessorRegistry is holding all preprocessors and their mapping with a string name.

func (PreprocessorRegistry) GetByNames

func (r PreprocessorRegistry) GetByNames(names ...string) []Processor

GetByNames returns a list of registered preprocessors by preprocessor names.

type Processor

type Processor interface {
	Preprocess(*Payload, *Response) int
}

Processor specifies the function signature for a Processor

type Response

type Response struct {
	Meta       map[string][]string `json:"-"`
	Info       interface{}         `json:"info,omitempty"`
	Result     interface{}         `json:"result,omitempty"`
	Err        skyerr.Error        `json:"error,omitempty"`
	RequestID  string              `json:"request_id,omitempty"`
	DatabaseID string              `json:"database_id,omitempty"`
	// contains filtered or unexported fields
}

Response is interface for handler to write response to router

func (*Response) Writer added in v0.22.0

func (resp *Response) Writer() (writer http.ResponseWriter)

Writer returns a http.ResponseWriter only once. If a writer is already returned, this function will always return nil.

Any http.Handler handling the request may get a http.ResponseWriter by calling this function. Once called, the caller is responsible for writing a response. No other Handler will be able to write to the same ResponseWriter.

type Router

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

Router to dispatch HTTP request to respective handler

func NewRouter

func NewRouter() *Router

NewRouter is factory for Router

func (*Router) Map

func (r *Router) Map(action string, handler Handler, preprocessors ...Processor)

Map to register action to handle mapping

func (*Router) ServeHTTP

func (r *Router) ServeHTTP(w http.ResponseWriter, req *http.Request)

Jump to

Keyboard shortcuts

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