31 lines
694 B
Go
31 lines
694 B
Go
package session
|
|
|
|
import sushi "git.sharkk.net/Sharkk/Sushi"
|
|
|
|
// Middleware provides session handling
|
|
func Middleware() sushi.Middleware {
|
|
return func(next sushi.Handler) sushi.Handler {
|
|
return func(ctx sushi.Ctx, params []string) {
|
|
sessionID := sushi.GetCookie(ctx, SessionCookieName)
|
|
var sess *Session
|
|
|
|
if sessionID != "" {
|
|
if existingSess, exists := GetSession(sessionID); exists {
|
|
sess = existingSess
|
|
sess.Touch()
|
|
StoreSession(sess)
|
|
SetSessionCookie(ctx, sessionID)
|
|
}
|
|
}
|
|
|
|
if sess == nil {
|
|
sess = CreateSession(0) // Guest session
|
|
SetSessionCookie(ctx, sess.ID)
|
|
}
|
|
|
|
ctx.SetUserValue(SessionCtxKey, sess)
|
|
next(ctx, params)
|
|
}
|
|
}
|
|
}
|