summaryrefslogtreecommitdiffstats
path: root/api/websocket_router.go
diff options
context:
space:
mode:
Diffstat (limited to 'api/websocket_router.go')
-rw-r--r--api/websocket_router.go31
1 files changed, 31 insertions, 0 deletions
diff --git a/api/websocket_router.go b/api/websocket_router.go
index 34b576464..bdbd9f4d9 100644
--- a/api/websocket_router.go
+++ b/api/websocket_router.go
@@ -37,6 +37,37 @@ func (wr *WebSocketRouter) ServeWebSocket(conn *WebConn, r *model.WebSocketReque
return
}
+ if r.Action == model.WEBSOCKET_AUTHENTICATION_CHALLENGE {
+ token, ok := r.Data["token"].(string)
+ if !ok {
+ conn.WebSocket.Close()
+ return
+ }
+
+ session := GetSession(token)
+
+ if session == nil || session.IsExpired() {
+ conn.WebSocket.Close()
+ } else {
+ go SetStatusOnline(session.UserId, session.Id, false)
+
+ conn.SessionToken = session.Token
+ conn.UserId = session.UserId
+
+ resp := model.NewWebSocketResponse(model.STATUS_OK, r.Seq, nil)
+ resp.DoPreComputeJson()
+ conn.Send <- resp
+ }
+
+ return
+ }
+
+ if conn.SessionToken == "" {
+ err := model.NewLocAppError("ServeWebSocket", "api.web_socket_router.not_authenticated.app_error", nil, "")
+ wr.ReturnWebSocketError(conn, r, err)
+ return
+ }
+
var handler *webSocketHandler
if h, ok := wr.handlers[r.Action]; !ok {
err := model.NewLocAppError("ServeWebSocket", "api.web_socket_router.bad_action.app_error", nil, "")