mirror of
https://github.com/kataras/iris.git
synced 2025-01-24 19:21:03 +01:00
675c0d510c
## 4.0.0-alpha.2 -> 4.0.0-alpha.3 **New** A **Response Engine** gives you the freedom to create/change the render/response writer for - `context.JSON` - `context.JSONP` - `context.XML` - `context.Text` - `context.Markdown` - `context.Data` - `context.Render("my_custom_type",mystructOrData{}, iris.RenderOptions{"gzip":false,"charset":"UTF-8"})` - `context.MarkdownString` - `iris.ResponseString(...)` **Fix** - https://github.com/kataras/iris/issues/294 **Small changes** - `iris.Config.Charset`, before alpha.3 was `iris.Config.Rest.Charset` & `iris.Config.Render.Template.Charset`, but you can override it at runtime by passinth a map `iris.RenderOptions` on the `context.Render` call . - `iris.Config.IsDevelopment` , before alpha.1 was `iris.Config.Render.Template.IsDevelopment` **Websockets changes** No need to import the `github.com/kataras/iris/websocket` to use the `Connection` iteral, the websocket moved inside `kataras/iris` , now all exported variables' names have the prefix of `Websocket`, so the old `websocket.Connection` is now `iris.WebsocketConnection`. Generally, no other changes on the 'frontend API', for response engines examples and how you can register your own to add more features on existing response engines or replace them, look [here](https://github.com/iris-contrib/response). **BAD SIDE**: E-Book is still pointing on the v3 release, but will be updated soon.
149 lines
5.0 KiB
Go
149 lines
5.0 KiB
Go
package config
|
|
|
|
import (
|
|
"github.com/imdario/mergo"
|
|
)
|
|
|
|
// Default values for base Iris conf
|
|
const (
|
|
DefaultDisablePathCorrection = false
|
|
DefaultDisablePathEscape = false
|
|
DefaultCharset = "UTF-8"
|
|
)
|
|
|
|
type (
|
|
// Iris configs for the station
|
|
// All fields can be changed before server's listen except the DisablePathCorrection field
|
|
//
|
|
// MaxRequestBodySize is the only options that can be changed after server listen -
|
|
// using Config.MaxRequestBodySize = ...
|
|
// Render's rest config can be changed after declaration but before server's listen -
|
|
// using Config.Render.Rest...
|
|
// Render's Template config can be changed after declaration but before server's listen -
|
|
// using Config.Render.Template...
|
|
// Sessions config can be changed after declaration but before server's listen -
|
|
// using Config.Sessions...
|
|
// and so on...
|
|
Iris struct {
|
|
|
|
// DisablePathCorrection corrects and redirects the requested path to the registed path
|
|
// for example, if /home/ path is requested but no handler for this Route found,
|
|
// then the Router checks if /home handler exists, if yes,
|
|
// (permant)redirects the client to the correct path /home
|
|
//
|
|
// Default is false
|
|
DisablePathCorrection bool
|
|
|
|
// DisablePathEscape when is false then its escapes the path, the named parameters (if any).
|
|
// Change to true it if you want something like this https://github.com/kataras/iris/issues/135 to work
|
|
//
|
|
// When do you need to Disable(true) it:
|
|
// accepts parameters with slash '/'
|
|
// Request: http://localhost:8080/details/Project%2FDelta
|
|
// ctx.Param("project") returns the raw named parameter: Project%2FDelta
|
|
// which you can escape it manually with net/url:
|
|
// projectName, _ := url.QueryUnescape(c.Param("project").
|
|
// Look here: https://github.com/kataras/iris/issues/135 for more
|
|
//
|
|
// Default is false
|
|
DisablePathEscape bool
|
|
|
|
// DisableBanner outputs the iris banner at startup
|
|
//
|
|
// Default is false
|
|
DisableBanner bool
|
|
|
|
// ProfilePath a the route path, set it to enable http pprof tool
|
|
// Default is empty, if you set it to a $path, these routes will handled:
|
|
// $path/cmdline
|
|
// $path/profile
|
|
// $path/symbol
|
|
// $path/goroutine
|
|
// $path/heap
|
|
// $path/threadcreate
|
|
// $path/pprof/block
|
|
// for example if '/debug/pprof'
|
|
// http://yourdomain:PORT/debug/pprof/
|
|
// http://yourdomain:PORT/debug/pprof/cmdline
|
|
// http://yourdomain:PORT/debug/pprof/profile
|
|
// http://yourdomain:PORT/debug/pprof/symbol
|
|
// http://yourdomain:PORT/debug/pprof/goroutine
|
|
// http://yourdomain:PORT/debug/pprof/heap
|
|
// http://yourdomain:PORT/debug/pprof/threadcreate
|
|
// http://yourdomain:PORT/debug/pprof/pprof/block
|
|
// it can be a subdomain also, for example, if 'debug.'
|
|
// http://debug.yourdomain:PORT/
|
|
// http://debug.yourdomain:PORT/cmdline
|
|
// http://debug.yourdomain:PORT/profile
|
|
// http://debug.yourdomain:PORT/symbol
|
|
// http://debug.yourdomain:PORT/goroutine
|
|
// http://debug.yourdomain:PORT/heap
|
|
// http://debug.yourdomain:PORT/threadcreate
|
|
// http://debug.yourdomain:PORT/pprof/block
|
|
ProfilePath string
|
|
// DisableTemplateEngines set to true to disable loading the default template engine (html/template) and disallow the use of iris.UseEngine
|
|
// default is false
|
|
DisableTemplateEngines bool
|
|
// IsDevelopment iris will act like a developer, for example
|
|
// If true then re-builds the templates on each request
|
|
// default is false
|
|
IsDevelopment bool
|
|
|
|
// Charset character encoding for various rendering
|
|
// used for templates and the rest of the responses
|
|
// defaults to "UTF-8"
|
|
Charset string
|
|
|
|
// Sessions contains the configs for sessions
|
|
Sessions Sessions
|
|
|
|
// Websocket contains the configs for Websocket's server integration
|
|
Websocket *Websocket
|
|
|
|
// Tester contains the configs for the test framework, so far we have only one because all test framework's configs are setted by the iris itself
|
|
Tester Tester
|
|
}
|
|
)
|
|
|
|
// Default returns the default configuration for the Iris staton
|
|
func Default() Iris {
|
|
return Iris{
|
|
DisablePathCorrection: DefaultDisablePathCorrection,
|
|
DisablePathEscape: DefaultDisablePathEscape,
|
|
DisableBanner: false,
|
|
DisableTemplateEngines: false,
|
|
IsDevelopment: false,
|
|
Charset: DefaultCharset,
|
|
ProfilePath: "",
|
|
Sessions: DefaultSessions(),
|
|
Websocket: DefaultWebsocket(),
|
|
Tester: DefaultTester(),
|
|
}
|
|
}
|
|
|
|
// Merge merges the default with the given config and returns the result
|
|
// receives an array because the func caller is variadic
|
|
func (c Iris) Merge(cfg []Iris) (config Iris) {
|
|
// I tried to make it more generic with interfaces for all configs, inside config.go but it fails,
|
|
// so do it foreach configuration np they aint so much...
|
|
|
|
if cfg != nil && len(cfg) > 0 {
|
|
config = cfg[0]
|
|
mergo.Merge(&config, c)
|
|
} else {
|
|
_default := c
|
|
config = _default
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// MergeSingle merges the default with the given config and returns the result
|
|
func (c Iris) MergeSingle(cfg Iris) (config Iris) {
|
|
|
|
config = cfg
|
|
mergo.Merge(&config, c)
|
|
|
|
return
|
|
}
|