summaryrefslogtreecommitdiffstats
path: root/model
diff options
context:
space:
mode:
authorMartin Kraft <martinkraft@gmail.com>2018-05-24 08:40:52 -0400
committerMartin Kraft <martinkraft@gmail.com>2018-05-24 08:40:52 -0400
commit69304fb54da5300941a49364e4344c2c65e654d6 (patch)
treede20c2e8a479ae3d13bcd21abc3dff067afa602e /model
parente46b94fa66c029b9a493fdc6ff7bcb98e9651568 (diff)
parent47f3c064db885c2cb2e75c195ea24e2ef687891d (diff)
downloadchat-69304fb54da5300941a49364e4344c2c65e654d6.tar.gz
chat-69304fb54da5300941a49364e4344c2c65e654d6.tar.bz2
chat-69304fb54da5300941a49364e4344c2c65e654d6.zip
Merge remote-tracking branch 'origin/master' into advanced-permissions-phase-2
Diffstat (limited to 'model')
-rw-r--r--model/channel.go30
-rw-r--r--model/client4.go12
-rw-r--r--model/cluster_discovery.go2
-rw-r--r--model/config.go31
-rw-r--r--model/license.go6
-rw-r--r--model/license_test.go5
-rw-r--r--model/plugin_status.go44
-rw-r--r--model/websocket_message.go77
8 files changed, 134 insertions, 73 deletions
diff --git a/model/channel.go b/model/channel.go
index 5e5c741f3..950e910dd 100644
--- a/model/channel.go
+++ b/model/channel.go
@@ -32,21 +32,20 @@ const (
)
type Channel struct {
- Id string `json:"id"`
- CreateAt int64 `json:"create_at"`
- UpdateAt int64 `json:"update_at"`
- DeleteAt int64 `json:"delete_at"`
- TeamId string `json:"team_id"`
- Type string `json:"type"`
- DisplayName string `json:"display_name"`
- Name string `json:"name"`
- Header string `json:"header"`
- Purpose string `json:"purpose"`
- LastPostAt int64 `json:"last_post_at"`
- TotalMsgCount int64 `json:"total_msg_count"`
- ExtraUpdateAt int64 `json:"extra_update_at"`
- CreatorId string `json:"creator_id"`
- SchemeId *string `json:"scheme_id"`
+ Id string `json:"id"`
+ CreateAt int64 `json:"create_at"`
+ UpdateAt int64 `json:"update_at"`
+ DeleteAt int64 `json:"delete_at"`
+ TeamId string `json:"team_id"`
+ Type string `json:"type"`
+ DisplayName string `json:"display_name"`
+ Name string `json:"name"`
+ Header string `json:"header"`
+ Purpose string `json:"purpose"`
+ LastPostAt int64 `json:"last_post_at"`
+ TotalMsgCount int64 `json:"total_msg_count"`
+ ExtraUpdateAt int64 `json:"extra_update_at"`
+ CreatorId string `json:"creator_id"`
}
type ChannelPatch struct {
@@ -134,6 +133,7 @@ func (o *Channel) PreSave() {
o.CreateAt = GetMillis()
o.UpdateAt = o.CreateAt
+ o.ExtraUpdateAt = 0
}
func (o *Channel) PreUpdate() {
diff --git a/model/client4.go b/model/client4.go
index afd8a6bc4..c2b6ba948 100644
--- a/model/client4.go
+++ b/model/client4.go
@@ -3622,6 +3622,18 @@ func (c *Client4) GetPlugins() (*PluginsResponse, *Response) {
}
}
+// GetPluginStatuses will return the plugins installed on any server in the cluster, for reporting
+// to the administrator via the system console.
+// WARNING: PLUGINS ARE STILL EXPERIMENTAL. THIS FUNCTION IS SUBJECT TO CHANGE.
+func (c *Client4) GetPluginStatuses() (PluginStatuses, *Response) {
+ if r, err := c.DoApiGet(c.GetPluginsRoute(), "/statuses"); err != nil {
+ return nil, BuildErrorResponse(r, err)
+ } else {
+ defer closeBody(r)
+ return PluginStatusesFromJson(r.Body), BuildResponse(r)
+ }
+}
+
// RemovePlugin will deactivate and delete a plugin.
// WARNING: PLUGINS ARE STILL EXPERIMENTAL. THIS FUNCTION IS SUBJECT TO CHANGE.
func (c *Client4) RemovePlugin(id string) (bool, *Response) {
diff --git a/model/cluster_discovery.go b/model/cluster_discovery.go
index 89e5fc95e..5d5b0465d 100644
--- a/model/cluster_discovery.go
+++ b/model/cluster_discovery.go
@@ -86,7 +86,7 @@ func FilterClusterDiscovery(vs []*ClusterDiscovery, f func(*ClusterDiscovery) bo
func (o *ClusterDiscovery) IsValid() *AppError {
if len(o.Id) != 26 {
- return NewAppError("Channel.IsValid", "model.channel.is_valid.id.app_error", nil, "", http.StatusBadRequest)
+ return NewAppError("ClusterDiscovery.IsValid", "model.cluster.is_valid.id.app_error", nil, "", http.StatusBadRequest)
}
if len(o.ClusterName) == 0 {
diff --git a/model/config.go b/model/config.go
index 7a2125061..7c11860d2 100644
--- a/model/config.go
+++ b/model/config.go
@@ -460,14 +460,17 @@ func (s *ServiceSettings) SetDefaults() {
}
type ClusterSettings struct {
- Enable *bool
- ClusterName *string
- OverrideHostname *string
- UseIpAddress *bool
- UseExperimentalGossip *bool
- ReadOnlyConfig *bool
- GossipPort *int
- StreamingPort *int
+ Enable *bool
+ ClusterName *string
+ OverrideHostname *string
+ UseIpAddress *bool
+ UseExperimentalGossip *bool
+ ReadOnlyConfig *bool
+ GossipPort *int
+ StreamingPort *int
+ MaxIdleConns *int
+ MaxIdleConnsPerHost *int
+ IdleConnTimeoutMilliseconds *int
}
func (s *ClusterSettings) SetDefaults() {
@@ -502,6 +505,18 @@ func (s *ClusterSettings) SetDefaults() {
if s.StreamingPort == nil {
s.StreamingPort = NewInt(8075)
}
+
+ if s.MaxIdleConns == nil {
+ s.MaxIdleConns = NewInt(100)
+ }
+
+ if s.MaxIdleConnsPerHost == nil {
+ s.MaxIdleConnsPerHost = NewInt(128)
+ }
+
+ if s.IdleConnTimeoutMilliseconds == nil {
+ s.IdleConnTimeoutMilliseconds = NewInt(90000)
+ }
}
type MetricsSettings struct {
diff --git a/model/license.go b/model/license.go
index dea326287..b6a6f2ac8 100644
--- a/model/license.go
+++ b/model/license.go
@@ -49,7 +49,6 @@ type Features struct {
CustomBrand *bool `json:"custom_brand"`
MHPNS *bool `json:"mhpns"`
SAML *bool `json:"saml"`
- PasswordRequirements *bool `json:"password_requirements"`
Elasticsearch *bool `json:"elastic_search"`
Announcement *bool `json:"announcement"`
ThemeManagement *bool `json:"theme_management"`
@@ -74,7 +73,6 @@ func (f *Features) ToMap() map[string]interface{} {
"custom_brand": *f.CustomBrand,
"mhpns": *f.MHPNS,
"saml": *f.SAML,
- "password": *f.PasswordRequirements,
"elastic_search": *f.Elasticsearch,
"email_notification_contents": *f.EmailNotificationContents,
"data_retention": *f.DataRetention,
@@ -133,10 +131,6 @@ func (f *Features) SetDefaults() {
f.SAML = NewBool(*f.FutureFeatures)
}
- if f.PasswordRequirements == nil {
- f.PasswordRequirements = NewBool(*f.FutureFeatures)
- }
-
if f.Elasticsearch == nil {
f.Elasticsearch = NewBool(*f.FutureFeatures)
}
diff --git a/model/license_test.go b/model/license_test.go
index 93f2ff61a..a9379d78e 100644
--- a/model/license_test.go
+++ b/model/license_test.go
@@ -24,7 +24,6 @@ func TestLicenseFeaturesToMap(t *testing.T) {
CheckTrue(t, m["custom_brand"].(bool))
CheckTrue(t, m["mhpns"].(bool))
CheckTrue(t, m["saml"].(bool))
- CheckTrue(t, m["password"].(bool))
CheckTrue(t, m["elastic_search"].(bool))
CheckTrue(t, m["email_notification_contents"].(bool))
CheckTrue(t, m["data_retention"].(bool))
@@ -48,7 +47,6 @@ func TestLicenseFeaturesSetDefaults(t *testing.T) {
CheckTrue(t, *f.CustomBrand)
CheckTrue(t, *f.MHPNS)
CheckTrue(t, *f.SAML)
- CheckTrue(t, *f.PasswordRequirements)
CheckTrue(t, *f.Elasticsearch)
CheckTrue(t, *f.EmailNotificationContents)
CheckTrue(t, *f.DataRetention)
@@ -71,7 +69,6 @@ func TestLicenseFeaturesSetDefaults(t *testing.T) {
*f.CustomBrand = true
*f.MHPNS = true
*f.SAML = true
- *f.PasswordRequirements = true
*f.Elasticsearch = true
*f.DataRetention = true
*f.MessageExport = true
@@ -91,7 +88,6 @@ func TestLicenseFeaturesSetDefaults(t *testing.T) {
CheckTrue(t, *f.CustomBrand)
CheckTrue(t, *f.MHPNS)
CheckTrue(t, *f.SAML)
- CheckTrue(t, *f.PasswordRequirements)
CheckTrue(t, *f.Elasticsearch)
CheckTrue(t, *f.EmailNotificationContents)
CheckTrue(t, *f.DataRetention)
@@ -176,7 +172,6 @@ func TestLicenseToFromJson(t *testing.T) {
CheckBool(t, *f1.CustomBrand, *f.CustomBrand)
CheckBool(t, *f1.MHPNS, *f.MHPNS)
CheckBool(t, *f1.SAML, *f.SAML)
- CheckBool(t, *f1.PasswordRequirements, *f.PasswordRequirements)
CheckBool(t, *f1.Elasticsearch, *f.Elasticsearch)
CheckBool(t, *f1.DataRetention, *f.DataRetention)
CheckBool(t, *f1.MessageExport, *f.MessageExport)
diff --git a/model/plugin_status.go b/model/plugin_status.go
new file mode 100644
index 000000000..1ae64ff89
--- /dev/null
+++ b/model/plugin_status.go
@@ -0,0 +1,44 @@
+// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
+// See LICENSE.txt for license information.
+
+package model
+
+import (
+ "encoding/json"
+ "io"
+)
+
+const (
+ PluginStateNotRunning = 0
+ PluginStateStarting = 1
+ PluginStateRunning = 2
+ PluginStateFailedToStart = 3
+ PluginStateFailedToStayRunning = 4
+ PluginStateStopping = 5
+)
+
+// PluginStatus provides a cluster-aware view of installed plugins.
+type PluginStatus struct {
+ PluginId string `json:"plugin_id"`
+ ClusterId string `json:"cluster_id"`
+ PluginPath string `json:"plugin_path"`
+ State int `json:"state"`
+ IsSandboxed bool `json:"is_sandboxed"`
+ IsPrepackaged bool `json:"is_prepackaged"`
+ Name string `json:"name"`
+ Description string `json:"description"`
+ Version string `json:"version"`
+}
+
+type PluginStatuses []*PluginStatus
+
+func (m *PluginStatuses) ToJson() string {
+ b, _ := json.Marshal(m)
+ return string(b)
+}
+
+func PluginStatusesFromJson(data io.Reader) PluginStatuses {
+ var m PluginStatuses
+ json.NewDecoder(data).Decode(&m)
+ return m
+}
diff --git a/model/websocket_message.go b/model/websocket_message.go
index 08c238480..071975d6c 100644
--- a/model/websocket_message.go
+++ b/model/websocket_message.go
@@ -10,44 +10,45 @@ import (
)
const (
- WEBSOCKET_EVENT_TYPING = "typing"
- WEBSOCKET_EVENT_POSTED = "posted"
- WEBSOCKET_EVENT_POST_EDITED = "post_edited"
- WEBSOCKET_EVENT_POST_DELETED = "post_deleted"
- WEBSOCKET_EVENT_CHANNEL_DELETED = "channel_deleted"
- WEBSOCKET_EVENT_CHANNEL_CREATED = "channel_created"
- WEBSOCKET_EVENT_CHANNEL_UPDATED = "channel_updated"
- WEBSOCKET_EVENT_CHANNEL_MEMBER_UPDATED = "channel_member_updated"
- WEBSOCKET_EVENT_DIRECT_ADDED = "direct_added"
- WEBSOCKET_EVENT_GROUP_ADDED = "group_added"
- WEBSOCKET_EVENT_NEW_USER = "new_user"
- WEBSOCKET_EVENT_ADDED_TO_TEAM = "added_to_team"
- WEBSOCKET_EVENT_LEAVE_TEAM = "leave_team"
- WEBSOCKET_EVENT_UPDATE_TEAM = "update_team"
- WEBSOCKET_EVENT_DELETE_TEAM = "delete_team"
- WEBSOCKET_EVENT_USER_ADDED = "user_added"
- WEBSOCKET_EVENT_USER_UPDATED = "user_updated"
- WEBSOCKET_EVENT_USER_ROLE_UPDATED = "user_role_updated"
- WEBSOCKET_EVENT_MEMBERROLE_UPDATED = "memberrole_updated"
- WEBSOCKET_EVENT_USER_REMOVED = "user_removed"
- WEBSOCKET_EVENT_PREFERENCE_CHANGED = "preference_changed"
- WEBSOCKET_EVENT_PREFERENCES_CHANGED = "preferences_changed"
- WEBSOCKET_EVENT_PREFERENCES_DELETED = "preferences_deleted"
- WEBSOCKET_EVENT_EPHEMERAL_MESSAGE = "ephemeral_message"
- WEBSOCKET_EVENT_STATUS_CHANGE = "status_change"
- WEBSOCKET_EVENT_HELLO = "hello"
- WEBSOCKET_EVENT_WEBRTC = "webrtc"
- WEBSOCKET_AUTHENTICATION_CHALLENGE = "authentication_challenge"
- WEBSOCKET_EVENT_REACTION_ADDED = "reaction_added"
- WEBSOCKET_EVENT_REACTION_REMOVED = "reaction_removed"
- WEBSOCKET_EVENT_RESPONSE = "response"
- WEBSOCKET_EVENT_EMOJI_ADDED = "emoji_added"
- WEBSOCKET_EVENT_CHANNEL_VIEWED = "channel_viewed"
- WEBSOCKET_EVENT_PLUGIN_ACTIVATED = "plugin_activated" // EXPERIMENTAL - SUBJECT TO CHANGE
- WEBSOCKET_EVENT_PLUGIN_DEACTIVATED = "plugin_deactivated" // EXPERIMENTAL - SUBJECT TO CHANGE
- WEBSOCKET_EVENT_ROLE_UPDATED = "role_updated"
- WEBSOCKET_EVENT_LICENSE_CHANGED = "license_changed"
- WEBSOCKET_EVENT_CONFIG_CHANGED = "config_changed"
+ WEBSOCKET_EVENT_TYPING = "typing"
+ WEBSOCKET_EVENT_POSTED = "posted"
+ WEBSOCKET_EVENT_POST_EDITED = "post_edited"
+ WEBSOCKET_EVENT_POST_DELETED = "post_deleted"
+ WEBSOCKET_EVENT_CHANNEL_DELETED = "channel_deleted"
+ WEBSOCKET_EVENT_CHANNEL_CREATED = "channel_created"
+ WEBSOCKET_EVENT_CHANNEL_UPDATED = "channel_updated"
+ WEBSOCKET_EVENT_CHANNEL_MEMBER_UPDATED = "channel_member_updated"
+ WEBSOCKET_EVENT_DIRECT_ADDED = "direct_added"
+ WEBSOCKET_EVENT_GROUP_ADDED = "group_added"
+ WEBSOCKET_EVENT_NEW_USER = "new_user"
+ WEBSOCKET_EVENT_ADDED_TO_TEAM = "added_to_team"
+ WEBSOCKET_EVENT_LEAVE_TEAM = "leave_team"
+ WEBSOCKET_EVENT_UPDATE_TEAM = "update_team"
+ WEBSOCKET_EVENT_DELETE_TEAM = "delete_team"
+ WEBSOCKET_EVENT_USER_ADDED = "user_added"
+ WEBSOCKET_EVENT_USER_UPDATED = "user_updated"
+ WEBSOCKET_EVENT_USER_ROLE_UPDATED = "user_role_updated"
+ WEBSOCKET_EVENT_MEMBERROLE_UPDATED = "memberrole_updated"
+ WEBSOCKET_EVENT_USER_REMOVED = "user_removed"
+ WEBSOCKET_EVENT_PREFERENCE_CHANGED = "preference_changed"
+ WEBSOCKET_EVENT_PREFERENCES_CHANGED = "preferences_changed"
+ WEBSOCKET_EVENT_PREFERENCES_DELETED = "preferences_deleted"
+ WEBSOCKET_EVENT_EPHEMERAL_MESSAGE = "ephemeral_message"
+ WEBSOCKET_EVENT_STATUS_CHANGE = "status_change"
+ WEBSOCKET_EVENT_HELLO = "hello"
+ WEBSOCKET_EVENT_WEBRTC = "webrtc"
+ WEBSOCKET_AUTHENTICATION_CHALLENGE = "authentication_challenge"
+ WEBSOCKET_EVENT_REACTION_ADDED = "reaction_added"
+ WEBSOCKET_EVENT_REACTION_REMOVED = "reaction_removed"
+ WEBSOCKET_EVENT_RESPONSE = "response"
+ WEBSOCKET_EVENT_EMOJI_ADDED = "emoji_added"
+ WEBSOCKET_EVENT_CHANNEL_VIEWED = "channel_viewed"
+ WEBSOCKET_EVENT_PLUGIN_ACTIVATED = "plugin_activated" // EXPERIMENTAL - SUBJECT TO CHANGE
+ WEBSOCKET_EVENT_PLUGIN_DEACTIVATED = "plugin_deactivated" // EXPERIMENTAL - SUBJECT TO CHANGE
+ WEBSOCKET_EVENT_PLUGIN_STATUSES_CHANGED = "plugin_statuses_changed" // EXPERIMENTAL - SUBJECT TO CHANGE
+ WEBSOCKET_EVENT_ROLE_UPDATED = "role_updated"
+ WEBSOCKET_EVENT_LICENSE_CHANGED = "license_changed"
+ WEBSOCKET_EVENT_CONFIG_CHANGED = "config_changed"
)
type WebSocketMessage interface {