Update to 4.1.1 - Able to set Sessions.CookieLength. Read HISTORY.md

https://github.com/kataras/iris/blob/master/HISTORY.md
This commit is contained in:
Gerasimos Maropoulos 2016-08-18 03:20:59 +03:00
parent 532254e03b
commit 2d067ac081
6 changed files with 39 additions and 10 deletions

View File

@ -2,11 +2,12 @@
**How to upgrade**: remove your `$GOPATH/src/github.com/kataras/iris` folder, open your command-line and execute this command: `go get -u github.com/kataras/iris/iris`. **How to upgrade**: remove your `$GOPATH/src/github.com/kataras/iris` folder, open your command-line and execute this command: `go get -u github.com/kataras/iris/iris`.
## 4.0.0 -> 4.1.0 ## 4.0.0 -> 4.1.1
- **NEW FEATURE**: Basic remote control through SSH, example [here](https://github.com/iris-contrib/examples/blob/master/ssh/main.go) - **NEW FEATURE**: Basic remote control through SSH, example [here](https://github.com/iris-contrib/examples/blob/master/ssh/main.go)
- **NEW FEATURE**: Optionally `OnError` foreach Party (by prefix, use it with your own risk), example [here](https://github.com/iris-contrib/examples/blob/master/httperrors/main.go#L37) - **NEW FEATURE**: Optionally `OnError` foreach Party (by prefix, use it with your own risk), example [here](https://github.com/iris-contrib/examples/blob/master/httperrors/main.go#L37)
- **FIX**: Sessions + SetFlash on same handler strange behavior[*](https://github.com/kataras/iris/issues/351) - **NEW**: `iris.Config.Sessions.CookieLength`, You're able to customize the length of each sessionid's cookie's value. Default (and previous' implementation) is 32.
- **FIX**: Websocket panic on non-websocket connection[*](https://github.com/kataras/iris/issues/367)
- **FIX**: Multi websocket servers client-side source route panic[*](https://github.com/kataras/iris/issues/365) - **FIX**: Multi websocket servers client-side source route panic[*](https://github.com/kataras/iris/issues/365)
- Better gzip response managment - Better gzip response managment

View File

@ -8,7 +8,7 @@
<a href="https://github.com/kataras/iris/blob/master/LICENSE"><img src="https://img.shields.io/badge/%20license-MIT%20%20License%20-E91E63.svg?style=flat-square" alt="License"></a> <a href="https://github.com/kataras/iris/blob/master/LICENSE"><img src="https://img.shields.io/badge/%20license-MIT%20%20License%20-E91E63.svg?style=flat-square" alt="License"></a>
<a href="https://github.com/kataras/iris/releases"><img src="https://img.shields.io/badge/%20release%20-%20v4.1.0%20-blue.svg?style=flat-square" alt="Releases"></a> <a href="https://github.com/kataras/iris/releases"><img src="https://img.shields.io/badge/%20release%20-%20v4.1.1%20-blue.svg?style=flat-square" alt="Releases"></a>
<a href="https://www.gitbook.com/book/kataras/iris/details"><img src="https://img.shields.io/badge/%20docs-reference-5272B4.svg?style=flat-square" alt="Practical Guide/Docs"></a><br/> <a href="https://www.gitbook.com/book/kataras/iris/details"><img src="https://img.shields.io/badge/%20docs-reference-5272B4.svg?style=flat-square" alt="Practical Guide/Docs"></a><br/>
@ -144,7 +144,7 @@ I recommend writing your API tests using this new library, [httpexpect](https://
Versioning Versioning
------------ ------------
Current: **v4.1.0** Current: **v4.1.1**
> Iris is an active project > Iris is an active project
@ -179,7 +179,7 @@ License can be found [here](LICENSE).
[Travis]: http://travis-ci.org/kataras/iris [Travis]: http://travis-ci.org/kataras/iris
[License Widget]: https://img.shields.io/badge/license-MIT%20%20License%20-E91E63.svg?style=flat-square [License Widget]: https://img.shields.io/badge/license-MIT%20%20License%20-E91E63.svg?style=flat-square
[License]: https://github.com/kataras/iris/blob/master/LICENSE [License]: https://github.com/kataras/iris/blob/master/LICENSE
[Release Widget]: https://img.shields.io/badge/release-v4.1.0-blue.svg?style=flat-square [Release Widget]: https://img.shields.io/badge/release-v4.1.1-blue.svg?style=flat-square
[Release]: https://github.com/kataras/iris/releases [Release]: https://github.com/kataras/iris/releases
[Chat Widget]: https://img.shields.io/badge/community-chat-00BCD4.svg?style=flat-square [Chat Widget]: https://img.shields.io/badge/community-chat-00BCD4.svg?style=flat-square
[Chat]: https://kataras.rocket.chat/channel/iris [Chat]: https://kataras.rocket.chat/channel/iris

View File

@ -17,6 +17,8 @@ const (
DefaultCookieName = "irissessionid" DefaultCookieName = "irissessionid"
// DefaultSessionGcDuration is the default Session Manager's GCDuration , which is 2 hours // DefaultSessionGcDuration is the default Session Manager's GCDuration , which is 2 hours
DefaultSessionGcDuration = time.Duration(2) * time.Hour DefaultSessionGcDuration = time.Duration(2) * time.Hour
// DefaultCookieLength is the default Session Manager's CookieLength, which is 32
DefaultCookieLength = 32
) )
type ( type (
@ -31,6 +33,9 @@ type (
Sessions struct { Sessions struct {
// Cookie string, the session's client cookie name, for example: "irissessionid" // Cookie string, the session's client cookie name, for example: "irissessionid"
Cookie string Cookie string
// CookieLength the length of the sessionid's cookie's value, let it to 0 if you don't want to change it
// Defaults to 32
CookieLength int
// DecodeCookie set it to true to decode the cookie key with base64 URLEncoding // DecodeCookie set it to true to decode the cookie key with base64 URLEncoding
// Defaults to false // Defaults to false
DecodeCookie bool DecodeCookie bool
@ -57,6 +62,7 @@ type (
func DefaultSessions() Sessions { func DefaultSessions() Sessions {
return Sessions{ return Sessions{
Cookie: DefaultCookieName, Cookie: DefaultCookieName,
CookieLength: DefaultCookieLength,
DecodeCookie: false, DecodeCookie: false,
Expires: 0, Expires: 0,
GcDuration: DefaultSessionGcDuration, GcDuration: DefaultSessionGcDuration,

View File

@ -232,13 +232,14 @@ func (ctx *Context) VirtualHostname() string {
// PathString returns the full escaped path as string // PathString returns the full escaped path as string
// for unescaped use: ctx.RequestCtx.RequestURI() or RequestPath(escape bool) // for unescaped use: ctx.RequestCtx.RequestURI() or RequestPath(escape bool)
func (ctx *Context) PathString() string { func (ctx *Context) PathString() string {
return ctx.RequestPath(true) return ctx.RequestPath(!ctx.framework.Config.DisablePathEscape)
} }
// RequestPath returns the requested path // RequestPath returns the requested path
func (ctx *Context) RequestPath(escape bool) string { func (ctx *Context) RequestPath(escape bool) string {
if escape { if escape {
return utils.BytesToString(ctx.RequestCtx.Path()) // return utils.BytesToString(ctx.RequestCtx.Path())
return utils.BytesToString(ctx.RequestCtx.URI().PathOriginal())
} }
return utils.BytesToString(ctx.RequestCtx.RequestURI()) return utils.BytesToString(ctx.RequestCtx.RequestURI())
} }
@ -462,6 +463,20 @@ func (ctx *Context) Redirect(urlToRedirect string, statusHeader ...int) {
httpStatus = statusHeader[0] httpStatus = statusHeader[0]
} }
ctx.RequestCtx.Redirect(urlToRedirect, httpStatus) ctx.RequestCtx.Redirect(urlToRedirect, httpStatus)
/* you can use one of these if you want to customize the redirection:
1.
u := fasthttp.AcquireURI()
ctx.URI().CopyTo(u)
u.Update(urlToRedirect)
ctx.SetHeader("Location", string(u.FullURI()))
fasthttp.ReleaseURI(u)
ctx.SetStatusCode(httpStatus)
2.
ctx.SetHeader("Location", urlToRedirect)
ctx.SetStatusCode(httpStatus)
*/
ctx.StopExecution() ctx.StopExecution()
} }

View File

@ -85,7 +85,7 @@ import (
const ( const (
// Version of the iris // Version of the iris
Version = "4.1.0" Version = "4.1.1"
banner = ` _____ _ banner = ` _____ _
|_ _| (_) |_ _| (_)

View File

@ -54,10 +54,13 @@ func (s *session) ID() string {
// Get returns the value of an entry by its key // Get returns the value of an entry by its key
func (s *session) Get(key string) interface{} { func (s *session) Get(key string) interface{} {
s.provider.update(s.sid) s.mu.Lock() // for any-case.
if value, found := s.values[key]; found { if value, found := s.values[key]; found {
s.mu.Unlock()
s.provider.update(s.sid)
return value return value
} }
s.mu.Unlock()
return nil return nil
} }
@ -280,6 +283,10 @@ func newSessionsManager(c *config.Sessions) *sessionsManager {
// get the real value for your tests by: // get the real value for your tests by:
//sessIdKey := url.QueryEscape(base64.URLEncoding.EncodeToString([]byte(iris.Config.Sessions.Cookie))) //sessIdKey := url.QueryEscape(base64.URLEncoding.EncodeToString([]byte(iris.Config.Sessions.Cookie)))
} }
if c.CookieLength <= 0 {
c.CookieLength = config.DefaultCookieLength
}
manager := &sessionsManager{config: c, provider: &sessionProvider{list: list.New(), sessions: make(map[string]*list.Element, 0), databases: make([]SessionDatabase, 0), expires: c.Expires}} manager := &sessionsManager{config: c, provider: &sessionProvider{list: list.New(), sessions: make(map[string]*list.Element, 0), databases: make([]SessionDatabase, 0), expires: c.Expires}}
//run the GC here //run the GC here
go manager.gc() go manager.gc()
@ -292,7 +299,7 @@ func (m *sessionsManager) registerDatabase(db SessionDatabase) {
} }
func (m *sessionsManager) generateSessionID() string { func (m *sessionsManager) generateSessionID() string {
return base64.URLEncoding.EncodeToString(utils.Random(32)) return base64.URLEncoding.EncodeToString(utils.Random(m.config.CookieLength))
} }
func domainCanPersistence(requestDomain string) bool { func domainCanPersistence(requestDomain string) bool {