diff --git a/server/api/api.go b/server/api/api.go index 9ae0e0920..eb7e5f3a3 100644 --- a/server/api/api.go +++ b/server/api/api.go @@ -1170,13 +1170,22 @@ func (a *API) handlePostSharing(w http.ResponseWriter, r *http.Request) { auditRec.AddMeta("shareID", sharing.ID) auditRec.AddMeta("enabled", sharing.Enabled) - // Stamp ModifiedBy ctx := r.Context() session := ctx.Value(sessionContextKey).(*model.Session) userID := session.UserID if userID == SingleUser { userID = "" } + + if !a.app.GetClientConfig().EnablePublicSharedBoards { + a.logger.Info( + "Attempt to turn on sharing for board via API failed, sharing off in configuration.", + mlog.String("boardID", sharing.ID), + mlog.String("userID", userID)) + a.errorResponse(w, r.URL.Path, http.StatusInternalServerError, "Turning on sharing for board failed, see log for details.", nil) + return + } + sharing.ModifiedBy = userID err = a.app.UpsertSharing(*container, sharing) diff --git a/server/integrationtests/sharing_test.go b/server/integrationtests/sharing_test.go index fd928375c..2b2868217 100644 --- a/server/integrationtests/sharing_test.go +++ b/server/integrationtests/sharing_test.go @@ -22,7 +22,7 @@ func TestSharing(t *testing.T) { require.False(t, sharing.Enabled) }) - t.Run("POST sharing", func(t *testing.T) { + t.Run("POST sharing, config = false", func(t *testing.T) { sharing := model.Sharing{ ID: rootID, Token: token, @@ -30,17 +30,41 @@ func TestSharing(t *testing.T) { UpdateAt: 1, } + // it will fail with default config + success, resp := th.Client.PostSharing(sharing) + require.False(t, success) + require.Error(t, resp.Error) + + t.Run("GET sharing", func(t *testing.T) { + sharing, resp := th.Client.GetSharing(rootID) + // Expect no error, but no Id returned + require.NoError(t, resp.Error) + require.NotNil(t, sharing) + require.Equal(t, "", sharing.ID) + }) + }) + + t.Run("POST sharing, config = true", func(t *testing.T) { + th.Server.Config().EnablePublicSharedBoards = true + sharing := model.Sharing{ + ID: rootID, + Token: token, + Enabled: true, + UpdateAt: 1, + } + + // it will succeed with updated config success, resp := th.Client.PostSharing(sharing) require.True(t, success) require.NoError(t, resp.Error) - }) - t.Run("GET sharing", func(t *testing.T) { - sharing, resp := th.Client.GetSharing(rootID) - require.NoError(t, resp.Error) - require.NotNil(t, sharing) - require.Equal(t, sharing.ID, rootID) - require.True(t, sharing.Enabled) - require.Equal(t, sharing.Token, token) + t.Run("GET sharing", func(t *testing.T) { + sharing, resp := th.Client.GetSharing(rootID) + require.NoError(t, resp.Error) + require.NotNil(t, sharing) + require.Equal(t, sharing.ID, rootID) + require.True(t, sharing.Enabled) + require.Equal(t, sharing.Token, token) + }) }) }