diff --git a/model/channel.go b/model/channel.go index 7dafc7a909..387185181d 100644 --- a/model/channel.go +++ b/model/channel.go @@ -5,6 +5,7 @@ package model import ( "crypto/sha1" + "database/sql" "encoding/hex" "encoding/json" "io" @@ -35,22 +36,23 @@ 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"` - Props map[string]interface{} `json:"props" db:"-"` + 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"` + Props map[string]interface{} `json:"props" db:"-"` + GroupConstrained sql.NullBool `json:"group_constrained"` } type ChannelWithTeamData struct { @@ -61,10 +63,11 @@ type ChannelWithTeamData struct { } type ChannelPatch struct { - DisplayName *string `json:"display_name"` - Name *string `json:"name"` - Header *string `json:"header"` - Purpose *string `json:"purpose"` + DisplayName *string `json:"display_name"` + Name *string `json:"name"` + Header *string `json:"header"` + Purpose *string `json:"purpose"` + GroupConstrained *bool `json:"group_constrained"` } type ChannelForExport struct { @@ -186,6 +189,10 @@ func (o *Channel) Patch(patch *ChannelPatch) { if patch.Purpose != nil { o.Purpose = *patch.Purpose } + + if patch.GroupConstrained != nil { + o.GroupConstrained.Bool = *patch.GroupConstrained + } } func (o *Channel) MakeNonNil() { diff --git a/model/channel_test.go b/model/channel_test.go index ed6aed9190..14463eefc8 100644 --- a/model/channel_test.go +++ b/model/channel_test.go @@ -37,11 +37,12 @@ func TestChannelCopy(t *testing.T) { } func TestChannelPatch(t *testing.T) { - p := &ChannelPatch{Name: new(string), DisplayName: new(string), Header: new(string), Purpose: new(string)} + p := &ChannelPatch{Name: new(string), DisplayName: new(string), Header: new(string), Purpose: new(string), GroupConstrained: new(bool)} *p.Name = NewId() *p.DisplayName = NewId() *p.Header = NewId() *p.Purpose = NewId() + *p.GroupConstrained = true o := Channel{Id: NewId(), Name: NewId()} o.Patch(p) @@ -58,6 +59,9 @@ func TestChannelPatch(t *testing.T) { if *p.Purpose != o.Purpose { t.Fatal("do not match") } + if *p.GroupConstrained != o.GroupConstrained.Bool { + t.Fatalf("expected %v got %v", *p.GroupConstrained, o.GroupConstrained.Bool) + } } func TestChannelIsValid(t *testing.T) { diff --git a/model/team.go b/model/team.go index eadd05225f..6552deaee8 100644 --- a/model/team.go +++ b/model/team.go @@ -4,6 +4,7 @@ package model import ( + "database/sql" "encoding/json" "fmt" "io" @@ -26,30 +27,32 @@ const ( ) type Team struct { - Id string `json:"id"` - CreateAt int64 `json:"create_at"` - UpdateAt int64 `json:"update_at"` - DeleteAt int64 `json:"delete_at"` - DisplayName string `json:"display_name"` - Name string `json:"name"` - Description string `json:"description"` - Email string `json:"email"` - Type string `json:"type"` - CompanyName string `json:"company_name"` - AllowedDomains string `json:"allowed_domains"` - InviteId string `json:"invite_id"` - AllowOpenInvite bool `json:"allow_open_invite"` - LastTeamIconUpdate int64 `json:"last_team_icon_update,omitempty"` - SchemeId *string `json:"scheme_id"` + Id string `json:"id"` + CreateAt int64 `json:"create_at"` + UpdateAt int64 `json:"update_at"` + DeleteAt int64 `json:"delete_at"` + DisplayName string `json:"display_name"` + Name string `json:"name"` + Description string `json:"description"` + Email string `json:"email"` + Type string `json:"type"` + CompanyName string `json:"company_name"` + AllowedDomains string `json:"allowed_domains"` + InviteId string `json:"invite_id"` + AllowOpenInvite bool `json:"allow_open_invite"` + LastTeamIconUpdate int64 `json:"last_team_icon_update,omitempty"` + SchemeId *string `json:"scheme_id"` + GroupConstrained sql.NullBool `json:"group_constrained"` } type TeamPatch struct { - DisplayName *string `json:"display_name"` - Description *string `json:"description"` - CompanyName *string `json:"company_name"` - AllowedDomains *string `json:"allowed_domains"` - InviteId *string `json:"invite_id"` - AllowOpenInvite *bool `json:"allow_open_invite"` + DisplayName *string `json:"display_name"` + Description *string `json:"description"` + CompanyName *string `json:"company_name"` + AllowedDomains *string `json:"allowed_domains"` + InviteId *string `json:"invite_id"` + AllowOpenInvite *bool `json:"allow_open_invite"` + GroupConstrained *bool `json:"group_constrained"` } type TeamForExport struct { @@ -273,6 +276,10 @@ func (t *Team) Patch(patch *TeamPatch) { if patch.AllowOpenInvite != nil { t.AllowOpenInvite = *patch.AllowOpenInvite } + + if patch.GroupConstrained != nil { + t.GroupConstrained.Bool = *patch.GroupConstrained + } } func (t *TeamPatch) ToJson() string { diff --git a/model/team_test.go b/model/team_test.go index 60ba92f995..89ed5c7ba6 100644 --- a/model/team_test.go +++ b/model/team_test.go @@ -130,3 +130,48 @@ func TestCleanTeamName(t *testing.T) { t.Fatal("didn't clean name properly") } } + +func TestTeamPatch(t *testing.T) { + p := &TeamPatch{ + DisplayName: new(string), + Description: new(string), + CompanyName: new(string), + AllowedDomains: new(string), + InviteId: new(string), + AllowOpenInvite: new(bool), + GroupConstrained: new(bool), + } + + *p.DisplayName = NewId() + *p.Description = NewId() + *p.CompanyName = NewId() + *p.AllowedDomains = NewId() + *p.InviteId = NewId() + *p.AllowOpenInvite = true + *p.GroupConstrained = true + + o := Team{Id: NewId()} + o.Patch(p) + + if *p.DisplayName != o.DisplayName { + t.Fatal("DisplayName did not update") + } + if *p.Description != o.Description { + t.Fatal("Description did not update") + } + if *p.CompanyName != o.CompanyName { + t.Fatal("CompanyName did not update") + } + if *p.AllowedDomains != o.AllowedDomains { + t.Fatal("AllowedDomains did not update") + } + if *p.InviteId != o.InviteId { + t.Fatal("InviteId did not update") + } + if *p.AllowOpenInvite != o.AllowOpenInvite { + t.Fatal("AllowOpenInvite did not update") + } + if *p.GroupConstrained != o.GroupConstrained.Bool { + t.Fatalf("expected %v got %v", *p.GroupConstrained, o.GroupConstrained.Bool) + } +} diff --git a/store/sqlstore/upgrade.go b/store/sqlstore/upgrade.go index a965842c46..7daa8edb0a 100644 --- a/store/sqlstore/upgrade.go +++ b/store/sqlstore/upgrade.go @@ -634,6 +634,9 @@ func UpgradeDatabaseToVersion510(sqlStore SqlStore) { } } + sqlStore.CreateColumnIfNotExistsNoDefault("Channels", "GroupConstrained", "tinyint(1)", "boolean") + sqlStore.CreateColumnIfNotExistsNoDefault("Teams", "GroupConstrained", "tinyint(1)", "boolean") + // saveSchemaVersion(sqlStore, VERSION_5_10_0) // } }