66
77 "github.com/anyshake/observer/internal/hardware"
88 "github.com/anyshake/observer/internal/hardware/explorer"
9- "github.com/anyshake/observer/internal/server/middleware/auth_jwt"
109 "github.com/anyshake/observer/internal/server/response"
1110 "github.com/anyshake/observer/pkg/logger"
1211 "github.com/anyshake/observer/pkg/message"
@@ -18,15 +17,16 @@ import (
1817
1918func Setup (routerGroup * gin.RouterGroup , timeSource * timesource.Source , hardware hardware.IHardware , jwtMiddleware gin.HandlerFunc ) {
2019 s := socket {
21- messageBus : message .NewBus [explorer.EventHandler ](LOG_PREFIX , 65535 ),
22- historyBuffer : make ([]buffer , 0 , HISTORY_BUFFER_SIZE ),
20+ messageBus : message .NewBus [explorer.EventHandler ](LOG_PREFIX , 65535 ),
21+ historyBuffer : make ([]buffer , 0 , HISTORY_BUFFER_SIZE ),
22+ tokenValidator : newTokenValidator (jwtMiddleware ),
2323 }
2424 hardware .Subscribe (LOG_PREFIX , func (t time.Time , di * explorer.DeviceConfig , dv * explorer.DeviceVariable , cd []explorer.ChannelData ) {
2525 s .messageBus .Publish (t , di , dv , cd )
2626 s .storeHistory (t , di , cd )
2727 })
2828
29- routerGroup .GET ("/socket" , auth_jwt . NewWebsocketAuthAdapter (), jwtMiddleware , func (ctx * gin.Context ) {
29+ routerGroup .GET ("/socket" , func (ctx * gin.Context ) {
3030 upgrader := websocket.Upgrader {
3131 ReadBufferSize : 1024 ,
3232 WriteBufferSize : 1024 ,
@@ -91,8 +91,22 @@ func (s *socket) sendHistory(conn *websocket.Conn, timeSource *timesource.Source
9191
9292func (s * socket ) handleWebSocket (_ * gin.Context , conn * websocket.Conn , timeSource * timesource.Source ) {
9393 clientID := conn .RemoteAddr ().String ()
94+ logger .GetLogger (LOG_PREFIX ).Infof ("%s - client connected, waiting for authentication" , clientID )
95+
96+ conn .SetReadDeadline (time .Now ().Add (10 * time .Second ))
97+ _ , tokenBytes , err := conn .ReadMessage ()
98+ conn .SetReadDeadline (time.Time {})
99+ if err != nil {
100+ logger .GetLogger (LOG_PREFIX ).Warnf ("%s - authentication timeout or read error: %v" , clientID , err )
101+ return
102+ }
103+ if ! s .tokenValidator (string (tokenBytes )) {
104+ logger .GetLogger (LOG_PREFIX ).Warnf ("%s - authentication failed" , clientID )
105+ return
106+ }
107+
94108 subscribedAt := time .Now ()
95- logger .GetLogger (LOG_PREFIX ).Infof ("%s - client subscribed to message bus" , clientID )
109+ logger .GetLogger (LOG_PREFIX ).Infof ("%s - authenticated and subscribed to message bus" , clientID )
96110
97111 callbackFn := func (t time.Time , di * explorer.DeviceConfig , dv * explorer.DeviceVariable , cd []explorer.ChannelData ) {
98112 data := map [string ]any {
0 commit comments