1
0

session.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package session
  2. import (
  3. "encoding/gob"
  4. "x-ui/database/model"
  5. "github.com/gin-contrib/sessions"
  6. "github.com/gin-gonic/gin"
  7. )
  8. const loginUser = "LOGIN_USER"
  9. func init() {
  10. gob.Register(model.User{})
  11. }
  12. func SetLoginUser(c *gin.Context, user *model.User) error {
  13. s := sessions.Default(c)
  14. s.Options(sessions.Options{
  15. Path: "/",
  16. HttpOnly: true,
  17. })
  18. s.Set(loginUser, user)
  19. return s.Save()
  20. }
  21. func SetMaxAge(c *gin.Context, maxAge int) error {
  22. s := sessions.Default(c)
  23. s.Options(sessions.Options{
  24. Path: "/",
  25. MaxAge: maxAge,
  26. })
  27. return s.Save()
  28. }
  29. func GetLoginUser(c *gin.Context) *model.User {
  30. s := sessions.Default(c)
  31. if obj := s.Get(loginUser); obj != nil {
  32. if user, ok := obj.(model.User); ok {
  33. return &user
  34. }
  35. }
  36. return nil
  37. }
  38. func IsLogin(c *gin.Context) bool {
  39. return GetLoginUser(c) != nil
  40. }
  41. func ClearSession(c *gin.Context) error {
  42. s := sessions.Default(c)
  43. s.Clear()
  44. s.Options(sessions.Options{
  45. Path: "/",
  46. MaxAge: -1,
  47. })
  48. if err := s.Save(); err != nil {
  49. return err
  50. }
  51. c.SetCookie("3x-ui", "", -1, "/", "", false, true)
  52. return nil
  53. }