76 lines
1.5 KiB
Go
76 lines
1.5 KiB
Go
package session
|
|
|
|
import (
|
|
ctx "context"
|
|
"net/http"
|
|
|
|
"gitea.com/go-chi/session"
|
|
|
|
"gitea.zokki.net/zokki/uni/web43-diary/context"
|
|
"gitea.zokki.net/zokki/uni/web43-diary/internal/models"
|
|
)
|
|
|
|
const (
|
|
SessionThemeKey = "session.user.theme"
|
|
SessionUserKey = "session.user.user"
|
|
)
|
|
|
|
type Session struct {
|
|
session.Store
|
|
}
|
|
|
|
func GetSession(sess any) *Session {
|
|
switch s := sess.(type) {
|
|
case session.Store:
|
|
return &Session{s}
|
|
case *session.Store:
|
|
return &Session{*s}
|
|
case context.Context:
|
|
return &Session{s.Session}
|
|
case *context.Context:
|
|
return &Session{s.Session}
|
|
case ctx.Context:
|
|
if c, ok := s.(*context.Context); ok {
|
|
return &Session{c.Session}
|
|
}
|
|
case *http.Request:
|
|
if c, ok := s.Context().(*context.Context); ok {
|
|
return &Session{c.Session}
|
|
}
|
|
case http.Request:
|
|
if c, ok := s.Context().(*context.Context); ok {
|
|
return &Session{c.Session}
|
|
}
|
|
}
|
|
|
|
return &Session{}
|
|
}
|
|
|
|
func (session *Session) GetTheme() models.WebTheme {
|
|
theme := session.Get(SessionThemeKey)
|
|
if theme == nil {
|
|
return models.DarkTheme
|
|
}
|
|
return theme.(models.WebTheme)
|
|
}
|
|
|
|
func (session *Session) SetTheme(theme models.WebTheme) {
|
|
session.Set(SessionThemeKey, theme)
|
|
}
|
|
|
|
func (session *Session) GetUser() *models.User {
|
|
user := session.Get(SessionUserKey)
|
|
if user == nil {
|
|
return &models.User{}
|
|
}
|
|
return user.(*models.User)
|
|
}
|
|
|
|
func (session *Session) SetUser(user *models.User) {
|
|
session.Set(SessionUserKey, user)
|
|
}
|
|
|
|
func (session *Session) DeleteUser() {
|
|
session.Delete(SessionUserKey)
|
|
}
|