From c6cbce610043bb050f2c542412eb439dc22c4a88 Mon Sep 17 00:00:00 2001 From: Joram Wilander Date: Fri, 18 May 2018 09:13:23 -0400 Subject: Add config setting for API team deletion (#8800) --- api4/team.go | 2 +- api4/team_test.go | 27 +++++++++++++++------------ config/default.json | 3 ++- model/config.go | 5 +++++ web/params.go | 2 +- 5 files changed, 24 insertions(+), 15 deletions(-) diff --git a/api4/team.go b/api4/team.go index 023289579..44771ae60 100644 --- a/api4/team.go +++ b/api4/team.go @@ -197,7 +197,7 @@ func deleteTeam(c *Context, w http.ResponseWriter, r *http.Request) { } var err *model.AppError - if c.Params.Permanent { + if c.Params.Permanent && *c.App.Config().ServiceSettings.EnableAPITeamDeletion { err = c.App.PermanentDeleteTeamId(c.Params.TeamId) } else { err = c.App.SoftDeleteTeam(c.Params.TeamId) diff --git a/api4/team_test.go b/api4/team_test.go index 705ff603b..bf67d8fde 100644 --- a/api4/team_test.go +++ b/api4/team_test.go @@ -540,22 +540,25 @@ func TestPermanentDeleteTeam(t *testing.T) { team := &model.Team{DisplayName: "DisplayName", Name: GenerateTestTeamName(), Email: th.GenerateTestEmail(), Type: model.TEAM_OPEN} team, _ = Client.CreateTeam(team) + th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableAPITeamDeletion = false }) + + // Does not error when deletion is disabled, just soft deletes ok, resp := Client.PermanentDeleteTeam(team.Id) CheckNoError(t, resp) + assert.True(t, ok) - if !ok { - t.Fatal("should have returned true") - } - - // The team is deleted in the background, its only soft deleted at this - // time rteam, err := th.App.GetTeam(team.Id) - if err != nil { - t.Fatal("should have returned archived team") - } - if rteam.DeleteAt == 0 { - t.Fatal("should have not set to zero") - } + assert.Nil(t, err) + assert.True(t, rteam.DeleteAt > 0) + + th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableAPITeamDeletion = true }) + + ok, resp = Client.PermanentDeleteTeam(team.Id) + CheckNoError(t, resp) + assert.True(t, ok) + + _, err = th.App.GetTeam(team.Id) + assert.NotNil(t, err) ok, resp = Client.PermanentDeleteTeam("junk") CheckBadRequestStatus(t, resp) diff --git a/config/default.json b/config/default.json index 80a694e38..23bae64f9 100644 --- a/config/default.json +++ b/config/default.json @@ -62,7 +62,8 @@ "ExperimentalGroupUnreadChannels": "disabled", "ImageProxyType": "", "ImageProxyOptions": "", - "ImageProxyURL": "" + "ImageProxyURL": "", + "EnableAPITeamDeletion": false }, "TeamSettings": { "SiteName": "Mattermost", diff --git a/model/config.go b/model/config.go index a5a588a82..64107c42d 100644 --- a/model/config.go +++ b/model/config.go @@ -224,6 +224,7 @@ type ServiceSettings struct { ImageProxyType *string ImageProxyURL *string ImageProxyOptions *string + EnableAPITeamDeletion *bool } func (s *ServiceSettings) SetDefaults() { @@ -452,6 +453,10 @@ func (s *ServiceSettings) SetDefaults() { if s.ImageProxyOptions == nil { s.ImageProxyOptions = NewString("") } + + if s.EnableAPITeamDeletion == nil { + s.EnableAPITeamDeletion = NewBool(false) + } } type ClusterSettings struct { diff --git a/web/params.go b/web/params.go index 286c3f44f..e97b206ab 100644 --- a/web/params.go +++ b/web/params.go @@ -173,7 +173,7 @@ func ParamsFromRequest(r *http.Request) *Params { params.Page = val } - if val, err := strconv.ParseBool(query.Get("permanent")); err != nil { + if val, err := strconv.ParseBool(query.Get("permanent")); err == nil { params.Permanent = val } -- cgit v1.2.3-1-g7c22