http

package
v1.3.5 Latest Latest
Warning

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

Go to latest
Published: Aug 9, 2023 License: Apache-2.0 Imports: 44 Imported by: 8

Documentation

Index

Constants

View Source
const ConnChCtx = "conn_ch"
View Source
const ConnCtx = "conn"
View Source
const LogHandlerDefaultMaxBodySize = 204800
View Source
const ParamMaxBodyBytes = channel.ParamKey("max_body_bytes")

var ParamMaxMultiPartMemory channel.ParamKey = "max_multi_part_memory"

Variables

View Source
var AcceptanceInterrupt = &DefaultAcceptanceInterrupt{}
View Source
var DefaultSessionType = SessionTypeMemory
View Source
var NotImplemented = erresponse.NotImplemented
View Source
var ParamAcceptWaitCount channel.ParamKey = "accept_wait_count"
View Source
var ParamIdleTimeout channel.ParamKey = "idle_timeout"
View Source
var ParamMaxHeaderBytes channel.ParamKey = "max_header_bytes"
View Source
var ParamReadHeaderTimeout channel.ParamKey = "read_header_timeout"
View Source
var ParamReadTimeout channel.ParamKey = "read_timeout"
View Source
var ParamWriteTimeout channel.ParamKey = "write_timeout"
View Source
var SessionDomain = ""
View Source
var SessionExpireTime = 86400
View Source
var SessionHttpOnly = false
View Source
var SessionKey = "KKLAB"
View Source
var SessionSecure = false

Functions

func DefaultProvider

func DefaultProvider() httpsession.SessionProvider

func GetSession

func GetSession(req *Request) httpsession.Session

func NewEndPoint

func NewEndPoint(name string, task HandlerTask, acceptances []Acceptance) *_EndPoint

func NewGroup

func NewGroup(name string, acceptances []Acceptance) *_RouteGroup

Types

type Acceptance

type Acceptance interface {
	Do(req *Request, resp *Response, params map[string]any) error
	SkipMethodOptions() bool
}

type Channel

type Channel struct {
	channel.DefaultNetChannel
}

func (*Channel) UnsafeIsAutoRead

func (c *Channel) UnsafeIsAutoRead() bool

func (*Channel) UnsafeRead

func (c *Channel) UnsafeRead() (any, error)

func (*Channel) UnsafeWrite

func (c *Channel) UnsafeWrite(obj any) error

type DefaultAcceptanceInterrupt

type DefaultAcceptanceInterrupt struct {
}

func (DefaultAcceptanceInterrupt) Error

type DefaultHTTPHandlerTask

type DefaultHTTPHandlerTask struct {
	DefaultHandlerTask
}

func (*DefaultHTTPHandlerTask) After

func (h *DefaultHTTPHandlerTask) After(req *Request, resp *Response, params map[string]any) ErrorResponse

func (*DefaultHTTPHandlerTask) Before

func (h *DefaultHTTPHandlerTask) Before(req *Request, resp *Response, params map[string]any) ErrorResponse

func (*DefaultHTTPHandlerTask) CORSHelper added in v1.0.1

func (h *DefaultHTTPHandlerTask) CORSHelper(req *Request, resp *Response, params map[string]any)

func (*DefaultHTTPHandlerTask) Connect

func (h *DefaultHTTPHandlerTask) Connect(ctx channel.HandlerContext, req *Request, resp *Response, params map[string]any) ErrorResponse

func (*DefaultHTTPHandlerTask) Create added in v1.2.8

func (h *DefaultHTTPHandlerTask) Create(ctx channel.HandlerContext, req *Request, resp *Response, params map[string]any) ErrorResponse

func (*DefaultHTTPHandlerTask) Delete

func (h *DefaultHTTPHandlerTask) Delete(ctx channel.HandlerContext, req *Request, resp *Response, params map[string]any) ErrorResponse

func (*DefaultHTTPHandlerTask) ErrorCaught

func (h *DefaultHTTPHandlerTask) ErrorCaught(req *Request, resp *Response, params map[string]any, err ErrorResponse) error

func (*DefaultHTTPHandlerTask) Get

func (*DefaultHTTPHandlerTask) Index

func (h *DefaultHTTPHandlerTask) Index(ctx channel.HandlerContext, req *Request, resp *Response, params map[string]any) ErrorResponse

func (*DefaultHTTPHandlerTask) Options

func (h *DefaultHTTPHandlerTask) Options(ctx channel.HandlerContext, req *Request, resp *Response, params map[string]any) ErrorResponse

func (*DefaultHTTPHandlerTask) Patch

