Files

58 lines
1.2 KiB
Go
Raw Permalink Normal View History

package handlers
import (
"net/http"
gorillaWS "github.com/gorilla/websocket"
"messenger/internal/pkg/logger"
"messenger/internal/service"
ws "messenger/internal/websocket"
)
var upgrader = gorillaWS.Upgrader{
CheckOrigin: func(r *http.Request) bool {
return true
},
}
type WebSocketHandler struct {
hub *ws.Hub
authService *service.AuthService
}
func NewWebSocketHandler(hub *ws.Hub, authService *service.AuthService) *WebSocketHandler {
return &WebSocketHandler{
hub: hub,
authService: authService,
}
}
func (h *WebSocketHandler) HandleWebSocket(w http.ResponseWriter, r *http.Request) {
token := r.URL.Query().Get("token")
if token == "" {
http.Error(w, "missing token", http.StatusUnauthorized)
return
}
user, err := h.authService.ValidateToken(token)
if err != nil {
logger.Error("WebSocket auth failed", "error", err)
http.Error(w, "invalid token", http.StatusUnauthorized)
return
}
logger.Info("WebSocket connecting", "user_id", user.ID, "login", user.Login)
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
logger.Error("WebSocket upgrade failed", "error", err)
return
}
client := ws.NewClient(h.hub, conn, user)
h.hub.GetRegisterChan() <- client
go client.WritePump()
client.ReadPump()
}