summaryrefslogtreecommitdiffstats
path: root/api/web_conn.go
diff options
context:
space:
mode:
Diffstat (limited to 'api/web_conn.go')
-rw-r--r--api/web_conn.go35
1 files changed, 23 insertions, 12 deletions
diff --git a/api/web_conn.go b/api/web_conn.go
index a2b801904..3b991d449 100644
--- a/api/web_conn.go
+++ b/api/web_conn.go
@@ -27,6 +27,7 @@ type WebConn struct {
WebSocket *websocket.Conn
Send chan model.WebSocketMessage
SessionToken string
+ SessionExpiresAt int64
UserId string
T goi18n.TranslateFunc
Locale string
@@ -40,12 +41,13 @@ func NewWebConn(c *Context, ws *websocket.Conn) *WebConn {
}
return &WebConn{
- Send: make(chan model.WebSocketMessage, 256),
- WebSocket: ws,
- UserId: c.Session.UserId,
- SessionToken: c.Session.Token,
- T: c.T,
- Locale: c.Locale,
+ Send: make(chan model.WebSocketMessage, 256),
+ WebSocket: ws,
+ UserId: c.Session.UserId,
+ SessionToken: c.Session.Token,
+ SessionExpiresAt: c.Session.ExpiresAt,
+ T: c.T,
+ Locale: c.Locale,
}
}
@@ -144,16 +146,25 @@ func (c *WebConn) writePump() {
func (webCon *WebConn) InvalidateCache() {
webCon.AllChannelMembers = nil
webCon.LastAllChannelMembersTime = 0
+ webCon.SessionExpiresAt = 0
}
func (webCon *WebConn) isAuthenticated() bool {
- if webCon.SessionToken == "" {
- return false
- }
+ // Check the expiry to see if we need to check for a new session
+ if webCon.SessionExpiresAt < model.GetMillis() {
+ if webCon.SessionToken == "" {
+ return false
+ }
- session := GetSession(webCon.SessionToken)
- if session == nil || session.IsExpired() {
- return false
+ session := GetSession(webCon.SessionToken)
+ if session == nil || session.IsExpired() {
+ webCon.SessionToken = ""
+ webCon.SessionExpiresAt = 0
+ return false
+ }
+
+ webCon.SessionToken = session.Token
+ webCon.SessionExpiresAt = session.ExpiresAt
}
return true