* Posts * Add missing translation * Fix internal store marshaling * [MM-22051] Remove To/From JSON (Channels) (#18116) * Channels * Channel members * ChannelSearch * Channel categories, list, sidebar, stats, view * Fix conversions * [MM-22051] Remove To/From JSON (Users) (#18121) * User related structs * Fix return * Team related structures (#18127) * [MM-22051] Remove To/From JSON (Status, Bot, Reaction, Thread, FileInfo) (#18130) * Status * Bot * Reaction * Thread * FileInfo * Some fixes * Translations update from Weblate (#18143) * Translated using Weblate (German) Currently translated at 100.0% (2309 of 2309 strings) Translation: mattermost-languages-shipped/mattermost-server Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-server_master/de/ * Translated using Weblate (Turkish) Currently translated at 100.0% (2309 of 2309 strings) Translation: mattermost-languages-shipped/mattermost-server Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-server_master/tr/ * Translated using Weblate (Hungarian) Currently translated at 100.0% (2309 of 2309 strings) Translation: mattermost-languages-shipped/mattermost-server Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-server_master/hu/ * Update translation files Updated by "Cleanup translation files" hook in Weblate. Translation: mattermost-languages-shipped/mattermost-server Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-server_master/ Update translation files Updated by "Cleanup translation files" hook in Weblate. Translation: mattermost-languages-shipped/mattermost-server Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-server_master/ Update translation files Updated by "Cleanup translation files" hook in Weblate. Translation: mattermost-languages-shipped/mattermost-server Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-server_master/ Update translation files Updated by "Cleanup translation files" hook in Weblate. Translation: mattermost-languages-shipped/mattermost-server Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-server_master/ * Translated using Weblate (German) Currently translated at 100.0% (2301 of 2301 strings) Translation: mattermost-languages-shipped/mattermost-server Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-server_master/de/ * Translated using Weblate (Turkish) Currently translated at 100.0% (2301 of 2301 strings) Translation: mattermost-languages-shipped/mattermost-server Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-server_master/tr/ * Translated using Weblate (Hungarian) Currently translated at 100.0% (2301 of 2301 strings) Translation: mattermost-languages-shipped/mattermost-server Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-server_master/hu/ * Translated using Weblate (English (Australia)) Currently translated at 100.0% (2301 of 2301 strings) Translation: mattermost-languages-shipped/mattermost-server Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-server_master/en_AU/ * Translated using Weblate (Bulgarian) Currently translated at 100.0% (2301 of 2301 strings) Translation: mattermost-languages-shipped/mattermost-server Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-server_master/bg/ * Translated using Weblate (Japanese) Currently translated at 100.0% (2301 of 2301 strings) Translation: mattermost-languages-shipped/mattermost-server Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-server_master/ja/ * Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (2301 of 2301 strings) Translation: mattermost-languages-shipped/mattermost-server Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-server_master/zh_Hans/ Co-authored-by: JtheBAB <srast@bioc.uzh.ch> Co-authored-by: Kaya Zeren <kayazeren@gmail.com> Co-authored-by: Tóth Csaba // Online ERP Hungary Kft <csaba.toth@online-erp.hu> Co-authored-by: Matthew Williams <Matthew.Williams@outlook.com.au> Co-authored-by: Nikolai Zahariev <nikolaiz@yahoo.com> Co-authored-by: kaakaa <stooner.hoe@gmail.com> Co-authored-by: aeomin <lin@aeomin.net> Co-authored-by: Weblate (bot) <hosted@weblate.org> Co-authored-by: JtheBAB <srast@bioc.uzh.ch> Co-authored-by: Kaya Zeren <kayazeren@gmail.com> Co-authored-by: Tóth Csaba // Online ERP Hungary Kft <csaba.toth@online-erp.hu> Co-authored-by: Matthew Williams <Matthew.Williams@outlook.com.au> Co-authored-by: Nikolai Zahariev <nikolaiz@yahoo.com> Co-authored-by: kaakaa <stooner.hoe@gmail.com> Co-authored-by: aeomin <lin@aeomin.net> * [MM-22051] Remove To/From JSON methods from model (#18138) * Scheme * Role * Session * Config * Status * Fix logic * Emoji * GuestsInvite * Group * Command * ClusterInfo * License * Job * System * Plugin * Command2 * IncomingWebhook * OutgoingWebhook * Fix tests * Update traslation * Some fixes * Add missing return * Simplify * Make Config.ToJSONFiltered() return []byte * Make Busy.ToJSON() return []byte * Include error in log * Split logic * [MM-22051] Remove To/From JSON (final) (#18150) * SwitchRequest * PluginEventData * Permalink * PushNotification * SuggestCommand * PluginsResponse * WebSocketMessage * RemoteCluster * SharedChannel * PluginStatuses * InitialLoad * ClusterDiscovery * ClusterStats * MfaSecret * GroupSyncable * SAML * WebSocketRequest * TypingRequest * SecurityBulletin * OAuthApp * IntegrationAction * DataRetention * Preference * FileInfoList * Compliance * Preferences * FileInfoSearchResults * TermsOfService * InstallMarketplacePluginRequest * GitLabUser * UploadSessions * Remove unused helpers * Fix tests * [MM-23280] Fix linting for ToJSON/FromJSON (#18153) * SwitchRequest * PluginEventData * Permalink * PushNotification * SuggestCommand * PluginsResponse * WebSocketMessage * RemoteCluster * SharedChannel * PluginStatuses * InitialLoad * ClusterDiscovery * ClusterStats * MfaSecret * GroupSyncable * SAML * WebSocketRequest * TypingRequest * SecurityBulletin * OAuthApp * IntegrationAction * DataRetention * Preference * FileInfoList * Compliance * Preferences * FileInfoSearchResults * TermsOfService * InstallMarketplacePluginRequest * GitLabUser * UploadSessions * Remove unused helpers * Fix tests * Fix linting for ToJSON/FromJSON * Fix conversions Co-authored-by: Weblate (bot) <hosted@weblate.org> Co-authored-by: JtheBAB <srast@bioc.uzh.ch> Co-authored-by: Kaya Zeren <kayazeren@gmail.com> Co-authored-by: Tóth Csaba // Online ERP Hungary Kft <csaba.toth@online-erp.hu> Co-authored-by: Matthew Williams <Matthew.Williams@outlook.com.au> Co-authored-by: Nikolai Zahariev <nikolaiz@yahoo.com> Co-authored-by: kaakaa <stooner.hoe@gmail.com> Co-authored-by: aeomin <lin@aeomin.net> Co-authored-by: Mattermod <mattermod@users.noreply.github.com>
198 строки
4.4 KiB
Go
198 строки
4.4 KiB
Go
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
// See LICENSE.txt for license information.
|
|
|
|
package model
|
|
|
|
import (
|
|
"strconv"
|
|
"strings"
|
|
|
|
"github.com/mattermost/mattermost-server/v6/shared/mlog"
|
|
)
|
|
|
|
const (
|
|
SessionCookieToken = "MMAUTHTOKEN"
|
|
SessionCookieUser = "MMUSERID"
|
|
SessionCookieCsrf = "MMCSRF"
|
|
SessionCacheSize = 35000
|
|
SessionPropPlatform = "platform"
|
|
SessionPropOs = "os"
|
|
SessionPropBrowser = "browser"
|
|
SessionPropType = "type"
|
|
SessionPropUserAccessTokenId = "user_access_token_id"
|
|
SessionPropIsBot = "is_bot"
|
|
SessionPropIsBotValue = "true"
|
|
SessionTypeUserAccessToken = "UserAccessToken"
|
|
SessionTypeCloudKey = "CloudKey"
|
|
SessionTypeRemoteclusterToken = "RemoteClusterToken"
|
|
SessionPropIsGuest = "is_guest"
|
|
SessionActivityTimeout = 1000 * 60 * 5 // 5 minutes
|
|
SessionUserAccessTokenExpiry = 100 * 365 // 100 years
|
|
)
|
|
|
|
//msgp StringMap
|
|
type StringMap map[string]string
|
|
|
|
//msgp:tuple Session
|
|
|
|
// Session contains the user session details.
|
|
// This struct's serializer methods are auto-generated. If a new field is added/removed,
|
|
// please run make gen-serialized.
|
|
type Session struct {
|
|
Id string `json:"id"`
|
|
Token string `json:"token"`
|
|
CreateAt int64 `json:"create_at"`
|
|
ExpiresAt int64 `json:"expires_at"`
|
|
LastActivityAt int64 `json:"last_activity_at"`
|
|
UserId string `json:"user_id"`
|
|
DeviceId string `json:"device_id"`
|
|
Roles string `json:"roles"`
|
|
IsOAuth bool `json:"is_oauth"`
|
|
ExpiredNotify bool `json:"expired_notify"`
|
|
Props StringMap `json:"props"`
|
|
TeamMembers []*TeamMember `json:"team_members" db:"-"`
|
|
Local bool `json:"local" db:"-"`
|
|
}
|
|
|
|
// Returns true if the session is unrestricted, which should grant it
|
|
// with all permissions. This is used for local mode sessions
|
|
func (s *Session) IsUnrestricted() bool {
|
|
return s.Local
|
|
}
|
|
|
|
func (s *Session) DeepCopy() *Session {
|
|
copySession := *s
|
|
|
|
if s.Props != nil {
|
|
copySession.Props = CopyStringMap(s.Props)
|
|
}
|
|
|
|
if s.TeamMembers != nil {
|
|
copySession.TeamMembers = make([]*TeamMember, len(s.TeamMembers))
|
|
for index, tm := range s.TeamMembers {
|
|
copySession.TeamMembers[index] = new(TeamMember)
|
|
*copySession.TeamMembers[index] = *tm
|
|
}
|
|
}
|
|
|
|
return ©Session
|
|
}
|
|
|
|
func (s *Session) PreSave() {
|
|
if s.Id == "" {
|
|
s.Id = NewId()
|
|
}
|
|
|
|
if s.Token == "" {
|
|
s.Token = NewId()
|
|
}
|
|
|
|
s.CreateAt = GetMillis()
|
|
s.LastActivityAt = s.CreateAt
|
|
|
|
if s.Props == nil {
|
|
s.Props = make(map[string]string)
|
|
}
|
|
}
|
|
|
|
func (s *Session) Sanitize() {
|
|
s.Token = ""
|
|
}
|
|
|
|
func (s *Session) IsExpired() bool {
|
|
|
|
if s.ExpiresAt <= 0 {
|
|
return false
|
|
}
|
|
|
|
if GetMillis() > s.ExpiresAt {
|
|
return true
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
func (s *Session) AddProp(key string, value string) {
|
|
|
|
if s.Props == nil {
|
|
s.Props = make(map[string]string)
|
|
}
|
|
|
|
s.Props[key] = value
|
|
}
|
|
|
|
func (s *Session) GetTeamByTeamId(teamId string) *TeamMember {
|
|
for _, team := range s.TeamMembers {
|
|
if team.TeamId == teamId {
|
|
return team
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (s *Session) IsMobileApp() bool {
|
|
return s.DeviceId != "" || s.IsMobile()
|
|
}
|
|
|
|
func (s *Session) IsMobile() bool {
|
|
val, ok := s.Props[UserAuthServiceIsMobile]
|
|
if !ok {
|
|
return false
|
|
}
|
|
isMobile, err := strconv.ParseBool(val)
|
|
if err != nil {
|
|
mlog.Debug("Error parsing boolean property from Session", mlog.Err(err))
|
|
return false
|
|
}
|
|
return isMobile
|
|
}
|
|
|
|
func (s *Session) IsSaml() bool {
|
|
val, ok := s.Props[UserAuthServiceIsSaml]
|
|
if !ok {
|
|
return false
|
|
}
|
|
isSaml, err := strconv.ParseBool(val)
|
|
if err != nil {
|
|
mlog.Debug("Error parsing boolean property from Session", mlog.Err(err))
|
|
return false
|
|
}
|
|
return isSaml
|
|
}
|
|
|
|
func (s *Session) IsOAuthUser() bool {
|
|
val, ok := s.Props[UserAuthServiceIsOAuth]
|
|
if !ok {
|
|
return false
|
|
}
|
|
isOAuthUser, err := strconv.ParseBool(val)
|
|
if err != nil {
|
|
mlog.Debug("Error parsing boolean property from Session", mlog.Err(err))
|
|
return false
|
|
}
|
|
return isOAuthUser
|
|
}
|
|
|
|
func (s *Session) IsSSOLogin() bool {
|
|
return s.IsOAuthUser() || s.IsSaml()
|
|
}
|
|
|
|
func (s *Session) GetUserRoles() []string {
|
|
return strings.Fields(s.Roles)
|
|
}
|
|
|
|
func (s *Session) GenerateCSRF() string {
|
|
token := NewId()
|
|
s.AddProp("csrf", token)
|
|
return token
|
|
}
|
|
|
|
func (s *Session) GetCSRF() string {
|
|
if s.Props == nil {
|
|
return ""
|
|
}
|
|
|
|
return s.Props["csrf"]
|
|
}
|