middleware

package
v0.28.1 Latest Latest
Warning

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

Go to latest
Published: Jan 24, 2024 License: AGPL-3.0 Imports: 31 Imported by: 0

Documentation

Index

Constants

View Source
const (

	// MimeNone means no response type.
	MimeNone mimeType = ""

	// MimeXML means response type is XML.
	MimeXML mimeType = "application/xml"
)
View Source
const (
	BucketURLPrm = "bucket"
)
View Source
const HdrAmzRequestID = "x-amz-request-id"

Variables

This section is empty.

Functions

func EncodeResponse

func EncodeResponse(response interface{}) []byte

EncodeResponse encodes the response headers into XML format.

func EncodeResponseNoHeader

func EncodeResponseNoHeader(response interface{}) []byte

EncodeResponseNoHeader encodes response without setting xml.Header. Should be used with periodicXMLWriter which sends xml.Header to the client with whitespaces to keep connection alive.

func EncodeToResponse

func EncodeToResponse(w http.ResponseWriter, response interface{}) error

EncodeToResponse encodes the response into ResponseWriter.

func EncodeToResponseNoHeader

func EncodeToResponseNoHeader(w http.ResponseWriter, response interface{}) error

EncodeToResponseNoHeader encodes the response into ResponseWriter without header status.

func GetAuthHeaders

func GetAuthHeaders(ctx context.Context) (*auth.AuthHeader, error)

GetAuthHeaders extracts auth.AuthHeader from context.

func GetBoxData

func GetBoxData(ctx context.Context) (*accessbox.Box, error)

GetBoxData extracts accessbox.Box from context.

func GetClientTime

func GetClientTime(ctx context.Context) (time.Time, error)

GetClientTime extracts time.Time from context.

func GetReqLog

func GetReqLog(ctx context.Context) *zap.Logger

GetReqLog returns log if set. If zap.Logger isn't set returns nil.

func GetRequestID

func GetRequestID(v interface{}) string

GetRequestID returns the request ID from the response writer or the context.

func SetAuthHeaders

func SetAuthHeaders(ctx context.Context, header *auth.AuthHeader) context.Context

SetAuthHeaders sets auth.AuthHeader in the context.

func SetBoxData

func SetBoxData(ctx context.Context, box *accessbox.Box) context.Context

SetBoxData sets accessbox.Box in the context.

func SetClientTime

func SetClientTime(ctx context.Context, newTime time.Time) context.Context

SetClientTime sets time.Time in the context.

func SetReqInfo

func SetReqInfo(ctx context.Context, req *ReqInfo) context.Context

SetReqInfo sets ReqInfo in the context.

func SetReqLogger

func SetReqLogger(ctx context.Context, log *zap.Logger) context.Context

SetReqLogger sets child zap.Logger in the context.

func StartHTTPServerSpan

func StartHTTPServerSpan(r *http.Request, operationName string, opts ...trace.SpanStartOption) (context.Context, trace.Span)

StartHTTPServerSpan starts root HTTP server span.

func WriteErrorResponse

func WriteErrorResponse(w http.ResponseWriter, reqInfo *ReqInfo, err error) int

WriteErrorResponse writes error headers.

func WriteErrorResponseNoHeader

func WriteErrorResponseNoHeader(w http.ResponseWriter, reqInfo *ReqInfo, err error)

WriteErrorResponseNoHeader writes XML encoded error to the response body.

func WriteResponse

func WriteResponse(w http.ResponseWriter, statusCode int, response []byte, mType mimeType)

WriteResponse writes given statusCode and response into w (with mType header if set).

func WriteResponseBody

func WriteResponseBody(w http.ResponseWriter, response []byte)

WriteResponseBody writes response into w.

func WriteSuccessResponseHeadersOnly

func WriteSuccessResponseHeadersOnly(w http.ResponseWriter)

WriteSuccessResponseHeadersOnly writes HTTP (200) OK response with no data to the client.

Types

type BucketResolveFunc