func (h *DefaultHTTPHandlerTask) Patch(ctx channel.HandlerContext, req *Request, resp *Response, params map[string]any) ErrorResponse

func (*DefaultHTTPHandlerTask) Post

func (h *DefaultHTTPHandlerTask) Post(ctx channel.HandlerContext, req *Request, resp *Response, params map[string]any) ErrorResponse

func (*DefaultHTTPHandlerTask) PreCheck

func (h *DefaultHTTPHandlerTask) PreCheck(req *Request, resp *Response, params map[string]any) ErrorResponse

func (*DefaultHTTPHandlerTask) Put

func (*DefaultHTTPHandlerTask) ThrowErrorResponse

func (h *DefaultHTTPHandlerTask) ThrowErrorResponse(err ErrorResponse)

func (*DefaultHTTPHandlerTask) Trace

func (h *DefaultHTTPHandlerTask) Trace(ctx channel.HandlerContext, req *Request, resp *Response, params map[string]any) ErrorResponse

type DefaultHandlerTask

type DefaultHandlerTask struct {
}

func NewDefaultHandlerTask

func NewDefaultHandlerTask() *DefaultHandlerTask

func (*DefaultHandlerTask) GetID

func (h *DefaultHandlerTask) GetID(name string, params map[string]any) string

func (*DefaultHandlerTask) GetNodeName

func (h *DefaultHandlerTask) GetNodeName(params map[string]any) string

func (*DefaultHandlerTask) IsIndex

func (h *DefaultHandlerTask) IsIndex(params map[string]any) bool

func (*DefaultHandlerTask) LogExtend

func (h *DefaultHandlerTask) LogExtend(key string, value any, params map[string]any)

type DefaultRoute

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

func NewRoute

func NewRoute() *DefaultRoute

func (*DefaultRoute) AddEndPoint

func (r *DefaultRoute) AddEndPoint(point *_EndPoint) *DefaultRoute

func (*DefaultRoute) AddGroup

func (r *DefaultRoute) AddGroup(group *_RouteGroup) *DefaultRoute

func (*DefaultRoute) AddRecursivePoint

func (r *DefaultRoute) AddRecursivePoint(point *_EndPoint) *DefaultRoute

func (*DefaultRoute) RouteNode added in v1.3.0

func (r *DefaultRoute) RouteNode(path string) (node RouteNode, nodeParams map[string]any, isLast bool)

func (*DefaultRoute) SetRoot

func (r *DefaultRoute) SetRoot(point *_EndPoint) *DefaultRoute

type DispatchAcceptance

type DispatchAcceptance struct {
}

func (*DispatchAcceptance) Do

func (a *DispatchAcceptance) Do(req *Request, resp *Response, params map[string]any) error

func (*DispatchAcceptance) GetID

func (a *DispatchAcceptance) GetID(name string, params map[string]any) string

func (*DispatchAcceptance) GetNodeName

func (a *DispatchAcceptance) GetNodeName(params map[string]any) string

func (*DispatchAcceptance) IsIndex

func (a *DispatchAcceptance) IsIndex(params map[string]any) string

func (*DispatchAcceptance) LogExtend

func (a *DispatchAcceptance) LogExtend(key string, value any, params map[string]any)

func (*DispatchAcceptance) SkipMethodOptions added in v1.2.3

func (a *DispatchAcceptance) SkipMethodOptions() bool

SkipMethodOptions helpful for CORS xhr preflight

type DispatchHandler

type DispatchHandler struct {
	channel.DefaultHandler

	DefaultStatusCode     int
	DefaultStatusResponse map[int]func(req *Request, resp *Response, params map[string]any)
	// contains filtered or unexported fields
}

func NewDispatchHandler

func NewDispatchHandler(route Route) *DispatchHandler

func (*DispatchHandler) ErrorCaught

func (h *DispatchHandler) ErrorCaught(ctx channel.HandlerContext, err error)

func (*DispatchHandler) Read

func (h *DispatchHandler) Read(ctx channel.HandlerContext, obj any)

type ErrorResponse

type ErrorResponse interface {
	erresponse.ErrorResponse
}

type ErrorResponseImpl

type ErrorResponseImpl struct {
	erresponse.ErrorResponse
	Caught *kkpanic.CaughtImpl `json:"caught,omitempty"`
}

func (*ErrorResponseImpl) String

func (e *ErrorResponseImpl) String() string

type GZipHandler

type GZipHandler struct {
	channel.DefaultHandler
	CompressThreshold int
}

func (*GZipHandler) Added

func (h *GZipHandler) Added(ctx channel.HandlerContext)

