mirror of
https://github.com/kataras/iris.git
synced 2025-01-23 18:51:03 +01:00
c4f5fae561
Former-commit-id: bd5463a169a36b078dba1c1b6e7dd3ffbd627617
213 lines
8.4 KiB
Go
213 lines
8.4 KiB
Go
// Copyright 2017 Gerasimos Maropoulos, ΓΜ. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package iris
|
|
|
|
// The below code will be removed at the next release.
|
|
// It's here to make your overall experience more familiar with the APIs you used before Iris.
|
|
import (
|
|
"net"
|
|
"net/url"
|
|
"os"
|
|
|
|
"github.com/kataras/iris/cache"
|
|
"github.com/kataras/iris/context"
|
|
"github.com/kataras/iris/core/handlerconv"
|
|
"github.com/kataras/iris/core/host"
|
|
"github.com/kataras/iris/core/nettools"
|
|
)
|
|
|
|
// ToHandler converts native http.Handler & http.HandlerFunc to context.Handler.
|
|
//
|
|
// Supported form types:
|
|
// .ToHandler(h http.Handler)
|
|
// .ToHandler(func(w http.ResponseWriter, r *http.Request))
|
|
// .ToHandler(func(w http.ResponseWriter, r *http.Request, next http.HandlerFunc))
|
|
//
|
|
// Deprecated. Use the "core/handlerconv" package instead, equivalent to `ToHandler` is its `FromStd` function.
|
|
func ToHandler(handler interface{}) context.Handler {
|
|
return handlerconv.FromStd(handler)
|
|
}
|
|
|
|
// Cache provides cache capabilities to a route's handler.
|
|
// Usage:
|
|
// Get("/", Cache(func(ctx context.Context){
|
|
// ctx.Writef("Hello, world!") // or a template or anything else
|
|
// }, time.Duration(10*time.Second))) // duration of expiration
|
|
// if <=time.Second then it tries to find it though request header's "cache-control" maxage value.
|
|
//
|
|
// Deprecated. Use "github.com/kataras/iris/cache" sub-package instead.
|
|
var Cache = cache.CacheHandler
|
|
|
|
// CheckErr is the old `Must`. It panics on errors as expected with
|
|
// the old listen functions, change of this method will affect only ListenXXX functions.
|
|
//
|
|
// Its only callers are the following, deprecated, listen functions.
|
|
var CheckErr = func(err error) {
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
// Serve serves incoming connections from the given listener.
|
|
//
|
|
// Serve blocks until the given listener returns permanent error.
|
|
//
|
|
// Deprecated. Use `Run` instead.
|
|
func (app *Application) Serve(l net.Listener) error {
|
|
return app.Run(Listener(l))
|
|
}
|
|
|
|
// Listen starts the standalone http server
|
|
// which listens to the addr parameter which as the form of
|
|
// host:port
|
|
//
|
|
// Deprecated. Use `Run` instead.
|
|
func (app *Application) Listen(addr string) {
|
|
CheckErr(app.Run(Addr(addr)))
|
|
}
|
|
|
|
// ListenUNIX starts the server listening to the new requests using a 'socket file'.
|
|
// Note: this works only on unix.
|
|
//
|
|
// Deprecated. Use `Run` instead.
|
|
func (app *Application) ListenUNIX(socketFile string, mode os.FileMode) {
|
|
l, err := nettools.UNIX(socketFile, mode)
|
|
CheckErr(err)
|
|
|
|
CheckErr(app.Run(Listener(l)))
|
|
}
|
|
|
|
// ListenTLS starts the secure server with provided certificates,
|
|
// if you use this method the requests of the form of 'http://' will fail
|
|
// only https:// connections are allowed
|
|
// which listens to the addr parameter which as the form of
|
|
// host:port
|
|
//
|
|
//
|
|
// Deprecated. Use `Run` instead.
|
|
func (app *Application) ListenTLS(addr string, certFile, keyFile string) {
|
|
CheckErr(app.Run(TLS(addr, certFile, keyFile)))
|
|
}
|
|
|
|
// ListenLETSENCRYPT starts the server listening at the specific nat address
|
|
// using key & certification taken from the letsencrypt.org 's servers
|
|
// it's also starts a second 'http' server to redirect all 'http://$ADDR/$PATH' to the' https://$ADDR/$PATH'
|
|
// it creates a cache file to store the certifications, for performance reasons, this file by-default is "./certcache"
|
|
// if you skip the second parameter then the cache file is "./letsencrypt.cache"
|
|
// if you want to disable cache then simple pass as second argument an empty empty string ""
|
|
//
|
|
// Deprecated. Use `Run` instead.
|
|
func (app *Application) ListenLETSENCRYPT(addr string, cacheDirOptional ...string) {
|
|
l, err := nettools.LETSENCRYPT(addr, addr, cacheDirOptional...)
|
|
CheckErr(err)
|
|
// create the redirect server to redirect http://... to https://...
|
|
hostname := nettools.ResolveHostname(addr)
|
|
proxyAddr := hostname + ":80"
|
|
target, err := url.Parse("https://" + hostname)
|
|
CheckErr(err)
|
|
go host.NewProxy(proxyAddr, target).ListenAndServe()
|
|
|
|
CheckErr(app.Run(Listener(l)))
|
|
}
|
|
|
|
// OnStatusCode registers an error http status code
|
|
// based on the "statusCode" >= 400.
|
|
// The handler is being wrapepd by a generic
|
|
// handler which will try to reset
|
|
// the body if recorder was enabled
|
|
// and/or disable the gzip if gzip response recorder
|
|
// was active.
|
|
//
|
|
// Deprecated. Use `OnErrorCode` instead.
|
|
func (app *Application) OnStatusCode(statusCode int, handler context.Handler) {
|
|
app.OnErrorCode(statusCode, handler)
|
|
}
|
|
|
|
// HTTP status codes as registered with IANA.
|
|
// See: http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml
|
|
// Raw Copy from the net/http std package in order to recude the import path of "net/http" for the users.
|
|
//
|
|
// These may or may not stay.
|
|
const (
|
|
StatusContinue = 100 // RFC 7231, 6.2.1
|
|
StatusSwitchingProtocols = 101 // RFC 7231, 6.2.2
|
|
StatusProcessing = 102 // RFC 2518, 10.1
|
|
|
|
StatusOK = 200 // RFC 7231, 6.3.1
|
|
StatusCreated = 201 // RFC 7231, 6.3.2
|
|
StatusAccepted = 202 // RFC 7231, 6.3.3
|
|
StatusNonAuthoritativeInfo = 203 // RFC 7231, 6.3.4
|
|
StatusNoContent = 204 // RFC 7231, 6.3.5
|
|
StatusResetContent = 205 // RFC 7231, 6.3.6
|
|
StatusPartialContent = 206 // RFC 7233, 4.1
|
|
StatusMultiStatus = 207 // RFC 4918, 11.1
|
|
StatusAlreadyReported = 208 // RFC 5842, 7.1
|
|
StatusIMUsed = 226 // RFC 3229, 10.4.1
|
|
|
|
StatusMultipleChoices = 300 // RFC 7231, 6.4.1
|
|
StatusMovedPermanently = 301 // RFC 7231, 6.4.2
|
|
StatusFound = 302 // RFC 7231, 6.4.3
|
|
StatusSeeOther = 303 // RFC 7231, 6.4.4
|
|
StatusNotModified = 304 // RFC 7232, 4.1
|
|
StatusUseProxy = 305 // RFC 7231, 6.4.5
|
|
_ = 306 // RFC 7231, 6.4.6 (Unused)
|
|
StatusTemporaryRedirect = 307 // RFC 7231, 6.4.7
|
|
StatusPermanentRedirect = 308 // RFC 7538, 3
|
|
|
|
StatusBadRequest = 400 // RFC 7231, 6.5.1
|
|
StatusUnauthorized = 401 // RFC 7235, 3.1
|
|
StatusPaymentRequired = 402 // RFC 7231, 6.5.2
|
|
StatusForbidden = 403 // RFC 7231, 6.5.3
|
|
StatusNotFound = 404 // RFC 7231, 6.5.4
|
|
StatusMethodNotAllowed = 405 // RFC 7231, 6.5.5
|
|
StatusNotAcceptable = 406 // RFC 7231, 6.5.6
|
|
StatusProxyAuthRequired = 407 // RFC 7235, 3.2
|
|
StatusRequestTimeout = 408 // RFC 7231, 6.5.7
|
|
StatusConflict = 409 // RFC 7231, 6.5.8
|
|
StatusGone = 410 // RFC 7231, 6.5.9
|
|
StatusLengthRequired = 411 // RFC 7231, 6.5.10
|
|
StatusPreconditionFailed = 412 // RFC 7232, 4.2
|
|
StatusRequestEntityTooLarge = 413 // RFC 7231, 6.5.11
|
|
StatusRequestURITooLong = 414 // RFC 7231, 6.5.12
|
|
StatusUnsupportedMediaType = 415 // RFC 7231, 6.5.13
|
|
StatusRequestedRangeNotSatisfiable = 416 // RFC 7233, 4.4
|
|
StatusExpectationFailed = 417 // RFC 7231, 6.5.14
|
|
StatusTeapot = 418 // RFC 7168, 2.3.3
|
|
StatusUnprocessableEntity = 422 // RFC 4918, 11.2
|
|
StatusLocked = 423 // RFC 4918, 11.3
|
|
StatusFailedDependency = 424 // RFC 4918, 11.4
|
|
StatusUpgradeRequired = 426 // RFC 7231, 6.5.15
|
|
StatusPreconditionRequired = 428 // RFC 6585, 3
|
|
StatusTooManyRequests = 429 // RFC 6585, 4
|
|
StatusRequestHeaderFieldsTooLarge = 431 // RFC 6585, 5
|
|
StatusUnavailableForLegalReasons = 451 // RFC 7725, 3
|
|
|
|
StatusInternalServerError = 500 // RFC 7231, 6.6.1
|
|
StatusNotImplemented = 501 // RFC 7231, 6.6.2
|
|
StatusBadGateway = 502 // RFC 7231, 6.6.3
|
|
StatusServiceUnavailable = 503 // RFC 7231, 6.6.4
|
|
StatusGatewayTimeout = 504 // RFC 7231, 6.6.5
|
|
StatusHTTPVersionNotSupported = 505 // RFC 7231, 6.6.6
|
|
StatusVariantAlsoNegotiates = 506 // RFC 2295, 8.1
|
|
StatusInsufficientStorage = 507 // RFC 4918, 11.5
|
|
StatusLoopDetected = 508 // RFC 5842, 7.2
|
|
StatusNotExtended = 510 // RFC 2774, 7
|
|
StatusNetworkAuthenticationRequired = 511 // RFC 6585, 6
|
|
)
|
|
|
|
// These may or may not stay, you can use net/http's constants too.
|
|
const (
|
|
MethodGet = "GET"
|
|
MethodPost = "POST"
|
|
MethodPut = "PUT"
|
|
MethodDelete = "DELETE"
|
|
MethodConnect = "CONNECT"
|
|
MethodHead = "HEAD"
|
|
MethodPatch = "PATCH"
|
|
MethodOptions = "OPTIONS"
|
|
MethodTrace = "TRACE"
|
|
// MethodNone is declared at iris.go, it will stay.
|
|
)
|