package ws import ( "net/http" "github.com/chedius/delivery-tracker/internal/auth" "github.com/gin-gonic/gin" "github.com/gorilla/websocket" ) var upgrader = websocket.Upgrader{ CheckOrigin: func(r *http.Request) bool { return true }, } // HandleWS returns a Gin handler that upgrades HTTP to WebSocket // after validating the JWT token from the ?token= query param. func HandleWS(hub *Hub, jwtSecret []byte) gin.HandlerFunc { return func(c *gin.Context) { token := c.Query("token") if token == "" { c.JSON(http.StatusUnauthorized, gin.H{"error": "missing token"}) return } if _, err := auth.ParseToken(token, jwtSecret); err != nil { c.JSON(http.StatusUnauthorized, gin.H{"error": "invalid token"}) return } conn, err := upgrader.Upgrade(c.Writer, c.Request, nil) if err != nil { return } client := NewClient(hub, conn) hub.Register(client) go client.WritePump() go client.ReadPump() } }