github.com/psyb0t/mattermost-server@v4.6.1-0.20180125161845-5503a1351abf+incompatible/model/session.go (about)

     1  // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
     2  // See License.txt for license information.
     3  
     4  package model
     5  
     6  import (
     7  	"encoding/json"
     8  	"io"
     9  	"strings"
    10  )
    11  
    12  const (
    13  	SESSION_COOKIE_TOKEN              = "MMAUTHTOKEN"
    14  	SESSION_COOKIE_USER               = "MMUSERID"
    15  	SESSION_CACHE_SIZE                = 35000
    16  	SESSION_PROP_PLATFORM             = "platform"
    17  	SESSION_PROP_OS                   = "os"
    18  	SESSION_PROP_BROWSER              = "browser"
    19  	SESSION_PROP_TYPE                 = "type"
    20  	SESSION_PROP_USER_ACCESS_TOKEN_ID = "user_access_token_id"
    21  	SESSION_TYPE_USER_ACCESS_TOKEN    = "UserAccessToken"
    22  	SESSION_ACTIVITY_TIMEOUT          = 1000 * 60 * 5 // 5 minutes
    23  	SESSION_USER_ACCESS_TOKEN_EXPIRY  = 100 * 365     // 100 years
    24  )
    25  
    26  type Session struct {
    27  	Id             string        `json:"id"`
    28  	Token          string        `json:"token"`
    29  	CreateAt       int64         `json:"create_at"`
    30  	ExpiresAt      int64         `json:"expires_at"`
    31  	LastActivityAt int64         `json:"last_activity_at"`
    32  	UserId         string        `json:"user_id"`
    33  	DeviceId       string        `json:"device_id"`
    34  	Roles          string        `json:"roles"`
    35  	IsOAuth        bool          `json:"is_oauth"`
    36  	Props          StringMap     `json:"props"`
    37  	TeamMembers    []*TeamMember `json:"team_members" db:"-"`
    38  }
    39  
    40  func (me *Session) DeepCopy() *Session {
    41  	copy := *me
    42  	return &copy
    43  }
    44  
    45  func (me *Session) ToJson() string {
    46  	b, err := json.Marshal(me)
    47  	if err != nil {
    48  		return ""
    49  	} else {
    50  		return string(b)
    51  	}
    52  }
    53  
    54  func SessionFromJson(data io.Reader) *Session {
    55  	decoder := json.NewDecoder(data)
    56  	var me Session
    57  	err := decoder.Decode(&me)
    58  	if err == nil {
    59  		return &me
    60  	} else {
    61  		return nil
    62  	}
    63  }
    64  
    65  func (me *Session) PreSave() {
    66  	if me.Id == "" {
    67  		me.Id = NewId()
    68  	}
    69  
    70  	if me.Token == "" {
    71  		me.Token = NewId()
    72  	}
    73  
    74  	me.CreateAt = GetMillis()
    75  	me.LastActivityAt = me.CreateAt
    76  
    77  	if me.Props == nil {
    78  		me.Props = make(map[string]string)
    79  	}
    80  }
    81  
    82  func (me *Session) Sanitize() {
    83  	me.Token = ""
    84  }
    85  
    86  func (me *Session) IsExpired() bool {
    87  
    88  	if me.ExpiresAt <= 0 {
    89  		return false
    90  	}
    91  
    92  	if GetMillis() > me.ExpiresAt {
    93  		return true
    94  	}
    95  
    96  	return false
    97  }
    98  
    99  func (me *Session) SetExpireInDays(days int) {
   100  	if me.CreateAt == 0 {
   101  		me.ExpiresAt = GetMillis() + (1000 * 60 * 60 * 24 * int64(days))
   102  	} else {
   103  		me.ExpiresAt = me.CreateAt + (1000 * 60 * 60 * 24 * int64(days))
   104  	}
   105  }
   106  
   107  func (me *Session) AddProp(key string, value string) {
   108  
   109  	if me.Props == nil {
   110  		me.Props = make(map[string]string)
   111  	}
   112  
   113  	me.Props[key] = value
   114  }
   115  
   116  func (me *Session) GetTeamByTeamId(teamId string) *TeamMember {
   117  	for _, team := range me.TeamMembers {
   118  		if team.TeamId == teamId {
   119  			return team
   120  		}
   121  	}
   122  
   123  	return nil
   124  }
   125  
   126  func (me *Session) IsMobileApp() bool {
   127  	return len(me.DeviceId) > 0
   128  }
   129  
   130  func (me *Session) GetUserRoles() []string {
   131  	return strings.Fields(me.Roles)
   132  }
   133  
   134  func SessionsToJson(o []*Session) string {
   135  	if b, err := json.Marshal(o); err != nil {
   136  		return "[]"
   137  	} else {
   138  		return string(b)
   139  	}
   140  }
   141  
   142  func SessionsFromJson(data io.Reader) []*Session {
   143  	decoder := json.NewDecoder(data)
   144  	var o []*Session
   145  	err := decoder.Decode(&o)
   146  	if err == nil {
   147  		return o
   148  	} else {
   149  		return nil
   150  	}
   151  }