package auth import ( "os" "time" "ResendIt/internal/api/middleware" "github.com/gin-gonic/gin" ) type Handler struct { service *Service } func NewHandler(s *Service) *Handler { return &Handler{service: s} } func (h *Handler) Me(c *gin.Context) { userID, _ := c.Get("user_id") role, _ := c.Get("role") c.JSON(200, gin.H{ "user_id": userID, "role": role, }) } func (h *Handler) AdminCheck(c *gin.Context) { c.JSON(200, gin.H{ "message": "you are an admin", }) } func (h *Handler) Login(c *gin.Context) { var req struct { Username string `json:"username" binding:"required"` Password string `json:"password" binding:"required"` } if err := c.ShouldBindJSON(&req); err != nil { log := middleware.StructuredLog(c) log.Warn(). Str("event", "login_failed"). Str("reason", "invalid_request"). Str("username", req.Username). Msg("Login attempt with invalid request") c.JSON(400, gin.H{"error": "Invalid request body"}) return } log := middleware.StructuredLog(c).With(). Str("event", "login_attempt"). Str("username", req.Username). Str("ip", c.ClientIP()). Logger() start := time.Now() token, err := h.service.Login(req.Username, req.Password) latency := time.Since(start) if err != nil { log.Warn(). Str("result", "failed"). Dur("latency_ms", latency). Err(err). Msg("Login failed") c.JSON(401, gin.H{"error": "Invalid credentials"}) return } log.Info(). Str("result", "success"). Dur("latency_ms", latency). Msg("Login successful") isSecure := os.Getenv("USE_HTTPS") == "true" c.SetCookie( "auth_token", token, 3600*24, "/", os.Getenv("DOMAIN"), isSecure, true, ) c.JSON(200, gin.H{"token": token}) }