Improve system admin permissions to dms and gms (#29656)

* revert the api4 portion of 57372bd06b

* test: Add system admin channel access tests

* skip a.HasPermissionToTeam for channels without a team

* fix TestPostGetInfo
Этот коммит содержится в:
Jesse Hallam
2024-12-20 12:49:58 -04:00
коммит произвёл GitHub
родитель 812034f5eb
Коммит 9e01424b15
4 изменённых файлов: 203 добавлений и 9 удалений

Просмотреть файл

@@ -805,10 +805,91 @@ func TestGetFile(t *testing.T) {
_, resp, err = client.GetFile(context.Background(), fileId)
require.Error(t, err)
CheckUnauthorizedStatus(t, resp)
}
_, _, err = th.SystemAdminClient.GetFile(context.Background(), fileId)
func TestGetFileAsSystemAdmin(t *testing.T) {
th := Setup(t).InitBasic()
defer th.TearDown()
if *th.App.Config().FileSettings.DriverName == "" {
t.Skip("skipping because no file driver is enabled")
}
sent, err := testutils.ReadTestFile("test.png")
require.NoError(t, err)
CheckUnauthorizedStatus(t, resp)
t.Run("public channel without membership", func(t *testing.T) {
publicChannel := th.CreateChannelWithClient(th.Client, model.ChannelTypeOpen)
fileResp, _, err := th.Client.UploadFile(context.Background(), sent, publicChannel.Id, "test.png")
require.NoError(t, err)
_, _, err = th.SystemAdminClient.GetFile(context.Background(), fileResp.FileInfos[0].Id)
require.NoError(t, err)
})
t.Run("public channel with membership", func(t *testing.T) {
publicChannel := th.CreatePublicChannel()
th.LinkUserToTeam(th.SystemAdminUser, th.BasicTeam)
th.AddUserToChannel(th.SystemAdminUser, publicChannel)
fileResp, _, err := th.Client.UploadFile(context.Background(), sent, publicChannel.Id, "test.png")
require.NoError(t, err)
_, _, err = th.SystemAdminClient.GetFile(context.Background(), fileResp.FileInfos[0].Id)
require.NoError(t, err)
})
t.Run("private channel without membership", func(t *testing.T) {
privateChannel := th.CreatePrivateChannel()
privateFileResp, _, err := th.Client.UploadFile(context.Background(), sent, privateChannel.Id, "test.png")
require.NoError(t, err)
_, _, err = th.SystemAdminClient.GetFile(context.Background(), privateFileResp.FileInfos[0].Id)
require.NoError(t, err)
})
t.Run("private channel with membership", func(t *testing.T) {
privateChannel := th.CreatePrivateChannel()
th.LinkUserToTeam(th.SystemAdminUser, th.BasicTeam)
th.AddUserToChannel(th.SystemAdminUser, privateChannel)
fileResp, _, err := th.Client.UploadFile(context.Background(), sent, privateChannel.Id, "test.png")
require.NoError(t, err)
_, _, err = th.SystemAdminClient.GetFile(context.Background(), fileResp.FileInfos[0].Id)
require.NoError(t, err)
})
t.Run("direct message without membership", func(t *testing.T) {
dmChannel := th.CreateDmChannel(th.BasicUser2)
dmFileResp, _, err := th.Client.UploadFile(context.Background(), sent, dmChannel.Id, "test.png")
require.NoError(t, err)
_, _, err = th.SystemAdminClient.GetFile(context.Background(), dmFileResp.FileInfos[0].Id)
require.NoError(t, err)
})
t.Run("direct message with membership", func(t *testing.T) {
dmChannel, _, err := th.SystemAdminClient.CreateDirectChannel(context.Background(), th.SystemAdminUser.Id, th.BasicUser.Id)
require.NoError(t, err)
fileResp, _, err := th.Client.UploadFile(context.Background(), sent, dmChannel.Id, "test.png")
require.NoError(t, err)
_, _, err = th.SystemAdminClient.GetFile(context.Background(), fileResp.FileInfos[0].Id)
require.NoError(t, err)
})
t.Run("group message without membership", func(t *testing.T) {
user3 := th.CreateUser()
gmChannel, _, err := th.Client.CreateGroupChannel(context.Background(), []string{th.BasicUser.Id, th.BasicUser2.Id, user3.Id})
require.NoError(t, err)
gmFileResp, _, err := th.Client.UploadFile(context.Background(), sent, gmChannel.Id, "test.png")
require.NoError(t, err)
_, _, err = th.SystemAdminClient.GetFile(context.Background(), gmFileResp.FileInfos[0].Id)
require.NoError(t, err)
})
t.Run("group message with membership", func(t *testing.T) {
user3 := th.CreateUser()
gmChannel, _, err := th.SystemAdminClient.CreateGroupChannel(context.Background(), []string{th.SystemAdminUser.Id, th.BasicUser.Id, user3.Id})
require.NoError(t, err)
fileResp, _, err := th.Client.UploadFile(context.Background(), sent, gmChannel.Id, "test.png")
require.NoError(t, err)
_, _, err = th.SystemAdminClient.GetFile(context.Background(), fileResp.FileInfos[0].Id)
require.NoError(t, err)
})
}
func TestGetFileHeaders(t *testing.T) {
@@ -874,7 +955,7 @@ func TestGetFileHeaders(t *testing.T) {
// t.Run("go", testHeaders(data, "test.go", "text/x-go; charset=utf-8", false, false))
t.Run("zip", testHeaders(data, "test.zip", "application/zip", false, false))
// Not every platform can recognize these
//t.Run("exe", testHeaders(data, "test.exe", "application/x-ms", false))
// t.Run("exe", testHeaders(data, "test.exe", "application/x-ms", false))
t.Run("no extension", testHeaders(data, "test", "application/octet-stream", false, false))
t.Run("no extension 2", testHeaders([]byte("<html></html>"), "test", "application/octet-stream", false, false))
}
@@ -929,6 +1010,93 @@ func TestGetFileThumbnail(t *testing.T) {
CheckForbiddenStatus(t, resp)
}
func TestGetFileThumbnailAsSystemAdmin(t *testing.T) {
th := Setup(t).InitBasic()
defer th.TearDown()
if *th.App.Config().FileSettings.DriverName == "" {
t.Skip("skipping because no file driver is enabled")
}
sent, err := testutils.ReadTestFile("test.png")
require.NoError(t, err)
t.Run("public channel without membership", func(t *testing.T) {
th.LinkUserToTeam(th.BasicUser, th.BasicTeam)
publicChannel := th.CreateChannelWithClient(th.Client, model.ChannelTypeOpen)
fileResp, _, err := th.Client.UploadFile(context.Background(), sent, publicChannel.Id, "test.png")
require.NoError(t, err)
_, _, err = th.SystemAdminClient.GetFileThumbnail(context.Background(), fileResp.FileInfos[0].Id)
require.NoError(t, err)
})
t.Run("public channel with membership", func(t *testing.T) {
th.LinkUserToTeam(th.SystemAdminUser, th.BasicTeam)
publicChannel := th.CreateChannelWithClient(th.Client, model.ChannelTypeOpen)
th.AddUserToChannel(th.SystemAdminUser, publicChannel)
fileResp, _, err := th.Client.UploadFile(context.Background(), sent, publicChannel.Id, "test.png")
require.NoError(t, err)
_, _, err = th.SystemAdminClient.GetFileThumbnail(context.Background(), fileResp.FileInfos[0].Id)
require.NoError(t, err)
})
t.Run("private channel without membership", func(t *testing.T) {
th.LinkUserToTeam(th.SystemAdminUser, th.BasicTeam)
privateChannel := th.CreatePrivateChannel()
privateFileResp, _, err := th.Client.UploadFile(context.Background(), sent, privateChannel.Id, "test.png")
require.NoError(t, err)
_, _, err = th.SystemAdminClient.GetFileThumbnail(context.Background(), privateFileResp.FileInfos[0].Id)
require.NoError(t, err)
})
t.Run("private channel with membership", func(t *testing.T) {
th.LinkUserToTeam(th.SystemAdminUser, th.BasicTeam)
privateChannel := th.CreatePrivateChannel()
th.AddUserToChannel(th.SystemAdminUser, privateChannel)
privateFileResp, _, err := th.Client.UploadFile(context.Background(), sent, privateChannel.Id, "test.png")
require.NoError(t, err)
_, _, err = th.SystemAdminClient.GetFileThumbnail(context.Background(), privateFileResp.FileInfos[0].Id)
require.NoError(t, err)
})
t.Run("direct message without membership", func(t *testing.T) {
dmChannel := th.CreateDmChannel(th.BasicUser2)
dmFileResp, _, err := th.Client.UploadFile(context.Background(), sent, dmChannel.Id, "test.png")
require.NoError(t, err)
_, _, err = th.SystemAdminClient.GetFileThumbnail(context.Background(), dmFileResp.FileInfos[0].Id)
require.NoError(t, err)
})
t.Run("direct message with membership", func(t *testing.T) {
dmChannel, _, err := th.SystemAdminClient.CreateDirectChannel(context.Background(), th.SystemAdminUser.Id, th.BasicUser.Id)
require.NoError(t, err)
dmFileResp, _, err := th.Client.UploadFile(context.Background(), sent, dmChannel.Id, "test.png")
require.NoError(t, err)
_, _, err = th.SystemAdminClient.GetFileThumbnail(context.Background(), dmFileResp.FileInfos[0].Id)
require.NoError(t, err)
})
t.Run("group message without membership", func(t *testing.T) {
user3 := th.CreateUser()
gmChannel, _, err := th.Client.CreateGroupChannel(context.Background(), []string{th.BasicUser.Id, th.BasicUser2.Id, user3.Id})
require.NoError(t, err)
gmFileResp, _, err := th.Client.UploadFile(context.Background(), sent, gmChannel.Id, "test.png")
require.NoError(t, err)
_, _, err = th.SystemAdminClient.GetFileThumbnail(context.Background(), gmFileResp.FileInfos[0].Id)
require.NoError(t, err)
})
t.Run("group message with membership", func(t *testing.T) {
user3 := th.CreateUser()
gmChannel, _, err := th.SystemAdminClient.CreateGroupChannel(context.Background(), []string{th.SystemAdminUser.Id, th.BasicUser.Id, user3.Id})
require.NoError(t, err)
gmFileResp, _, err := th.Client.UploadFile(context.Background(), sent, gmChannel.Id, "test.png")
require.NoError(t, err)
_, _, err = th.SystemAdminClient.GetFileThumbnail(context.Background(), gmFileResp.FileInfos[0].Id)
require.NoError(t, err)
})
}
func TestGetFileLink(t *testing.T) {
th := Setup(t).InitBasic()
defer th.TearDown()