From b0001f7cadd4803d0045eaedf79d08b83ca8e4f9 Mon Sep 17 00:00:00 2001 From: Martin Kraft Date: Mon, 28 Nov 2022 11:19:58 -0500 Subject: [PATCH] =?UTF-8?q?MM-41294:=20Allow=20team=20scheme=20APIs=20to?= =?UTF-8?q?=20be=20accessed=20with=20a=20professional=20l=E2=80=A6=20(#216?= =?UTF-8?q?60)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * MM-41294: Allow team scheme APIs to be accessed with a professional license. * MM-41294: Adds tests. --- api4/scheme.go | 6 ++-- api4/scheme_test.go | 70 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+), 3 deletions(-) diff --git a/api4/scheme.go b/api4/scheme.go index efb5f781b0..82421ee610 100644 --- a/api4/scheme.go +++ b/api4/scheme.go @@ -33,7 +33,7 @@ func createScheme(c *Context, w http.ResponseWriter, r *http.Request) { defer c.LogAuditRec(auditRec) auditRec.AddEventParameter("scheme", scheme) - if c.App.Channels().License() == nil || !*c.App.Channels().License().Features.CustomPermissionsSchemes { + if c.App.Channels().License() == nil || (!*c.App.Channels().License().Features.CustomPermissionsSchemes && c.App.Channels().License().SkuShortName != model.LicenseShortSkuProfessional) { c.Err = model.NewAppError("Api4.CreateScheme", "api.scheme.create_scheme.license.error", nil, "", http.StatusNotImplemented) return } @@ -194,7 +194,7 @@ func patchScheme(c *Context, w http.ResponseWriter, r *http.Request) { auditRec.AddEventParameter("scheme_patch", patch) defer c.LogAuditRec(auditRec) - if c.App.Channels().License() == nil || !*c.App.Channels().License().Features.CustomPermissionsSchemes { + if c.App.Channels().License() == nil || (!*c.App.Channels().License().Features.CustomPermissionsSchemes && c.App.Channels().License().SkuShortName != model.LicenseShortSkuProfessional) { c.Err = model.NewAppError("Api4.PatchScheme", "api.scheme.patch_scheme.license.error", nil, "", http.StatusNotImplemented) return } @@ -239,7 +239,7 @@ func deleteScheme(c *Context, w http.ResponseWriter, r *http.Request) { auditRec.AddEventParameter("scheme_id", c.Params.SchemeId) defer c.LogAuditRec(auditRec) - if c.App.Channels().License() == nil || !*c.App.Channels().License().Features.CustomPermissionsSchemes { + if c.App.Channels().License() == nil || (!*c.App.Channels().License().Features.CustomPermissionsSchemes && c.App.Channels().License().SkuShortName != model.LicenseShortSkuProfessional) { c.Err = model.NewAppError("Api4.DeleteScheme", "api.scheme.delete_scheme.license.error", nil, "", http.StatusNotImplemented) return } diff --git a/api4/scheme_test.go b/api4/scheme_test.go index 8fda68d19f..ba478a243e 100644 --- a/api4/scheme_test.go +++ b/api4/scheme_test.go @@ -150,6 +150,31 @@ func TestCreateScheme(t *testing.T) { _, r6, _ := th.SystemAdminClient.CreateScheme(scheme6) CheckNotImplementedStatus(t, r6) + // Create scheme with a Professional SKU license but no explicit 'custom_permissions_schemes' license feature. + lic := &model.License{ + Features: &model.Features{ + CustomPermissionsSchemes: model.NewBool(false), + }, + Customer: &model.Customer{ + Name: "TestName", + Email: "test@example.com", + }, + SkuName: "SKU NAME", + SkuShortName: model.LicenseShortSkuProfessional, + StartsAt: model.GetMillis() - 1000, + ExpiresAt: model.GetMillis() + 100000, + } + th.App.Srv().SetLicense(lic) + scheme6b := &model.Scheme{ + DisplayName: model.NewId(), + Name: model.NewId(), + Description: model.NewId(), + Scope: model.SchemeScopeTeam, + } + _, resp, err := th.SystemAdminClient.CreateScheme(scheme6b) + require.NoError(t, err) + CheckCreatedStatus(t, resp) + th.App.SetPhase2PermissionsMigrationStatus(false) th.LoginSystemAdmin() @@ -579,6 +604,24 @@ func TestPatchScheme(t *testing.T) { _, r11, _ := th.SystemAdminClient.PatchScheme(s6.Id, schemePatch) CheckNotImplementedStatus(t, r11) + // Patch scheme with a Professional SKU license but no explicit 'custom_permissions_schemes' license feature. + lic := &model.License{ + Features: &model.Features{ + CustomPermissionsSchemes: model.NewBool(false), + }, + Customer: &model.Customer{ + Name: "TestName", + Email: "test@example.com", + }, + SkuName: "SKU NAME", + SkuShortName: model.LicenseShortSkuProfessional, + StartsAt: model.GetMillis() - 1000, + ExpiresAt: model.GetMillis() + 100000, + } + th.App.Srv().SetLicense(lic) + _, _, err = th.SystemAdminClient.PatchScheme(s6.Id, schemePatch) + require.NoError(t, err) + th.App.SetPhase2PermissionsMigrationStatus(false) th.LoginSystemAdmin() @@ -745,6 +788,15 @@ func TestDeleteScheme(t *testing.T) { s1, _, err := th.SystemAdminClient.CreateScheme(scheme1) require.NoError(t, err) + scheme2 := &model.Scheme{ + DisplayName: model.NewId(), + Name: model.NewId(), + Description: model.NewId(), + Scope: model.SchemeScopeChannel, + } + s2, _, err := th.SystemAdminClient.CreateScheme(scheme2) + require.NoError(t, err) + // Test with unknown ID. r2, err := th.SystemAdminClient.DeleteScheme(model.NewId()) require.Error(t, err) @@ -766,6 +818,24 @@ func TestDeleteScheme(t *testing.T) { require.Error(t, err) CheckNotImplementedStatus(t, r5) + // Delete scheme with a Professional SKU license but no explicit 'custom_permissions_schemes' license feature. + lic := &model.License{ + Features: &model.Features{ + CustomPermissionsSchemes: model.NewBool(false), + }, + Customer: &model.Customer{ + Name: "TestName", + Email: "test@example.com", + }, + SkuName: "SKU NAME", + SkuShortName: model.LicenseShortSkuProfessional, + StartsAt: model.GetMillis() - 1000, + ExpiresAt: model.GetMillis() + 100000, + } + th.App.Srv().SetLicense(lic) + _, err = th.SystemAdminClient.DeleteScheme(s2.Id) + require.NoError(t, err) + th.App.SetPhase2PermissionsMigrationStatus(false) th.App.Srv().SetLicense(model.NewTestLicense("custom_permissions_schemes"))