Documentation ¶
Overview ¶
Package tsweb contains code used in various Tailscale webservers.
Index ¶
- Variables
- func AllowDebugAccess(r *http.Request) bool
- func DefaultCertDir(leafDir string) string
- func IsProd443(addr string) bool
- func JSONHandler(fn interface{}) http.Handler
- func NewMux(debugHandler http.Handler) *http.ServeMux
- func Protected(h http.Handler) http.Handler
- func StdHandler(h ReturnHandler, logf logger.Logf) http.Handler
- func StdHandlerNo200s(h ReturnHandler, logf logger.Logf) http.Handler
- func Uptime() time.Duration
- type AccessLogRecord
- type HTTPError
- type Port80Handler
- type ReturnHandler
- type ReturnHandlerFunc
Constants ¶
This section is empty.
Variables ¶
var DevMode bool
DevMode controls whether extra output in shown, for when the binary is being run in dev mode.
Functions ¶
func AllowDebugAccess ¶
AllowDebugAccess reports whether r should be permitted to access various debug endpoints.
func DefaultCertDir ¶
func JSONHandler ¶ added in v0.100.0
JSONHandler wraps an HTTP handler function with a version that automatically unmarshals and marshals requests and responses respectively into fn's arguments and results.
The fn parameter is a function. It must take two or three input arguments. The first two arguments must be http.ResponseWriter and *http.Request. The optional third argument can be of any type representing the JSON input. The function's results can be either (error) or (T, error), where T is the JSON-marshalled result type.
For example: fn := func(w http.ResponseWriter, r *http.Request, in *Req) (*Res, error) { ... }
func NewMux ¶
NewMux returns a new ServeMux with debugHandler registered (and protected) at /debug/.
func Protected ¶
Protected wraps a provided debug handler, h, returning a Handler that enforces AllowDebugAccess and returns forbiden replies for unauthorized requests.
func StdHandler ¶ added in v0.98.0
func StdHandler(h ReturnHandler, logf logger.Logf) http.Handler
StdHandler converts a ReturnHandler into a standard http.Handler. Handled requests are logged using logf, as are any errors. Errors are handled as specified by the Handler interface.
func StdHandlerNo200s ¶ added in v0.98.0
func StdHandlerNo200s(h ReturnHandler, logf logger.Logf) http.Handler
StdHandlerNo200s is like StdHandler, but successfully handled HTTP requests don't write an access log entry to logf.
TODO(danderson): quick stopgap, probably want ...Options on StdHandler instead?
Types ¶
type AccessLogRecord ¶ added in v0.98.0
type AccessLogRecord struct { // Timestamp at which request processing started. When time.Time `json:"when"` // Time it took to finish processing the request. It does not // include the entire lifetime of the underlying connection in // cases like connection hijacking, only the lifetime of the HTTP // request handler. Seconds float64 `json:"duration"` // The client's ip:port. RemoteAddr string `json:"remote_addr"` // The HTTP protocol version, usually "HTTP/1.1 or HTTP/2". Proto string `json:"proto"` // Whether the request was received over TLS. TLS bool `json:"tls"` // The target hostname in the request. Host string `json:"host"` // The HTTP method invoked. Method string `json:"method"` // The unescaped request URI, including query parameters. RequestURI string `json:"request_uri"` // The client's user-agent UserAgent string `json:"user_agent"` // Where the client was before making this request. Referer string `json:"referer"` // The HTTP response code sent to the client. Code int `json:"code"` // Number of bytes sent in response body to client. If the request // was hijacked, only includes bytes sent up to the point of // hijacking. Bytes int `json:"bytes"` // Error encountered during request processing. Err string `json:"err"` }
AccessLogRecord is a record of one HTTP request served.
func (AccessLogRecord) String ¶ added in v0.98.0
func (m AccessLogRecord) String() string
String returns m as a JSON string.
type HTTPError ¶ added in v0.98.0
type HTTPError struct { Code int // HTTP response code to send to client; 0 means means 500 Msg string // Response body to send to client Err error // Detailed error to log on the server }
HTTPError is an error with embedded HTTP response information.
It is the error type to be (optionally) used by Handler.ServeHTTPReturn.
type Port80Handler ¶
Port80Handler is the handler to be given to autocert.Manager.HTTPHandler. The inner handler is the mux returned by NewMux containing registered /debug handlers.
func (Port80Handler) ServeHTTP ¶
func (h Port80Handler) ServeHTTP(w http.ResponseWriter, r *http.Request)
type ReturnHandler ¶ added in v0.98.0
type ReturnHandler interface { // ServeHTTPReturn is like http.Handler.ServeHTTP, except that // it can choose to return an error instead of writing to its // http.ResponseWriter. // // If ServeHTTPReturn returns an error, it caller should handle // an error by serving an HTTP 500 response to the user. The // error details should not be sent to the client, as they may // contain sensitive information. If the error is an // HTTPError, though, callers should use the HTTP response // code and message as the response to the client. ServeHTTPReturn(http.ResponseWriter, *http.Request) error }
ReturnHandler is like net/http.Handler, but the handler can return an error instead of writing to its ResponseWriter.
type ReturnHandlerFunc ¶ added in v0.98.1
type ReturnHandlerFunc func(http.ResponseWriter, *http.Request) error
ReturnHandlerFunc is an adapter to allow the use of ordinary functions as ReturnHandlers. If f is a function with the appropriate signature, ReturnHandlerFunc(f) is a ReturnHandler that calls f.
func (ReturnHandlerFunc) ServeHTTPReturn ¶ added in v0.98.1
func (f ReturnHandlerFunc) ServeHTTPReturn(w http.ResponseWriter, r *http.Request) error
ServeHTTPReturn calls f(w, r).