func (*GZipHandler) Write

func (h *GZipHandler) Write(ctx channel.HandlerContext, obj any, future channel.Future)

type HandlerTask

type HandlerTask interface {
	GetNodeName(params map[string]any) string
	GetID(name string, params map[string]any) string
}

type HttpHandlerTask

type HttpHandlerTask interface {
	HttpTask
	CORSHelper(req *Request, resp *Response, params map[string]any)
	PreCheck(req *Request, resp *Response, params map[string]any) ErrorResponse
	Before(req *Request, resp *Response, params map[string]any) ErrorResponse
	After(req *Request, resp *Response, params map[string]any) ErrorResponse
	ErrorCaught(req *Request, resp *Response, params map[string]any, err ErrorResponse) error
}

type HttpTask

type HttpTask interface {
	Index(ctx channel.HandlerContext, req *Request, resp *Response, params map[string]any) ErrorResponse
	Get(ctx channel.HandlerContext, req *Request, resp *Response, params map[string]any) ErrorResponse
	Create(ctx channel.HandlerContext, req *Request, resp *Response, params map[string]any) ErrorResponse
	Post(ctx channel.HandlerContext, req *Request, resp *Response, params map[string]any) ErrorResponse
	Put(ctx channel.HandlerContext, req *Request, resp *Response, params map[string]any) ErrorResponse
	Delete(ctx channel.HandlerContext, req *Request, resp *Response, params map[string]any) ErrorResponse
	Options(ctx channel.HandlerContext, req *Request, resp *Response, params map[string]any) ErrorResponse
	Patch(ctx channel.HandlerContext, req *Request, resp *Response, params map[string]any) ErrorResponse
	Trace(ctx channel.HandlerContext, req *Request, resp *Response, params map[string]any) ErrorResponse
	Connect(ctx channel.HandlerContext, req *Request, resp *Response, params map[string]any) ErrorResponse
}

type LanguageValue

type LanguageValue struct {
	Value  language.Tag
	Factor float32
}

type LogHandler

type LogHandler struct {
	channel.DefaultHandler

	MaxBodySize int
	FilterFunc  func(req *Request, resp *Response, params map[string]any) bool
	// contains filtered or unexported fields
}

func NewLogHandler

func NewLogHandler(printBody bool) *LogHandler

func (*LogHandler) Read

func (h *LogHandler) Read(ctx channel.HandlerContext, obj any)

func (*LogHandler) Write

func (h *LogHandler) Write(ctx channel.HandlerContext, obj any, future channel.Future)

type LogStruct

type LogStruct struct {
	ChannelID       string             `json:"cid,omitempty"`
	TrackID         string             `json:"tid,omitempty"`
	Method          string             `json:"method,omitempty"`
	URI             string             `json:"uri,omitempty"`
	StatusCode      int                `json:"status_code,omitempty"`
	RemoteAddr      string             `json:"remote_addr,omitempty"`
	RemoteAddrs     string             `json:"remote_addrs,omitempty"`
	Request         *RequestLogStruct  `json:"request,omitempty"`
	Response        *ResponseLogStruct `json:"response,omitempty"`
	AcceptTime      int64              `json:"accept_time,omitempty"`
	HLocateTime     int64              `json:"h_locate_time,omitempty"`
	HAcceptanceTime int64              `json:"h_acceptance_time,omitempty"`
	HandlerTime     int64              `json:"handler_time,omitempty"`
	HErrorTime      int64              `json:"h_error_time,omitempty"`
	CompressTime    int64              `json:"compress_time,omitempty"`
	ProcessTime     int64              `json:"process_time,omitempty"`
	Extend          any                `json:"extend,omitempty"`
}

type ObjectLogStruct

type ObjectLogStruct struct {
	ChannelID  string `json:"cid,omitempty"`
	TrackID    string `json:"tid,omitempty"`
	State      string `json:"state,omitempty"`
	Handler    string `json:"handler,omitempty"`
	URI        string `json:"uri,omitempty"`
	Message    any    `json:"message,omitempty"`
	RemoteAddr string `json:"remote_addr,omitempty"`
}

type Pack

type Pack struct {
	Request   *Request       `json:"request"`
	Response  *Response      `json:"response"`
	RouteNode RouteNode      `json:"route_node"`
	Params    map[string]any `json:"params"`
	Writer    ResponseWriter `json:"writer"`
}

type QualityValue

type QualityValue struct {
	Value  string
	Factor float32
}

type ReadRequestLogStruct

