Documentation ¶
Index ¶
- Constants
- Variables
- func BindJSONBody(r *http.Request, w http.ResponseWriter, v *validation.SchemaValidator, ...) error
- func CSPJoin(directives []string) string
- func CheckContentType(raws []string) httproute.MiddlewareFunc
- func CookieDomainWithoutPort(host string) string
- func GetHost(r *http.Request, trustProxy bool) string
- func GetIP(r *http.Request, trustProxy bool) (ip string)
- func GetProto(r *http.Request, trustProxy bool) string
- func GetRedirectURI(r *http.Request, trustProxy bool) (out string, err error)
- func HealthCheckHandler(w http.ResponseWriter, r *http.Request)
- func HostRelative(u *url.URL) *url.URL
- func IsJSONContentType(contentType string) bool
- func IsNameHashed(p string) bool
- func NewExternalClient(timeout time.Duration) *http.Client
- func NewExternalClientWithOptions(timeout time.Duration, opts ExternalClientOptions) *http.Client
- func NoCache(next http.Handler) http.Handler
- func NoStore(next http.Handler) http.Handler
- func ParseJSONBody(r *http.Request, w http.ResponseWriter, ...) error
- func PermissionsPolicyHeader(next http.Handler) http.Handler
- func ShouldSendSameSiteNone(useragent string, secure bool) bool
- func UpdateCookie(w http.ResponseWriter, cookie *http.Cookie)
- func XContentTypeOptionsNosniff(next http.Handler) http.Handler
- func XFrameOptionsDeny(next http.Handler) http.Handler
- type BodyDefaulter
- type CookieDef
- type CookieManager
- type ExternalClientOptions
- type FileServer
- type FilesystemCache
- type FlashMessage
- type FlashMessageCookieManager
- type GzipMiddleware
- type HTTPHost
- type HTTPOrigin
- type HTTPPermissionsPolicy
- type HTTPProto
- type JSONOption
- type JSONResponseWriter
- type JSONResponseWriterLogger
- type PermissionsPolicyAllowlist
- type PermissionsPolicyDirective
- type PermissionsPolicyPolicy
- type RemoteIP
- type Result
- type ResultRedirect
- type StaticCSPHeader
- type TutorialCookie
- type TutorialCookieManager
- type TutorialCookieName
- type UserAgentString
Constants ¶
const BodyMaxSize = 1024 * 1024 * 10
Variables ¶
var DefaultPermissionsPolicy = []PermissionsPolicyPolicy{ {PermissionsPolicyDirectiveAccelerometer, PermissionsPolicyAllowlistNone}, {PermissionsPolicyDirectiveAmbientLightSensor, PermissionsPolicyAllowlistNone}, {PermissionsPolicyDirectiveAutoplay, PermissionsPolicyAllowlistAll}, {PermissionsPolicyDirectiveBattery, PermissionsPolicyAllowlistNone}, {PermissionsPolicyDirectiveBluetooth, PermissionsPolicyAllowlistNone}, {PermissionsPolicyDirectiveBrowsingTopics, PermissionsPolicyAllowlistNone}, {PermissionsPolicyDirectiveCamera, PermissionsPolicyAllowlistNone}, {PermissionsPolicyDirectiveDisplayCapture, PermissionsPolicyAllowlistNone}, {PermissionsPolicyDirectiveDocumentDomain, PermissionsPolicyAllowlistNone}, {PermissionsPolicyDirectiveEncryptedMedia, PermissionsPolicyAllowlistNone}, {PermissionsPolicyDirectiveExecutionWhileNotRendered, PermissionsPolicyAllowlistAll}, {PermissionsPolicyDirectiveExecutionWhileOutOfViewport, PermissionsPolicyAllowlistAll}, {PermissionsPolicyDirectiveFullscreen, PermissionsPolicyAllowlistAll}, {PermissionsPolicyDirectiveGamepad, PermissionsPolicyAllowlistNone}, {PermissionsPolicyDirectiveGeolocation, PermissionsPolicyAllowlistNone}, {PermissionsPolicyDirectiveGyroscope, PermissionsPolicyAllowlistNone}, {PermissionsPolicyDirectiveHid, PermissionsPolicyAllowlistNone}, {PermissionsPolicyDirectiveIdentityCredentialsGet, PermissionsPolicyAllowlistNone}, {PermissionsPolicyDirectiveIdleDetection, PermissionsPolicyAllowlistNone}, {PermissionsPolicyDirectiveLocalFonts, PermissionsPolicyAllowlistNone}, {PermissionsPolicyDirectiveMagnetometer, PermissionsPolicyAllowlistNone}, {PermissionsPolicyDirectiveMicrophone, PermissionsPolicyAllowlistNone}, {PermissionsPolicyDirectiveMidi, PermissionsPolicyAllowlistNone}, {PermissionsPolicyDirectiveOtpCredentials, PermissionsPolicyAllowlistNone}, {PermissionsPolicyDirectivePayment, PermissionsPolicyAllowlistNone}, {PermissionsPolicyDirectivePictureInPicture, PermissionsPolicyAllowlistNone}, {PermissionsPolicyDirectivePublickeyCredentialsCreate, PermissionsPolicyAllowlistSelf}, {PermissionsPolicyDirectivePublickeyCredentialsGet, PermissionsPolicyAllowlistSelf}, {PermissionsPolicyDirectiveScreenWakeLock, PermissionsPolicyAllowlistNone}, {PermissionsPolicyDirectiveSerial, PermissionsPolicyAllowlistNone}, {PermissionsPolicyDirectiveSpeakerSelection, PermissionsPolicyAllowlistNone}, {PermissionsPolicyDirectiveStorageAccess, PermissionsPolicyAllowlistNone}, {PermissionsPolicyDirectiveUsb, PermissionsPolicyAllowlistNone}, {PermissionsPolicyDirectiveWebShare, PermissionsPolicyAllowlistNone}, {PermissionsPolicyDirectiveWindowManagement, PermissionsPolicyAllowlistNone}, {PermissionsPolicyDirectiveXrSpatialTracking, PermissionsPolicyAllowlistNone}, }
* Enabled features: * - autoplay=* * - execution-while-not-rendered=* * - execution-while-out-of-viewport=* * - fullscreen=* * - publickey-credentials-create=(self) (for WebAuthn) * - publickey-credentials-get=(self) (for WebAuthn)
var DependencySet = wire.NewSet( NewJSONResponseWriterLogger, wire.Struct(new(JSONResponseWriter), "*"), wire.Struct(new(FlashMessage), "*"), wire.Struct(new(TutorialCookie), "*"), MakeHTTPOrigin, )
var FlashMessageTypeCookieDef = &CookieDef{ NameSuffix: "flash_message_type", Path: "/", SameSite: http.SameSiteNoneMode, }
FlashMessageTypeCookieDef is a HTTP session cookie.
var JSONTooLarge = apierrors.RequestEntityTooLarge.WithReason("JSONTooLarge")
var TutorialCookieNames = []TutorialCookieName{ SignupLoginTutorialCookieName, SettingsTutorialCookieName, }
Functions ¶
func BindJSONBody ¶
func BindJSONBody(r *http.Request, w http.ResponseWriter, v *validation.SchemaValidator, payload interface{}, options ...JSONOption) error
func CheckContentType ¶
func CheckContentType(raws []string) httproute.MiddlewareFunc
func CookieDomainWithoutPort ¶
CookieDomainWithoutPort derives host from r. If host has port, the port is removed. If host-1 is longer than ETLD+1, host-1 is returned. If ETLD+1 cannot be derived, an empty string is returned. The return value never have port.
func HealthCheckHandler ¶
func HealthCheckHandler(w http.ResponseWriter, r *http.Request)
HealthCheckHandler is basic handler for server health check
func IsJSONContentType ¶
func IsNameHashed ¶
func NewExternalClientWithOptions ¶
func NewExternalClientWithOptions(timeout time.Duration, opts ExternalClientOptions) *http.Client
func NoCache ¶
NoCache allows caches to store a response but requires them to revalidate it before reuse.
func ParseJSONBody ¶
func ParseJSONBody(r *http.Request, w http.ResponseWriter, parse func(io.Reader, interface{}) error, payload interface{}, options ...JSONOption) error
func ShouldSendSameSiteNone ¶
func UpdateCookie ¶
func UpdateCookie(w http.ResponseWriter, cookie *http.Cookie)
Types ¶
type BodyDefaulter ¶
type BodyDefaulter interface {
SetDefaults()
}
type CookieManager ¶
type CookieManager struct { Request *http.Request TrustProxy bool CookiePrefix string CookieDomain string }
func (*CookieManager) ClearCookie ¶
func (f *CookieManager) ClearCookie(def *CookieDef) *http.Cookie
ClearCookie generates a cookie that when set, the cookie is clear.
func (*CookieManager) CookieName ¶
func (f *CookieManager) CookieName(def *CookieDef) string
CookieName returns the full name, that is, CookiePrefix followed by NameSuffix.
func (*CookieManager) GetCookie ¶
GetCookie is wrapper around http.Request.Cookie, taking care of cookie name.
func (*CookieManager) ValueCookie ¶
func (f *CookieManager) ValueCookie(def *CookieDef, value string) *http.Cookie
ValueCookie generates a cookie that when set, the cookie is set to the specified value.
type ExternalClientOptions ¶
type ExternalClientOptions struct {
FollowRedirect bool
}
type FileServer ¶
type FileServer struct { FileSystem http.FileSystem FallbackToIndexHTML bool }
FileServer is a specialized version of http.FileServer that assumes files rooted at FileSystem are name-hashed. cache-control are written specifically for index.html and name-hashed files.
func (*FileServer) ServeHTTP ¶
func (s *FileServer) ServeHTTP(w http.ResponseWriter, r *http.Request)
type FilesystemCache ¶
type FilesystemCache struct {
// contains filtered or unexported fields
}
FilesystemCache is a helper to write the response into the tmp directory. The response is then served with http.FileServer, with the advantage of supporting range request and cache validation. If the file is not modified, the response is a 304. For even better performance, we need to add Cache-Control header to take advantage of the fact that the filename is hashed. However, http.FileServer does not support Cache-Control. Unconditionally adding Cache-Control for non-existent file is problematic.
func NewFilesystemCache ¶
func NewFilesystemCache() *FilesystemCache
func (*FilesystemCache) Clear ¶
func (c *FilesystemCache) Clear() error
type FlashMessage ¶
type FlashMessage struct {
Cookies FlashMessageCookieManager
}
func (*FlashMessage) Flash ¶
func (f *FlashMessage) Flash(rw http.ResponseWriter, messageType string)
func (*FlashMessage) Pop ¶
func (f *FlashMessage) Pop(r *http.Request, rw http.ResponseWriter) string
type GzipMiddleware ¶
type GzipMiddleware struct{}
type HTTPOrigin ¶
type HTTPOrigin string
func MakeHTTPOrigin ¶
func MakeHTTPOrigin(proto HTTPProto, host HTTPHost) HTTPOrigin
type HTTPPermissionsPolicy ¶
type HTTPPermissionsPolicy []PermissionsPolicyPolicy
func (HTTPPermissionsPolicy) String ¶
func (p HTTPPermissionsPolicy) String() string
type JSONOption ¶
type JSONOption func(option *jsonOption)
func WithBodyMaxSize ¶
func WithBodyMaxSize(size int64) JSONOption
type JSONResponseWriter ¶
type JSONResponseWriter struct {
Logger JSONResponseWriterLogger
}
func (*JSONResponseWriter) WriteResponse ¶
func (w *JSONResponseWriter) WriteResponse(rw http.ResponseWriter, resp *api.Response)
type JSONResponseWriterLogger ¶
func NewJSONResponseWriterLogger ¶
func NewJSONResponseWriterLogger(lf *log.Factory) JSONResponseWriterLogger
type PermissionsPolicyAllowlist ¶
type PermissionsPolicyAllowlist string
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Permissions-Policy#allowlist
const ( PermissionsPolicyAllowlistAll PermissionsPolicyAllowlist = "*" PermissionsPolicyAllowlistNone PermissionsPolicyAllowlist = "()" PermissionsPolicyAllowlistSelf PermissionsPolicyAllowlist = "(self)" PermissionsPolicyAllowlistSrc PermissionsPolicyAllowlist = "(src)" )
type PermissionsPolicyDirective ¶
type PermissionsPolicyDirective string
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Permissions-Policy#directives
const ( PermissionsPolicyDirectiveAccelerometer PermissionsPolicyDirective = "accelerometer" PermissionsPolicyDirectiveAmbientLightSensor PermissionsPolicyDirective = "ambient-light-sensor" PermissionsPolicyDirectiveAutoplay PermissionsPolicyDirective = "autoplay" PermissionsPolicyDirectiveBattery PermissionsPolicyDirective = "battery" PermissionsPolicyDirectiveBluetooth PermissionsPolicyDirective = "bluetooth" PermissionsPolicyDirectiveBrowsingTopics PermissionsPolicyDirective = "browsing-topics" PermissionsPolicyDirectiveCamera PermissionsPolicyDirective = "camera" PermissionsPolicyDirectiveDisplayCapture PermissionsPolicyDirective = "display-capture" PermissionsPolicyDirectiveDocumentDomain PermissionsPolicyDirective = "document-domain" PermissionsPolicyDirectiveEncryptedMedia PermissionsPolicyDirective = "encrypted-media" PermissionsPolicyDirectiveExecutionWhileNotRendered PermissionsPolicyDirective = "execution-while-not-rendered" PermissionsPolicyDirectiveExecutionWhileOutOfViewport PermissionsPolicyDirective = "execution-while-out-of-viewport" PermissionsPolicyDirectiveFullscreen PermissionsPolicyDirective = "fullscreen" PermissionsPolicyDirectiveGamepad PermissionsPolicyDirective = "gamepad" PermissionsPolicyDirectiveGeolocation PermissionsPolicyDirective = "geolocation" PermissionsPolicyDirectiveGyroscope PermissionsPolicyDirective = "gyroscope" PermissionsPolicyDirectiveHid PermissionsPolicyDirective = "hid" PermissionsPolicyDirectiveIdentityCredentialsGet PermissionsPolicyDirective = "identity-credentials-get" PermissionsPolicyDirectiveIdleDetection PermissionsPolicyDirective = "idle-detection" PermissionsPolicyDirectiveLocalFonts PermissionsPolicyDirective = "local-fonts" PermissionsPolicyDirectiveMagnetometer PermissionsPolicyDirective = "magnetometer" PermissionsPolicyDirectiveMicrophone PermissionsPolicyDirective = "microphone" PermissionsPolicyDirectiveMidi PermissionsPolicyDirective = "midi" PermissionsPolicyDirectiveOtpCredentials PermissionsPolicyDirective = "otp-credentials" PermissionsPolicyDirectivePayment PermissionsPolicyDirective = "payment" PermissionsPolicyDirectivePictureInPicture PermissionsPolicyDirective = "picture-in-picture" PermissionsPolicyDirectivePublickeyCredentialsCreate PermissionsPolicyDirective = "publickey-credentials-create" PermissionsPolicyDirectivePublickeyCredentialsGet PermissionsPolicyDirective = "publickey-credentials-get" PermissionsPolicyDirectiveScreenWakeLock PermissionsPolicyDirective = "screen-wake-lock" PermissionsPolicyDirectiveSerial PermissionsPolicyDirective = "serial" PermissionsPolicyDirectiveSpeakerSelection PermissionsPolicyDirective = "speaker-selection" PermissionsPolicyDirectiveStorageAccess PermissionsPolicyDirective = "storage-access" PermissionsPolicyDirectiveUsb PermissionsPolicyDirective = "usb" PermissionsPolicyDirectiveWindowManagement PermissionsPolicyDirective = "window-management" PermissionsPolicyDirectiveXrSpatialTracking PermissionsPolicyDirective = "xr-spatial-tracking" )
type PermissionsPolicyPolicy ¶
type PermissionsPolicyPolicy struct { Directive PermissionsPolicyDirective Allowlist PermissionsPolicyAllowlist }
type Result ¶
type Result interface { WriteResponse(rw http.ResponseWriter, r *http.Request) IsInternalError() bool }
type ResultRedirect ¶
func (*ResultRedirect) IsInternalError ¶
func (re *ResultRedirect) IsInternalError() bool
func (*ResultRedirect) WriteResponse ¶
func (re *ResultRedirect) WriteResponse(rw http.ResponseWriter, r *http.Request)
type StaticCSPHeader ¶
type StaticCSPHeader struct {
CSPDirectives []string
}
type TutorialCookie ¶
type TutorialCookie struct {
Cookies FlashMessageCookieManager
}
func (*TutorialCookie) Pop ¶
func (t *TutorialCookie) Pop(r *http.Request, rw http.ResponseWriter, name TutorialCookieName) bool
func (*TutorialCookie) SetAll ¶
func (t *TutorialCookie) SetAll(rw http.ResponseWriter)
type TutorialCookieManager ¶
type TutorialCookieName ¶
type TutorialCookieName string
const ( SignupLoginTutorialCookieName TutorialCookieName = "signup_login_tutorial" SettingsTutorialCookieName TutorialCookieName = "settings_tutorial" )
type UserAgentString ¶
type UserAgentString string
Source Files ¶
- content_type.go
- cookie.go
- deps.go
- etag.go
- ext_client.go
- file_server.go
- filesystem_cache.go
- flash_message.go
- gzip.go
- healthz.go
- host.go
- ip.go
- json.go
- no_cache.go
- no_store.go
- origin.go
- permissions_policy.go
- permissions_policy_header.go
- proto.go
- redirect_uri.go
- result.go
- samesite.go
- static_csp_header.go
- tutorial.go
- user_agent.go
- x_content_type_options_nosniff.go
- x_frame_options_deny.go