type BucketResolveFunc func(ctx context.Context, bucket string) (*data.BucketInfo, error)

BucketResolveFunc is a func to resolve bucket info by name.

type ErrorResponse

type ErrorResponse struct {
	XMLName    xml.Name `xml:"Error" json:"-"`
	Code       string
	Message    string
	Key        string `xml:"Key,omitempty" json:"Key,omitempty"`
	BucketName string `xml:"BucketName,omitempty" json:"BucketName,omitempty"`
	Resource   string
	RequestID  string `xml:"RequestId" json:"RequestId"`
	HostID     string `xml:"HostId" json:"HostId"`

	// The region where the bucket is located. This header is returned
	// only in HEAD bucket and ListObjects response.
	Region string `xml:"Region,omitempty" json:"Region,omitempty"`

	// Captures the server string returned in response header.
	Server string `xml:"-" json:"-"`

	// Underlying HTTP status code for the returned error.
	StatusCode int `xml:"-" json:"-"`
}

ErrorResponse -- error response format.

func (ErrorResponse) Error

func (e ErrorResponse) Error() string

Error -- Returns S3 error string.

type Func

type Func func(h http.Handler) http.Handler

func AddBucketName

func AddBucketName(l *zap.Logger) Func

AddBucketName adds bucket name to ReqInfo from context.

func AddObjectName

func AddObjectName(l *zap.Logger) Func

AddObjectName adds objects name to ReqInfo from context.

func Auth

func Auth(center auth.Center, log *zap.Logger) Func

func LogSuccessResponse

func LogSuccessResponse(l *zap.Logger) Func

func Metrics

func Metrics(log *zap.Logger, resolveBucket BucketResolveFunc, appMetrics *metrics.AppMetrics) Func

Metrics wraps http handler for api with basic statistics collection.

func Request

func Request(log *zap.Logger) Func

func Tracing

func Tracing() Func

Tracing adds tracing support for requests. Must be placed after prepareRequest middleware.

func WrapHandler

func WrapHandler(handler http.HandlerFunc) Func

type KeyVal

type KeyVal struct {
	Key string
	Val string
}

KeyVal -- appended to ReqInfo.Tags.

type ObjectRequest

type ObjectRequest struct {
	Bucket string
	Object string
	Method string
}

ObjectRequest represents object request data.

type ReqInfo

type ReqInfo struct {
	sync.RWMutex
	RemoteHost   string   // Client Host/IP
	Host         string   // Node Host/IP
	UserAgent    string   // User Agent
	DeploymentID string   // random generated s3-deployment-id
	RequestID    string   // x-amz-request-id
	API          string   // API name -- GetObject PutObject NewMultipartUpload etc.
	BucketName   string   // Bucket name
	ObjectName   string   // Object name
	TraceID      string   // Trace ID
	URL          *url.URL // Request url
	// contains filtered or unexported fields
}

ReqInfo stores the request info.

func GetReqInfo

func GetReqInfo(ctx context.Context) *ReqInfo

GetReqInfo returns ReqInfo if set. If ReqInfo isn't set returns new empty ReqInfo.

func NewReqInfo

func NewReqInfo(w http.ResponseWriter, r *http.Request, req ObjectRequest) *ReqInfo

NewReqInfo returns new ReqInfo based on parameters.

func (*ReqInfo) AppendTags

func (r *ReqInfo) AppendTags(key string, val string) *ReqInfo

AppendTags -- appends key/val to ReqInfo.tags.

func (*ReqInfo) GetTags

func (r *ReqInfo) GetTags() []KeyVal

GetTags -- returns the user defined tags.

func (*ReqInfo) SetTags

func (r *ReqInfo) SetTags(key string, val string) *ReqInfo

SetTags -- sets key/val to ReqInfo.tags.

type UsersStat

type UsersStat interface {
	Update(user, bucket, cnrID string, reqType int, in, out uint64)
}

Jump to

Keyboard shortcuts

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