type ReadRequestLogStruct struct {
	ChannelID   string            `json:"cid,omitempty"`
	TrackID     string            `json:"tid,omitempty"`
	RemoteAddr  string            `json:"remote_addr,omitempty"`
	RemoteAddrs string            `json:"remote_addrs,omitempty"`
	URI         string            `json:"uri,omitempty"`
	Request     *RequestLogStruct `json:"request"`
}

type Request

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

func WrapRequest

func WrapRequest(ch channel.Channel, req *http.Request) *Request

func (*Request) Accept

func (r *Request) Accept() []QualityValue

func (*Request) AcceptCharset

func (r *Request) AcceptCharset() []QualityValue

func (*Request) AcceptEncoding

func (r *Request) AcceptEncoding() []QualityValue

func (*Request) AcceptLanguage

func (r *Request) AcceptLanguage() []LanguageValue

func (*Request) AddCookie

func (r *Request) AddCookie(c *http.Cookie)

func (*Request) Body

func (r *Request) Body() buf.ByteBuf

func (*Request) Channel

func (r *Request) Channel() channel.Channel

func (*Request) ContentLength

func (r *Request) ContentLength() int64

func (*Request) Cookie

func (r *Request) Cookie(name string) (*http.Cookie, error)

func (*Request) Cookies

func (r *Request) Cookies() []*http.Cookie

func (*Request) CreatedAt

func (r *Request) CreatedAt() *time.Time

func (*Request) FormFile

func (r *Request) FormFile(key string) (multipart.File, *multipart.FileHeader, error)

func (*Request) FormValue

func (r *Request) FormValue(key string) string

func (*Request) Header

func (r *Request) Header() http.Header

func (*Request) Host

func (r *Request) Host() string

func (*Request) Method

func (r *Request) Method() string

func (*Request) Origin

func (r *Request) Origin() string

func (*Request) PreferLang

func (r *Request) PreferLang() *language.Tag

func (*Request) Proto

func (r *Request) Proto() string

func (*Request) Referer

func (r *Request) Referer() string

func (*Request) RemoteAddr

func (r *Request) RemoteAddr() (ip net.IP, port string)

func (*Request) RemoteAddrs

func (r *Request) RemoteAddrs() []string

func (*Request) RemoteIP

func (r *Request) RemoteIP() (ip net.IP)

func (*Request) RenewSession

func (r *Request) RenewSession()

func (*Request) Request

func (r *Request) Request() *http.Request

func (*Request) RequestURI

func (r *Request) RequestURI() string

func (*Request) Session

func (r *Request) Session() httpsession.Session

func (*Request) TE

func (r *Request) TE() []QualityValue

func (*Request) TrackID

func (r *Request) TrackID() string

func (*Request) Url

func (r *Request) Url() *url.URL

func (*Request) UserAgent

func (r *Request) UserAgent() string

type RequestLogStruct

type RequestLogStruct struct {
	URI        string         `json:"uri,omitempty"`
	Method     string         `json:"method,omitempty"`
	Headers    map[string]any `json:"headers,omitempty"`
	HOST       string         `json:"host,omitempty"`
	Body       string         `json:"body,omitempty"`
	BodyLength int            `json:"body_length,omitempty"`
}

type Response

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

func EmptyResponse

func EmptyResponse() *Response

func NewResponse

func NewResponse(request *Request) *Response

func WrapResponse

func WrapResponse(ch channel.NetChannel, response *http.Response) *Response

func (*Response) AddHeader

func (r *Response) AddHeader(name string, value string) *Response

func (*Response) Body

func (r *Response) Body() []byte

func (*Response) Cookie

func (r *Response) Cookie(name string) *http.Cookie

func (*Response) Cookies

func (r *Response) Cookies() map[string][]http.Cookie

func (*Response) DelHeader

func (r *Response) DelHeader(name string) *Response

func (*Response) DoneFuture added in v1.0.13

func (r *Response) DoneFuture() channel.Future

func (*Response) GetHeader

func (r *Response) GetHeader(name string) string

func (*Response) Header

func (r *Response) Header() http.Header

func (*Response) JsonResponse

func (r *Response) JsonResponse(obj any)

func (*Response) Redirect

func (r *Response) Redirect(redirectUrl string)

func (*Response) Request

func (r *Response) Request() *Request

func (*Response) ResponseError

func (r *Response) ResponseError(er ErrorResponse)

func (*Response) SetBody

func (r *Response) SetBody(buf buf.ByteBuf)

func (*Response) SetContentType

func (r *Response) SetContentType(ct string)

func (*Response) SetCookie

func (r *Response) SetCookie(cookie *http.Cookie) *Response

