api.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. package api
  2. import (
  3. "errors"
  4. "github.com/0xJacky/Nginx-UI/model"
  5. "github.com/gin-gonic/gin"
  6. "github.com/uozi-tech/cosy"
  7. "github.com/uozi-tech/cosy/logger"
  8. "gorm.io/gorm"
  9. "net/http"
  10. )
  11. func CurrentUser(c *gin.Context) *model.User {
  12. return c.MustGet("user").(*model.User)
  13. }
  14. func ErrHandler(c *gin.Context, err error) {
  15. logger.GetLogger().Errorln(err)
  16. var cErr *cosy.Error
  17. switch {
  18. case errors.Is(err, gorm.ErrRecordNotFound):
  19. c.JSON(http.StatusNotFound, &cosy.Error{
  20. Code: http.StatusNotFound,
  21. Message: gorm.ErrRecordNotFound.Error(),
  22. })
  23. case errors.As(err, &cErr):
  24. c.JSON(http.StatusInternalServerError, cErr)
  25. default:
  26. c.JSON(http.StatusInternalServerError, &cosy.Error{
  27. Code: http.StatusInternalServerError,
  28. Message: err.Error(),
  29. })
  30. }
  31. }
  32. func SetSSEHeaders(c *gin.Context) {
  33. c.Header("Content-Type", "text/event-stream")
  34. c.Header("Cache-Control", "no-cache")
  35. c.Header("Connection", "keep-alive")
  36. // https://stackoverflow.com/questions/27898622/server-sent-events-stopped-work-after-enabling-ssl-on-proxy/27960243#27960243
  37. c.Header("X-Accel-Buffering", "no")
  38. }