summaryrefslogtreecommitdiffstats
path: root/api
diff options
context:
space:
mode:
author=Corey Hulen <corey@hulen.com>2015-10-16 19:05:55 -0700
committer=Corey Hulen <corey@hulen.com>2015-10-16 19:05:55 -0700
commita8f3f76c592928a0907fbaddd71ab6b8f68d28d6 (patch)
tree2052e2d5be650dc74bd21e429fb28bb59014912e /api
parent8b2d7f391aedeb5d6bd6490b92bdadf5050e1c73 (diff)
downloadchat-a8f3f76c592928a0907fbaddd71ab6b8f68d28d6.tar.gz
chat-a8f3f76c592928a0907fbaddd71ab6b8f68d28d6.tar.bz2
chat-a8f3f76c592928a0907fbaddd71ab6b8f68d28d6.zip
Refactoring web classes to use multi-session
Diffstat (limited to 'api')
-rw-r--r--api/context.go50
1 files changed, 38 insertions, 12 deletions
diff --git a/api/context.go b/api/context.go
index 1347b9aed..67eed674a 100644
--- a/api/context.go
+++ b/api/context.go
@@ -126,18 +126,7 @@ func (h handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
}
if len(token) != 0 {
- var session *model.Session
- if ts, ok := sessionCache.Get(token); ok {
- session = ts.(*model.Session)
- }
-
- if session == nil {
- if sessionResult := <-Srv.Store.Session().Get(token); sessionResult.Err != nil {
- c.LogError(model.NewAppError("ServeHTTP", "Invalid session", "token="+token+", err="+sessionResult.Err.DetailedError))
- } else {
- session = sessionResult.Data.(*model.Session)
- }
- }
+ session := GetSession(token)
if session == nil || session.IsExpired() {
c.RemoveSessionCookie(w, r)
@@ -492,6 +481,43 @@ func Handle404(w http.ResponseWriter, r *http.Request) {
RenderWebError(err, w, r)
}
+func GetSession(token string) *model.Session {
+ var session *model.Session
+ if ts, ok := sessionCache.Get(token); ok {
+ session = ts.(*model.Session)
+ }
+
+ if session == nil {
+ if sessionResult := <-Srv.Store.Session().Get(token); sessionResult.Err != nil {
+ l4g.Error("Invalid session token=" + token + ", err=" + sessionResult.Err.DetailedError)
+ } else {
+ session = sessionResult.Data.(*model.Session)
+ }
+ }
+
+ return session
+}
+
+func FindMultiSessionForTeamId(r *http.Request, teamId string) *model.Session {
+
+ if multiCookie, err := r.Cookie(model.MULTI_SESSION_TOKEN); err == nil {
+ multiToken := multiCookie.Value
+
+ if len(multiToken) > 0 {
+ tokens := strings.Split(multiToken, " ")
+
+ for _, token := range tokens {
+ s := GetSession(token)
+ if s != nil && !s.IsExpired() && s.TeamId == teamId {
+ return s
+ }
+ }
+ }
+ }
+
+ return nil
+}
+
func AddSessionToCache(session *model.Session) {
sessionCache.Add(session.Token, session)
}