func (*Response) SetHeader

func (r *Response) SetHeader(name string, value string) *Response

func (*Response) SetStatusCode

func (r *Response) SetStatusCode(statusCode int) *Response

func (*Response) StatusCode

func (r *Response) StatusCode() int

func (*Response) TextResponse

func (r *Response) TextResponse(buf buf.ByteBuf)

type ResponseLogStruct

type ResponseLogStruct struct {
	URI               string         `json:"uri,omitempty"`
	StatusCode        int            `json:"status_code,omitempty"`
	Headers           map[string]any `json:"headers,omitempty"`
	Body              string         `json:"body,omitempty"`
	OutBodyLength     int            `json:"out_body_length,omitempty"`
	PreCompressLength int            `json:"pre_compress_length,omitempty"`
}

type ResponseWriter

type ResponseWriter interface {
	http.ResponseWriter
}

type ReturnCatch

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

type Route

type Route interface {
	RouteNode(path string) (node RouteNode, nodeParams map[string]any, isLast bool)
}

type RouteNode

type RouteNode interface {
	Parent() RouteNode
	HandlerTask() HandlerTask
	Name() string
	AggregatedAcceptances() []Acceptance
	Acceptances() []Acceptance
	Resources() map[string]RouteNode
	RouteType() RouteType
}

type RouteType

type RouteType int
const (
	RouteTypeEndPoint RouteType = iota
	RouteTypeGroup
	RouteTypeRecursiveEndPoint
	RouteTypeRootEndPoint
)

type ServerChannel

type ServerChannel struct {
	channel.DefaultNetServerChannel
	// contains filtered or unexported fields
}

func (*ServerChannel) IsActive

func (c *ServerChannel) IsActive() bool

func (*ServerChannel) ServeHTTP

func (c *ServerChannel) ServeHTTP(w http.ResponseWriter, r *http.Request)

func (*ServerChannel) UnsafeAccept

func (c *ServerChannel) UnsafeAccept() (channel.Channel, channel.Future)

func (*ServerChannel) UnsafeBind

func (c *ServerChannel) UnsafeBind(localAddr net.Addr) error

func (*ServerChannel) UnsafeClose

func (c *ServerChannel) UnsafeClose() error

type SessionType

type SessionType string
const SessionTypeMemory SessionType = "MEMORY"
const SessionTypeRedis SessionType = "REDIS"

type SimpleRoute added in v1.3.0

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

func NewSimpleRoute added in v1.3.0

func NewSimpleRoute() *SimpleRoute

func (*SimpleRoute) FindNode added in v1.3.0

func (r *SimpleRoute) FindNode(path string) RouteNode

func (*SimpleRoute) RouteNode added in v1.3.0

func (r *SimpleRoute) RouteNode(path string) (node RouteNode, parameters map[string]any, isLast bool)

func (*SimpleRoute) SetEndpoint added in v1.3.0

func (r *SimpleRoute) SetEndpoint(path string, handler HandlerTask, acceptances ...Acceptance) *SimpleRoute

func (*SimpleRoute) SetGroup added in v1.3.3

func (r *SimpleRoute) SetGroup(path string, acceptances ...Acceptance) *SimpleRoute

func (*SimpleRoute) SetRoot added in v1.3.0

func (r *SimpleRoute) SetRoot(handler HandlerTask, acceptances ...Acceptance) *SimpleRoute

func (*SimpleRoute) String added in v1.3.0

func (r *SimpleRoute) String() string

type StaticFilesHandlerTask

type StaticFilesHandlerTask struct {
	DefaultHTTPHandlerTask
	FolderPath string
	DoMinify   bool
	DoCache    bool
	// contains filtered or unexported fields
}

func NewStaticFilesHandlerTask

func NewStaticFilesHandlerTask(folderPath string) *StaticFilesHandlerTask

func (*StaticFilesHandlerTask) Get

type TaskHelper added in v1.2.7

type TaskHelper struct {
}

func (*TaskHelper) GetID added in v1.2.7

func (h *TaskHelper) GetID(name string, params map[string]any) string

func (*TaskHelper) GetNode added in v1.2.7

func (h *TaskHelper) GetNode(params map[string]any) RouteNode

func (*TaskHelper) GetNodeName added in v1.2.7

func (h *TaskHelper) GetNodeName(params map[string]any) string

func (*TaskHelper) IsIndex added in v1.2.7

func (h *TaskHelper) IsIndex(params map[string]any) bool

func (*TaskHelper) LogExtend added in v1.2.7

func (h *TaskHelper) LogExtend(key string, value any, params map[string]any)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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