# Functions
ErrToStatus converts an error to a HTTP status code.
IsSHA256 determines if a string represents an SHA256 hash.
JSONErrResponse Sends an `error` as a JSON object with a `message` property.
JSONResponse Sends a JSON payload in response to a HTTP request.
NewWebsocketIO creates a new websocket ReadWriteCloser wrapper.
ParseJSONBody attempts to parse the request body as JSON.
WSCloseError closes a websocket with an error message.
# Variables
ErrAddress indicates the interface didn't have an IPv4 address.
ErrAdminRequired indicates that an admin user is required.
ErrBadPort indicates that the provided port is invalid.
ErrBadValue indicates an invalid value for a config option.
ErrDefaultDomain indicates an attempt to remove the default domain.
ErrDomainUnverified indicates that the request domain could not be verified.
ErrExists indicates that a resource already exists.
ErrGenericNotFound indicates that a resource was not found.
ErrInterface indicates the default interface is missing.
ErrMethodNotAllowed indicates the user tried to use an API with an invalid request method.
ErrNotFound indicates an invalid API endpoint was provided.
ErrNotRunning indicates that a webspace is not running.
ErrRunning indicates that a webspace is already running.
ErrSSHKey indicates the user requested SSH be set up, but their account does not provide a key.
ErrTokenRequired indicates the user didn't pass an IAM token in the request.
ErrTooManyPorts indicates that too many port forwards are configured.
ErrTraefikProvider indicates an invalid Traefik config provider name was given.
ErrUIDMismatch indicates the user ID didn't match that of the User object.
ErrUsed indicates that the requested resource is already in use by a webspace.
ErrWebsocket indicates the endpoint supports websocket communication only.
# Structs
WebsocketIO is a wrapper implementing ReadWriteCloser on top of websocket.