secure_session.go 820 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package middleware
  2. import (
  3. "github.com/0xJacky/Nginx-UI/internal/user"
  4. "github.com/0xJacky/Nginx-UI/model"
  5. "github.com/gin-gonic/gin"
  6. "net/http"
  7. )
  8. func RequireSecureSession() gin.HandlerFunc {
  9. return func(c *gin.Context) {
  10. u, ok := c.Get("user")
  11. if !ok {
  12. c.Next()
  13. return
  14. }
  15. cUser := u.(*model.User)
  16. if !cUser.EnabledOTP() {
  17. c.Next()
  18. return
  19. }
  20. ssid := c.GetHeader("X-Secure-Session-ID")
  21. if ssid == "" {
  22. ssid = c.Query("X-Secure-Session-ID")
  23. }
  24. if ssid == "" {
  25. c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{
  26. "message": "Secure Session ID is empty",
  27. })
  28. return
  29. }
  30. if user.VerifySecureSessionID(ssid, cUser.ID) {
  31. c.Next()
  32. return
  33. }
  34. c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{
  35. "message": "Secure Session ID is invalid",
  36. })
  37. return
  38. }
  39. }