diff --git a/pkg/handler/middleware.go b/pkg/handler/middleware.go new file mode 100644 index 0000000..f822482 --- /dev/null +++ b/pkg/handler/middleware.go @@ -0,0 +1,35 @@ +package handler + +import ( + "esauth/pkg/util" + "net/http" + "strings" + + "github.com/gin-gonic/gin" +) + +const ( + authorizationHeader = "Authorization" + userCtx = "userId" +) + +func (h *Handler) userIdentity(c *gin.Context) { + header := c.GetHeader(authorizationHeader) + if header == "" { + util.NewErrorResponse(c, http.StatusUnauthorized, "empty auth header") + return + } + + headerParts := strings.Split(header, " ") + if len(headerParts) != 2 { + util.NewErrorResponse(c, http.StatusUnauthorized, "invalid auth header") + return + } + + userId, err := h.services.Authorization.ParseToken(headerParts[1]) + if err != nil { + util.NewErrorResponse(c, http.StatusUnauthorized, err.Error()) + } + + c.Set(userCtx, userId) +} diff --git a/pkg/util/response.go b/pkg/util/response.go new file mode 100644 index 0000000..5d15a96 --- /dev/null +++ b/pkg/util/response.go @@ -0,0 +1,15 @@ +package util + +import ( + "github.com/gin-gonic/gin" + "github.com/sirupsen/logrus" +) + +type error struct { + Message string `json:"message"` +} + +func NewErrorResponse(c *gin.Context, statusCode int, message string) { + logrus.Error(message) + c.AbortWithStatusJSON(statusCode, error{Message: message}) +}