uni/WEB43-diary/internal/session/session.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)
}