Publish the new version :airplane: | Look description please!
# FAQ
### Looking for free support?
http://support.iris-go.com
https://kataras.rocket.chat/channel/iris
### Looking for previous versions?
https://github.com/kataras/iris#version
### Should I upgrade my Iris?
Developers are not forced to upgrade if they don't really need it. Upgrade whenever you feel ready.
> Iris uses the [vendor directory](https://docs.google.com/document/d/1Bz5-UB7g2uPBdOx-rw5t9MxJwkfpx90cqG9AFL0JAYo) feature, so you get truly reproducible builds, as this method guards against upstream renames and deletes.
**How to upgrade**: Open your command-line and execute this command: `go get -u github.com/kataras/iris`.
For further installation support, please click [here](http://support.iris-go.com/d/16-how-to-install-iris-web-framework).
### About our new home page
http://iris-go.com
Thanks to [Santosh Anand](https://github.com/santoshanand) the http://iris-go.com has been upgraded and it's really awesome!
[Santosh](https://github.com/santoshanand) is a freelancer, he has a great knowledge of nodejs and express js, Android, iOS, React Native, Vue.js etc, if you need a developer to find or create a solution for your problem or task, please contact with him.
The amount of the next two or three donations you'll send they will be immediately transferred to his own account balance, so be generous please!
Read more at https://github.com/kataras/iris/blob/master/HISTORY.md
Former-commit-id: eec2d71bbe011d6b48d2526eb25919e36e5ad94e
2017-06-03 22:22:52 +02:00
|
|
|
// 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)
|
2017-06-10 02:31:50 +02:00
|
|
|
// create the redirect server to redirect http://... to https://...
|
|
|
|
hostname := nettools.ResolveHostname(addr)
|
|
|
|
proxyAddr := hostname + ":80"
|
|
|
|
target, err := url.Parse("https://" + hostname)
|
Publish the new version :airplane: | Look description please!
# FAQ
### Looking for free support?
http://support.iris-go.com
https://kataras.rocket.chat/channel/iris
### Looking for previous versions?
https://github.com/kataras/iris#version
### Should I upgrade my Iris?
Developers are not forced to upgrade if they don't really need it. Upgrade whenever you feel ready.
> Iris uses the [vendor directory](https://docs.google.com/document/d/1Bz5-UB7g2uPBdOx-rw5t9MxJwkfpx90cqG9AFL0JAYo) feature, so you get truly reproducible builds, as this method guards against upstream renames and deletes.
**How to upgrade**: Open your command-line and execute this command: `go get -u github.com/kataras/iris`.
For further installation support, please click [here](http://support.iris-go.com/d/16-how-to-install-iris-web-framework).
### About our new home page
http://iris-go.com
Thanks to [Santosh Anand](https://github.com/santoshanand) the http://iris-go.com has been upgraded and it's really awesome!
[Santosh](https://github.com/santoshanand) is a freelancer, he has a great knowledge of nodejs and express js, Android, iOS, React Native, Vue.js etc, if you need a developer to find or create a solution for your problem or task, please contact with him.
The amount of the next two or three donations you'll send they will be immediately transferred to his own account balance, so be generous please!
Read more at https://github.com/kataras/iris/blob/master/HISTORY.md
Former-commit-id: eec2d71bbe011d6b48d2526eb25919e36e5ad94e
2017-06-03 22:22:52 +02:00
|
|
|
CheckErr(err)
|
2017-06-10 02:31:50 +02:00
|
|
|
go host.NewProxy(proxyAddr, target).ListenAndServe()
|
Publish the new version :airplane: | Look description please!
# FAQ
### Looking for free support?
http://support.iris-go.com
https://kataras.rocket.chat/channel/iris
### Looking for previous versions?
https://github.com/kataras/iris#version
### Should I upgrade my Iris?
Developers are not forced to upgrade if they don't really need it. Upgrade whenever you feel ready.
> Iris uses the [vendor directory](https://docs.google.com/document/d/1Bz5-UB7g2uPBdOx-rw5t9MxJwkfpx90cqG9AFL0JAYo) feature, so you get truly reproducible builds, as this method guards against upstream renames and deletes.
**How to upgrade**: Open your command-line and execute this command: `go get -u github.com/kataras/iris`.
For further installation support, please click [here](http://support.iris-go.com/d/16-how-to-install-iris-web-framework).
### About our new home page
http://iris-go.com
Thanks to [Santosh Anand](https://github.com/santoshanand) the http://iris-go.com has been upgraded and it's really awesome!
[Santosh](https://github.com/santoshanand) is a freelancer, he has a great knowledge of nodejs and express js, Android, iOS, React Native, Vue.js etc, if you need a developer to find or create a solution for your problem or task, please contact with him.
The amount of the next two or three donations you'll send they will be immediately transferred to his own account balance, so be generous please!
Read more at https://github.com/kataras/iris/blob/master/HISTORY.md
Former-commit-id: eec2d71bbe011d6b48d2526eb25919e36e5ad94e
2017-06-03 22:22:52 +02:00
|
|
|
|
|
|
|
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.
|
|
|
|
)
|