[MM-16751] golint model (#17896)
Этот коммит содержится в:
коммит произвёл
Claudio Costa
родитель
953eebdef4
Коммит
97ccf0bdf6
@@ -49,10 +49,6 @@ issues:
|
|||||||
- golint
|
- golint
|
||||||
text: "should have|should be|should replace|stutters|underscore|annoying|error strings should not be capitalized"
|
text: "should have|should be|should replace|stutters|underscore|annoying|error strings should not be capitalized"
|
||||||
|
|
||||||
- linters:
|
|
||||||
- golint
|
|
||||||
path: "model/"
|
|
||||||
|
|
||||||
- linters:
|
- linters:
|
||||||
- misspell
|
- misspell
|
||||||
path: "shared/markdown/html_entities.go"
|
path: "shared/markdown/html_entities.go"
|
||||||
|
|||||||
@@ -146,7 +146,7 @@ func Init(a app.AppIface, root *mux.Router) *API {
|
|||||||
}
|
}
|
||||||
|
|
||||||
api.BaseRoutes.Root = root
|
api.BaseRoutes.Root = root
|
||||||
api.BaseRoutes.ApiRoot = root.PathPrefix(model.API_URL_SUFFIX).Subrouter()
|
api.BaseRoutes.ApiRoot = root.PathPrefix(model.ApiUrlSuffix).Subrouter()
|
||||||
|
|
||||||
api.BaseRoutes.Users = api.BaseRoutes.ApiRoot.PathPrefix("/users").Subrouter()
|
api.BaseRoutes.Users = api.BaseRoutes.ApiRoot.PathPrefix("/users").Subrouter()
|
||||||
api.BaseRoutes.User = api.BaseRoutes.ApiRoot.PathPrefix("/users/{user_id:[A-Za-z0-9]+}").Subrouter()
|
api.BaseRoutes.User = api.BaseRoutes.ApiRoot.PathPrefix("/users/{user_id:[A-Za-z0-9]+}").Subrouter()
|
||||||
@@ -305,7 +305,7 @@ func InitLocal(a app.AppIface, root *mux.Router) *API {
|
|||||||
}
|
}
|
||||||
|
|
||||||
api.BaseRoutes.Root = root
|
api.BaseRoutes.Root = root
|
||||||
api.BaseRoutes.ApiRoot = root.PathPrefix(model.API_URL_SUFFIX).Subrouter()
|
api.BaseRoutes.ApiRoot = root.PathPrefix(model.ApiUrlSuffix).Subrouter()
|
||||||
|
|
||||||
api.BaseRoutes.Users = api.BaseRoutes.ApiRoot.PathPrefix("/users").Subrouter()
|
api.BaseRoutes.Users = api.BaseRoutes.ApiRoot.PathPrefix("/users").Subrouter()
|
||||||
api.BaseRoutes.User = api.BaseRoutes.Users.PathPrefix("/{user_id:[A-Za-z0-9]+}").Subrouter()
|
api.BaseRoutes.User = api.BaseRoutes.Users.PathPrefix("/{user_id:[A-Za-z0-9]+}").Subrouter()
|
||||||
|
|||||||
@@ -261,7 +261,7 @@ func SetupConfigWithStoreMock(tb testing.TB, updateConfig func(cfg *model.Config
|
|||||||
th := setupTestHelper(testlib.GetMockStoreForSetupFunctions(), nil, false, false, updateConfig, nil)
|
th := setupTestHelper(testlib.GetMockStoreForSetupFunctions(), nil, false, false, updateConfig, nil)
|
||||||
statusMock := mocks.StatusStore{}
|
statusMock := mocks.StatusStore{}
|
||||||
statusMock.On("UpdateExpiredDNDStatuses").Return([]*model.Status{}, nil)
|
statusMock.On("UpdateExpiredDNDStatuses").Return([]*model.Status{}, nil)
|
||||||
statusMock.On("Get", "user1").Return(&model.Status{UserId: "user1", Status: model.STATUS_ONLINE}, nil)
|
statusMock.On("Get", "user1").Return(&model.Status{UserId: "user1", Status: model.StatusOnline}, nil)
|
||||||
statusMock.On("UpdateLastActivityAt", "user1", mock.Anything).Return(nil)
|
statusMock.On("UpdateLastActivityAt", "user1", mock.Anything).Return(nil)
|
||||||
statusMock.On("SaveOrUpdate", mock.AnythingOfType("*model.Status")).Return(nil)
|
statusMock.On("SaveOrUpdate", mock.AnythingOfType("*model.Status")).Return(nil)
|
||||||
emptyMockStore := mocks.Store{}
|
emptyMockStore := mocks.Store{}
|
||||||
@@ -275,7 +275,7 @@ func SetupWithStoreMock(tb testing.TB) *TestHelper {
|
|||||||
th := setupTestHelper(testlib.GetMockStoreForSetupFunctions(), nil, false, false, nil, nil)
|
th := setupTestHelper(testlib.GetMockStoreForSetupFunctions(), nil, false, false, nil, nil)
|
||||||
statusMock := mocks.StatusStore{}
|
statusMock := mocks.StatusStore{}
|
||||||
statusMock.On("UpdateExpiredDNDStatuses").Return([]*model.Status{}, nil)
|
statusMock.On("UpdateExpiredDNDStatuses").Return([]*model.Status{}, nil)
|
||||||
statusMock.On("Get", "user1").Return(&model.Status{UserId: "user1", Status: model.STATUS_ONLINE}, nil)
|
statusMock.On("Get", "user1").Return(&model.Status{UserId: "user1", Status: model.StatusOnline}, nil)
|
||||||
statusMock.On("UpdateLastActivityAt", "user1", mock.Anything).Return(nil)
|
statusMock.On("UpdateLastActivityAt", "user1", mock.Anything).Return(nil)
|
||||||
statusMock.On("SaveOrUpdate", mock.AnythingOfType("*model.Status")).Return(nil)
|
statusMock.On("SaveOrUpdate", mock.AnythingOfType("*model.Status")).Return(nil)
|
||||||
emptyMockStore := mocks.Store{}
|
emptyMockStore := mocks.Store{}
|
||||||
@@ -289,7 +289,7 @@ func SetupEnterpriseWithStoreMock(tb testing.TB) *TestHelper {
|
|||||||
th := setupTestHelper(testlib.GetMockStoreForSetupFunctions(), nil, true, false, nil, nil)
|
th := setupTestHelper(testlib.GetMockStoreForSetupFunctions(), nil, true, false, nil, nil)
|
||||||
statusMock := mocks.StatusStore{}
|
statusMock := mocks.StatusStore{}
|
||||||
statusMock.On("UpdateExpiredDNDStatuses").Return([]*model.Status{}, nil)
|
statusMock.On("UpdateExpiredDNDStatuses").Return([]*model.Status{}, nil)
|
||||||
statusMock.On("Get", "user1").Return(&model.Status{UserId: "user1", Status: model.STATUS_ONLINE}, nil)
|
statusMock.On("Get", "user1").Return(&model.Status{UserId: "user1", Status: model.StatusOnline}, nil)
|
||||||
statusMock.On("UpdateLastActivityAt", "user1", mock.Anything).Return(nil)
|
statusMock.On("UpdateLastActivityAt", "user1", mock.Anything).Return(nil)
|
||||||
statusMock.On("SaveOrUpdate", mock.AnythingOfType("*model.Status")).Return(nil)
|
statusMock.On("SaveOrUpdate", mock.AnythingOfType("*model.Status")).Return(nil)
|
||||||
emptyMockStore := mocks.Store{}
|
emptyMockStore := mocks.Store{}
|
||||||
@@ -361,17 +361,17 @@ func (th *TestHelper) InitLogin() *TestHelper {
|
|||||||
// create users once and cache them because password hashing is slow
|
// create users once and cache them because password hashing is slow
|
||||||
initBasicOnce.Do(func() {
|
initBasicOnce.Do(func() {
|
||||||
th.SystemAdminUser = th.CreateUser()
|
th.SystemAdminUser = th.CreateUser()
|
||||||
th.App.UpdateUserRoles(th.SystemAdminUser.Id, model.SYSTEM_USER_ROLE_ID+" "+model.SYSTEM_ADMIN_ROLE_ID, false)
|
th.App.UpdateUserRoles(th.SystemAdminUser.Id, model.SystemUserRoleId+" "+model.SystemAdminRoleId, false)
|
||||||
th.SystemAdminUser, _ = th.App.GetUser(th.SystemAdminUser.Id)
|
th.SystemAdminUser, _ = th.App.GetUser(th.SystemAdminUser.Id)
|
||||||
userCache.SystemAdminUser = th.SystemAdminUser.DeepCopy()
|
userCache.SystemAdminUser = th.SystemAdminUser.DeepCopy()
|
||||||
|
|
||||||
th.SystemManagerUser = th.CreateUser()
|
th.SystemManagerUser = th.CreateUser()
|
||||||
th.App.UpdateUserRoles(th.SystemManagerUser.Id, model.SYSTEM_USER_ROLE_ID+" "+model.SYSTEM_MANAGER_ROLE_ID, false)
|
th.App.UpdateUserRoles(th.SystemManagerUser.Id, model.SystemUserRoleId+" "+model.SystemManagerRoleId, false)
|
||||||
th.SystemManagerUser, _ = th.App.GetUser(th.SystemManagerUser.Id)
|
th.SystemManagerUser, _ = th.App.GetUser(th.SystemManagerUser.Id)
|
||||||
userCache.SystemManagerUser = th.SystemManagerUser.DeepCopy()
|
userCache.SystemManagerUser = th.SystemManagerUser.DeepCopy()
|
||||||
|
|
||||||
th.TeamAdminUser = th.CreateUser()
|
th.TeamAdminUser = th.CreateUser()
|
||||||
th.App.UpdateUserRoles(th.TeamAdminUser.Id, model.SYSTEM_USER_ROLE_ID, false)
|
th.App.UpdateUserRoles(th.TeamAdminUser.Id, model.SystemUserRoleId, false)
|
||||||
th.TeamAdminUser, _ = th.App.GetUser(th.TeamAdminUser.Id)
|
th.TeamAdminUser, _ = th.App.GetUser(th.TeamAdminUser.Id)
|
||||||
userCache.TeamAdminUser = th.TeamAdminUser.DeepCopy()
|
userCache.TeamAdminUser = th.TeamAdminUser.DeepCopy()
|
||||||
|
|
||||||
@@ -433,7 +433,7 @@ func (th *TestHelper) InitBasic() *TestHelper {
|
|||||||
th.App.AddUserToChannel(th.BasicUser2, th.BasicPrivateChannel, false)
|
th.App.AddUserToChannel(th.BasicUser2, th.BasicPrivateChannel, false)
|
||||||
th.App.AddUserToChannel(th.BasicUser, th.BasicDeletedChannel, false)
|
th.App.AddUserToChannel(th.BasicUser, th.BasicDeletedChannel, false)
|
||||||
th.App.AddUserToChannel(th.BasicUser2, th.BasicDeletedChannel, false)
|
th.App.AddUserToChannel(th.BasicUser2, th.BasicDeletedChannel, false)
|
||||||
th.App.UpdateUserRoles(th.BasicUser.Id, model.SYSTEM_USER_ROLE_ID, false)
|
th.App.UpdateUserRoles(th.BasicUser.Id, model.SystemUserRoleId, false)
|
||||||
th.Client.DeleteChannel(th.BasicDeletedChannel.Id)
|
th.Client.DeleteChannel(th.BasicDeletedChannel.Id)
|
||||||
th.LoginBasic()
|
th.LoginBasic()
|
||||||
th.Group = th.CreateGroup()
|
th.Group = th.CreateGroup()
|
||||||
@@ -468,7 +468,7 @@ func (th *TestHelper) CreateLocalClient(socketPath string) *model.Client4 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return &model.Client4{
|
return &model.Client4{
|
||||||
ApiUrl: "http://_" + model.API_URL_SUFFIX,
|
ApiUrl: "http://_" + model.ApiUrlSuffix,
|
||||||
HttpClient: httpClient,
|
HttpClient: httpClient,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -523,7 +523,7 @@ func (th *TestHelper) CreateTeamWithClient(client *model.Client4) *model.Team {
|
|||||||
DisplayName: "dn_" + id,
|
DisplayName: "dn_" + id,
|
||||||
Name: GenerateTestTeamName(),
|
Name: GenerateTestTeamName(),
|
||||||
Email: th.GenerateTestEmail(),
|
Email: th.GenerateTestEmail(),
|
||||||
Type: model.TEAM_OPEN,
|
Type: model.TeamOpen,
|
||||||
}
|
}
|
||||||
|
|
||||||
utils.DisableDebugLogForTest()
|
utils.DisableDebugLogForTest()
|
||||||
@@ -622,18 +622,18 @@ func (th *TestHelper) SetupSamlConfig() {
|
|||||||
*cfg.SamlSettings.NicknameAttribute = ""
|
*cfg.SamlSettings.NicknameAttribute = ""
|
||||||
*cfg.SamlSettings.PositionAttribute = ""
|
*cfg.SamlSettings.PositionAttribute = ""
|
||||||
*cfg.SamlSettings.LocaleAttribute = ""
|
*cfg.SamlSettings.LocaleAttribute = ""
|
||||||
*cfg.SamlSettings.SignatureAlgorithm = model.SAML_SETTINGS_SIGNATURE_ALGORITHM_SHA256
|
*cfg.SamlSettings.SignatureAlgorithm = model.SamlSettingsSignatureAlgorithmSha256
|
||||||
*cfg.SamlSettings.CanonicalAlgorithm = model.SAML_SETTINGS_CANONICAL_ALGORITHM_C14N11
|
*cfg.SamlSettings.CanonicalAlgorithm = model.SamlSettingsCanonicalAlgorithmC14n11
|
||||||
})
|
})
|
||||||
th.App.Srv().SetLicense(model.NewTestLicense("saml"))
|
th.App.Srv().SetLicense(model.NewTestLicense("saml"))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (th *TestHelper) CreatePublicChannel() *model.Channel {
|
func (th *TestHelper) CreatePublicChannel() *model.Channel {
|
||||||
return th.CreateChannelWithClient(th.Client, model.CHANNEL_OPEN)
|
return th.CreateChannelWithClient(th.Client, model.ChannelTypeOpen)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (th *TestHelper) CreatePrivateChannel() *model.Channel {
|
func (th *TestHelper) CreatePrivateChannel() *model.Channel {
|
||||||
return th.CreateChannelWithClient(th.Client, model.CHANNEL_PRIVATE)
|
return th.CreateChannelWithClient(th.Client, model.ChannelTypePrivate)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (th *TestHelper) CreateChannelWithClient(client *model.Client4, channelType string) *model.Channel {
|
func (th *TestHelper) CreateChannelWithClient(client *model.Client4, channelType string) *model.Channel {
|
||||||
@@ -1049,7 +1049,7 @@ func s3New(endpoint, accessKey, secretKey string, secure bool, signV2 bool, regi
|
|||||||
|
|
||||||
func (th *TestHelper) cleanupTestFile(info *model.FileInfo) error {
|
func (th *TestHelper) cleanupTestFile(info *model.FileInfo) error {
|
||||||
cfg := th.App.Config()
|
cfg := th.App.Config()
|
||||||
if *cfg.FileSettings.DriverName == model.IMAGE_DRIVER_S3 {
|
if *cfg.FileSettings.DriverName == model.ImageDriverS3 {
|
||||||
endpoint := *cfg.FileSettings.AmazonS3Endpoint
|
endpoint := *cfg.FileSettings.AmazonS3Endpoint
|
||||||
accessKey := *cfg.FileSettings.AmazonS3AccessKeyId
|
accessKey := *cfg.FileSettings.AmazonS3AccessKeyId
|
||||||
secretKey := *cfg.FileSettings.AmazonS3SecretAccessKey
|
secretKey := *cfg.FileSettings.AmazonS3SecretAccessKey
|
||||||
@@ -1076,7 +1076,7 @@ func (th *TestHelper) cleanupTestFile(info *model.FileInfo) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if *cfg.FileSettings.DriverName == model.IMAGE_DRIVER_LOCAL {
|
} else if *cfg.FileSettings.DriverName == model.ImageDriverLocal {
|
||||||
if err := os.Remove(*cfg.FileSettings.Directory + info.Path); err != nil {
|
if err := os.Remove(*cfg.FileSettings.Directory + info.Path); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -1260,11 +1260,11 @@ func (th *TestHelper) AddPermissionToRole(permission string, roleName string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (th *TestHelper) SetupTeamScheme() *model.Scheme {
|
func (th *TestHelper) SetupTeamScheme() *model.Scheme {
|
||||||
return th.SetupScheme(model.SCHEME_SCOPE_TEAM)
|
return th.SetupScheme(model.SchemeScopeTeam)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (th *TestHelper) SetupChannelScheme() *model.Scheme {
|
func (th *TestHelper) SetupChannelScheme() *model.Scheme {
|
||||||
return th.SetupScheme(model.SCHEME_SCOPE_CHANNEL)
|
return th.SetupScheme(model.SchemeScopeChannel)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (th *TestHelper) SetupScheme(scope string) *model.Scheme {
|
func (th *TestHelper) SetupScheme(scope string) *model.Scheme {
|
||||||
|
|||||||
@@ -18,8 +18,8 @@ func purgeBleveIndexes(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
auditRec := c.MakeAuditRecord("purgeBleveIndexes", audit.Fail)
|
auditRec := c.MakeAuditRecord("purgeBleveIndexes", audit.Fail)
|
||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_PURGE_BLEVE_INDEXES) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionPurgeBleveIndexes) {
|
||||||
c.SetPermissionError(model.PERMISSION_PURGE_BLEVE_INDEXES)
|
c.SetPermissionError(model.PermissionPurgeBleveIndexes)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,8 +19,8 @@ func TestBlevePurgeIndexes(t *testing.T) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
t.Run("as system user with write experimental permission", func(t *testing.T) {
|
t.Run("as system user with write experimental permission", func(t *testing.T) {
|
||||||
th.AddPermissionToRole(model.PERMISSION_PURGE_BLEVE_INDEXES.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionPurgeBleveIndexes.Id, model.SystemUserRoleId)
|
||||||
defer th.RemovePermissionFromRole(model.PERMISSION_SYSCONSOLE_WRITE_EXPERIMENTAL.Id, model.SYSTEM_USER_ROLE_ID)
|
defer th.RemovePermissionFromRole(model.PermissionSysconsoleWriteExperimental.Id, model.SystemUserRoleId)
|
||||||
_, resp := th.Client.PurgeBleveIndexes()
|
_, resp := th.Client.PurgeBleveIndexes()
|
||||||
CheckOKStatus(t, resp)
|
CheckOKStatus(t, resp)
|
||||||
})
|
})
|
||||||
|
|||||||
26
api4/bot.go
26
api4/bot.go
@@ -45,14 +45,14 @@ func createBot(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
auditRec.AddMeta("bot", bot)
|
auditRec.AddMeta("bot", bot)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_CREATE_BOT) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionCreateBot) {
|
||||||
c.SetPermissionError(model.PERMISSION_CREATE_BOT)
|
c.SetPermissionError(model.PermissionCreateBot)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if user, err := c.App.GetUser(c.AppContext.Session().UserId); err == nil {
|
if user, err := c.App.GetUser(c.AppContext.Session().UserId); err == nil {
|
||||||
if user.IsBot {
|
if user.IsBot {
|
||||||
c.SetPermissionError(model.PERMISSION_CREATE_BOT)
|
c.SetPermissionError(model.PermissionCreateBot)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -124,10 +124,10 @@ func getBot(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_READ_OTHERS_BOTS) {
|
if c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionReadOthersBots) {
|
||||||
// Allow access to any bot.
|
// Allow access to any bot.
|
||||||
} else if bot.OwnerId == c.AppContext.Session().UserId {
|
} else if bot.OwnerId == c.AppContext.Session().UserId {
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_READ_BOTS) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionReadBots) {
|
||||||
// Pretend like the bot doesn't exist at all to avoid revealing that the
|
// Pretend like the bot doesn't exist at all to avoid revealing that the
|
||||||
// user is a bot. It's kind of silly in this case, sine we created the bot,
|
// user is a bot. It's kind of silly in this case, sine we created the bot,
|
||||||
// but we don't have read bot permissions.
|
// but we don't have read bot permissions.
|
||||||
@@ -153,14 +153,14 @@ func getBots(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
onlyOrphaned, _ := strconv.ParseBool(r.URL.Query().Get("only_orphaned"))
|
onlyOrphaned, _ := strconv.ParseBool(r.URL.Query().Get("only_orphaned"))
|
||||||
|
|
||||||
var OwnerId string
|
var OwnerId string
|
||||||
if c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_READ_OTHERS_BOTS) {
|
if c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionReadOthersBots) {
|
||||||
// Get bots created by any user.
|
// Get bots created by any user.
|
||||||
OwnerId = ""
|
OwnerId = ""
|
||||||
} else if c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_READ_BOTS) {
|
} else if c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionReadBots) {
|
||||||
// Only get bots created by this user.
|
// Only get bots created by this user.
|
||||||
OwnerId = c.AppContext.Session().UserId
|
OwnerId = c.AppContext.Session().UserId
|
||||||
} else {
|
} else {
|
||||||
c.SetPermissionError(model.PERMISSION_READ_BOTS)
|
c.SetPermissionError(model.PermissionReadBots)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -241,7 +241,7 @@ func assignBot(c *Context, w http.ResponseWriter, _ *http.Request) {
|
|||||||
|
|
||||||
if user, err := c.App.GetUser(userId); err == nil {
|
if user, err := c.App.GetUser(userId); err == nil {
|
||||||
if user.IsBot {
|
if user.IsBot {
|
||||||
c.SetPermissionError(model.PERMISSION_ASSIGN_BOT)
|
c.SetPermissionError(model.PermissionAssignBot)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -272,7 +272,7 @@ func getBotIconImage(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !canSee {
|
if !canSee {
|
||||||
c.SetPermissionError(model.PERMISSION_VIEW_MEMBERS)
|
c.SetPermissionError(model.PermissionViewMembers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -294,7 +294,7 @@ func getBotIconImage(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
w.Header().Set("Cache-Control", fmt.Sprintf("max-age=%v, private", 24*60*60)) // 24 hrs
|
w.Header().Set("Cache-Control", fmt.Sprintf("max-age=%v, private", 24*60*60)) // 24 hrs
|
||||||
w.Header().Set(model.HEADER_ETAG_SERVER, etag)
|
w.Header().Set(model.HeaderEtagServer, etag)
|
||||||
w.Header().Set("Content-Type", "image/svg+xml")
|
w.Header().Set("Content-Type", "image/svg+xml")
|
||||||
w.Write(img)
|
w.Write(img)
|
||||||
}
|
}
|
||||||
@@ -406,8 +406,8 @@ func convertBotToUser(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
auditRec.AddMeta("userPatch", userPatch)
|
auditRec.AddMeta("userPatch", userPatch)
|
||||||
auditRec.AddMeta("set_system_admin", systemAdmin)
|
auditRec.AddMeta("set_system_admin", systemAdmin)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM)
|
c.SetPermissionError(model.PermissionManageSystem)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
284
api4/bot_test.go
284
api4/bot_test.go
@@ -41,8 +41,8 @@ func TestCreateBot(t *testing.T) {
|
|||||||
th := Setup(t).InitBasic()
|
th := Setup(t).InitBasic()
|
||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_CREATE_BOT.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId)
|
||||||
th.App.UpdateUserRoles(th.BasicUser.Id, model.TEAM_USER_ROLE_ID, false)
|
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false)
|
||||||
th.App.Config().ServiceSettings.EnableBotAccountCreation = model.NewBool(false)
|
th.App.Config().ServiceSettings.EnableBotAccountCreation = model.NewBool(false)
|
||||||
|
|
||||||
_, resp := th.Client.CreateBot(&model.Bot{
|
_, resp := th.Client.CreateBot(&model.Bot{
|
||||||
@@ -59,8 +59,8 @@ func TestCreateBot(t *testing.T) {
|
|||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_CREATE_BOT.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId)
|
||||||
th.App.UpdateUserRoles(th.BasicUser.Id, model.TEAM_USER_ROLE_ID, false)
|
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false)
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) {
|
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||||
*cfg.ServiceSettings.EnableBotAccountCreation = true
|
*cfg.ServiceSettings.EnableBotAccountCreation = true
|
||||||
})
|
})
|
||||||
@@ -84,8 +84,8 @@ func TestCreateBot(t *testing.T) {
|
|||||||
th := Setup(t).InitBasic()
|
th := Setup(t).InitBasic()
|
||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_CREATE_BOT.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId)
|
||||||
th.App.UpdateUserRoles(th.BasicUser.Id, model.TEAM_USER_ROLE_ID, false)
|
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false)
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) {
|
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||||
*cfg.ServiceSettings.EnableBotAccountCreation = true
|
*cfg.ServiceSettings.EnableBotAccountCreation = true
|
||||||
})
|
})
|
||||||
@@ -108,9 +108,9 @@ func TestCreateBot(t *testing.T) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableUserAccessTokens = true })
|
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableUserAccessTokens = true })
|
||||||
th.AddPermissionToRole(model.PERMISSION_CREATE_BOT.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_EDIT_OTHER_USERS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionEditOtherUsers.Id, model.TeamUserRoleId)
|
||||||
th.App.UpdateUserRoles(th.BasicUser.Id, model.TEAM_USER_ROLE_ID+" "+model.SYSTEM_USER_ACCESS_TOKEN_ROLE_ID, false)
|
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId+" "+model.SystemUserAccessTokenRoleId, false)
|
||||||
|
|
||||||
bot, resp := th.Client.CreateBot(&model.Bot{
|
bot, resp := th.Client.CreateBot(&model.Bot{
|
||||||
Username: GenerateTestUsername(),
|
Username: GenerateTestUsername(),
|
||||||
@@ -119,7 +119,7 @@ func TestCreateBot(t *testing.T) {
|
|||||||
})
|
})
|
||||||
CheckCreatedStatus(t, resp)
|
CheckCreatedStatus(t, resp)
|
||||||
defer th.App.PermanentDeleteBot(bot.UserId)
|
defer th.App.PermanentDeleteBot(bot.UserId)
|
||||||
th.App.UpdateUserRoles(bot.UserId, model.TEAM_USER_ROLE_ID+" "+model.SYSTEM_USER_ACCESS_TOKEN_ROLE_ID, false)
|
th.App.UpdateUserRoles(bot.UserId, model.TeamUserRoleId+" "+model.SystemUserAccessTokenRoleId, false)
|
||||||
|
|
||||||
rtoken, resp := th.Client.CreateUserAccessToken(bot.UserId, "test token")
|
rtoken, resp := th.Client.CreateUserAccessToken(bot.UserId, "test token")
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
@@ -153,8 +153,8 @@ func TestPatchBot(t *testing.T) {
|
|||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_CREATE_BOT.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId)
|
||||||
th.App.UpdateUserRoles(th.BasicUser.Id, model.TEAM_USER_ROLE_ID, false)
|
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false)
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) {
|
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||||
*cfg.ServiceSettings.EnableBotAccountCreation = true
|
*cfg.ServiceSettings.EnableBotAccountCreation = true
|
||||||
})
|
})
|
||||||
@@ -230,8 +230,8 @@ func TestPatchBot(t *testing.T) {
|
|||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_READ_OTHERS_BOTS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.TeamUserRoleId)
|
||||||
th.App.UpdateUserRoles(th.BasicUser.Id, model.TEAM_USER_ROLE_ID, false)
|
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false)
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) {
|
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||||
*cfg.ServiceSettings.EnableBotAccountCreation = true
|
*cfg.ServiceSettings.EnableBotAccountCreation = true
|
||||||
})
|
})
|
||||||
@@ -253,8 +253,8 @@ func TestPatchBot(t *testing.T) {
|
|||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_OTHERS_BOTS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageOthersBots.Id, model.TeamUserRoleId)
|
||||||
th.App.UpdateUserRoles(th.BasicUser.Id, model.TEAM_USER_ROLE_ID, false)
|
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false)
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) {
|
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||||
*cfg.ServiceSettings.EnableBotAccountCreation = true
|
*cfg.ServiceSettings.EnableBotAccountCreation = true
|
||||||
})
|
})
|
||||||
@@ -282,12 +282,12 @@ func TestPatchBot(t *testing.T) {
|
|||||||
|
|
||||||
// Continue through the bot update process (call UpdateUserRoles), then
|
// Continue through the bot update process (call UpdateUserRoles), then
|
||||||
// get the bot, to make sure the patched bot was correctly saved.
|
// get the bot, to make sure the patched bot was correctly saved.
|
||||||
th.AddPermissionToRole(model.PERMISSION_READ_BOTS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_READ_OTHERS_BOTS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.TeamUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_ROLES.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageRoles.Id, model.TeamUserRoleId)
|
||||||
th.App.UpdateUserRoles(th.BasicUser.Id, model.TEAM_USER_ROLE_ID, false)
|
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false)
|
||||||
|
|
||||||
success, resp := th.Client.UpdateUserRoles(createdBot.UserId, model.SYSTEM_USER_ROLE_ID)
|
success, resp := th.Client.UpdateUserRoles(createdBot.UserId, model.SystemUserRoleId)
|
||||||
CheckOKStatus(t, resp)
|
CheckOKStatus(t, resp)
|
||||||
require.True(t, success)
|
require.True(t, success)
|
||||||
|
|
||||||
@@ -302,8 +302,8 @@ func TestPatchBot(t *testing.T) {
|
|||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_CREATE_BOT.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId)
|
||||||
th.App.UpdateUserRoles(th.BasicUser.Id, model.TEAM_USER_ROLE_ID, false)
|
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false)
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) {
|
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||||
*cfg.ServiceSettings.EnableBotAccountCreation = true
|
*cfg.ServiceSettings.EnableBotAccountCreation = true
|
||||||
})
|
})
|
||||||
@@ -331,9 +331,9 @@ func TestPatchBot(t *testing.T) {
|
|||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_CREATE_BOT.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_READ_BOTS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId)
|
||||||
th.App.UpdateUserRoles(th.BasicUser.Id, model.TEAM_USER_ROLE_ID, false)
|
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false)
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) {
|
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||||
*cfg.ServiceSettings.EnableBotAccountCreation = true
|
*cfg.ServiceSettings.EnableBotAccountCreation = true
|
||||||
})
|
})
|
||||||
@@ -361,9 +361,9 @@ func TestPatchBot(t *testing.T) {
|
|||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_CREATE_BOT.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_BOTS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageBots.Id, model.TeamUserRoleId)
|
||||||
th.App.UpdateUserRoles(th.BasicUser.Id, model.TEAM_USER_ROLE_ID, false)
|
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false)
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) {
|
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||||
*cfg.ServiceSettings.EnableBotAccountCreation = true
|
*cfg.ServiceSettings.EnableBotAccountCreation = true
|
||||||
})
|
})
|
||||||
@@ -395,9 +395,9 @@ func TestPatchBot(t *testing.T) {
|
|||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_CREATE_BOT.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_BOTS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageBots.Id, model.TeamUserRoleId)
|
||||||
th.App.UpdateUserRoles(th.BasicUser.Id, model.TEAM_USER_ROLE_ID, false)
|
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false)
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) {
|
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||||
*cfg.ServiceSettings.EnableBotAccountCreation = true
|
*cfg.ServiceSettings.EnableBotAccountCreation = true
|
||||||
})
|
})
|
||||||
@@ -429,9 +429,9 @@ func TestPatchBot(t *testing.T) {
|
|||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_CREATE_BOT.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_BOTS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageBots.Id, model.TeamUserRoleId)
|
||||||
th.App.UpdateUserRoles(th.BasicUser.Id, model.TEAM_USER_ROLE_ID, false)
|
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false)
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) {
|
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||||
*cfg.ServiceSettings.EnableBotAccountCreation = true
|
*cfg.ServiceSettings.EnableBotAccountCreation = true
|
||||||
})
|
})
|
||||||
@@ -491,8 +491,8 @@ func TestGetBot(t *testing.T) {
|
|||||||
deletedBot, resp = th.SystemAdminClient.DisableBot(deletedBot.UserId)
|
deletedBot, resp = th.SystemAdminClient.DisableBot(deletedBot.UserId)
|
||||||
CheckOKStatus(t, resp)
|
CheckOKStatus(t, resp)
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_CREATE_BOT.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId)
|
||||||
th.App.UpdateUserRoles(th.BasicUser.Id, model.TEAM_USER_ROLE_ID, false)
|
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false)
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) {
|
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||||
*cfg.ServiceSettings.EnableBotAccountCreation = true
|
*cfg.ServiceSettings.EnableBotAccountCreation = true
|
||||||
})
|
})
|
||||||
@@ -504,14 +504,14 @@ func TestGetBot(t *testing.T) {
|
|||||||
})
|
})
|
||||||
CheckCreatedStatus(t, resp)
|
CheckCreatedStatus(t, resp)
|
||||||
defer th.App.PermanentDeleteBot(myBot.UserId)
|
defer th.App.PermanentDeleteBot(myBot.UserId)
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_CREATE_BOT.Id, model.TEAM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionCreateBot.Id, model.TeamUserRoleId)
|
||||||
|
|
||||||
t.Run("get unknown bot", func(t *testing.T) {
|
t.Run("get unknown bot", func(t *testing.T) {
|
||||||
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_READ_BOTS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_READ_OTHERS_BOTS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.TeamUserRoleId)
|
||||||
th.App.UpdateUserRoles(th.BasicUser.Id, model.TEAM_USER_ROLE_ID, false)
|
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false)
|
||||||
|
|
||||||
_, resp := th.Client.GetBot(model.NewId(), "")
|
_, resp := th.Client.GetBot(model.NewId(), "")
|
||||||
CheckNotFoundStatus(t, resp)
|
CheckNotFoundStatus(t, resp)
|
||||||
@@ -520,9 +520,9 @@ func TestGetBot(t *testing.T) {
|
|||||||
t.Run("get bot1", func(t *testing.T) {
|
t.Run("get bot1", func(t *testing.T) {
|
||||||
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_READ_BOTS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_READ_OTHERS_BOTS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.TeamUserRoleId)
|
||||||
th.App.UpdateUserRoles(th.BasicUser.Id, model.TEAM_USER_ROLE_ID, false)
|
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false)
|
||||||
|
|
||||||
bot, resp := th.Client.GetBot(bot1.UserId, "")
|
bot, resp := th.Client.GetBot(bot1.UserId, "")
|
||||||
CheckOKStatus(t, resp)
|
CheckOKStatus(t, resp)
|
||||||
@@ -535,9 +535,9 @@ func TestGetBot(t *testing.T) {
|
|||||||
t.Run("get bot2", func(t *testing.T) {
|
t.Run("get bot2", func(t *testing.T) {
|
||||||
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_READ_BOTS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_READ_OTHERS_BOTS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.TeamUserRoleId)
|
||||||
th.App.UpdateUserRoles(th.BasicUser.Id, model.TEAM_USER_ROLE_ID, false)
|
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false)
|
||||||
|
|
||||||
bot, resp := th.Client.GetBot(bot2.UserId, "")
|
bot, resp := th.Client.GetBot(bot2.UserId, "")
|
||||||
CheckOKStatus(t, resp)
|
CheckOKStatus(t, resp)
|
||||||
@@ -547,26 +547,26 @@ func TestGetBot(t *testing.T) {
|
|||||||
CheckEtag(t, bot, resp)
|
CheckEtag(t, bot, resp)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("get bot1 without READ_OTHERS_BOTS permission", func(t *testing.T) {
|
t.Run("get bot1 without PermissionReadOthersBots permission", func(t *testing.T) {
|
||||||
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_READ_BOTS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_CREATE_BOT.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_BOTS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageBots.Id, model.TeamUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_OTHERS_BOTS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageOthersBots.Id, model.TeamUserRoleId)
|
||||||
th.App.UpdateUserRoles(th.BasicUser.Id, model.TEAM_USER_ROLE_ID, false)
|
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false)
|
||||||
|
|
||||||
_, resp := th.Client.GetBot(bot1.UserId, "")
|
_, resp := th.Client.GetBot(bot1.UserId, "")
|
||||||
CheckErrorMessage(t, resp, "store.sql_bot.get.missing.app_error")
|
CheckErrorMessage(t, resp, "store.sql_bot.get.missing.app_error")
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("get myBot without READ_BOTS OR READ_OTHERS_BOTS permissions", func(t *testing.T) {
|
t.Run("get myBot without ReadBots OR ReadOthersBots permissions", func(t *testing.T) {
|
||||||
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_CREATE_BOT.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_BOTS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageBots.Id, model.TeamUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_OTHERS_BOTS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageOthersBots.Id, model.TeamUserRoleId)
|
||||||
th.App.UpdateUserRoles(th.BasicUser.Id, model.TEAM_USER_ROLE_ID, false)
|
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false)
|
||||||
|
|
||||||
_, resp := th.Client.GetBot(myBot.UserId, "")
|
_, resp := th.Client.GetBot(myBot.UserId, "")
|
||||||
CheckErrorMessage(t, resp, "store.sql_bot.get.missing.app_error")
|
CheckErrorMessage(t, resp, "store.sql_bot.get.missing.app_error")
|
||||||
@@ -575,9 +575,9 @@ func TestGetBot(t *testing.T) {
|
|||||||
t.Run("get deleted bot", func(t *testing.T) {
|
t.Run("get deleted bot", func(t *testing.T) {
|
||||||
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_READ_BOTS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_READ_OTHERS_BOTS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.TeamUserRoleId)
|
||||||
th.App.UpdateUserRoles(th.BasicUser.Id, model.TEAM_USER_ROLE_ID, false)
|
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false)
|
||||||
|
|
||||||
_, resp := th.Client.GetBot(deletedBot.UserId, "")
|
_, resp := th.Client.GetBot(deletedBot.UserId, "")
|
||||||
CheckNotFoundStatus(t, resp)
|
CheckNotFoundStatus(t, resp)
|
||||||
@@ -586,9 +586,9 @@ func TestGetBot(t *testing.T) {
|
|||||||
t.Run("get deleted bot, include deleted", func(t *testing.T) {
|
t.Run("get deleted bot, include deleted", func(t *testing.T) {
|
||||||
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_READ_BOTS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_READ_OTHERS_BOTS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.TeamUserRoleId)
|
||||||
th.App.UpdateUserRoles(th.BasicUser.Id, model.TEAM_USER_ROLE_ID, false)
|
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false)
|
||||||
|
|
||||||
bot, resp := th.Client.GetBotIncludeDeleted(deletedBot.UserId, "")
|
bot, resp := th.Client.GetBotIncludeDeleted(deletedBot.UserId, "")
|
||||||
CheckOKStatus(t, resp)
|
CheckOKStatus(t, resp)
|
||||||
@@ -652,8 +652,8 @@ func TestGetBots(t *testing.T) {
|
|||||||
deletedBot2, resp = th.SystemAdminClient.DisableBot(deletedBot2.UserId)
|
deletedBot2, resp = th.SystemAdminClient.DisableBot(deletedBot2.UserId)
|
||||||
CheckOKStatus(t, resp)
|
CheckOKStatus(t, resp)
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_CREATE_BOT.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId)
|
||||||
th.App.UpdateUserRoles(th.BasicUser2.Id, model.TEAM_USER_ROLE_ID, false)
|
th.App.UpdateUserRoles(th.BasicUser2.Id, model.TeamUserRoleId, false)
|
||||||
th.LoginBasic2()
|
th.LoginBasic2()
|
||||||
orphanedBot, resp := th.Client.CreateBot(&model.Bot{
|
orphanedBot, resp := th.Client.CreateBot(&model.Bot{
|
||||||
Username: GenerateTestUsername(),
|
Username: GenerateTestUsername(),
|
||||||
@@ -672,9 +672,9 @@ func TestGetBots(t *testing.T) {
|
|||||||
t.Run("get bots, page=0, perPage=10", func(t *testing.T) {
|
t.Run("get bots, page=0, perPage=10", func(t *testing.T) {
|
||||||
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_READ_BOTS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_READ_OTHERS_BOTS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.TeamUserRoleId)
|
||||||
th.App.UpdateUserRoles(th.BasicUser.Id, model.TEAM_USER_ROLE_ID, false)
|
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false)
|
||||||
|
|
||||||
expectedBotList := []*model.Bot{bot1, bot2, bot3, orphanedBot}
|
expectedBotList := []*model.Bot{bot1, bot2, bot3, orphanedBot}
|
||||||
th.TestForAllClients(t, func(t *testing.T, client *model.Client4) {
|
th.TestForAllClients(t, func(t *testing.T, client *model.Client4) {
|
||||||
@@ -691,9 +691,9 @@ func TestGetBots(t *testing.T) {
|
|||||||
t.Run("get bots, page=0, perPage=1", func(t *testing.T) {
|
t.Run("get bots, page=0, perPage=1", func(t *testing.T) {
|
||||||
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_READ_BOTS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_READ_OTHERS_BOTS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.TeamUserRoleId)
|
||||||
th.App.UpdateUserRoles(th.BasicUser.Id, model.TEAM_USER_ROLE_ID, false)
|
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false)
|
||||||
|
|
||||||
expectedBotList := []*model.Bot{bot1}
|
expectedBotList := []*model.Bot{bot1}
|
||||||
th.TestForAllClients(t, func(t *testing.T, client *model.Client4) {
|
th.TestForAllClients(t, func(t *testing.T, client *model.Client4) {
|
||||||
@@ -710,9 +710,9 @@ func TestGetBots(t *testing.T) {
|
|||||||
t.Run("get bots, page=1, perPage=2", func(t *testing.T) {
|
t.Run("get bots, page=1, perPage=2", func(t *testing.T) {
|
||||||
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_READ_BOTS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_READ_OTHERS_BOTS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.TeamUserRoleId)
|
||||||
th.App.UpdateUserRoles(th.BasicUser.Id, model.TEAM_USER_ROLE_ID, false)
|
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false)
|
||||||
|
|
||||||
expectedBotList := []*model.Bot{bot3, orphanedBot}
|
expectedBotList := []*model.Bot{bot3, orphanedBot}
|
||||||
th.TestForAllClients(t, func(t *testing.T, client *model.Client4) {
|
th.TestForAllClients(t, func(t *testing.T, client *model.Client4) {
|
||||||
@@ -729,9 +729,9 @@ func TestGetBots(t *testing.T) {
|
|||||||
t.Run("get bots, page=2, perPage=2", func(t *testing.T) {
|
t.Run("get bots, page=2, perPage=2", func(t *testing.T) {
|
||||||
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_READ_BOTS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_READ_OTHERS_BOTS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.TeamUserRoleId)
|
||||||
th.App.UpdateUserRoles(th.BasicUser.Id, model.TEAM_USER_ROLE_ID, false)
|
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false)
|
||||||
|
|
||||||
expectedBotList := []*model.Bot{}
|
expectedBotList := []*model.Bot{}
|
||||||
th.TestForAllClients(t, func(t *testing.T, client *model.Client4) {
|
th.TestForAllClients(t, func(t *testing.T, client *model.Client4) {
|
||||||
@@ -748,9 +748,9 @@ func TestGetBots(t *testing.T) {
|
|||||||
t.Run("get bots, page=0, perPage=10, include deleted", func(t *testing.T) {
|
t.Run("get bots, page=0, perPage=10, include deleted", func(t *testing.T) {
|
||||||
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_READ_BOTS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_READ_OTHERS_BOTS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.TeamUserRoleId)
|
||||||
th.App.UpdateUserRoles(th.BasicUser.Id, model.TEAM_USER_ROLE_ID, false)
|
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false)
|
||||||
|
|
||||||
expectedBotList := []*model.Bot{bot1, deletedBot1, bot2, bot3, deletedBot2, orphanedBot}
|
expectedBotList := []*model.Bot{bot1, deletedBot1, bot2, bot3, deletedBot2, orphanedBot}
|
||||||
th.TestForAllClients(t, func(t *testing.T, client *model.Client4) {
|
th.TestForAllClients(t, func(t *testing.T, client *model.Client4) {
|
||||||
@@ -767,9 +767,9 @@ func TestGetBots(t *testing.T) {
|
|||||||
t.Run("get bots, page=0, perPage=1, include deleted", func(t *testing.T) {
|
t.Run("get bots, page=0, perPage=1, include deleted", func(t *testing.T) {
|
||||||
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_READ_BOTS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_READ_OTHERS_BOTS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.TeamUserRoleId)
|
||||||
th.App.UpdateUserRoles(th.BasicUser.Id, model.TEAM_USER_ROLE_ID, false)
|
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false)
|
||||||
|
|
||||||
expectedBotList := []*model.Bot{bot1}
|
expectedBotList := []*model.Bot{bot1}
|
||||||
th.TestForAllClients(t, func(t *testing.T, client *model.Client4) {
|
th.TestForAllClients(t, func(t *testing.T, client *model.Client4) {
|
||||||
@@ -786,9 +786,9 @@ func TestGetBots(t *testing.T) {
|
|||||||
t.Run("get bots, page=1, perPage=2, include deleted", func(t *testing.T) {
|
t.Run("get bots, page=1, perPage=2, include deleted", func(t *testing.T) {
|
||||||
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_READ_BOTS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_READ_OTHERS_BOTS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.TeamUserRoleId)
|
||||||
th.App.UpdateUserRoles(th.BasicUser.Id, model.TEAM_USER_ROLE_ID, false)
|
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false)
|
||||||
|
|
||||||
expectedBotList := []*model.Bot{bot2, bot3}
|
expectedBotList := []*model.Bot{bot2, bot3}
|
||||||
th.TestForAllClients(t, func(t *testing.T, client *model.Client4) {
|
th.TestForAllClients(t, func(t *testing.T, client *model.Client4) {
|
||||||
@@ -805,9 +805,9 @@ func TestGetBots(t *testing.T) {
|
|||||||
t.Run("get bots, page=2, perPage=2, include deleted", func(t *testing.T) {
|
t.Run("get bots, page=2, perPage=2, include deleted", func(t *testing.T) {
|
||||||
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_READ_BOTS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_READ_OTHERS_BOTS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.TeamUserRoleId)
|
||||||
th.App.UpdateUserRoles(th.BasicUser.Id, model.TEAM_USER_ROLE_ID, false)
|
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false)
|
||||||
|
|
||||||
expectedBotList := []*model.Bot{deletedBot2, orphanedBot}
|
expectedBotList := []*model.Bot{deletedBot2, orphanedBot}
|
||||||
th.TestForAllClients(t, func(t *testing.T, client *model.Client4) {
|
th.TestForAllClients(t, func(t *testing.T, client *model.Client4) {
|
||||||
@@ -824,9 +824,9 @@ func TestGetBots(t *testing.T) {
|
|||||||
t.Run("get bots, page=0, perPage=10, only orphaned", func(t *testing.T) {
|
t.Run("get bots, page=0, perPage=10, only orphaned", func(t *testing.T) {
|
||||||
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_READ_BOTS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_READ_OTHERS_BOTS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.TeamUserRoleId)
|
||||||
th.App.UpdateUserRoles(th.BasicUser.Id, model.TEAM_USER_ROLE_ID, false)
|
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false)
|
||||||
|
|
||||||
expectedBotList := []*model.Bot{orphanedBot}
|
expectedBotList := []*model.Bot{orphanedBot}
|
||||||
th.TestForAllClients(t, func(t *testing.T, client *model.Client4) {
|
th.TestForAllClients(t, func(t *testing.T, client *model.Client4) {
|
||||||
@@ -843,10 +843,10 @@ func TestGetBots(t *testing.T) {
|
|||||||
t.Run("get bots without permission", func(t *testing.T) {
|
t.Run("get bots without permission", func(t *testing.T) {
|
||||||
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_CREATE_BOT.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_BOTS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageBots.Id, model.TeamUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_OTHERS_BOTS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageOthersBots.Id, model.TeamUserRoleId)
|
||||||
th.App.UpdateUserRoles(th.BasicUser.Id, model.TEAM_USER_ROLE_ID, false)
|
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false)
|
||||||
|
|
||||||
_, resp := th.Client.GetBots(0, 10, "")
|
_, resp := th.Client.GetBots(0, 10, "")
|
||||||
CheckErrorMessage(t, resp, "api.context.permissions.app_error")
|
CheckErrorMessage(t, resp, "api.context.permissions.app_error")
|
||||||
@@ -869,8 +869,8 @@ func TestDisableBot(t *testing.T) {
|
|||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_CREATE_BOT.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId)
|
||||||
th.App.UpdateUserRoles(th.BasicUser.Id, model.TEAM_USER_ROLE_ID, false)
|
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false)
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) {
|
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||||
*cfg.ServiceSettings.EnableBotAccountCreation = true
|
*cfg.ServiceSettings.EnableBotAccountCreation = true
|
||||||
})
|
})
|
||||||
@@ -893,9 +893,9 @@ func TestDisableBot(t *testing.T) {
|
|||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_CREATE_BOT.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_READ_BOTS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId)
|
||||||
th.App.UpdateUserRoles(th.BasicUser.Id, model.TEAM_USER_ROLE_ID, false)
|
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false)
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) {
|
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||||
*cfg.ServiceSettings.EnableBotAccountCreation = true
|
*cfg.ServiceSettings.EnableBotAccountCreation = true
|
||||||
})
|
})
|
||||||
@@ -918,9 +918,9 @@ func TestDisableBot(t *testing.T) {
|
|||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_CREATE_BOT.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_BOTS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageBots.Id, model.TeamUserRoleId)
|
||||||
th.App.UpdateUserRoles(th.BasicUser.Id, model.TEAM_USER_ROLE_ID, false)
|
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false)
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) {
|
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||||
*cfg.ServiceSettings.EnableBotAccountCreation = true
|
*cfg.ServiceSettings.EnableBotAccountCreation = true
|
||||||
})
|
})
|
||||||
@@ -967,8 +967,8 @@ func TestEnableBot(t *testing.T) {
|
|||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_CREATE_BOT.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId)
|
||||||
th.App.UpdateUserRoles(th.BasicUser.Id, model.TEAM_USER_ROLE_ID, false)
|
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false)
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) {
|
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||||
*cfg.ServiceSettings.EnableBotAccountCreation = true
|
*cfg.ServiceSettings.EnableBotAccountCreation = true
|
||||||
})
|
})
|
||||||
@@ -994,9 +994,9 @@ func TestEnableBot(t *testing.T) {
|
|||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_CREATE_BOT.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_READ_BOTS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionReadBots.Id, model.TeamUserRoleId)
|
||||||
th.App.UpdateUserRoles(th.BasicUser.Id, model.TEAM_USER_ROLE_ID, false)
|
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false)
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) {
|
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||||
*cfg.ServiceSettings.EnableBotAccountCreation = true
|
*cfg.ServiceSettings.EnableBotAccountCreation = true
|
||||||
})
|
})
|
||||||
@@ -1022,9 +1022,9 @@ func TestEnableBot(t *testing.T) {
|
|||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_CREATE_BOT.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_BOTS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageBots.Id, model.TeamUserRoleId)
|
||||||
th.App.UpdateUserRoles(th.BasicUser.Id, model.TEAM_USER_ROLE_ID, false)
|
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false)
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) {
|
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||||
*cfg.ServiceSettings.EnableBotAccountCreation = true
|
*cfg.ServiceSettings.EnableBotAccountCreation = true
|
||||||
})
|
})
|
||||||
@@ -1073,8 +1073,8 @@ func TestAssignBot(t *testing.T) {
|
|||||||
t.Run("system admin and local mode assign bot", func(t *testing.T) {
|
t.Run("system admin and local mode assign bot", func(t *testing.T) {
|
||||||
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_CREATE_BOT.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.SystemUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_READ_BOTS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionReadBots.Id, model.SystemUserRoleId)
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) {
|
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||||
*cfg.ServiceSettings.EnableBotAccountCreation = true
|
*cfg.ServiceSettings.EnableBotAccountCreation = true
|
||||||
})
|
})
|
||||||
@@ -1115,8 +1115,8 @@ func TestAssignBot(t *testing.T) {
|
|||||||
t.Run("random user assign bot", func(t *testing.T) {
|
t.Run("random user assign bot", func(t *testing.T) {
|
||||||
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_CREATE_BOT.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.SystemUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_READ_BOTS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionReadBots.Id, model.SystemUserRoleId)
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) {
|
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||||
*cfg.ServiceSettings.EnableBotAccountCreation = true
|
*cfg.ServiceSettings.EnableBotAccountCreation = true
|
||||||
})
|
})
|
||||||
@@ -1136,7 +1136,7 @@ func TestAssignBot(t *testing.T) {
|
|||||||
CheckErrorMessage(t, resp, "store.sql_bot.get.missing.app_error")
|
CheckErrorMessage(t, resp, "store.sql_bot.get.missing.app_error")
|
||||||
|
|
||||||
// With permissions to read we don't have permissions to modify
|
// With permissions to read we don't have permissions to modify
|
||||||
th.AddPermissionToRole(model.PERMISSION_READ_OTHERS_BOTS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.SystemUserRoleId)
|
||||||
_, resp = th.Client.AssignBot(createdBot.UserId, th.BasicUser2.Id)
|
_, resp = th.Client.AssignBot(createdBot.UserId, th.BasicUser2.Id)
|
||||||
CheckErrorMessage(t, resp, "api.context.permissions.app_error")
|
CheckErrorMessage(t, resp, "api.context.permissions.app_error")
|
||||||
|
|
||||||
@@ -1146,8 +1146,8 @@ func TestAssignBot(t *testing.T) {
|
|||||||
t.Run("delegated user assign bot", func(t *testing.T) {
|
t.Run("delegated user assign bot", func(t *testing.T) {
|
||||||
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_CREATE_BOT.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.SystemUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_READ_BOTS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionReadBots.Id, model.SystemUserRoleId)
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) {
|
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||||
*cfg.ServiceSettings.EnableBotAccountCreation = true
|
*cfg.ServiceSettings.EnableBotAccountCreation = true
|
||||||
})
|
})
|
||||||
@@ -1161,11 +1161,11 @@ func TestAssignBot(t *testing.T) {
|
|||||||
defer th.App.PermanentDeleteBot(bot.UserId)
|
defer th.App.PermanentDeleteBot(bot.UserId)
|
||||||
|
|
||||||
// Simulate custom role by just changing the system user role
|
// Simulate custom role by just changing the system user role
|
||||||
th.AddPermissionToRole(model.PERMISSION_CREATE_BOT.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.SystemUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_READ_BOTS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionReadBots.Id, model.SystemUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_READ_OTHERS_BOTS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.SystemUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_BOTS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageBots.Id, model.SystemUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_OTHERS_BOTS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageOthersBots.Id, model.SystemUserRoleId)
|
||||||
th.LoginBasic2()
|
th.LoginBasic2()
|
||||||
|
|
||||||
_, resp = th.Client.AssignBot(bot.UserId, th.BasicUser2.Id)
|
_, resp = th.Client.AssignBot(bot.UserId, th.BasicUser2.Id)
|
||||||
@@ -1179,11 +1179,11 @@ func TestAssignBot(t *testing.T) {
|
|||||||
t.Run("bot assigned to bot fails", func(t *testing.T) {
|
t.Run("bot assigned to bot fails", func(t *testing.T) {
|
||||||
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_CREATE_BOT.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.SystemUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_READ_BOTS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionReadBots.Id, model.SystemUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_READ_OTHERS_BOTS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionReadOthersBots.Id, model.SystemUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_BOTS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageBots.Id, model.SystemUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_OTHERS_BOTS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageOthersBots.Id, model.SystemUserRoleId)
|
||||||
|
|
||||||
bot := &model.Bot{
|
bot := &model.Bot{
|
||||||
Username: GenerateTestUsername(),
|
Username: GenerateTestUsername(),
|
||||||
@@ -1215,9 +1215,9 @@ func TestSetBotIconImage(t *testing.T) {
|
|||||||
|
|
||||||
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_CREATE_BOT.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.SystemUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_BOTS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageBots.Id, model.SystemUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_READ_BOTS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionReadBots.Id, model.SystemUserRoleId)
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) {
|
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||||
*cfg.ServiceSettings.EnableBotAccountCreation = true
|
*cfg.ServiceSettings.EnableBotAccountCreation = true
|
||||||
})
|
})
|
||||||
@@ -1284,9 +1284,9 @@ func TestGetBotIconImage(t *testing.T) {
|
|||||||
|
|
||||||
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_CREATE_BOT.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.SystemUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_BOTS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageBots.Id, model.SystemUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_READ_BOTS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionReadBots.Id, model.SystemUserRoleId)
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) {
|
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||||
*cfg.ServiceSettings.EnableBotAccountCreation = true
|
*cfg.ServiceSettings.EnableBotAccountCreation = true
|
||||||
})
|
})
|
||||||
@@ -1346,9 +1346,9 @@ func TestDeleteBotIconImage(t *testing.T) {
|
|||||||
|
|
||||||
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_CREATE_BOT.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.SystemUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_BOTS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageBots.Id, model.SystemUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_READ_BOTS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionReadBots.Id, model.SystemUserRoleId)
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) {
|
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||||
*cfg.ServiceSettings.EnableBotAccountCreation = true
|
*cfg.ServiceSettings.EnableBotAccountCreation = true
|
||||||
})
|
})
|
||||||
@@ -1408,8 +1408,8 @@ func TestConvertBotToUser(t *testing.T) {
|
|||||||
th := Setup(t).InitBasic()
|
th := Setup(t).InitBasic()
|
||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_CREATE_BOT.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionCreateBot.Id, model.TeamUserRoleId)
|
||||||
th.App.UpdateUserRoles(th.BasicUser.Id, model.TEAM_USER_ROLE_ID, false)
|
th.App.UpdateUserRoles(th.BasicUser.Id, model.TeamUserRoleId, false)
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) {
|
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||||
*cfg.ServiceSettings.EnableBotAccountCreation = true
|
*cfg.ServiceSettings.EnableBotAccountCreation = true
|
||||||
})
|
})
|
||||||
@@ -1460,7 +1460,7 @@ func TestConvertBotToUser(t *testing.T) {
|
|||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
require.NotNil(t, user)
|
require.NotNil(t, user)
|
||||||
require.Equal(t, bot.UserId, user.Id)
|
require.Equal(t, bot.UserId, user.Id)
|
||||||
require.Contains(t, user.GetRoles(), model.SYSTEM_ADMIN_ROLE_ID)
|
require.Contains(t, user.GetRoles(), model.SystemAdminRoleId)
|
||||||
|
|
||||||
bot, resp = client.GetBot(bot.UserId, "")
|
bot, resp = client.GetBot(bot.UserId, "")
|
||||||
CheckNotFoundStatus(t, resp)
|
CheckNotFoundStatus(t, resp)
|
||||||
|
|||||||
@@ -61,8 +61,8 @@ func uploadBrandImage(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
auditRec := c.MakeAuditRecord("uploadBrandImage", audit.Fail)
|
auditRec := c.MakeAuditRecord("uploadBrandImage", audit.Fail)
|
||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_EDIT_BRAND) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionEditBrand) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_BRAND)
|
c.SetPermissionError(model.PermissionEditBrand)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -82,8 +82,8 @@ func deleteBrandImage(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
auditRec := c.MakeAuditRecord("deleteBrandImage", audit.Fail)
|
auditRec := c.MakeAuditRecord("deleteBrandImage", audit.Fail)
|
||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_EDIT_BRAND) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionEditBrand) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_BRAND)
|
c.SetPermissionError(model.PermissionEditBrand)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
278
api4/channel.go
278
api4/channel.go
@@ -89,13 +89,13 @@ func createChannel(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
auditRec.AddMeta("channel", channel)
|
auditRec.AddMeta("channel", channel)
|
||||||
|
|
||||||
if channel.Type == model.CHANNEL_OPEN && !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), channel.TeamId, model.PERMISSION_CREATE_PUBLIC_CHANNEL) {
|
if channel.Type == model.ChannelTypeOpen && !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), channel.TeamId, model.PermissionCreatePublicChannel) {
|
||||||
c.SetPermissionError(model.PERMISSION_CREATE_PUBLIC_CHANNEL)
|
c.SetPermissionError(model.PermissionCreatePublicChannel)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if channel.Type == model.CHANNEL_PRIVATE && !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), channel.TeamId, model.PERMISSION_CREATE_PRIVATE_CHANNEL) {
|
if channel.Type == model.ChannelTypePrivate && !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), channel.TeamId, model.PermissionCreatePrivateChannel) {
|
||||||
c.SetPermissionError(model.PERMISSION_CREATE_PRIVATE_CHANNEL)
|
c.SetPermissionError(model.PermissionCreatePrivateChannel)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -145,19 +145,19 @@ func updateChannel(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
auditRec.AddMeta("channel", oldChannel)
|
auditRec.AddMeta("channel", oldChannel)
|
||||||
|
|
||||||
switch oldChannel.Type {
|
switch oldChannel.Type {
|
||||||
case model.CHANNEL_OPEN:
|
case model.ChannelTypeOpen:
|
||||||
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), c.Params.ChannelId, model.PERMISSION_MANAGE_PUBLIC_CHANNEL_PROPERTIES) {
|
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), c.Params.ChannelId, model.PermissionManagePublicChannelProperties) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_PUBLIC_CHANNEL_PROPERTIES)
|
c.SetPermissionError(model.PermissionManagePublicChannelProperties)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
case model.CHANNEL_PRIVATE:
|
case model.ChannelTypePrivate:
|
||||||
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), c.Params.ChannelId, model.PERMISSION_MANAGE_PRIVATE_CHANNEL_PROPERTIES) {
|
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), c.Params.ChannelId, model.PermissionManagePrivateChannelProperties) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_PRIVATE_CHANNEL_PROPERTIES)
|
c.SetPermissionError(model.PermissionManagePrivateChannelProperties)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
case model.CHANNEL_GROUP, model.CHANNEL_DIRECT:
|
case model.ChannelTypeGroup, model.ChannelTypeDirect:
|
||||||
// Modifying the header is not linked to any specific permission for group/dm channels, so just check for membership.
|
// Modifying the header is not linked to any specific permission for group/dm channels, so just check for membership.
|
||||||
if _, errGet := c.App.GetChannelMember(context.Background(), channel.Id, c.AppContext.Session().UserId); errGet != nil {
|
if _, errGet := c.App.GetChannelMember(context.Background(), channel.Id, c.AppContext.Session().UserId); errGet != nil {
|
||||||
c.Err = model.NewAppError("updateChannel", "api.channel.patch_update_channel.forbidden.app_error", nil, "", http.StatusForbidden)
|
c.Err = model.NewAppError("updateChannel", "api.channel.patch_update_channel.forbidden.app_error", nil, "", http.StatusForbidden)
|
||||||
@@ -179,9 +179,9 @@ func updateChannel(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if oldChannel.Name == model.DEFAULT_CHANNEL {
|
if oldChannel.Name == model.DefaultChannelName {
|
||||||
if channel.Name != "" && channel.Name != oldChannel.Name {
|
if channel.Name != "" && channel.Name != oldChannel.Name {
|
||||||
c.Err = model.NewAppError("updateChannel", "api.channel.update_channel.tried.app_error", map[string]interface{}{"Channel": model.DEFAULT_CHANNEL}, "", http.StatusBadRequest)
|
c.Err = model.NewAppError("updateChannel", "api.channel.update_channel.tried.app_error", map[string]interface{}{"Channel": model.DefaultChannelName}, "", http.StatusBadRequest)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -239,17 +239,17 @@ func convertChannelToPrivate(c *Context, w http.ResponseWriter, r *http.Request)
|
|||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
auditRec.AddMeta("channel", oldPublicChannel)
|
auditRec.AddMeta("channel", oldPublicChannel)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), c.Params.ChannelId, model.PERMISSION_CONVERT_PUBLIC_CHANNEL_TO_PRIVATE) {
|
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), c.Params.ChannelId, model.PermissionConvertPublicChannelToPrivate) {
|
||||||
c.SetPermissionError(model.PERMISSION_CONVERT_PUBLIC_CHANNEL_TO_PRIVATE)
|
c.SetPermissionError(model.PermissionConvertPublicChannelToPrivate)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if oldPublicChannel.Type == model.CHANNEL_PRIVATE {
|
if oldPublicChannel.Type == model.ChannelTypePrivate {
|
||||||
c.Err = model.NewAppError("convertChannelToPrivate", "api.channel.convert_channel_to_private.private_channel_error", nil, "", http.StatusBadRequest)
|
c.Err = model.NewAppError("convertChannelToPrivate", "api.channel.convert_channel_to_private.private_channel_error", nil, "", http.StatusBadRequest)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if oldPublicChannel.Name == model.DEFAULT_CHANNEL {
|
if oldPublicChannel.Name == model.DefaultChannelName {
|
||||||
c.Err = model.NewAppError("convertChannelToPrivate", "api.channel.convert_channel_to_private.default_channel_error", nil, "", http.StatusBadRequest)
|
c.Err = model.NewAppError("convertChannelToPrivate", "api.channel.convert_channel_to_private.default_channel_error", nil, "", http.StatusBadRequest)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -261,7 +261,7 @@ func convertChannelToPrivate(c *Context, w http.ResponseWriter, r *http.Request)
|
|||||||
}
|
}
|
||||||
auditRec.AddMeta("user", user)
|
auditRec.AddMeta("user", user)
|
||||||
|
|
||||||
oldPublicChannel.Type = model.CHANNEL_PRIVATE
|
oldPublicChannel.Type = model.ChannelTypePrivate
|
||||||
|
|
||||||
rchannel, err := c.App.UpdateChannelPrivacy(c.AppContext, oldPublicChannel, user)
|
rchannel, err := c.App.UpdateChannelPrivacy(c.AppContext, oldPublicChannel, user)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -283,7 +283,7 @@ func updateChannelPrivacy(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
props := model.StringInterfaceFromJson(r.Body)
|
props := model.StringInterfaceFromJson(r.Body)
|
||||||
privacy, ok := props["privacy"].(string)
|
privacy, ok := props["privacy"].(string)
|
||||||
if !ok || (privacy != model.CHANNEL_OPEN && privacy != model.CHANNEL_PRIVATE) {
|
if !ok || (privacy != model.ChannelTypeOpen && privacy != model.ChannelTypePrivate) {
|
||||||
c.SetInvalidParam("privacy")
|
c.SetInvalidParam("privacy")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -299,17 +299,17 @@ func updateChannelPrivacy(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
auditRec.AddMeta("channel", channel)
|
auditRec.AddMeta("channel", channel)
|
||||||
auditRec.AddMeta("new_type", privacy)
|
auditRec.AddMeta("new_type", privacy)
|
||||||
|
|
||||||
if privacy == model.CHANNEL_OPEN && !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), c.Params.ChannelId, model.PERMISSION_CONVERT_PRIVATE_CHANNEL_TO_PUBLIC) {
|
if privacy == model.ChannelTypeOpen && !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), c.Params.ChannelId, model.PermissionConvertPrivateChannelToPublic) {
|
||||||
c.SetPermissionError(model.PERMISSION_CONVERT_PRIVATE_CHANNEL_TO_PUBLIC)
|
c.SetPermissionError(model.PermissionConvertPrivateChannelToPublic)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if privacy == model.CHANNEL_PRIVATE && !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), c.Params.ChannelId, model.PERMISSION_CONVERT_PUBLIC_CHANNEL_TO_PRIVATE) {
|
if privacy == model.ChannelTypePrivate && !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), c.Params.ChannelId, model.PermissionConvertPublicChannelToPrivate) {
|
||||||
c.SetPermissionError(model.PERMISSION_CONVERT_PUBLIC_CHANNEL_TO_PRIVATE)
|
c.SetPermissionError(model.PermissionConvertPublicChannelToPrivate)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if channel.Name == model.DEFAULT_CHANNEL && privacy == model.CHANNEL_PRIVATE {
|
if channel.Name == model.DefaultChannelName && privacy == model.ChannelTypePrivate {
|
||||||
c.Err = model.NewAppError("updateChannelPrivacy", "api.channel.update_channel_privacy.default_channel_error", nil, "", http.StatusBadRequest)
|
c.Err = model.NewAppError("updateChannelPrivacy", "api.channel.update_channel_privacy.default_channel_error", nil, "", http.StatusBadRequest)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -358,19 +358,19 @@ func patchChannel(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
auditRec.AddMeta("channel", oldChannel)
|
auditRec.AddMeta("channel", oldChannel)
|
||||||
|
|
||||||
switch oldChannel.Type {
|
switch oldChannel.Type {
|
||||||
case model.CHANNEL_OPEN:
|
case model.ChannelTypeOpen:
|
||||||
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), c.Params.ChannelId, model.PERMISSION_MANAGE_PUBLIC_CHANNEL_PROPERTIES) {
|
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), c.Params.ChannelId, model.PermissionManagePublicChannelProperties) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_PUBLIC_CHANNEL_PROPERTIES)
|
c.SetPermissionError(model.PermissionManagePublicChannelProperties)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
case model.CHANNEL_PRIVATE:
|
case model.ChannelTypePrivate:
|
||||||
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), c.Params.ChannelId, model.PERMISSION_MANAGE_PRIVATE_CHANNEL_PROPERTIES) {
|
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), c.Params.ChannelId, model.PermissionManagePrivateChannelProperties) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_PRIVATE_CHANNEL_PROPERTIES)
|
c.SetPermissionError(model.PermissionManagePrivateChannelProperties)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
case model.CHANNEL_GROUP, model.CHANNEL_DIRECT:
|
case model.ChannelTypeGroup, model.ChannelTypeDirect:
|
||||||
// Modifying the header is not linked to any specific permission for group/dm channels, so just check for membership.
|
// Modifying the header is not linked to any specific permission for group/dm channels, so just check for membership.
|
||||||
if _, err = c.App.GetChannelMember(context.Background(), c.Params.ChannelId, c.AppContext.Session().UserId); err != nil {
|
if _, err = c.App.GetChannelMember(context.Background(), c.Params.ChannelId, c.AppContext.Session().UserId); err != nil {
|
||||||
c.Err = model.NewAppError("patchChannel", "api.channel.patch_update_channel.forbidden.app_error", nil, "", http.StatusForbidden)
|
c.Err = model.NewAppError("patchChannel", "api.channel.patch_update_channel.forbidden.app_error", nil, "", http.StatusForbidden)
|
||||||
@@ -418,8 +418,8 @@ func restoreChannel(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
auditRec.AddMeta("channel", channel)
|
auditRec.AddMeta("channel", channel)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), teamId, model.PERMISSION_MANAGE_TEAM) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), teamId, model.PermissionManageTeam) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_TEAM)
|
c.SetPermissionError(model.PermissionManageTeam)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -457,13 +457,13 @@ func createDirectChannel(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
auditRec := c.MakeAuditRecord("createDirectChannel", audit.Fail)
|
auditRec := c.MakeAuditRecord("createDirectChannel", audit.Fail)
|
||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_CREATE_DIRECT_CHANNEL) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionCreateDirectChannel) {
|
||||||
c.SetPermissionError(model.PERMISSION_CREATE_DIRECT_CHANNEL)
|
c.SetPermissionError(model.PermissionCreateDirectChannel)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !allowed && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
if !allowed && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM)
|
c.SetPermissionError(model.PermissionManageSystem)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -481,7 +481,7 @@ func createDirectChannel(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !canSee {
|
if !canSee {
|
||||||
c.SetPermissionError(model.PERMISSION_VIEW_MEMBERS)
|
c.SetPermissionError(model.PermissionViewMembers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -540,8 +540,8 @@ func createGroupChannel(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
auditRec := c.MakeAuditRecord("createGroupChannel", audit.Fail)
|
auditRec := c.MakeAuditRecord("createGroupChannel", audit.Fail)
|
||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_CREATE_GROUP_CHANNEL) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionCreateGroupChannel) {
|
||||||
c.SetPermissionError(model.PERMISSION_CREATE_GROUP_CHANNEL)
|
c.SetPermissionError(model.PermissionCreateGroupChannel)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -560,7 +560,7 @@ func createGroupChannel(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !canSeeAll {
|
if !canSeeAll {
|
||||||
c.SetPermissionError(model.PERMISSION_VIEW_MEMBERS)
|
c.SetPermissionError(model.PermissionViewMembers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -589,14 +589,14 @@ func getChannel(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if channel.Type == model.CHANNEL_OPEN {
|
if channel.Type == model.ChannelTypeOpen {
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), channel.TeamId, model.PERMISSION_READ_PUBLIC_CHANNEL) && !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), c.Params.ChannelId, model.PERMISSION_READ_CHANNEL) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), channel.TeamId, model.PermissionReadPublicChannel) && !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), c.Params.ChannelId, model.PermissionReadChannel) {
|
||||||
c.SetPermissionError(model.PERMISSION_READ_PUBLIC_CHANNEL)
|
c.SetPermissionError(model.PermissionReadPublicChannel)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), c.Params.ChannelId, model.PERMISSION_READ_CHANNEL) {
|
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), c.Params.ChannelId, model.PermissionReadChannel) {
|
||||||
c.SetPermissionError(model.PERMISSION_READ_CHANNEL)
|
c.SetPermissionError(model.PermissionReadChannel)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -617,12 +617,12 @@ func getChannelUnread(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), c.Params.ChannelId, model.PERMISSION_READ_CHANNEL) {
|
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), c.Params.ChannelId, model.PermissionReadChannel) {
|
||||||
c.SetPermissionError(model.PERMISSION_READ_CHANNEL)
|
c.SetPermissionError(model.PermissionReadChannel)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -641,8 +641,8 @@ func getChannelStats(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), c.Params.ChannelId, model.PERMISSION_READ_CHANNEL) {
|
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), c.Params.ChannelId, model.PermissionReadChannel) {
|
||||||
c.SetPermissionError(model.PERMISSION_READ_CHANNEL)
|
c.SetPermissionError(model.PermissionReadChannel)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -674,8 +674,8 @@ func getPinnedPosts(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), c.Params.ChannelId, model.PERMISSION_READ_CHANNEL) {
|
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), c.Params.ChannelId, model.PermissionReadChannel) {
|
||||||
c.SetPermissionError(model.PERMISSION_READ_CHANNEL)
|
c.SetPermissionError(model.PermissionReadChannel)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -691,22 +691,22 @@ func getPinnedPosts(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
clientPostList := c.App.PreparePostListForClient(posts)
|
clientPostList := c.App.PreparePostListForClient(posts)
|
||||||
|
|
||||||
w.Header().Set(model.HEADER_ETAG_SERVER, clientPostList.Etag())
|
w.Header().Set(model.HeaderEtagServer, clientPostList.Etag())
|
||||||
w.Write([]byte(clientPostList.ToJson()))
|
w.Write([]byte(clientPostList.ToJson()))
|
||||||
}
|
}
|
||||||
|
|
||||||
func getAllChannels(c *Context, w http.ResponseWriter, r *http.Request) {
|
func getAllChannels(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||||
permissions := []*model.Permission{
|
permissions := []*model.Permission{
|
||||||
model.PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_GROUPS,
|
model.PermissionSysconsoleReadUserManagementGroups,
|
||||||
model.PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_CHANNELS,
|
model.PermissionSysconsoleReadUserManagementChannels,
|
||||||
}
|
}
|
||||||
if !c.App.SessionHasPermissionToAny(*c.AppContext.Session(), permissions) {
|
if !c.App.SessionHasPermissionToAny(*c.AppContext.Session(), permissions) {
|
||||||
c.SetPermissionError(permissions...)
|
c.SetPermissionError(permissions...)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
// Only system managers may use the ExcludePolicyConstrained parameter
|
// Only system managers may use the ExcludePolicyConstrained parameter
|
||||||
if c.Params.ExcludePolicyConstrained && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_READ_COMPLIANCE_DATA_RETENTION_POLICY) {
|
if c.Params.ExcludePolicyConstrained && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleReadComplianceDataRetentionPolicy) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_READ_COMPLIANCE_DATA_RETENTION_POLICY)
|
c.SetPermissionError(model.PermissionSysconsoleReadComplianceDataRetentionPolicy)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -716,7 +716,7 @@ func getAllChannels(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
IncludeDeleted: c.Params.IncludeDeleted,
|
IncludeDeleted: c.Params.IncludeDeleted,
|
||||||
ExcludePolicyConstrained: c.Params.ExcludePolicyConstrained,
|
ExcludePolicyConstrained: c.Params.ExcludePolicyConstrained,
|
||||||
}
|
}
|
||||||
if c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_READ_COMPLIANCE_DATA_RETENTION_POLICY) {
|
if c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleReadComplianceDataRetentionPolicy) {
|
||||||
opts.IncludePolicyID = true
|
opts.IncludePolicyID = true
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -751,8 +751,8 @@ func getPublicChannelsForTeam(c *Context, w http.ResponseWriter, r *http.Request
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PERMISSION_LIST_TEAM_CHANNELS) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PermissionListTeamChannels) {
|
||||||
c.SetPermissionError(model.PERMISSION_LIST_TEAM_CHANNELS)
|
c.SetPermissionError(model.PermissionListTeamChannels)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -798,8 +798,8 @@ func getPrivateChannelsForTeam(c *Context, w http.ResponseWriter, r *http.Reques
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM)
|
c.SetPermissionError(model.PermissionManageSystem)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -837,8 +837,8 @@ func getPublicChannelsByIdsForTeam(c *Context, w http.ResponseWriter, r *http.Re
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PERMISSION_VIEW_TEAM) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PermissionViewTeam) {
|
||||||
c.SetPermissionError(model.PERMISSION_VIEW_TEAM)
|
c.SetPermissionError(model.PermissionViewTeam)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -864,12 +864,12 @@ func getChannelsForTeamForUser(c *Context, w http.ResponseWriter, r *http.Reques
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PERMISSION_VIEW_TEAM) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PermissionViewTeam) {
|
||||||
c.SetPermissionError(model.PERMISSION_VIEW_TEAM)
|
c.SetPermissionError(model.PermissionViewTeam)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -899,7 +899,7 @@ func getChannelsForTeamForUser(c *Context, w http.ResponseWriter, r *http.Reques
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
w.Header().Set(model.HEADER_ETAG_SERVER, channels.Etag())
|
w.Header().Set(model.HeaderEtagServer, channels.Etag())
|
||||||
w.Write([]byte(channels.ToJson()))
|
w.Write([]byte(channels.ToJson()))
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -909,8 +909,8 @@ func autocompleteChannelsForTeam(c *Context, w http.ResponseWriter, r *http.Requ
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PERMISSION_LIST_TEAM_CHANNELS) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PermissionListTeamChannels) {
|
||||||
c.SetPermissionError(model.PERMISSION_LIST_TEAM_CHANNELS)
|
c.SetPermissionError(model.PermissionListTeamChannels)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -958,7 +958,7 @@ func searchChannelsForTeam(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
var channels *model.ChannelList
|
var channels *model.ChannelList
|
||||||
var err *model.AppError
|
var err *model.AppError
|
||||||
if c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PERMISSION_LIST_TEAM_CHANNELS) {
|
if c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PermissionListTeamChannels) {
|
||||||
channels, err = c.App.SearchChannels(c.Params.TeamId, props.Term)
|
channels, err = c.App.SearchChannels(c.Params.TeamId, props.Term)
|
||||||
} else {
|
} else {
|
||||||
// If the user is not a team member, return a 404
|
// If the user is not a team member, return a 404
|
||||||
@@ -994,7 +994,7 @@ func searchArchivedChannelsForTeam(c *Context, w http.ResponseWriter, r *http.Re
|
|||||||
|
|
||||||
var channels *model.ChannelList
|
var channels *model.ChannelList
|
||||||
var err *model.AppError
|
var err *model.AppError
|
||||||
if c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PERMISSION_LIST_TEAM_CHANNELS) {
|
if c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PermissionListTeamChannels) {
|
||||||
channels, err = c.App.SearchArchivedChannels(c.Params.TeamId, props.Term, c.AppContext.Session().UserId)
|
channels, err = c.App.SearchArchivedChannels(c.Params.TeamId, props.Term, c.AppContext.Session().UserId)
|
||||||
} else {
|
} else {
|
||||||
// If the user is not a team member, return a 404
|
// If the user is not a team member, return a 404
|
||||||
@@ -1023,13 +1023,13 @@ func searchAllChannels(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
// Only system managers may use the ExcludePolicyConstrained field
|
// Only system managers may use the ExcludePolicyConstrained field
|
||||||
if props.ExcludePolicyConstrained && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_READ_COMPLIANCE_DATA_RETENTION_POLICY) {
|
if props.ExcludePolicyConstrained && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleReadComplianceDataRetentionPolicy) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_READ_COMPLIANCE_DATA_RETENTION_POLICY)
|
c.SetPermissionError(model.PermissionSysconsoleReadComplianceDataRetentionPolicy)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_CHANNELS) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleReadUserManagementChannels) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_CHANNELS)
|
c.SetPermissionError(model.PermissionSysconsoleReadUserManagementChannels)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
includeDeleted, _ := strconv.ParseBool(r.URL.Query().Get("include_deleted"))
|
includeDeleted, _ := strconv.ParseBool(r.URL.Query().Get("include_deleted"))
|
||||||
@@ -1049,7 +1049,7 @@ func searchAllChannels(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
Page: props.Page,
|
Page: props.Page,
|
||||||
PerPage: props.PerPage,
|
PerPage: props.PerPage,
|
||||||
}
|
}
|
||||||
if c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_READ_COMPLIANCE_DATA_RETENTION_POLICY) {
|
if c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleReadComplianceDataRetentionPolicy) {
|
||||||
opts.IncludePolicyID = true
|
opts.IncludePolicyID = true
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1087,18 +1087,18 @@ func deleteChannel(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
auditRec.AddMeta("channeld", channel)
|
auditRec.AddMeta("channeld", channel)
|
||||||
|
|
||||||
if channel.Type == model.CHANNEL_DIRECT || channel.Type == model.CHANNEL_GROUP {
|
if channel.Type == model.ChannelTypeDirect || channel.Type == model.ChannelTypeGroup {
|
||||||
c.Err = model.NewAppError("deleteChannel", "api.channel.delete_channel.type.invalid", nil, "", http.StatusBadRequest)
|
c.Err = model.NewAppError("deleteChannel", "api.channel.delete_channel.type.invalid", nil, "", http.StatusBadRequest)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if channel.Type == model.CHANNEL_OPEN && !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), channel.Id, model.PERMISSION_DELETE_PUBLIC_CHANNEL) {
|
if channel.Type == model.ChannelTypeOpen && !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), channel.Id, model.PermissionDeletePublicChannel) {
|
||||||
c.SetPermissionError(model.PERMISSION_DELETE_PUBLIC_CHANNEL)
|
c.SetPermissionError(model.PermissionDeletePublicChannel)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if channel.Type == model.CHANNEL_PRIVATE && !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), channel.Id, model.PERMISSION_DELETE_PRIVATE_CHANNEL) {
|
if channel.Type == model.ChannelTypePrivate && !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), channel.Id, model.PermissionDeletePrivateChannel) {
|
||||||
c.SetPermissionError(model.PERMISSION_DELETE_PRIVATE_CHANNEL)
|
c.SetPermissionError(model.PermissionDeletePrivateChannel)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1135,13 +1135,13 @@ func getChannelByName(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if channel.Type == model.CHANNEL_OPEN {
|
if channel.Type == model.ChannelTypeOpen {
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), channel.TeamId, model.PERMISSION_READ_PUBLIC_CHANNEL) && !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), channel.Id, model.PERMISSION_READ_CHANNEL) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), channel.TeamId, model.PermissionReadPublicChannel) && !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), channel.Id, model.PermissionReadChannel) {
|
||||||
c.SetPermissionError(model.PERMISSION_READ_PUBLIC_CHANNEL)
|
c.SetPermissionError(model.PermissionReadPublicChannel)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), channel.Id, model.PERMISSION_READ_CHANNEL) {
|
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), channel.Id, model.PermissionReadChannel) {
|
||||||
c.Err = model.NewAppError("getChannelByName", "app.channel.get_by_name.missing.app_error", nil, "teamId="+channel.TeamId+", "+"name="+channel.Name+"", http.StatusNotFound)
|
c.Err = model.NewAppError("getChannelByName", "app.channel.get_by_name.missing.app_error", nil, "teamId="+channel.TeamId+", "+"name="+channel.Name+"", http.StatusNotFound)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -1169,12 +1169,12 @@ func getChannelByNameForTeamName(c *Context, w http.ResponseWriter, r *http.Requ
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
teamOk := c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), channel.TeamId, model.PERMISSION_READ_PUBLIC_CHANNEL)
|
teamOk := c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), channel.TeamId, model.PermissionReadPublicChannel)
|
||||||
channelOk := c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), channel.Id, model.PERMISSION_READ_CHANNEL)
|
channelOk := c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), channel.Id, model.PermissionReadChannel)
|
||||||
|
|
||||||
if channel.Type == model.CHANNEL_OPEN {
|
if channel.Type == model.ChannelTypeOpen {
|
||||||
if !teamOk && !channelOk {
|
if !teamOk && !channelOk {
|
||||||
c.SetPermissionError(model.PERMISSION_READ_PUBLIC_CHANNEL)
|
c.SetPermissionError(model.PermissionReadPublicChannel)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
} else if !channelOk {
|
} else if !channelOk {
|
||||||
@@ -1197,8 +1197,8 @@ func getChannelMembers(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), c.Params.ChannelId, model.PERMISSION_READ_CHANNEL) {
|
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), c.Params.ChannelId, model.PermissionReadChannel) {
|
||||||
c.SetPermissionError(model.PERMISSION_READ_CHANNEL)
|
c.SetPermissionError(model.PermissionReadChannel)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1217,8 +1217,8 @@ func getChannelMembersTimezones(c *Context, w http.ResponseWriter, r *http.Reque
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), c.Params.ChannelId, model.PERMISSION_READ_CHANNEL) {
|
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), c.Params.ChannelId, model.PermissionReadChannel) {
|
||||||
c.SetPermissionError(model.PERMISSION_READ_CHANNEL)
|
c.SetPermissionError(model.PermissionReadChannel)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1243,8 +1243,8 @@ func getChannelMembersByIds(c *Context, w http.ResponseWriter, r *http.Request)
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), c.Params.ChannelId, model.PERMISSION_READ_CHANNEL) {
|
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), c.Params.ChannelId, model.PermissionReadChannel) {
|
||||||
c.SetPermissionError(model.PERMISSION_READ_CHANNEL)
|
c.SetPermissionError(model.PermissionReadChannel)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1263,8 +1263,8 @@ func getChannelMember(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), c.Params.ChannelId, model.PERMISSION_READ_CHANNEL) {
|
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), c.Params.ChannelId, model.PermissionReadChannel) {
|
||||||
c.SetPermissionError(model.PERMISSION_READ_CHANNEL)
|
c.SetPermissionError(model.PermissionReadChannel)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1283,13 +1283,13 @@ func getChannelMembersForUser(c *Context, w http.ResponseWriter, r *http.Request
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PERMISSION_VIEW_TEAM) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PermissionViewTeam) {
|
||||||
c.SetPermissionError(model.PERMISSION_VIEW_TEAM)
|
c.SetPermissionError(model.PermissionViewTeam)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.AppContext.Session().UserId != c.Params.UserId && !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PERMISSION_MANAGE_SYSTEM) {
|
if c.AppContext.Session().UserId != c.Params.UserId && !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PermissionManageSystem) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM)
|
c.SetPermissionError(model.PermissionManageSystem)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1309,7 +1309,7 @@ func viewChannel(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1367,8 +1367,8 @@ func updateChannelMemberRoles(c *Context, w http.ResponseWriter, r *http.Request
|
|||||||
auditRec.AddMeta("channel_id", c.Params.ChannelId)
|
auditRec.AddMeta("channel_id", c.Params.ChannelId)
|
||||||
auditRec.AddMeta("roles", newRoles)
|
auditRec.AddMeta("roles", newRoles)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), c.Params.ChannelId, model.PERMISSION_MANAGE_CHANNEL_ROLES) {
|
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), c.Params.ChannelId, model.PermissionManageChannelRoles) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_CHANNEL_ROLES)
|
c.SetPermissionError(model.PermissionManageChannelRoles)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1399,8 +1399,8 @@ func updateChannelMemberSchemeRoles(c *Context, w http.ResponseWriter, r *http.R
|
|||||||
auditRec.AddMeta("channel_id", c.Params.ChannelId)
|
auditRec.AddMeta("channel_id", c.Params.ChannelId)
|
||||||
auditRec.AddMeta("roles", schemeRoles)
|
auditRec.AddMeta("roles", schemeRoles)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), c.Params.ChannelId, model.PERMISSION_MANAGE_CHANNEL_ROLES) {
|
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), c.Params.ChannelId, model.PermissionManageChannelRoles) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_CHANNEL_ROLES)
|
c.SetPermissionError(model.PermissionManageChannelRoles)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1432,7 +1432,7 @@ func updateChannelMemberNotifyProps(c *Context, w http.ResponseWriter, r *http.R
|
|||||||
auditRec.AddMeta("props", props)
|
auditRec.AddMeta("props", props)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1493,7 +1493,7 @@ func addChannelMember(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
auditRec.AddMeta("channel", channel)
|
auditRec.AddMeta("channel", channel)
|
||||||
|
|
||||||
if channel.Type == model.CHANNEL_DIRECT || channel.Type == model.CHANNEL_GROUP {
|
if channel.Type == model.ChannelTypeDirect || channel.Type == model.ChannelTypeGroup {
|
||||||
c.Err = model.NewAppError("addUserToChannel", "api.channel.add_user_to_channel.type.app_error", nil, "", http.StatusBadRequest)
|
c.Err = model.NewAppError("addUserToChannel", "api.channel.add_user_to_channel.type.app_error", nil, "", http.StatusBadRequest)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -1510,33 +1510,33 @@ func addChannelMember(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
isSelfAdd := member.UserId == c.AppContext.Session().UserId
|
isSelfAdd := member.UserId == c.AppContext.Session().UserId
|
||||||
|
|
||||||
if channel.Type == model.CHANNEL_OPEN {
|
if channel.Type == model.ChannelTypeOpen {
|
||||||
if isSelfAdd && isNewMembership {
|
if isSelfAdd && isNewMembership {
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), channel.TeamId, model.PERMISSION_JOIN_PUBLIC_CHANNELS) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), channel.TeamId, model.PermissionJoinPublicChannels) {
|
||||||
c.SetPermissionError(model.PERMISSION_JOIN_PUBLIC_CHANNELS)
|
c.SetPermissionError(model.PermissionJoinPublicChannels)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
} else if isSelfAdd && !isNewMembership {
|
} else if isSelfAdd && !isNewMembership {
|
||||||
// nothing to do, since already in the channel
|
// nothing to do, since already in the channel
|
||||||
} else if !isSelfAdd {
|
} else if !isSelfAdd {
|
||||||
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), channel.Id, model.PERMISSION_MANAGE_PUBLIC_CHANNEL_MEMBERS) {
|
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), channel.Id, model.PermissionManagePublicChannelMembers) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_PUBLIC_CHANNEL_MEMBERS)
|
c.SetPermissionError(model.PermissionManagePublicChannelMembers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if channel.Type == model.CHANNEL_PRIVATE {
|
if channel.Type == model.ChannelTypePrivate {
|
||||||
if isSelfAdd && isNewMembership {
|
if isSelfAdd && isNewMembership {
|
||||||
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), channel.Id, model.PERMISSION_MANAGE_PRIVATE_CHANNEL_MEMBERS) {
|
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), channel.Id, model.PermissionManagePrivateChannelMembers) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_PRIVATE_CHANNEL_MEMBERS)
|
c.SetPermissionError(model.PermissionManagePrivateChannelMembers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
} else if isSelfAdd && !isNewMembership {
|
} else if isSelfAdd && !isNewMembership {
|
||||||
// nothing to do, since already in the channel
|
// nothing to do, since already in the channel
|
||||||
} else if !isSelfAdd {
|
} else if !isSelfAdd {
|
||||||
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), channel.Id, model.PERMISSION_MANAGE_PRIVATE_CHANNEL_MEMBERS) {
|
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), channel.Id, model.PermissionManagePrivateChannelMembers) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_PRIVATE_CHANNEL_MEMBERS)
|
c.SetPermissionError(model.PermissionManagePrivateChannelMembers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1598,7 +1598,7 @@ func removeChannelMember(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
auditRec.AddMeta("channel", channel)
|
auditRec.AddMeta("channel", channel)
|
||||||
auditRec.AddMeta("remove_user_id", user.Id)
|
auditRec.AddMeta("remove_user_id", user.Id)
|
||||||
|
|
||||||
if !(channel.Type == model.CHANNEL_OPEN || channel.Type == model.CHANNEL_PRIVATE) {
|
if !(channel.Type == model.ChannelTypeOpen || channel.Type == model.ChannelTypePrivate) {
|
||||||
c.Err = model.NewAppError("removeChannelMember", "api.channel.remove_channel_member.type.app_error", nil, "", http.StatusBadRequest)
|
c.Err = model.NewAppError("removeChannelMember", "api.channel.remove_channel_member.type.app_error", nil, "", http.StatusBadRequest)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -1609,13 +1609,13 @@ func removeChannelMember(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if c.Params.UserId != c.AppContext.Session().UserId {
|
if c.Params.UserId != c.AppContext.Session().UserId {
|
||||||
if channel.Type == model.CHANNEL_OPEN && !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), channel.Id, model.PERMISSION_MANAGE_PUBLIC_CHANNEL_MEMBERS) {
|
if channel.Type == model.ChannelTypeOpen && !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), channel.Id, model.PermissionManagePublicChannelMembers) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_PUBLIC_CHANNEL_MEMBERS)
|
c.SetPermissionError(model.PermissionManagePublicChannelMembers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if channel.Type == model.CHANNEL_PRIVATE && !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), channel.Id, model.PERMISSION_MANAGE_PRIVATE_CHANNEL_MEMBERS) {
|
if channel.Type == model.ChannelTypePrivate && !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), channel.Id, model.PermissionManagePrivateChannelMembers) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_PRIVATE_CHANNEL_MEMBERS)
|
c.SetPermissionError(model.PermissionManagePrivateChannelMembers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1652,8 +1652,8 @@ func updateChannelScheme(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM)
|
c.SetPermissionError(model.PermissionManageSystem)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1663,7 +1663,7 @@ func updateChannelScheme(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if scheme.Scope != model.SCHEME_SCOPE_CHANNEL {
|
if scheme.Scope != model.SchemeScopeChannel {
|
||||||
c.Err = model.NewAppError("Api4.UpdateChannelScheme", "api.channel.update_channel_scheme.scheme_scope.error", nil, "", http.StatusBadRequest)
|
c.Err = model.NewAppError("Api4.UpdateChannelScheme", "api.channel.update_channel_scheme.scheme_scope.error", nil, "", http.StatusBadRequest)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -1712,8 +1712,8 @@ func channelMembersMinusGroupMembers(c *Context, w http.ResponseWriter, r *http.
|
|||||||
groupIDs = append(groupIDs, gid)
|
groupIDs = append(groupIDs, gid)
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_CHANNELS) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleReadUserManagementChannels) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_CHANNELS)
|
c.SetPermissionError(model.PermissionSysconsoleReadUserManagementChannels)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1751,8 +1751,8 @@ func channelMemberCountsByGroup(c *Context, w http.ResponseWriter, r *http.Reque
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), c.Params.ChannelId, model.PERMISSION_READ_CHANNEL) {
|
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), c.Params.ChannelId, model.PermissionReadChannel) {
|
||||||
c.SetPermissionError(model.PERMISSION_READ_CHANNEL)
|
c.SetPermissionError(model.PermissionReadChannel)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1784,8 +1784,8 @@ func getChannelModerations(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_CHANNELS) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleReadUserManagementChannels) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_CHANNELS)
|
c.SetPermissionError(model.PermissionSysconsoleReadUserManagementChannels)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1824,8 +1824,8 @@ func patchChannelModerations(c *Context, w http.ResponseWriter, r *http.Request)
|
|||||||
auditRec := c.MakeAuditRecord("patchChannelModerations", audit.Fail)
|
auditRec := c.MakeAuditRecord("patchChannelModerations", audit.Fail)
|
||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_WRITE_USERMANAGEMENT_CHANNELS) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleWriteUserManagementChannels) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_WRITE_USERMANAGEMENT_CHANNELS)
|
c.SetPermissionError(model.PermissionSysconsoleWriteUserManagementChannels)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1892,13 +1892,13 @@ func moveChannel(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
auditRec.AddMeta("team_id", team.Id)
|
auditRec.AddMeta("team_id", team.Id)
|
||||||
auditRec.AddMeta("team_name", team.Name)
|
auditRec.AddMeta("team_name", team.Name)
|
||||||
|
|
||||||
if channel.Type == model.CHANNEL_DIRECT || channel.Type == model.CHANNEL_GROUP {
|
if channel.Type == model.ChannelTypeDirect || channel.Type == model.ChannelTypeGroup {
|
||||||
c.Err = model.NewAppError("moveChannel", "api.channel.move_channel.type.invalid", nil, "", http.StatusForbidden)
|
c.Err = model.NewAppError("moveChannel", "api.channel.move_channel.type.invalid", nil, "", http.StatusForbidden)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM)
|
c.SetPermissionError(model.PermissionManageSystem)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ func getCategoriesForTeamForUser(c *Context, w http.ResponseWriter, r *http.Requ
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -38,7 +38,7 @@ func createCategoryForTeamForUser(c *Context, w http.ResponseWriter, r *http.Req
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -73,7 +73,7 @@ func getCategoryOrderForTeamForUser(c *Context, w http.ResponseWriter, r *http.R
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -93,7 +93,7 @@ func updateCategoryOrderForTeamForUser(c *Context, w http.ResponseWriter, r *htt
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -126,7 +126,7 @@ func getCategoryForTeamForUser(c *Context, w http.ResponseWriter, r *http.Reques
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToCategory(*c.AppContext.Session(), c.Params.UserId, c.Params.TeamId, c.Params.CategoryId) {
|
if !c.App.SessionHasPermissionToCategory(*c.AppContext.Session(), c.Params.UserId, c.Params.TeamId, c.Params.CategoryId) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -146,7 +146,7 @@ func updateCategoriesForTeamForUser(c *Context, w http.ResponseWriter, r *http.R
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -234,7 +234,7 @@ func updateCategoryForTeamForUser(c *Context, w http.ResponseWriter, r *http.Req
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToCategory(*c.AppContext.Session(), c.Params.UserId, c.Params.TeamId, c.Params.CategoryId) {
|
if !c.App.SessionHasPermissionToCategory(*c.AppContext.Session(), c.Params.UserId, c.Params.TeamId, c.Params.CategoryId) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -271,7 +271,7 @@ func deleteCategoryForTeamForUser(c *Context, w http.ResponseWriter, r *http.Req
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToCategory(*c.AppContext.Session(), c.Params.UserId, c.Params.TeamId, c.Params.CategoryId) {
|
if !c.App.SessionHasPermissionToCategory(*c.AppContext.Session(), c.Params.UserId, c.Params.TeamId, c.Params.CategoryId) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ func TestCreateCategoryForTeamForUser(t *testing.T) {
|
|||||||
// Have another user create a channel that user isn't a part of
|
// Have another user create a channel that user isn't a part of
|
||||||
channel, resp := th.SystemAdminClient.CreateChannel(&model.Channel{
|
channel, resp := th.SystemAdminClient.CreateChannel(&model.Channel{
|
||||||
TeamId: th.BasicTeam.Id,
|
TeamId: th.BasicTeam.Id,
|
||||||
Type: model.CHANNEL_OPEN,
|
Type: model.ChannelTypeOpen,
|
||||||
Name: "testchannel",
|
Name: "testchannel",
|
||||||
})
|
})
|
||||||
require.Nil(t, resp.Error)
|
require.Nil(t, resp.Error)
|
||||||
@@ -235,7 +235,7 @@ func TestUpdateCategoryForTeamForUser(t *testing.T) {
|
|||||||
// Have another user create a channel that user isn't a part of
|
// Have another user create a channel that user isn't a part of
|
||||||
channel, resp := th.SystemAdminClient.CreateChannel(&model.Channel{
|
channel, resp := th.SystemAdminClient.CreateChannel(&model.Channel{
|
||||||
TeamId: th.BasicTeam.Id,
|
TeamId: th.BasicTeam.Id,
|
||||||
Type: model.CHANNEL_OPEN,
|
Type: model.ChannelTypeOpen,
|
||||||
Name: "testchannel",
|
Name: "testchannel",
|
||||||
})
|
})
|
||||||
require.Nil(t, resp.Error)
|
require.Nil(t, resp.Error)
|
||||||
@@ -381,7 +381,7 @@ func TestUpdateCategoriesForTeamForUser(t *testing.T) {
|
|||||||
// Have another user create a channel that user isn't a part of
|
// Have another user create a channel that user isn't a part of
|
||||||
channel, resp := th.SystemAdminClient.CreateChannel(&model.Channel{
|
channel, resp := th.SystemAdminClient.CreateChannel(&model.Channel{
|
||||||
TeamId: th.BasicTeam.Id,
|
TeamId: th.BasicTeam.Id,
|
||||||
Type: model.CHANNEL_OPEN,
|
Type: model.ChannelTypeOpen,
|
||||||
Name: "testchannel",
|
Name: "testchannel",
|
||||||
})
|
})
|
||||||
require.Nil(t, resp.Error)
|
require.Nil(t, resp.Error)
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ func localUpdateChannelPrivacy(c *Context, w http.ResponseWriter, r *http.Reques
|
|||||||
|
|
||||||
props := model.StringInterfaceFromJson(r.Body)
|
props := model.StringInterfaceFromJson(r.Body)
|
||||||
privacy, ok := props["privacy"].(string)
|
privacy, ok := props["privacy"].(string)
|
||||||
if !ok || (privacy != model.CHANNEL_OPEN && privacy != model.CHANNEL_PRIVATE) {
|
if !ok || (privacy != model.ChannelTypeOpen && privacy != model.ChannelTypePrivate) {
|
||||||
c.SetInvalidParam("privacy")
|
c.SetInvalidParam("privacy")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -84,7 +84,7 @@ func localUpdateChannelPrivacy(c *Context, w http.ResponseWriter, r *http.Reques
|
|||||||
auditRec.AddMeta("channel", channel)
|
auditRec.AddMeta("channel", channel)
|
||||||
auditRec.AddMeta("new_type", privacy)
|
auditRec.AddMeta("new_type", privacy)
|
||||||
|
|
||||||
if channel.Name == model.DEFAULT_CHANNEL && privacy == model.CHANNEL_PRIVATE {
|
if channel.Name == model.DefaultChannelName && privacy == model.ChannelTypePrivate {
|
||||||
c.Err = model.NewAppError("updateChannelPrivacy", "api.channel.update_channel_privacy.default_channel_error", nil, "", http.StatusBadRequest)
|
c.Err = model.NewAppError("updateChannelPrivacy", "api.channel.update_channel_privacy.default_channel_error", nil, "", http.StatusBadRequest)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -176,7 +176,7 @@ func localAddChannelMember(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
auditRec.AddMeta("channel", channel)
|
auditRec.AddMeta("channel", channel)
|
||||||
|
|
||||||
if channel.Type == model.CHANNEL_DIRECT || channel.Type == model.CHANNEL_GROUP {
|
if channel.Type == model.ChannelTypeDirect || channel.Type == model.ChannelTypeGroup {
|
||||||
c.Err = model.NewAppError("localAddChannelMember", "api.channel.add_user_to_channel.type.app_error", nil, "", http.StatusBadRequest)
|
c.Err = model.NewAppError("localAddChannelMember", "api.channel.add_user_to_channel.type.app_error", nil, "", http.StatusBadRequest)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -231,7 +231,7 @@ func localRemoveChannelMember(c *Context, w http.ResponseWriter, r *http.Request
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !(channel.Type == model.CHANNEL_OPEN || channel.Type == model.CHANNEL_PRIVATE) {
|
if !(channel.Type == model.ChannelTypeOpen || channel.Type == model.ChannelTypePrivate) {
|
||||||
c.Err = model.NewAppError("removeChannelMember", "api.channel.remove_channel_member.type.app_error", nil, "", http.StatusBadRequest)
|
c.Err = model.NewAppError("removeChannelMember", "api.channel.remove_channel_member.type.app_error", nil, "", http.StatusBadRequest)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -338,7 +338,7 @@ func localMoveChannel(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
auditRec.AddMeta("team_id", team.Id)
|
auditRec.AddMeta("team_id", team.Id)
|
||||||
auditRec.AddMeta("team_name", team.Name)
|
auditRec.AddMeta("team_name", team.Name)
|
||||||
|
|
||||||
if channel.Type == model.CHANNEL_DIRECT || channel.Type == model.CHANNEL_GROUP {
|
if channel.Type == model.ChannelTypeDirect || channel.Type == model.ChannelTypeGroup {
|
||||||
c.Err = model.NewAppError("moveChannel", "api.channel.move_channel.type.invalid", nil, "", http.StatusForbidden)
|
c.Err = model.NewAppError("moveChannel", "api.channel.move_channel.type.invalid", nil, "", http.StatusForbidden)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -386,7 +386,7 @@ func localDeleteChannel(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
auditRec.AddMeta("channeld", channel)
|
auditRec.AddMeta("channeld", channel)
|
||||||
|
|
||||||
if channel.Type == model.CHANNEL_DIRECT || channel.Type == model.CHANNEL_GROUP {
|
if channel.Type == model.ChannelTypeDirect || channel.Type == model.ChannelTypeGroup {
|
||||||
c.Err = model.NewAppError("localDeleteChannel", "api.channel.delete_channel.type.invalid", nil, "", http.StatusBadRequest)
|
c.Err = model.NewAppError("localDeleteChannel", "api.channel.delete_channel.type.invalid", nil, "", http.StatusBadRequest)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,8 +30,8 @@ func TestCreateChannel(t *testing.T) {
|
|||||||
Client := th.Client
|
Client := th.Client
|
||||||
team := th.BasicTeam
|
team := th.BasicTeam
|
||||||
|
|
||||||
channel := &model.Channel{DisplayName: "Test API Name", Name: GenerateTestChannelName(), Type: model.CHANNEL_OPEN, TeamId: team.Id}
|
channel := &model.Channel{DisplayName: "Test API Name", Name: GenerateTestChannelName(), Type: model.ChannelTypeOpen, TeamId: team.Id}
|
||||||
private := &model.Channel{DisplayName: "Test API Name", Name: GenerateTestChannelName(), Type: model.CHANNEL_PRIVATE, TeamId: team.Id}
|
private := &model.Channel{DisplayName: "Test API Name", Name: GenerateTestChannelName(), Type: model.ChannelTypePrivate, TeamId: team.Id}
|
||||||
|
|
||||||
rchannel, resp := Client.CreateChannel(channel)
|
rchannel, resp := Client.CreateChannel(channel)
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
@@ -45,14 +45,14 @@ func TestCreateChannel(t *testing.T) {
|
|||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
|
|
||||||
require.Equal(t, private.Name, rprivate.Name, "names did not match")
|
require.Equal(t, private.Name, rprivate.Name, "names did not match")
|
||||||
require.Equal(t, model.CHANNEL_PRIVATE, rprivate.Type, "wrong channel type")
|
require.Equal(t, model.ChannelTypePrivate, rprivate.Type, "wrong channel type")
|
||||||
require.Equal(t, th.BasicUser.Id, rprivate.CreatorId, "wrong creator id")
|
require.Equal(t, th.BasicUser.Id, rprivate.CreatorId, "wrong creator id")
|
||||||
|
|
||||||
_, resp = Client.CreateChannel(channel)
|
_, resp = Client.CreateChannel(channel)
|
||||||
CheckErrorMessage(t, resp, "store.sql_channel.save_channel.exists.app_error")
|
CheckErrorMessage(t, resp, "store.sql_channel.save_channel.exists.app_error")
|
||||||
CheckBadRequestStatus(t, resp)
|
CheckBadRequestStatus(t, resp)
|
||||||
|
|
||||||
direct := &model.Channel{DisplayName: "Test API Name", Name: GenerateTestChannelName(), Type: model.CHANNEL_DIRECT, TeamId: team.Id}
|
direct := &model.Channel{DisplayName: "Test API Name", Name: GenerateTestChannelName(), Type: model.ChannelTypeDirect, TeamId: team.Id}
|
||||||
_, resp = Client.CreateChannel(direct)
|
_, resp = Client.CreateChannel(direct)
|
||||||
CheckErrorMessage(t, resp, "api.channel.create_channel.direct_channel.app_error")
|
CheckErrorMessage(t, resp, "api.channel.create_channel.direct_channel.app_error")
|
||||||
CheckBadRequestStatus(t, resp)
|
CheckBadRequestStatus(t, resp)
|
||||||
@@ -76,8 +76,8 @@ func TestCreateChannel(t *testing.T) {
|
|||||||
th.RestoreDefaultRolePermissions(defaultRolePermissions)
|
th.RestoreDefaultRolePermissions(defaultRolePermissions)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_CREATE_PUBLIC_CHANNEL.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionCreatePublicChannel.Id, model.TeamUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_CREATE_PRIVATE_CHANNEL.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionCreatePrivateChannel.Id, model.TeamUserRoleId)
|
||||||
|
|
||||||
th.LoginBasic()
|
th.LoginBasic()
|
||||||
|
|
||||||
@@ -89,10 +89,10 @@ func TestCreateChannel(t *testing.T) {
|
|||||||
_, resp = Client.CreateChannel(private)
|
_, resp = Client.CreateChannel(private)
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_CREATE_PUBLIC_CHANNEL.Id, model.TEAM_ADMIN_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionCreatePublicChannel.Id, model.TeamAdminRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_CREATE_PRIVATE_CHANNEL.Id, model.TEAM_ADMIN_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionCreatePrivateChannel.Id, model.TeamAdminRoleId)
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_CREATE_PUBLIC_CHANNEL.Id, model.TEAM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionCreatePublicChannel.Id, model.TeamUserRoleId)
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_CREATE_PRIVATE_CHANNEL.Id, model.TEAM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionCreatePrivateChannel.Id, model.TeamUserRoleId)
|
||||||
|
|
||||||
_, resp = Client.CreateChannel(channel)
|
_, resp = Client.CreateChannel(channel)
|
||||||
CheckForbiddenStatus(t, resp)
|
CheckForbiddenStatus(t, resp)
|
||||||
@@ -126,7 +126,7 @@ func TestCreateChannel(t *testing.T) {
|
|||||||
require.Equal(t, http.StatusBadRequest, r.StatusCode, "Expected 400 Bad Request")
|
require.Equal(t, http.StatusBadRequest, r.StatusCode, "Expected 400 Bad Request")
|
||||||
|
|
||||||
// Test GroupConstrained flag
|
// Test GroupConstrained flag
|
||||||
groupConstrainedChannel := &model.Channel{DisplayName: "Test API Name", Name: GenerateTestChannelName(), Type: model.CHANNEL_OPEN, TeamId: team.Id, GroupConstrained: model.NewBool(true)}
|
groupConstrainedChannel := &model.Channel{DisplayName: "Test API Name", Name: GenerateTestChannelName(), Type: model.ChannelTypeOpen, TeamId: team.Id, GroupConstrained: model.NewBool(true)}
|
||||||
rchannel, resp = Client.CreateChannel(groupConstrainedChannel)
|
rchannel, resp = Client.CreateChannel(groupConstrainedChannel)
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
|
|
||||||
@@ -139,8 +139,8 @@ func TestUpdateChannel(t *testing.T) {
|
|||||||
Client := th.Client
|
Client := th.Client
|
||||||
team := th.BasicTeam
|
team := th.BasicTeam
|
||||||
|
|
||||||
channel := &model.Channel{DisplayName: "Test API Name", Name: GenerateTestChannelName(), Type: model.CHANNEL_OPEN, TeamId: team.Id}
|
channel := &model.Channel{DisplayName: "Test API Name", Name: GenerateTestChannelName(), Type: model.ChannelTypeOpen, TeamId: team.Id}
|
||||||
private := &model.Channel{DisplayName: "Test API Name", Name: GenerateTestChannelName(), Type: model.CHANNEL_PRIVATE, TeamId: team.Id}
|
private := &model.Channel{DisplayName: "Test API Name", Name: GenerateTestChannelName(), Type: model.ChannelTypePrivate, TeamId: team.Id}
|
||||||
|
|
||||||
channel, _ = Client.CreateChannel(channel)
|
channel, _ = Client.CreateChannel(channel)
|
||||||
private, _ = Client.CreateChannel(private)
|
private, _ = Client.CreateChannel(private)
|
||||||
@@ -179,18 +179,18 @@ func TestUpdateChannel(t *testing.T) {
|
|||||||
|
|
||||||
// Test that changing the type fails and returns error
|
// Test that changing the type fails and returns error
|
||||||
|
|
||||||
private.Type = model.CHANNEL_OPEN
|
private.Type = model.ChannelTypeOpen
|
||||||
newPrivateChannel, resp = Client.UpdateChannel(private)
|
newPrivateChannel, resp = Client.UpdateChannel(private)
|
||||||
CheckBadRequestStatus(t, resp)
|
CheckBadRequestStatus(t, resp)
|
||||||
|
|
||||||
// Test that keeping the same type succeeds
|
// Test that keeping the same type succeeds
|
||||||
|
|
||||||
private.Type = model.CHANNEL_PRIVATE
|
private.Type = model.ChannelTypePrivate
|
||||||
newPrivateChannel, resp = Client.UpdateChannel(private)
|
newPrivateChannel, resp = Client.UpdateChannel(private)
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
|
|
||||||
//Non existing channel
|
//Non existing channel
|
||||||
channel1 := &model.Channel{DisplayName: "Test API Name for apiv4", Name: GenerateTestChannelName(), Type: model.CHANNEL_OPEN, TeamId: team.Id}
|
channel1 := &model.Channel{DisplayName: "Test API Name for apiv4", Name: GenerateTestChannelName(), Type: model.ChannelTypeOpen, TeamId: team.Id}
|
||||||
_, resp = Client.UpdateChannel(channel1)
|
_, resp = Client.UpdateChannel(channel1)
|
||||||
CheckNotFoundStatus(t, resp)
|
CheckNotFoundStatus(t, resp)
|
||||||
|
|
||||||
@@ -335,7 +335,7 @@ func TestChannelUnicodeNames(t *testing.T) {
|
|||||||
channel := &model.Channel{
|
channel := &model.Channel{
|
||||||
Name: "\u206cenglish\u206dchannel",
|
Name: "\u206cenglish\u206dchannel",
|
||||||
DisplayName: "The \u206cEnglish\u206d Channel",
|
DisplayName: "The \u206cEnglish\u206d Channel",
|
||||||
Type: model.CHANNEL_OPEN,
|
Type: model.ChannelTypeOpen,
|
||||||
TeamId: team.Id}
|
TeamId: team.Id}
|
||||||
|
|
||||||
rchannel, resp := Client.CreateChannel(channel)
|
rchannel, resp := Client.CreateChannel(channel)
|
||||||
@@ -350,7 +350,7 @@ func TestChannelUnicodeNames(t *testing.T) {
|
|||||||
channel := &model.Channel{
|
channel := &model.Channel{
|
||||||
DisplayName: "Test API Name",
|
DisplayName: "Test API Name",
|
||||||
Name: GenerateTestChannelName(),
|
Name: GenerateTestChannelName(),
|
||||||
Type: model.CHANNEL_OPEN,
|
Type: model.ChannelTypeOpen,
|
||||||
TeamId: team.Id,
|
TeamId: team.Id,
|
||||||
}
|
}
|
||||||
channel, _ = Client.CreateChannel(channel)
|
channel, _ = Client.CreateChannel(channel)
|
||||||
@@ -425,7 +425,7 @@ func TestCreateDirectChannel(t *testing.T) {
|
|||||||
// Normal client should not be allowed to create a direct channel if users are
|
// Normal client should not be allowed to create a direct channel if users are
|
||||||
// restricted to messaging members of their own team
|
// restricted to messaging members of their own team
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) {
|
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||||
*cfg.TeamSettings.RestrictDirectMessage = model.DIRECT_MESSAGE_TEAM
|
*cfg.TeamSettings.RestrictDirectMessage = model.DirectMessageTeam
|
||||||
})
|
})
|
||||||
user4 := th.CreateUser()
|
user4 := th.CreateUser()
|
||||||
_, resp = th.Client.CreateDirectChannel(user1.Id, user4.Id)
|
_, resp = th.Client.CreateDirectChannel(user1.Id, user4.Id)
|
||||||
@@ -516,7 +516,7 @@ func TestCreateGroupChannel(t *testing.T) {
|
|||||||
CheckCreatedStatus(t, resp)
|
CheckCreatedStatus(t, resp)
|
||||||
|
|
||||||
require.NotNil(t, rgc, "should have created a group channel")
|
require.NotNil(t, rgc, "should have created a group channel")
|
||||||
require.Equal(t, model.CHANNEL_GROUP, rgc.Type, "should have created a channel of group type")
|
require.Equal(t, model.ChannelTypeGroup, rgc.Type, "should have created a channel of group type")
|
||||||
|
|
||||||
m, _ := th.App.GetChannelMembersPage(rgc.Id, 0, 10)
|
m, _ := th.App.GetChannelMembersPage(rgc.Id, 0, 10)
|
||||||
require.Len(t, *m, 3, "should have 3 channel members")
|
require.Len(t, *m, 3, "should have 3 channel members")
|
||||||
@@ -769,7 +769,7 @@ func TestGetPrivateChannelsForTeam(t *testing.T) {
|
|||||||
require.Len(t, channels, 2, "wrong number of private channels")
|
require.Len(t, channels, 2, "wrong number of private channels")
|
||||||
for _, c := range channels {
|
for _, c := range channels {
|
||||||
// check all channels included are private
|
// check all channels included are private
|
||||||
require.Equal(t, model.CHANNEL_PRIVATE, c.Type, "should include private channels only")
|
require.Equal(t, model.ChannelTypePrivate, c.Type, "should include private channels only")
|
||||||
}
|
}
|
||||||
|
|
||||||
channels, resp = c.GetPrivateChannelsForTeam(team.Id, 0, 1, "")
|
channels, resp = c.GetPrivateChannelsForTeam(team.Id, 0, 1, "")
|
||||||
@@ -803,7 +803,7 @@ func TestGetPublicChannelsForTeam(t *testing.T) {
|
|||||||
|
|
||||||
for i, c := range channels {
|
for i, c := range channels {
|
||||||
// check all channels included are open
|
// check all channels included are open
|
||||||
require.Equal(t, model.CHANNEL_OPEN, c.Type, "should include open channel only")
|
require.Equal(t, model.ChannelTypeOpen, c.Type, "should include open channel only")
|
||||||
|
|
||||||
// only check the created 2 public channels
|
// only check the created 2 public channels
|
||||||
require.False(t, i < 2 && !(c.DisplayName == publicChannel1.DisplayName || c.DisplayName == publicChannel2.DisplayName), "should match public channel display name")
|
require.False(t, i < 2 && !(c.DisplayName == publicChannel1.DisplayName || c.DisplayName == publicChannel2.DisplayName), "should match public channel display name")
|
||||||
@@ -815,7 +815,7 @@ func TestGetPublicChannelsForTeam(t *testing.T) {
|
|||||||
require.Len(t, channels, 4, "incorrect length of team public channels")
|
require.Len(t, channels, 4, "incorrect length of team public channels")
|
||||||
|
|
||||||
for _, c := range channels {
|
for _, c := range channels {
|
||||||
require.Equal(t, model.CHANNEL_OPEN, c.Type, "should not include private channel")
|
require.Equal(t, model.ChannelTypeOpen, c.Type, "should not include private channel")
|
||||||
require.NotEqual(t, privateChannel.DisplayName, c.DisplayName, "should not match private channel display name")
|
require.NotEqual(t, privateChannel.DisplayName, c.DisplayName, "should not match private channel display name")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -952,7 +952,7 @@ func TestGetChannelsForTeamForUser(t *testing.T) {
|
|||||||
testChannel := &model.Channel{
|
testChannel := &model.Channel{
|
||||||
DisplayName: "dn_" + model.NewId(),
|
DisplayName: "dn_" + model.NewId(),
|
||||||
Name: GenerateTestChannelName(),
|
Name: GenerateTestChannelName(),
|
||||||
Type: model.CHANNEL_OPEN,
|
Type: model.ChannelTypeOpen,
|
||||||
TeamId: th.BasicTeam.Id,
|
TeamId: th.BasicTeam.Id,
|
||||||
CreatorId: th.BasicUser.Id,
|
CreatorId: th.BasicUser.Id,
|
||||||
}
|
}
|
||||||
@@ -1139,7 +1139,7 @@ func TestSearchChannels(t *testing.T) {
|
|||||||
|
|
||||||
found := false
|
found := false
|
||||||
for _, c := range channels {
|
for _, c := range channels {
|
||||||
require.Equal(t, model.CHANNEL_OPEN, c.Type, "should only return public channels")
|
require.Equal(t, model.ChannelTypeOpen, c.Type, "should only return public channels")
|
||||||
|
|
||||||
if c.Id == th.BasicChannel.Id {
|
if c.Id == th.BasicChannel.Id {
|
||||||
found = true
|
found = true
|
||||||
@@ -1180,7 +1180,7 @@ func TestSearchChannels(t *testing.T) {
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
// Remove list channels permission from the user
|
// Remove list channels permission from the user
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_LIST_TEAM_CHANNELS.Id, model.TEAM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionListTeamChannels.Id, model.TeamUserRoleId)
|
||||||
|
|
||||||
t.Run("Search for a BasicChannel, which the user is a member of", func(t *testing.T) {
|
t.Run("Search for a BasicChannel, which the user is a member of", func(t *testing.T) {
|
||||||
search.Term = th.BasicChannel.Name
|
search.Term = th.BasicChannel.Name
|
||||||
@@ -1223,7 +1223,7 @@ func TestSearchArchivedChannels(t *testing.T) {
|
|||||||
|
|
||||||
found := false
|
found := false
|
||||||
for _, c := range channels {
|
for _, c := range channels {
|
||||||
require.Equal(t, model.CHANNEL_OPEN, c.Type)
|
require.Equal(t, model.ChannelTypeOpen, c.Type)
|
||||||
|
|
||||||
if c.Id == th.BasicChannel.Id {
|
if c.Id == th.BasicChannel.Id {
|
||||||
found = true
|
found = true
|
||||||
@@ -1268,7 +1268,7 @@ func TestSearchArchivedChannels(t *testing.T) {
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
// Remove list channels permission from the user
|
// Remove list channels permission from the user
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_LIST_TEAM_CHANNELS.Id, model.TEAM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionListTeamChannels.Id, model.TeamUserRoleId)
|
||||||
|
|
||||||
t.Run("Search for a BasicDeletedChannel, which the user is a member of", func(t *testing.T) {
|
t.Run("Search for a BasicDeletedChannel, which the user is a member of", func(t *testing.T) {
|
||||||
search.Term = th.BasicDeletedChannel.Name
|
search.Term = th.BasicDeletedChannel.Name
|
||||||
@@ -1305,7 +1305,7 @@ func TestSearchAllChannels(t *testing.T) {
|
|||||||
openChannel, chanErr := th.SystemAdminClient.CreateChannel(&model.Channel{
|
openChannel, chanErr := th.SystemAdminClient.CreateChannel(&model.Channel{
|
||||||
DisplayName: "SearchAllChannels-FOOBARDISPLAYNAME",
|
DisplayName: "SearchAllChannels-FOOBARDISPLAYNAME",
|
||||||
Name: "whatever",
|
Name: "whatever",
|
||||||
Type: model.CHANNEL_OPEN,
|
Type: model.ChannelTypeOpen,
|
||||||
TeamId: th.BasicTeam.Id,
|
TeamId: th.BasicTeam.Id,
|
||||||
})
|
})
|
||||||
CheckNoError(t, chanErr)
|
CheckNoError(t, chanErr)
|
||||||
@@ -1313,7 +1313,7 @@ func TestSearchAllChannels(t *testing.T) {
|
|||||||
privateChannel, privErr := th.SystemAdminClient.CreateChannel(&model.Channel{
|
privateChannel, privErr := th.SystemAdminClient.CreateChannel(&model.Channel{
|
||||||
DisplayName: "SearchAllChannels-private1",
|
DisplayName: "SearchAllChannels-private1",
|
||||||
Name: "private1",
|
Name: "private1",
|
||||||
Type: model.CHANNEL_PRIVATE,
|
Type: model.ChannelTypePrivate,
|
||||||
TeamId: th.BasicTeam.Id,
|
TeamId: th.BasicTeam.Id,
|
||||||
})
|
})
|
||||||
CheckNoError(t, privErr)
|
CheckNoError(t, privErr)
|
||||||
@@ -1322,7 +1322,7 @@ func TestSearchAllChannels(t *testing.T) {
|
|||||||
groupConstrainedChannel, groupErr := th.SystemAdminClient.CreateChannel(&model.Channel{
|
groupConstrainedChannel, groupErr := th.SystemAdminClient.CreateChannel(&model.Channel{
|
||||||
DisplayName: "SearchAllChannels-groupConstrained-1",
|
DisplayName: "SearchAllChannels-groupConstrained-1",
|
||||||
Name: "groupconstrained1",
|
Name: "groupconstrained1",
|
||||||
Type: model.CHANNEL_PRIVATE,
|
Type: model.ChannelTypePrivate,
|
||||||
GroupConstrained: model.NewBool(true),
|
GroupConstrained: model.NewBool(true),
|
||||||
TeamId: team.Id,
|
TeamId: team.Id,
|
||||||
})
|
})
|
||||||
@@ -1613,7 +1613,7 @@ func TestDeleteChannel(t *testing.T) {
|
|||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
|
|
||||||
// default channel cannot be deleted.
|
// default channel cannot be deleted.
|
||||||
defaultChannel, _ := th.App.GetChannelByName(model.DEFAULT_CHANNEL, team.Id, false)
|
defaultChannel, _ := th.App.GetChannelByName(model.DefaultChannelName, team.Id, false)
|
||||||
pass, resp = client.DeleteChannel(defaultChannel.Id)
|
pass, resp = client.DeleteChannel(defaultChannel.Id)
|
||||||
CheckBadRequestStatus(t, resp)
|
CheckBadRequestStatus(t, resp)
|
||||||
require.False(t, pass, "should have failed")
|
require.False(t, pass, "should have failed")
|
||||||
@@ -1623,7 +1623,7 @@ func TestDeleteChannel(t *testing.T) {
|
|||||||
sdPublicChannel := &model.Channel{
|
sdPublicChannel := &model.Channel{
|
||||||
DisplayName: "dn_" + model.NewId(),
|
DisplayName: "dn_" + model.NewId(),
|
||||||
Name: GenerateTestChannelName(),
|
Name: GenerateTestChannelName(),
|
||||||
Type: model.CHANNEL_OPEN,
|
Type: model.ChannelTypeOpen,
|
||||||
TeamId: sdTeam.Id,
|
TeamId: sdTeam.Id,
|
||||||
}
|
}
|
||||||
sdPublicChannel, resp = c.CreateChannel(sdPublicChannel)
|
sdPublicChannel, resp = c.CreateChannel(sdPublicChannel)
|
||||||
@@ -1634,7 +1634,7 @@ func TestDeleteChannel(t *testing.T) {
|
|||||||
sdPrivateChannel := &model.Channel{
|
sdPrivateChannel := &model.Channel{
|
||||||
DisplayName: "dn_" + model.NewId(),
|
DisplayName: "dn_" + model.NewId(),
|
||||||
Name: GenerateTestChannelName(),
|
Name: GenerateTestChannelName(),
|
||||||
Type: model.CHANNEL_PRIVATE,
|
Type: model.ChannelTypePrivate,
|
||||||
TeamId: sdTeam.Id,
|
TeamId: sdTeam.Id,
|
||||||
}
|
}
|
||||||
sdPrivateChannel, resp = c.CreateChannel(sdPrivateChannel)
|
sdPrivateChannel, resp = c.CreateChannel(sdPrivateChannel)
|
||||||
@@ -1678,12 +1678,12 @@ func TestDeleteChannel2(t *testing.T) {
|
|||||||
th.RestoreDefaultRolePermissions(defaultRolePermissions)
|
th.RestoreDefaultRolePermissions(defaultRolePermissions)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_DELETE_PUBLIC_CHANNEL.Id, model.CHANNEL_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionDeletePublicChannel.Id, model.ChannelUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_DELETE_PRIVATE_CHANNEL.Id, model.CHANNEL_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionDeletePrivateChannel.Id, model.ChannelUserRoleId)
|
||||||
|
|
||||||
// channels created by SystemAdmin
|
// channels created by SystemAdmin
|
||||||
publicChannel6 := th.CreateChannelWithClient(th.SystemAdminClient, model.CHANNEL_OPEN)
|
publicChannel6 := th.CreateChannelWithClient(th.SystemAdminClient, model.ChannelTypeOpen)
|
||||||
privateChannel7 := th.CreateChannelWithClient(th.SystemAdminClient, model.CHANNEL_PRIVATE)
|
privateChannel7 := th.CreateChannelWithClient(th.SystemAdminClient, model.ChannelTypePrivate)
|
||||||
th.App.AddUserToChannel(user, publicChannel6, false)
|
th.App.AddUserToChannel(user, publicChannel6, false)
|
||||||
th.App.AddUserToChannel(user, privateChannel7, false)
|
th.App.AddUserToChannel(user, privateChannel7, false)
|
||||||
th.App.AddUserToChannel(user, privateChannel7, false)
|
th.App.AddUserToChannel(user, privateChannel7, false)
|
||||||
@@ -1696,14 +1696,14 @@ func TestDeleteChannel2(t *testing.T) {
|
|||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
|
|
||||||
// Restrict permissions to Channel Admins
|
// Restrict permissions to Channel Admins
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_DELETE_PUBLIC_CHANNEL.Id, model.CHANNEL_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionDeletePublicChannel.Id, model.ChannelUserRoleId)
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_DELETE_PRIVATE_CHANNEL.Id, model.CHANNEL_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionDeletePrivateChannel.Id, model.ChannelUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_DELETE_PUBLIC_CHANNEL.Id, model.CHANNEL_ADMIN_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionDeletePublicChannel.Id, model.ChannelAdminRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_DELETE_PRIVATE_CHANNEL.Id, model.CHANNEL_ADMIN_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionDeletePrivateChannel.Id, model.ChannelAdminRoleId)
|
||||||
|
|
||||||
// channels created by SystemAdmin
|
// channels created by SystemAdmin
|
||||||
publicChannel6 = th.CreateChannelWithClient(th.SystemAdminClient, model.CHANNEL_OPEN)
|
publicChannel6 = th.CreateChannelWithClient(th.SystemAdminClient, model.ChannelTypeOpen)
|
||||||
privateChannel7 = th.CreateChannelWithClient(th.SystemAdminClient, model.CHANNEL_PRIVATE)
|
privateChannel7 = th.CreateChannelWithClient(th.SystemAdminClient, model.ChannelTypePrivate)
|
||||||
th.App.AddUserToChannel(user, publicChannel6, false)
|
th.App.AddUserToChannel(user, publicChannel6, false)
|
||||||
th.App.AddUserToChannel(user, privateChannel7, false)
|
th.App.AddUserToChannel(user, privateChannel7, false)
|
||||||
th.App.AddUserToChannel(user, privateChannel7, false)
|
th.App.AddUserToChannel(user, privateChannel7, false)
|
||||||
@@ -1727,16 +1727,16 @@ func TestDeleteChannel2(t *testing.T) {
|
|||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
|
|
||||||
// Make sure team admins don't have permission to delete channels.
|
// Make sure team admins don't have permission to delete channels.
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_DELETE_PUBLIC_CHANNEL.Id, model.CHANNEL_ADMIN_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionDeletePublicChannel.Id, model.ChannelAdminRoleId)
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_DELETE_PRIVATE_CHANNEL.Id, model.CHANNEL_ADMIN_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionDeletePrivateChannel.Id, model.ChannelAdminRoleId)
|
||||||
|
|
||||||
// last member of a public channel should have required permission to delete
|
// last member of a public channel should have required permission to delete
|
||||||
publicChannel6 = th.CreateChannelWithClient(th.Client, model.CHANNEL_OPEN)
|
publicChannel6 = th.CreateChannelWithClient(th.Client, model.ChannelTypeOpen)
|
||||||
_, resp = Client.DeleteChannel(publicChannel6.Id)
|
_, resp = Client.DeleteChannel(publicChannel6.Id)
|
||||||
CheckForbiddenStatus(t, resp)
|
CheckForbiddenStatus(t, resp)
|
||||||
|
|
||||||
// last member of a private channel should not be able to delete it if they don't have required permissions
|
// last member of a private channel should not be able to delete it if they don't have required permissions
|
||||||
privateChannel7 = th.CreateChannelWithClient(th.Client, model.CHANNEL_PRIVATE)
|
privateChannel7 = th.CreateChannelWithClient(th.Client, model.ChannelTypePrivate)
|
||||||
_, resp = Client.DeleteChannel(privateChannel7.Id)
|
_, resp = Client.DeleteChannel(privateChannel7.Id)
|
||||||
CheckForbiddenStatus(t, resp)
|
CheckForbiddenStatus(t, resp)
|
||||||
}
|
}
|
||||||
@@ -1785,7 +1785,7 @@ func TestConvertChannelToPrivate(t *testing.T) {
|
|||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
Client := th.Client
|
Client := th.Client
|
||||||
|
|
||||||
defaultChannel, _ := th.App.GetChannelByName(model.DEFAULT_CHANNEL, th.BasicTeam.Id, false)
|
defaultChannel, _ := th.App.GetChannelByName(model.DefaultChannelName, th.BasicTeam.Id, false)
|
||||||
_, resp := Client.ConvertChannelToPrivate(defaultChannel.Id)
|
_, resp := Client.ConvertChannelToPrivate(defaultChannel.Id)
|
||||||
CheckForbiddenStatus(t, resp)
|
CheckForbiddenStatus(t, resp)
|
||||||
|
|
||||||
@@ -1798,16 +1798,16 @@ func TestConvertChannelToPrivate(t *testing.T) {
|
|||||||
CheckForbiddenStatus(t, resp)
|
CheckForbiddenStatus(t, resp)
|
||||||
|
|
||||||
th.LoginTeamAdmin()
|
th.LoginTeamAdmin()
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_CONVERT_PUBLIC_CHANNEL_TO_PRIVATE.Id, model.TEAM_ADMIN_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionConvertPublicChannelToPrivate.Id, model.TeamAdminRoleId)
|
||||||
|
|
||||||
_, resp = Client.ConvertChannelToPrivate(publicChannel.Id)
|
_, resp = Client.ConvertChannelToPrivate(publicChannel.Id)
|
||||||
CheckForbiddenStatus(t, resp)
|
CheckForbiddenStatus(t, resp)
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_CONVERT_PUBLIC_CHANNEL_TO_PRIVATE.Id, model.TEAM_ADMIN_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionConvertPublicChannelToPrivate.Id, model.TeamAdminRoleId)
|
||||||
|
|
||||||
rchannel, resp := Client.ConvertChannelToPrivate(publicChannel.Id)
|
rchannel, resp := Client.ConvertChannelToPrivate(publicChannel.Id)
|
||||||
CheckOKStatus(t, resp)
|
CheckOKStatus(t, resp)
|
||||||
require.Equal(t, model.CHANNEL_PRIVATE, rchannel.Type, "channel should be converted from public to private")
|
require.Equal(t, model.ChannelTypePrivate, rchannel.Type, "channel should be converted from public to private")
|
||||||
|
|
||||||
rchannel, resp = th.SystemAdminClient.ConvertChannelToPrivate(privateChannel.Id)
|
rchannel, resp = th.SystemAdminClient.ConvertChannelToPrivate(privateChannel.Id)
|
||||||
CheckBadRequestStatus(t, resp)
|
CheckBadRequestStatus(t, resp)
|
||||||
@@ -1824,14 +1824,14 @@ func TestConvertChannelToPrivate(t *testing.T) {
|
|||||||
publicChannel2 := th.CreatePublicChannel()
|
publicChannel2 := th.CreatePublicChannel()
|
||||||
rchannel, resp = th.SystemAdminClient.ConvertChannelToPrivate(publicChannel2.Id)
|
rchannel, resp = th.SystemAdminClient.ConvertChannelToPrivate(publicChannel2.Id)
|
||||||
CheckOKStatus(t, resp)
|
CheckOKStatus(t, resp)
|
||||||
require.Equal(t, model.CHANNEL_PRIVATE, rchannel.Type, "channel should be converted from public to private")
|
require.Equal(t, model.ChannelTypePrivate, rchannel.Type, "channel should be converted from public to private")
|
||||||
|
|
||||||
timeout := time.After(10 * time.Second)
|
timeout := time.After(10 * time.Second)
|
||||||
|
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case resp := <-WebSocketClient.EventChannel:
|
case resp := <-WebSocketClient.EventChannel:
|
||||||
if resp.EventType() == model.WEBSOCKET_EVENT_CHANNEL_CONVERTED && resp.GetData()["channel_id"].(string) == publicChannel2.Id {
|
if resp.EventType() == model.WebsocketEventChannelConverted && resp.GetData()["channel_id"].(string) == publicChannel2.Id {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
case <-timeout:
|
case <-timeout:
|
||||||
@@ -1845,7 +1845,7 @@ func TestUpdateChannelPrivacy(t *testing.T) {
|
|||||||
th := Setup(t).InitBasic()
|
th := Setup(t).InitBasic()
|
||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
|
|
||||||
defaultChannel, _ := th.App.GetChannelByName(model.DEFAULT_CHANNEL, th.BasicTeam.Id, false)
|
defaultChannel, _ := th.App.GetChannelByName(model.DefaultChannelName, th.BasicTeam.Id, false)
|
||||||
|
|
||||||
type testTable []struct {
|
type testTable []struct {
|
||||||
name string
|
name string
|
||||||
@@ -1858,9 +1858,9 @@ func TestUpdateChannelPrivacy(t *testing.T) {
|
|||||||
publicChannel := th.CreatePublicChannel()
|
publicChannel := th.CreatePublicChannel()
|
||||||
|
|
||||||
tt := testTable{
|
tt := testTable{
|
||||||
{"Updating default channel should fail with forbidden status if not logged in", defaultChannel, model.CHANNEL_OPEN},
|
{"Updating default channel should fail with forbidden status if not logged in", defaultChannel, model.ChannelTypeOpen},
|
||||||
{"Updating private channel should fail with forbidden status if not logged in", privateChannel, model.CHANNEL_PRIVATE},
|
{"Updating private channel should fail with forbidden status if not logged in", privateChannel, model.ChannelTypePrivate},
|
||||||
{"Updating public channel should fail with forbidden status if not logged in", publicChannel, model.CHANNEL_OPEN},
|
{"Updating public channel should fail with forbidden status if not logged in", publicChannel, model.ChannelTypeOpen},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, tc := range tt {
|
for _, tc := range tt {
|
||||||
@@ -1876,7 +1876,7 @@ func TestUpdateChannelPrivacy(t *testing.T) {
|
|||||||
publicChannel := th.CreatePublicChannel()
|
publicChannel := th.CreatePublicChannel()
|
||||||
|
|
||||||
tt := testTable{
|
tt := testTable{
|
||||||
{"Converting default channel to private should fail", defaultChannel, model.CHANNEL_PRIVATE},
|
{"Converting default channel to private should fail", defaultChannel, model.ChannelTypePrivate},
|
||||||
{"Updating privacy to an invalid setting should fail", publicChannel, "invalid"},
|
{"Updating privacy to an invalid setting should fail", publicChannel, "invalid"},
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1888,11 +1888,11 @@ func TestUpdateChannelPrivacy(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
tt = testTable{
|
tt = testTable{
|
||||||
{"Default channel should stay public", defaultChannel, model.CHANNEL_OPEN},
|
{"Default channel should stay public", defaultChannel, model.ChannelTypeOpen},
|
||||||
{"Public channel should stay public", publicChannel, model.CHANNEL_OPEN},
|
{"Public channel should stay public", publicChannel, model.ChannelTypeOpen},
|
||||||
{"Private channel should stay private", privateChannel, model.CHANNEL_PRIVATE},
|
{"Private channel should stay private", privateChannel, model.ChannelTypePrivate},
|
||||||
{"Public channel should convert to private", publicChannel, model.CHANNEL_PRIVATE},
|
{"Public channel should convert to private", publicChannel, model.ChannelTypePrivate},
|
||||||
{"Private channel should convert to public", privateChannel, model.CHANNEL_OPEN},
|
{"Private channel should convert to public", privateChannel, model.ChannelTypeOpen},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, tc := range tt {
|
for _, tc := range tt {
|
||||||
@@ -1913,20 +1913,20 @@ func TestUpdateChannelPrivacy(t *testing.T) {
|
|||||||
|
|
||||||
th.LoginTeamAdmin()
|
th.LoginTeamAdmin()
|
||||||
|
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_CONVERT_PUBLIC_CHANNEL_TO_PRIVATE.Id, model.TEAM_ADMIN_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionConvertPublicChannelToPrivate.Id, model.TeamAdminRoleId)
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_CONVERT_PRIVATE_CHANNEL_TO_PUBLIC.Id, model.TEAM_ADMIN_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionConvertPrivateChannelToPublic.Id, model.TeamAdminRoleId)
|
||||||
|
|
||||||
_, resp := th.Client.UpdateChannelPrivacy(publicChannel.Id, model.CHANNEL_PRIVATE)
|
_, resp := th.Client.UpdateChannelPrivacy(publicChannel.Id, model.ChannelTypePrivate)
|
||||||
CheckForbiddenStatus(t, resp)
|
CheckForbiddenStatus(t, resp)
|
||||||
_, resp = th.Client.UpdateChannelPrivacy(privateChannel.Id, model.CHANNEL_OPEN)
|
_, resp = th.Client.UpdateChannelPrivacy(privateChannel.Id, model.ChannelTypeOpen)
|
||||||
CheckForbiddenStatus(t, resp)
|
CheckForbiddenStatus(t, resp)
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_CONVERT_PUBLIC_CHANNEL_TO_PRIVATE.Id, model.TEAM_ADMIN_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionConvertPublicChannelToPrivate.Id, model.TeamAdminRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_CONVERT_PRIVATE_CHANNEL_TO_PUBLIC.Id, model.TEAM_ADMIN_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionConvertPrivateChannelToPublic.Id, model.TeamAdminRoleId)
|
||||||
|
|
||||||
_, resp = th.Client.UpdateChannelPrivacy(privateChannel.Id, model.CHANNEL_OPEN)
|
_, resp = th.Client.UpdateChannelPrivacy(privateChannel.Id, model.ChannelTypeOpen)
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
_, resp = th.Client.UpdateChannelPrivacy(publicChannel.Id, model.CHANNEL_PRIVATE)
|
_, resp = th.Client.UpdateChannelPrivacy(publicChannel.Id, model.ChannelTypePrivate)
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -2501,8 +2501,8 @@ func TestUpdateChannelMemberSchemeRoles(t *testing.T) {
|
|||||||
for waiting {
|
for waiting {
|
||||||
select {
|
select {
|
||||||
case event := <-WebSocketClient.EventChannel:
|
case event := <-WebSocketClient.EventChannel:
|
||||||
if event.Event == model.WEBSOCKET_EVENT_CHANNEL_MEMBER_UPDATED {
|
if event.Event == model.WebsocketEventChannelMemberUpdated {
|
||||||
require.Equal(t, model.WEBSOCKET_EVENT_CHANNEL_MEMBER_UPDATED, event.Event)
|
require.Equal(t, model.WebsocketEventChannelMemberUpdated, event.Event)
|
||||||
waiting = false
|
waiting = false
|
||||||
}
|
}
|
||||||
case <-timeout:
|
case <-timeout:
|
||||||
@@ -2608,8 +2608,8 @@ func TestUpdateChannelNotifyProps(t *testing.T) {
|
|||||||
Client := th.Client
|
Client := th.Client
|
||||||
|
|
||||||
props := map[string]string{}
|
props := map[string]string{}
|
||||||
props[model.DESKTOP_NOTIFY_PROP] = model.CHANNEL_NOTIFY_MENTION
|
props[model.DesktopNotifyProp] = model.ChannelNotifyMention
|
||||||
props[model.MARK_UNREAD_NOTIFY_PROP] = model.CHANNEL_MARK_UNREAD_MENTION
|
props[model.MarkUnreadNotifyProp] = model.ChannelMarkUnreadMention
|
||||||
|
|
||||||
pass, resp := Client.UpdateChannelNotifyProps(th.BasicChannel.Id, th.BasicUser.Id, props)
|
pass, resp := Client.UpdateChannelNotifyProps(th.BasicChannel.Id, th.BasicUser.Id, props)
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
@@ -2617,8 +2617,8 @@ func TestUpdateChannelNotifyProps(t *testing.T) {
|
|||||||
|
|
||||||
member, err := th.App.GetChannelMember(context.Background(), th.BasicChannel.Id, th.BasicUser.Id)
|
member, err := th.App.GetChannelMember(context.Background(), th.BasicChannel.Id, th.BasicUser.Id)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
require.Equal(t, model.CHANNEL_NOTIFY_MENTION, member.NotifyProps[model.DESKTOP_NOTIFY_PROP], "bad update")
|
require.Equal(t, model.ChannelNotifyMention, member.NotifyProps[model.DesktopNotifyProp], "bad update")
|
||||||
require.Equal(t, model.CHANNEL_MARK_UNREAD_MENTION, member.NotifyProps[model.MARK_UNREAD_NOTIFY_PROP], "bad update")
|
require.Equal(t, model.ChannelMarkUnreadMention, member.NotifyProps[model.MarkUnreadNotifyProp], "bad update")
|
||||||
|
|
||||||
_, resp = Client.UpdateChannelNotifyProps("junk", th.BasicUser.Id, props)
|
_, resp = Client.UpdateChannelNotifyProps("junk", th.BasicUser.Id, props)
|
||||||
CheckBadRequestStatus(t, resp)
|
CheckBadRequestStatus(t, resp)
|
||||||
@@ -2749,7 +2749,7 @@ func TestAddChannelMember(t *testing.T) {
|
|||||||
th.RestoreDefaultRolePermissions(defaultRolePermissions)
|
th.RestoreDefaultRolePermissions(defaultRolePermissions)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_PRIVATE_CHANNEL_MEMBERS.Id, model.CHANNEL_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManagePrivateChannelMembers.Id, model.ChannelUserRoleId)
|
||||||
|
|
||||||
// Check that a regular channel user can add other users.
|
// Check that a regular channel user can add other users.
|
||||||
Client.Login(user2.Username, user2.Password)
|
Client.Login(user2.Username, user2.Password)
|
||||||
@@ -2764,8 +2764,8 @@ func TestAddChannelMember(t *testing.T) {
|
|||||||
Client.Logout()
|
Client.Logout()
|
||||||
|
|
||||||
// Restrict the permission for adding users to Channel Admins
|
// Restrict the permission for adding users to Channel Admins
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_PRIVATE_CHANNEL_MEMBERS.Id, model.CHANNEL_ADMIN_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManagePrivateChannelMembers.Id, model.ChannelAdminRoleId)
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_MANAGE_PRIVATE_CHANNEL_MEMBERS.Id, model.CHANNEL_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionManagePrivateChannelMembers.Id, model.ChannelUserRoleId)
|
||||||
|
|
||||||
Client.Login(user2.Username, user2.Password)
|
Client.Login(user2.Username, user2.Password)
|
||||||
privateChannel = th.CreatePrivateChannel()
|
privateChannel = th.CreatePrivateChannel()
|
||||||
@@ -2837,31 +2837,31 @@ func TestAddChannelMemberAddMyself(t *testing.T) {
|
|||||||
ExpectedError string
|
ExpectedError string
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
"Add myself to a public channel with JOIN_PUBLIC_CHANNEL permission",
|
"Add myself to a public channel with JoinPublicChannel permission",
|
||||||
notMemberPublicChannel1,
|
notMemberPublicChannel1,
|
||||||
true,
|
true,
|
||||||
"",
|
"",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Try to add myself to a private channel with the JOIN_PUBLIC_CHANNEL permission",
|
"Try to add myself to a private channel with the JoinPublicChannel permission",
|
||||||
notMemberPrivateChannel,
|
notMemberPrivateChannel,
|
||||||
true,
|
true,
|
||||||
"api.context.permissions.app_error",
|
"api.context.permissions.app_error",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Try to add myself to a public channel without the JOIN_PUBLIC_CHANNEL permission",
|
"Try to add myself to a public channel without the JoinPublicChannel permission",
|
||||||
notMemberPublicChannel2,
|
notMemberPublicChannel2,
|
||||||
false,
|
false,
|
||||||
"api.context.permissions.app_error",
|
"api.context.permissions.app_error",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Add myself a public channel where I'm already a member, not having JOIN_PUBLIC_CHANNEL or MANAGE MEMBERS permission",
|
"Add myself a public channel where I'm already a member, not having JoinPublicChannel or ManageMembers permission",
|
||||||
memberPublicChannel,
|
memberPublicChannel,
|
||||||
false,
|
false,
|
||||||
"",
|
"",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Add myself a private channel where I'm already a member, not having JOIN_PUBLIC_CHANNEL or MANAGE MEMBERS permission",
|
"Add myself a private channel where I'm already a member, not having JoinPublicChannel or ManageMembers permission",
|
||||||
memberPrivateChannel,
|
memberPrivateChannel,
|
||||||
false,
|
false,
|
||||||
"",
|
"",
|
||||||
@@ -2878,7 +2878,7 @@ func TestAddChannelMemberAddMyself(t *testing.T) {
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
if !tc.WithJoinPublicPermission {
|
if !tc.WithJoinPublicPermission {
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_JOIN_PUBLIC_CHANNELS.Id, model.TEAM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionJoinPublicChannels.Id, model.TeamUserRoleId)
|
||||||
}
|
}
|
||||||
|
|
||||||
_, resp := Client.AddChannelMember(tc.Channel.Id, user.Id)
|
_, resp := Client.AddChannelMember(tc.Channel.Id, user.Id)
|
||||||
@@ -2930,7 +2930,7 @@ func TestRemoveChannelMember(t *testing.T) {
|
|||||||
_, err = th.App.AddUserToChannel(th.SystemAdminUser, th.BasicChannel2, false)
|
_, err = th.App.AddUserToChannel(th.SystemAdminUser, th.BasicChannel2, false)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
props := map[string]string{}
|
props := map[string]string{}
|
||||||
props[model.DESKTOP_NOTIFY_PROP] = model.CHANNEL_NOTIFY_ALL
|
props[model.DesktopNotifyProp] = model.ChannelNotifyAll
|
||||||
_, resp = th.SystemAdminClient.UpdateChannelNotifyProps(th.BasicChannel.Id, th.SystemAdminUser.Id, props)
|
_, resp = th.SystemAdminClient.UpdateChannelNotifyProps(th.BasicChannel.Id, th.SystemAdminUser.Id, props)
|
||||||
_, resp = th.SystemAdminClient.UpdateChannelNotifyProps(th.BasicChannel2.Id, th.SystemAdminUser.Id, props)
|
_, resp = th.SystemAdminClient.UpdateChannelNotifyProps(th.BasicChannel2.Id, th.SystemAdminUser.Id, props)
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
@@ -2944,7 +2944,7 @@ func TestRemoveChannelMember(t *testing.T) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
wsr := <-wsClient.EventChannel
|
wsr := <-wsClient.EventChannel
|
||||||
require.Equal(t, model.WEBSOCKET_EVENT_HELLO, wsr.EventType())
|
require.Equal(t, model.WebsocketEventHello, wsr.EventType())
|
||||||
|
|
||||||
// requirePost listens for websocket events and tries to find the post matching
|
// requirePost listens for websocket events and tries to find the post matching
|
||||||
// the expected post's channel and message.
|
// the expected post's channel and message.
|
||||||
@@ -3036,11 +3036,11 @@ func TestRemoveChannelMember(t *testing.T) {
|
|||||||
th.RestoreDefaultRolePermissions(defaultRolePermissions)
|
th.RestoreDefaultRolePermissions(defaultRolePermissions)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_PRIVATE_CHANNEL_MEMBERS.Id, model.CHANNEL_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManagePrivateChannelMembers.Id, model.ChannelUserRoleId)
|
||||||
|
|
||||||
th.TestForSystemAdminAndLocal(t, func(t *testing.T, client *model.Client4) {
|
th.TestForSystemAdminAndLocal(t, func(t *testing.T, client *model.Client4) {
|
||||||
// Check that a regular channel user can remove other users.
|
// Check that a regular channel user can remove other users.
|
||||||
privateChannel := th.CreateChannelWithClient(client, model.CHANNEL_PRIVATE)
|
privateChannel := th.CreateChannelWithClient(client, model.ChannelTypePrivate)
|
||||||
_, resp = client.AddChannelMember(privateChannel.Id, user1.Id)
|
_, resp = client.AddChannelMember(privateChannel.Id, user1.Id)
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
_, resp = client.AddChannelMember(privateChannel.Id, user2.Id)
|
_, resp = client.AddChannelMember(privateChannel.Id, user2.Id)
|
||||||
@@ -3051,10 +3051,10 @@ func TestRemoveChannelMember(t *testing.T) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
// Restrict the permission for adding users to Channel Admins
|
// Restrict the permission for adding users to Channel Admins
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_PRIVATE_CHANNEL_MEMBERS.Id, model.CHANNEL_ADMIN_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManagePrivateChannelMembers.Id, model.ChannelAdminRoleId)
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_MANAGE_PRIVATE_CHANNEL_MEMBERS.Id, model.CHANNEL_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionManagePrivateChannelMembers.Id, model.ChannelUserRoleId)
|
||||||
|
|
||||||
privateChannel := th.CreateChannelWithClient(th.SystemAdminClient, model.CHANNEL_PRIVATE)
|
privateChannel := th.CreateChannelWithClient(th.SystemAdminClient, model.ChannelTypePrivate)
|
||||||
_, resp = th.SystemAdminClient.AddChannelMember(privateChannel.Id, user1.Id)
|
_, resp = th.SystemAdminClient.AddChannelMember(privateChannel.Id, user1.Id)
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
_, resp = th.SystemAdminClient.AddChannelMember(privateChannel.Id, user2.Id)
|
_, resp = th.SystemAdminClient.AddChannelMember(privateChannel.Id, user2.Id)
|
||||||
@@ -3122,13 +3122,13 @@ func TestAutocompleteChannels(t *testing.T) {
|
|||||||
ptown, _ := th.Client.CreateChannel(&model.Channel{
|
ptown, _ := th.Client.CreateChannel(&model.Channel{
|
||||||
DisplayName: "Town",
|
DisplayName: "Town",
|
||||||
Name: "town",
|
Name: "town",
|
||||||
Type: model.CHANNEL_PRIVATE,
|
Type: model.ChannelTypePrivate,
|
||||||
TeamId: th.BasicTeam.Id,
|
TeamId: th.BasicTeam.Id,
|
||||||
})
|
})
|
||||||
tower, _ := th.Client.CreateChannel(&model.Channel{
|
tower, _ := th.Client.CreateChannel(&model.Channel{
|
||||||
DisplayName: "Tower",
|
DisplayName: "Tower",
|
||||||
Name: "tower",
|
Name: "tower",
|
||||||
Type: model.CHANNEL_OPEN,
|
Type: model.ChannelTypeOpen,
|
||||||
TeamId: th.BasicTeam.Id,
|
TeamId: th.BasicTeam.Id,
|
||||||
})
|
})
|
||||||
utils.EnableDebugLogForTest()
|
utils.EnableDebugLogForTest()
|
||||||
@@ -3204,7 +3204,7 @@ func TestAutocompleteChannelsForSearch(t *testing.T) {
|
|||||||
ptown, _ := th.SystemAdminClient.CreateChannel(&model.Channel{
|
ptown, _ := th.SystemAdminClient.CreateChannel(&model.Channel{
|
||||||
DisplayName: "Town",
|
DisplayName: "Town",
|
||||||
Name: "town",
|
Name: "town",
|
||||||
Type: model.CHANNEL_PRIVATE,
|
Type: model.ChannelTypePrivate,
|
||||||
TeamId: th.BasicTeam.Id,
|
TeamId: th.BasicTeam.Id,
|
||||||
})
|
})
|
||||||
defer func() {
|
defer func() {
|
||||||
@@ -3213,7 +3213,7 @@ func TestAutocompleteChannelsForSearch(t *testing.T) {
|
|||||||
mypriv, _ := th.Client.CreateChannel(&model.Channel{
|
mypriv, _ := th.Client.CreateChannel(&model.Channel{
|
||||||
DisplayName: "My private town",
|
DisplayName: "My private town",
|
||||||
Name: "townpriv",
|
Name: "townpriv",
|
||||||
Type: model.CHANNEL_PRIVATE,
|
Type: model.ChannelTypePrivate,
|
||||||
TeamId: th.BasicTeam.Id,
|
TeamId: th.BasicTeam.Id,
|
||||||
})
|
})
|
||||||
defer func() {
|
defer func() {
|
||||||
@@ -3334,7 +3334,7 @@ func TestAutocompleteChannelsForSearchGuestUsers(t *testing.T) {
|
|||||||
town, _ := th.SystemAdminClient.CreateChannel(&model.Channel{
|
town, _ := th.SystemAdminClient.CreateChannel(&model.Channel{
|
||||||
DisplayName: "Town",
|
DisplayName: "Town",
|
||||||
Name: "town",
|
Name: "town",
|
||||||
Type: model.CHANNEL_OPEN,
|
Type: model.ChannelTypeOpen,
|
||||||
TeamId: th.BasicTeam.Id,
|
TeamId: th.BasicTeam.Id,
|
||||||
})
|
})
|
||||||
defer func() {
|
defer func() {
|
||||||
@@ -3346,7 +3346,7 @@ func TestAutocompleteChannelsForSearchGuestUsers(t *testing.T) {
|
|||||||
mypriv, _ := th.SystemAdminClient.CreateChannel(&model.Channel{
|
mypriv, _ := th.SystemAdminClient.CreateChannel(&model.Channel{
|
||||||
DisplayName: "My private town",
|
DisplayName: "My private town",
|
||||||
Name: "townpriv",
|
Name: "townpriv",
|
||||||
Type: model.CHANNEL_PRIVATE,
|
Type: model.ChannelTypePrivate,
|
||||||
TeamId: th.BasicTeam.Id,
|
TeamId: th.BasicTeam.Id,
|
||||||
})
|
})
|
||||||
defer func() {
|
defer func() {
|
||||||
@@ -3446,14 +3446,14 @@ func TestUpdateChannelScheme(t *testing.T) {
|
|||||||
InviteId: "inviteid0",
|
InviteId: "inviteid0",
|
||||||
Name: "z-z-" + model.NewId() + "a",
|
Name: "z-z-" + model.NewId() + "a",
|
||||||
Email: "success+" + model.NewId() + "@simulator.amazonses.com",
|
Email: "success+" + model.NewId() + "@simulator.amazonses.com",
|
||||||
Type: model.TEAM_OPEN,
|
Type: model.TeamOpen,
|
||||||
})
|
})
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
|
|
||||||
channel, resp := th.SystemAdminClient.CreateChannel(&model.Channel{
|
channel, resp := th.SystemAdminClient.CreateChannel(&model.Channel{
|
||||||
DisplayName: "Name",
|
DisplayName: "Name",
|
||||||
Name: "z-z-" + model.NewId() + "a",
|
Name: "z-z-" + model.NewId() + "a",
|
||||||
Type: model.CHANNEL_OPEN,
|
Type: model.ChannelTypeOpen,
|
||||||
TeamId: team.Id,
|
TeamId: team.Id,
|
||||||
})
|
})
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
@@ -3462,7 +3462,7 @@ func TestUpdateChannelScheme(t *testing.T) {
|
|||||||
DisplayName: "DisplayName",
|
DisplayName: "DisplayName",
|
||||||
Name: model.NewId(),
|
Name: model.NewId(),
|
||||||
Description: "Some description",
|
Description: "Some description",
|
||||||
Scope: model.SCHEME_SCOPE_CHANNEL,
|
Scope: model.SchemeScopeChannel,
|
||||||
})
|
})
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
|
|
||||||
@@ -3470,7 +3470,7 @@ func TestUpdateChannelScheme(t *testing.T) {
|
|||||||
DisplayName: "DisplayName",
|
DisplayName: "DisplayName",
|
||||||
Name: model.NewId(),
|
Name: model.NewId(),
|
||||||
Description: "Some description",
|
Description: "Some description",
|
||||||
Scope: model.SCHEME_SCOPE_TEAM,
|
Scope: model.SchemeScopeTeam,
|
||||||
})
|
})
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
|
|
||||||
@@ -3689,13 +3689,13 @@ func TestGetChannelModerations(t *testing.T) {
|
|||||||
_, err := th.App.UpdateTeamScheme(team)
|
_, err := th.App.UpdateTeamScheme(team)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
|
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_CREATE_POST.Id, scheme.DefaultChannelGuestRole)
|
th.RemovePermissionFromRole(model.PermissionCreatePost.Id, scheme.DefaultChannelGuestRole)
|
||||||
defer th.AddPermissionToRole(model.PERMISSION_CREATE_POST.Id, scheme.DefaultChannelGuestRole)
|
defer th.AddPermissionToRole(model.PermissionCreatePost.Id, scheme.DefaultChannelGuestRole)
|
||||||
|
|
||||||
moderations, res := th.SystemAdminClient.GetChannelModerations(channel.Id, "")
|
moderations, res := th.SystemAdminClient.GetChannelModerations(channel.Id, "")
|
||||||
require.Nil(t, res.Error)
|
require.Nil(t, res.Error)
|
||||||
for _, moderation := range moderations {
|
for _, moderation := range moderations {
|
||||||
if moderation.Name == model.PERMISSION_CREATE_POST.Id {
|
if moderation.Name == model.PermissionCreatePost.Id {
|
||||||
require.Equal(t, moderation.Roles.Members.Value, true)
|
require.Equal(t, moderation.Roles.Members.Value, true)
|
||||||
require.Equal(t, moderation.Roles.Members.Enabled, true)
|
require.Equal(t, moderation.Roles.Members.Enabled, true)
|
||||||
require.Equal(t, moderation.Roles.Guests.Value, false)
|
require.Equal(t, moderation.Roles.Guests.Value, false)
|
||||||
@@ -3710,13 +3710,13 @@ func TestGetChannelModerations(t *testing.T) {
|
|||||||
_, err := th.App.UpdateChannelScheme(channel)
|
_, err := th.App.UpdateChannelScheme(channel)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
|
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_CREATE_POST.Id, scheme.DefaultChannelGuestRole)
|
th.RemovePermissionFromRole(model.PermissionCreatePost.Id, scheme.DefaultChannelGuestRole)
|
||||||
defer th.AddPermissionToRole(model.PERMISSION_CREATE_POST.Id, scheme.DefaultChannelGuestRole)
|
defer th.AddPermissionToRole(model.PermissionCreatePost.Id, scheme.DefaultChannelGuestRole)
|
||||||
|
|
||||||
moderations, res := th.SystemAdminClient.GetChannelModerations(channel.Id, "")
|
moderations, res := th.SystemAdminClient.GetChannelModerations(channel.Id, "")
|
||||||
require.Nil(t, res.Error)
|
require.Nil(t, res.Error)
|
||||||
for _, moderation := range moderations {
|
for _, moderation := range moderations {
|
||||||
if moderation.Name == model.PERMISSION_CREATE_POST.Id {
|
if moderation.Name == model.PermissionCreatePost.Id {
|
||||||
require.Equal(t, moderation.Roles.Members.Value, true)
|
require.Equal(t, moderation.Roles.Members.Value, true)
|
||||||
require.Equal(t, moderation.Roles.Members.Enabled, true)
|
require.Equal(t, moderation.Roles.Members.Enabled, true)
|
||||||
require.Equal(t, moderation.Roles.Guests.Value, false)
|
require.Equal(t, moderation.Roles.Guests.Value, false)
|
||||||
@@ -3734,16 +3734,16 @@ func TestGetChannelModerations(t *testing.T) {
|
|||||||
channel.SchemeId = &scheme.Id
|
channel.SchemeId = &scheme.Id
|
||||||
th.App.UpdateChannelScheme(channel)
|
th.App.UpdateChannelScheme(channel)
|
||||||
|
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_CREATE_POST.Id, scheme.DefaultChannelGuestRole)
|
th.RemovePermissionFromRole(model.PermissionCreatePost.Id, scheme.DefaultChannelGuestRole)
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_CREATE_POST.Id, teamScheme.DefaultChannelGuestRole)
|
th.RemovePermissionFromRole(model.PermissionCreatePost.Id, teamScheme.DefaultChannelGuestRole)
|
||||||
|
|
||||||
defer th.AddPermissionToRole(model.PERMISSION_CREATE_POST.Id, scheme.DefaultChannelGuestRole)
|
defer th.AddPermissionToRole(model.PermissionCreatePost.Id, scheme.DefaultChannelGuestRole)
|
||||||
defer th.AddPermissionToRole(model.PERMISSION_CREATE_POST.Id, teamScheme.DefaultChannelGuestRole)
|
defer th.AddPermissionToRole(model.PermissionCreatePost.Id, teamScheme.DefaultChannelGuestRole)
|
||||||
|
|
||||||
moderations, res := th.SystemAdminClient.GetChannelModerations(channel.Id, "")
|
moderations, res := th.SystemAdminClient.GetChannelModerations(channel.Id, "")
|
||||||
require.Nil(t, res.Error)
|
require.Nil(t, res.Error)
|
||||||
for _, moderation := range moderations {
|
for _, moderation := range moderations {
|
||||||
if moderation.Name == model.PERMISSION_CREATE_POST.Id {
|
if moderation.Name == model.PermissionCreatePost.Id {
|
||||||
require.Equal(t, moderation.Roles.Members.Value, true)
|
require.Equal(t, moderation.Roles.Members.Value, true)
|
||||||
require.Equal(t, moderation.Roles.Members.Enabled, true)
|
require.Equal(t, moderation.Roles.Members.Enabled, true)
|
||||||
require.Equal(t, moderation.Roles.Guests.Value, false)
|
require.Equal(t, moderation.Roles.Guests.Value, false)
|
||||||
@@ -3758,8 +3758,8 @@ func TestGetChannelModerations(t *testing.T) {
|
|||||||
_, err := th.App.UpdateTeamScheme(team)
|
_, err := th.App.UpdateTeamScheme(team)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
|
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_MANAGE_PUBLIC_CHANNEL_MEMBERS.Id, scheme.DefaultChannelUserRole)
|
th.RemovePermissionFromRole(model.PermissionManagePublicChannelMembers.Id, scheme.DefaultChannelUserRole)
|
||||||
defer th.AddPermissionToRole(model.PERMISSION_CREATE_POST.Id, scheme.DefaultChannelUserRole)
|
defer th.AddPermissionToRole(model.PermissionCreatePost.Id, scheme.DefaultChannelUserRole)
|
||||||
|
|
||||||
// public channel does not have the permission
|
// public channel does not have the permission
|
||||||
moderations, res := th.SystemAdminClient.GetChannelModerations(channel.Id, "")
|
moderations, res := th.SystemAdminClient.GetChannelModerations(channel.Id, "")
|
||||||
@@ -4237,7 +4237,7 @@ func TestViewChannelWithoutCollapsedThreads(t *testing.T) {
|
|||||||
defer os.Unsetenv("MM_FEATUREFLAGS_COLLAPSEDTHREADS")
|
defer os.Unsetenv("MM_FEATUREFLAGS_COLLAPSEDTHREADS")
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) {
|
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||||
*cfg.ServiceSettings.ThreadAutoFollow = true
|
*cfg.ServiceSettings.ThreadAutoFollow = true
|
||||||
*cfg.ServiceSettings.CollapsedThreads = model.COLLAPSED_THREADS_DEFAULT_ON
|
*cfg.ServiceSettings.CollapsedThreads = model.CollapsedThreadsDefaultOn
|
||||||
})
|
})
|
||||||
|
|
||||||
Client := th.Client
|
Client := th.Client
|
||||||
|
|||||||
@@ -51,8 +51,8 @@ func getSubscription(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_READ_BILLING) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleReadBilling) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_READ_BILLING)
|
c.SetPermissionError(model.PermissionSysconsoleReadBilling)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -77,8 +77,8 @@ func changeSubscription(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_WRITE_BILLING) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleWriteBilling) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_WRITE_BILLING)
|
c.SetPermissionError(model.PermissionSysconsoleWriteBilling)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -133,8 +133,8 @@ func getCloudProducts(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_READ_BILLING) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleReadBilling) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_READ_BILLING)
|
c.SetPermissionError(model.PermissionSysconsoleReadBilling)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -159,8 +159,8 @@ func getCloudCustomer(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_READ_BILLING) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleReadBilling) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_READ_BILLING)
|
c.SetPermissionError(model.PermissionSysconsoleReadBilling)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -185,8 +185,8 @@ func updateCloudCustomer(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_WRITE_BILLING) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleWriteBilling) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_WRITE_BILLING)
|
c.SetPermissionError(model.PermissionSysconsoleWriteBilling)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -223,8 +223,8 @@ func updateCloudCustomerAddress(c *Context, w http.ResponseWriter, r *http.Reque
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_WRITE_BILLING) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleWriteBilling) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_WRITE_BILLING)
|
c.SetPermissionError(model.PermissionSysconsoleWriteBilling)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -261,8 +261,8 @@ func createCustomerPayment(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_WRITE_BILLING) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleWriteBilling) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_WRITE_BILLING)
|
c.SetPermissionError(model.PermissionSysconsoleWriteBilling)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -292,8 +292,8 @@ func confirmCustomerPayment(c *Context, w http.ResponseWriter, r *http.Request)
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_WRITE_BILLING) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleWriteBilling) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_WRITE_BILLING)
|
c.SetPermissionError(model.PermissionSysconsoleWriteBilling)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -329,8 +329,8 @@ func getInvoicesForSubscription(c *Context, w http.ResponseWriter, r *http.Reque
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_READ_BILLING) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleReadBilling) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_READ_BILLING)
|
c.SetPermissionError(model.PermissionSysconsoleReadBilling)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -360,8 +360,8 @@ func getSubscriptionInvoicePDF(c *Context, w http.ResponseWriter, r *http.Reques
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_READ_BILLING) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleReadBilling) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_READ_BILLING)
|
c.SetPermissionError(model.PermissionSysconsoleReadBilling)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,8 +14,8 @@ func (api *API) InitCluster() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func getClusterStatus(c *Context, w http.ResponseWriter, r *http.Request) {
|
func getClusterStatus(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_READ_ENVIRONMENT_HIGH_AVAILABILITY) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleReadEnvironmentHighAvailability) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_READ_ENVIRONMENT_HIGH_AVAILABILITY)
|
c.SetPermissionError(model.PermissionSysconsoleReadEnvironmentHighAvailability)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -38,8 +38,8 @@ func createCommand(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
c.LogAudit("attempt")
|
c.LogAudit("attempt")
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), cmd.TeamId, model.PERMISSION_MANAGE_SLASH_COMMANDS) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), cmd.TeamId, model.PermissionManageSlashCommands) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SLASH_COMMANDS)
|
c.SetPermissionError(model.PermissionManageSlashCommands)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -88,7 +88,7 @@ func updateCommand(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), oldCmd.TeamId, model.PERMISSION_MANAGE_SLASH_COMMANDS) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), oldCmd.TeamId, model.PermissionManageSlashCommands) {
|
||||||
c.LogAudit("fail - inappropriate permissions")
|
c.LogAudit("fail - inappropriate permissions")
|
||||||
// here we return Not_found instead of a permissions error so we don't leak the existence of
|
// here we return Not_found instead of a permissions error so we don't leak the existence of
|
||||||
// a command to someone without permissions for the team it belongs to.
|
// a command to someone without permissions for the team it belongs to.
|
||||||
@@ -96,9 +96,9 @@ func updateCommand(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.AppContext.Session().UserId != oldCmd.CreatorId && !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), oldCmd.TeamId, model.PERMISSION_MANAGE_OTHERS_SLASH_COMMANDS) {
|
if c.AppContext.Session().UserId != oldCmd.CreatorId && !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), oldCmd.TeamId, model.PermissionManageOthersSlashCommands) {
|
||||||
c.LogAudit("fail - inappropriate permissions")
|
c.LogAudit("fail - inappropriate permissions")
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_OTHERS_SLASH_COMMANDS)
|
c.SetPermissionError(model.PermissionManageOthersSlashCommands)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -137,9 +137,9 @@ func moveCommand(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
auditRec.AddMeta("team", newTeam)
|
auditRec.AddMeta("team", newTeam)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), newTeam.Id, model.PERMISSION_MANAGE_SLASH_COMMANDS) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), newTeam.Id, model.PermissionManageSlashCommands) {
|
||||||
c.LogAudit("fail - inappropriate permissions")
|
c.LogAudit("fail - inappropriate permissions")
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SLASH_COMMANDS)
|
c.SetPermissionError(model.PermissionManageSlashCommands)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -150,7 +150,7 @@ func moveCommand(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
auditRec.AddMeta("command", cmd)
|
auditRec.AddMeta("command", cmd)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), cmd.TeamId, model.PERMISSION_MANAGE_SLASH_COMMANDS) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), cmd.TeamId, model.PermissionManageSlashCommands) {
|
||||||
c.LogAudit("fail - inappropriate permissions")
|
c.LogAudit("fail - inappropriate permissions")
|
||||||
// here we return Not_found instead of a permissions error so we don't leak the existence of
|
// here we return Not_found instead of a permissions error so we don't leak the existence of
|
||||||
// a command to someone without permissions for the team it belongs to.
|
// a command to someone without permissions for the team it belongs to.
|
||||||
@@ -186,7 +186,7 @@ func deleteCommand(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
auditRec.AddMeta("command", cmd)
|
auditRec.AddMeta("command", cmd)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), cmd.TeamId, model.PERMISSION_MANAGE_SLASH_COMMANDS) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), cmd.TeamId, model.PermissionManageSlashCommands) {
|
||||||
c.LogAudit("fail - inappropriate permissions")
|
c.LogAudit("fail - inappropriate permissions")
|
||||||
// here we return Not_found instead of a permissions error so we don't leak the existence of
|
// here we return Not_found instead of a permissions error so we don't leak the existence of
|
||||||
// a command to someone without permissions for the team it belongs to.
|
// a command to someone without permissions for the team it belongs to.
|
||||||
@@ -194,9 +194,9 @@ func deleteCommand(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.AppContext.Session().UserId != cmd.CreatorId && !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), cmd.TeamId, model.PERMISSION_MANAGE_OTHERS_SLASH_COMMANDS) {
|
if c.AppContext.Session().UserId != cmd.CreatorId && !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), cmd.TeamId, model.PermissionManageOthersSlashCommands) {
|
||||||
c.LogAudit("fail - inappropriate permissions")
|
c.LogAudit("fail - inappropriate permissions")
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_OTHERS_SLASH_COMMANDS)
|
c.SetPermissionError(model.PermissionManageOthersSlashCommands)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -221,16 +221,16 @@ func listCommands(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), teamId, model.PERMISSION_VIEW_TEAM) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), teamId, model.PermissionViewTeam) {
|
||||||
c.SetPermissionError(model.PERMISSION_VIEW_TEAM)
|
c.SetPermissionError(model.PermissionViewTeam)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var commands []*model.Command
|
var commands []*model.Command
|
||||||
var err *model.AppError
|
var err *model.AppError
|
||||||
if customOnly {
|
if customOnly {
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), teamId, model.PERMISSION_MANAGE_SLASH_COMMANDS) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), teamId, model.PermissionManageSlashCommands) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SLASH_COMMANDS)
|
c.SetPermissionError(model.PermissionManageSlashCommands)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
commands, err = c.App.ListTeamCommands(teamId)
|
commands, err = c.App.ListTeamCommands(teamId)
|
||||||
@@ -240,7 +240,7 @@ func listCommands(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
//User with no permission should see only system commands
|
//User with no permission should see only system commands
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), teamId, model.PERMISSION_MANAGE_SLASH_COMMANDS) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), teamId, model.PermissionManageSlashCommands) {
|
||||||
commands, err = c.App.ListAutocompleteCommands(teamId, c.AppContext.T)
|
commands, err = c.App.ListAutocompleteCommands(teamId, c.AppContext.T)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.Err = err
|
c.Err = err
|
||||||
@@ -273,13 +273,13 @@ func getCommand(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
// check for permissions to view this command; must have perms to view team and
|
// check for permissions to view this command; must have perms to view team and
|
||||||
// PERMISSION_MANAGE_SLASH_COMMANDS for the team the command belongs to.
|
// PERMISSION_MANAGE_SLASH_COMMANDS for the team the command belongs to.
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), cmd.TeamId, model.PERMISSION_VIEW_TEAM) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), cmd.TeamId, model.PermissionViewTeam) {
|
||||||
// here we return Not_found instead of a permissions error so we don't leak the existence of
|
// here we return Not_found instead of a permissions error so we don't leak the existence of
|
||||||
// a command to someone without permissions for the team it belongs to.
|
// a command to someone without permissions for the team it belongs to.
|
||||||
c.SetCommandNotFoundError()
|
c.SetCommandNotFoundError()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), cmd.TeamId, model.PERMISSION_MANAGE_SLASH_COMMANDS) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), cmd.TeamId, model.PermissionManageSlashCommands) {
|
||||||
// again, return not_found to ensure id existence does not leak.
|
// again, return not_found to ensure id existence does not leak.
|
||||||
c.SetCommandNotFoundError()
|
c.SetCommandNotFoundError()
|
||||||
return
|
return
|
||||||
@@ -304,8 +304,8 @@ func executeCommand(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
auditRec.AddMeta("commandargs", commandArgs)
|
auditRec.AddMeta("commandargs", commandArgs)
|
||||||
|
|
||||||
// checks that user is a member of the specified channel, and that they have permission to use slash commands in it
|
// checks that user is a member of the specified channel, and that they have permission to use slash commands in it
|
||||||
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), commandArgs.ChannelId, model.PERMISSION_USE_SLASH_COMMANDS) {
|
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), commandArgs.ChannelId, model.PermissionUseSlashCommands) {
|
||||||
c.SetPermissionError(model.PERMISSION_USE_SLASH_COMMANDS)
|
c.SetPermissionError(model.PermissionUseSlashCommands)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -315,7 +315,7 @@ func executeCommand(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if channel.Type != model.CHANNEL_DIRECT && channel.Type != model.CHANNEL_GROUP {
|
if channel.Type != model.ChannelTypeDirect && channel.Type != model.ChannelTypeGroup {
|
||||||
// if this isn't a DM or GM, the team id is implicitly taken from the channel so that slash commands created on
|
// if this isn't a DM or GM, the team id is implicitly taken from the channel so that slash commands created on
|
||||||
// some other team can't be run against this one
|
// some other team can't be run against this one
|
||||||
commandArgs.TeamId = channel.TeamId
|
commandArgs.TeamId = channel.TeamId
|
||||||
@@ -323,8 +323,8 @@ func executeCommand(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
// if the slash command was used in a DM or GM, ensure that the user is a member of the specified team, so that
|
// if the slash command was used in a DM or GM, ensure that the user is a member of the specified team, so that
|
||||||
// they can't just execute slash commands against arbitrary teams
|
// they can't just execute slash commands against arbitrary teams
|
||||||
if c.AppContext.Session().GetTeamByTeamId(commandArgs.TeamId) == nil {
|
if c.AppContext.Session().GetTeamByTeamId(commandArgs.TeamId) == nil {
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_USE_SLASH_COMMANDS) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionUseSlashCommands) {
|
||||||
c.SetPermissionError(model.PERMISSION_USE_SLASH_COMMANDS)
|
c.SetPermissionError(model.PermissionUseSlashCommands)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -353,8 +353,8 @@ func listAutocompleteCommands(c *Context, w http.ResponseWriter, r *http.Request
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PERMISSION_VIEW_TEAM) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PermissionViewTeam) {
|
||||||
c.SetPermissionError(model.PERMISSION_VIEW_TEAM)
|
c.SetPermissionError(model.PermissionViewTeam)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -372,14 +372,14 @@ func listCommandAutocompleteSuggestions(c *Context, w http.ResponseWriter, r *ht
|
|||||||
if c.Err != nil {
|
if c.Err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PERMISSION_VIEW_TEAM) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PermissionViewTeam) {
|
||||||
c.SetPermissionError(model.PERMISSION_VIEW_TEAM)
|
c.SetPermissionError(model.PermissionViewTeam)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
roleId := model.SYSTEM_USER_ROLE_ID
|
roleId := model.SystemUserRoleId
|
||||||
if c.IsSystemAdmin() {
|
if c.IsSystemAdmin() {
|
||||||
roleId = model.SYSTEM_ADMIN_ROLE_ID
|
roleId = model.SystemAdminRoleId
|
||||||
}
|
}
|
||||||
|
|
||||||
query := r.URL.Query()
|
query := r.URL.Query()
|
||||||
@@ -431,7 +431,7 @@ func regenCommandToken(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
auditRec.AddMeta("command", cmd)
|
auditRec.AddMeta("command", cmd)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), cmd.TeamId, model.PERMISSION_MANAGE_SLASH_COMMANDS) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), cmd.TeamId, model.PermissionManageSlashCommands) {
|
||||||
c.LogAudit("fail - inappropriate permissions")
|
c.LogAudit("fail - inappropriate permissions")
|
||||||
// here we return Not_found instead of a permissions error so we don't leak the existence of
|
// here we return Not_found instead of a permissions error so we don't leak the existence of
|
||||||
// a command to someone without permissions for the team it belongs to.
|
// a command to someone without permissions for the team it belongs to.
|
||||||
@@ -439,9 +439,9 @@ func regenCommandToken(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.AppContext.Session().UserId != cmd.CreatorId && !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), cmd.TeamId, model.PERMISSION_MANAGE_OTHERS_SLASH_COMMANDS) {
|
if c.AppContext.Session().UserId != cmd.CreatorId && !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), cmd.TeamId, model.PermissionManageOthersSlashCommands) {
|
||||||
c.LogAudit("fail - inappropriate permissions")
|
c.LogAudit("fail - inappropriate permissions")
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_OTHERS_SLASH_COMMANDS)
|
c.SetPermissionError(model.PermissionManageOthersSlashCommands)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ func TestHelpCommand(t *testing.T) {
|
|||||||
|
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.SupportSettings.HelpLink = "" })
|
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.SupportSettings.HelpLink = "" })
|
||||||
rs1, _ := Client.ExecuteCommand(channel.Id, "/help ")
|
rs1, _ := Client.ExecuteCommand(channel.Id, "/help ")
|
||||||
assert.Equal(t, rs1.GotoLocation, model.SUPPORT_SETTINGS_DEFAULT_HELP_LINK, "failed to default help link")
|
assert.Equal(t, rs1.GotoLocation, model.SupportSettingsDefaultHelpLink, "failed to default help link")
|
||||||
|
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) {
|
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||||
*cfg.SupportSettings.HelpLink = "https://docs.mattermost.com/guides/user.html"
|
*cfg.SupportSettings.HelpLink = "https://docs.mattermost.com/guides/user.html"
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ func TestCreateCommand(t *testing.T) {
|
|||||||
CreatorId: th.BasicUser.Id,
|
CreatorId: th.BasicUser.Id,
|
||||||
TeamId: th.BasicTeam.Id,
|
TeamId: th.BasicTeam.Id,
|
||||||
URL: "http://nowhere.com",
|
URL: "http://nowhere.com",
|
||||||
Method: model.COMMAND_METHOD_POST,
|
Method: model.CommandMethodPost,
|
||||||
Trigger: "trigger"}
|
Trigger: "trigger"}
|
||||||
|
|
||||||
_, resp := Client.CreateCommand(newCmd)
|
_, resp := Client.CreateCommand(newCmd)
|
||||||
@@ -90,7 +90,7 @@ func TestUpdateCommand(t *testing.T) {
|
|||||||
CreatorId: user.Id,
|
CreatorId: user.Id,
|
||||||
TeamId: team.Id,
|
TeamId: team.Id,
|
||||||
URL: "http://nowhere.com",
|
URL: "http://nowhere.com",
|
||||||
Method: model.COMMAND_METHOD_POST,
|
Method: model.CommandMethodPost,
|
||||||
Trigger: "trigger1",
|
Trigger: "trigger1",
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -100,7 +100,7 @@ func TestUpdateCommand(t *testing.T) {
|
|||||||
CreatorId: GenerateTestId(),
|
CreatorId: GenerateTestId(),
|
||||||
TeamId: team.Id,
|
TeamId: team.Id,
|
||||||
URL: "http://nowhere.com/change",
|
URL: "http://nowhere.com/change",
|
||||||
Method: model.COMMAND_METHOD_GET,
|
Method: model.CommandMethodGet,
|
||||||
Trigger: "trigger2",
|
Trigger: "trigger2",
|
||||||
Id: cmd1.Id,
|
Id: cmd1.Id,
|
||||||
Token: "tokenchange",
|
Token: "tokenchange",
|
||||||
@@ -165,7 +165,7 @@ func TestMoveCommand(t *testing.T) {
|
|||||||
CreatorId: user.Id,
|
CreatorId: user.Id,
|
||||||
TeamId: team.Id,
|
TeamId: team.Id,
|
||||||
URL: "http://nowhere.com",
|
URL: "http://nowhere.com",
|
||||||
Method: model.COMMAND_METHOD_POST,
|
Method: model.CommandMethodPost,
|
||||||
Trigger: "trigger1",
|
Trigger: "trigger1",
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -192,7 +192,7 @@ func TestMoveCommand(t *testing.T) {
|
|||||||
CreatorId: user.Id,
|
CreatorId: user.Id,
|
||||||
TeamId: team.Id,
|
TeamId: team.Id,
|
||||||
URL: "http://nowhere.com",
|
URL: "http://nowhere.com",
|
||||||
Method: model.COMMAND_METHOD_POST,
|
Method: model.CommandMethodPost,
|
||||||
Trigger: "trigger2",
|
Trigger: "trigger2",
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -222,7 +222,7 @@ func TestDeleteCommand(t *testing.T) {
|
|||||||
CreatorId: user.Id,
|
CreatorId: user.Id,
|
||||||
TeamId: team.Id,
|
TeamId: team.Id,
|
||||||
URL: "http://nowhere.com",
|
URL: "http://nowhere.com",
|
||||||
Method: model.COMMAND_METHOD_POST,
|
Method: model.CommandMethodPost,
|
||||||
Trigger: "trigger1",
|
Trigger: "trigger1",
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -250,7 +250,7 @@ func TestDeleteCommand(t *testing.T) {
|
|||||||
CreatorId: user.Id,
|
CreatorId: user.Id,
|
||||||
TeamId: team.Id,
|
TeamId: team.Id,
|
||||||
URL: "http://nowhere.com",
|
URL: "http://nowhere.com",
|
||||||
Method: model.COMMAND_METHOD_POST,
|
Method: model.CommandMethodPost,
|
||||||
Trigger: "trigger2",
|
Trigger: "trigger2",
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -279,7 +279,7 @@ func TestListCommands(t *testing.T) {
|
|||||||
CreatorId: th.BasicUser.Id,
|
CreatorId: th.BasicUser.Id,
|
||||||
TeamId: th.BasicTeam.Id,
|
TeamId: th.BasicTeam.Id,
|
||||||
URL: "http://nowhere.com",
|
URL: "http://nowhere.com",
|
||||||
Method: model.COMMAND_METHOD_POST,
|
Method: model.CommandMethodPost,
|
||||||
Trigger: "custom_command"}
|
Trigger: "custom_command"}
|
||||||
|
|
||||||
_, resp := th.SystemAdminClient.CreateCommand(newCmd)
|
_, resp := th.SystemAdminClient.CreateCommand(newCmd)
|
||||||
@@ -363,7 +363,7 @@ func TestListAutocompleteCommands(t *testing.T) {
|
|||||||
CreatorId: th.BasicUser.Id,
|
CreatorId: th.BasicUser.Id,
|
||||||
TeamId: th.BasicTeam.Id,
|
TeamId: th.BasicTeam.Id,
|
||||||
URL: "http://nowhere.com",
|
URL: "http://nowhere.com",
|
||||||
Method: model.COMMAND_METHOD_POST,
|
Method: model.CommandMethodPost,
|
||||||
Trigger: "custom_command"}
|
Trigger: "custom_command"}
|
||||||
|
|
||||||
_, resp := th.SystemAdminClient.CreateCommand(newCmd)
|
_, resp := th.SystemAdminClient.CreateCommand(newCmd)
|
||||||
@@ -430,7 +430,7 @@ func TestListCommandAutocompleteSuggestions(t *testing.T) {
|
|||||||
CreatorId: th.BasicUser.Id,
|
CreatorId: th.BasicUser.Id,
|
||||||
TeamId: th.BasicTeam.Id,
|
TeamId: th.BasicTeam.Id,
|
||||||
URL: "http://nowhere.com",
|
URL: "http://nowhere.com",
|
||||||
Method: model.COMMAND_METHOD_POST,
|
Method: model.CommandMethodPost,
|
||||||
Trigger: "custom_command"}
|
Trigger: "custom_command"}
|
||||||
|
|
||||||
_, resp := th.SystemAdminClient.CreateCommand(newCmd)
|
_, resp := th.SystemAdminClient.CreateCommand(newCmd)
|
||||||
@@ -525,7 +525,7 @@ func TestGetCommand(t *testing.T) {
|
|||||||
CreatorId: th.BasicUser.Id,
|
CreatorId: th.BasicUser.Id,
|
||||||
TeamId: th.BasicTeam.Id,
|
TeamId: th.BasicTeam.Id,
|
||||||
URL: "http://nowhere.com",
|
URL: "http://nowhere.com",
|
||||||
Method: model.COMMAND_METHOD_POST,
|
Method: model.CommandMethodPost,
|
||||||
Trigger: "roger"}
|
Trigger: "roger"}
|
||||||
|
|
||||||
newCmd, resp := th.SystemAdminClient.CreateCommand(newCmd)
|
newCmd, resp := th.SystemAdminClient.CreateCommand(newCmd)
|
||||||
@@ -585,7 +585,7 @@ func TestRegenToken(t *testing.T) {
|
|||||||
CreatorId: th.BasicUser.Id,
|
CreatorId: th.BasicUser.Id,
|
||||||
TeamId: th.BasicTeam.Id,
|
TeamId: th.BasicTeam.Id,
|
||||||
URL: "http://nowhere.com",
|
URL: "http://nowhere.com",
|
||||||
Method: model.COMMAND_METHOD_POST,
|
Method: model.CommandMethodPost,
|
||||||
Trigger: "trigger"}
|
Trigger: "trigger"}
|
||||||
|
|
||||||
createdCmd, resp := th.SystemAdminClient.CreateCommand(newCmd)
|
createdCmd, resp := th.SystemAdminClient.CreateCommand(newCmd)
|
||||||
@@ -629,7 +629,7 @@ func TestExecuteInvalidCommand(t *testing.T) {
|
|||||||
CreatorId: th.BasicUser.Id,
|
CreatorId: th.BasicUser.Id,
|
||||||
TeamId: th.BasicTeam.Id,
|
TeamId: th.BasicTeam.Id,
|
||||||
URL: ts.URL,
|
URL: ts.URL,
|
||||||
Method: model.COMMAND_METHOD_GET,
|
Method: model.CommandMethodGet,
|
||||||
Trigger: "getcommand",
|
Trigger: "getcommand",
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -683,7 +683,7 @@ func TestExecuteGetCommand(t *testing.T) {
|
|||||||
token := model.NewId()
|
token := model.NewId()
|
||||||
expectedCommandResponse := &model.CommandResponse{
|
expectedCommandResponse := &model.CommandResponse{
|
||||||
Text: "test get command response",
|
Text: "test get command response",
|
||||||
ResponseType: model.COMMAND_RESPONSE_TYPE_IN_CHANNEL,
|
ResponseType: model.CommandResponseTypeInChannel,
|
||||||
Type: "custom_test",
|
Type: "custom_test",
|
||||||
Props: map[string]interface{}{"someprop": "somevalue"},
|
Props: map[string]interface{}{"someprop": "somevalue"},
|
||||||
}
|
}
|
||||||
@@ -707,7 +707,7 @@ func TestExecuteGetCommand(t *testing.T) {
|
|||||||
CreatorId: th.BasicUser.Id,
|
CreatorId: th.BasicUser.Id,
|
||||||
TeamId: th.BasicTeam.Id,
|
TeamId: th.BasicTeam.Id,
|
||||||
URL: ts.URL + "/?cmd=ourCommand",
|
URL: ts.URL + "/?cmd=ourCommand",
|
||||||
Method: model.COMMAND_METHOD_GET,
|
Method: model.CommandMethodGet,
|
||||||
Trigger: "getcommand",
|
Trigger: "getcommand",
|
||||||
Token: token,
|
Token: token,
|
||||||
}
|
}
|
||||||
@@ -743,7 +743,7 @@ func TestExecutePostCommand(t *testing.T) {
|
|||||||
token := model.NewId()
|
token := model.NewId()
|
||||||
expectedCommandResponse := &model.CommandResponse{
|
expectedCommandResponse := &model.CommandResponse{
|
||||||
Text: "test post command response",
|
Text: "test post command response",
|
||||||
ResponseType: model.COMMAND_RESPONSE_TYPE_IN_CHANNEL,
|
ResponseType: model.CommandResponseTypeInChannel,
|
||||||
Type: "custom_test",
|
Type: "custom_test",
|
||||||
Props: map[string]interface{}{"someprop": "somevalue"},
|
Props: map[string]interface{}{"someprop": "somevalue"},
|
||||||
}
|
}
|
||||||
@@ -765,7 +765,7 @@ func TestExecutePostCommand(t *testing.T) {
|
|||||||
CreatorId: th.BasicUser.Id,
|
CreatorId: th.BasicUser.Id,
|
||||||
TeamId: th.BasicTeam.Id,
|
TeamId: th.BasicTeam.Id,
|
||||||
URL: ts.URL,
|
URL: ts.URL,
|
||||||
Method: model.COMMAND_METHOD_POST,
|
Method: model.CommandMethodPost,
|
||||||
Trigger: "postcommand",
|
Trigger: "postcommand",
|
||||||
Token: token,
|
Token: token,
|
||||||
}
|
}
|
||||||
@@ -802,7 +802,7 @@ func TestExecuteCommandAgainstChannelOnAnotherTeam(t *testing.T) {
|
|||||||
|
|
||||||
expectedCommandResponse := &model.CommandResponse{
|
expectedCommandResponse := &model.CommandResponse{
|
||||||
Text: "test post command response",
|
Text: "test post command response",
|
||||||
ResponseType: model.COMMAND_RESPONSE_TYPE_IN_CHANNEL,
|
ResponseType: model.CommandResponseTypeInChannel,
|
||||||
Type: "custom_test",
|
Type: "custom_test",
|
||||||
Props: map[string]interface{}{"someprop": "somevalue"},
|
Props: map[string]interface{}{"someprop": "somevalue"},
|
||||||
}
|
}
|
||||||
@@ -819,7 +819,7 @@ func TestExecuteCommandAgainstChannelOnAnotherTeam(t *testing.T) {
|
|||||||
CreatorId: th.BasicUser.Id,
|
CreatorId: th.BasicUser.Id,
|
||||||
TeamId: team2.Id,
|
TeamId: team2.Id,
|
||||||
URL: ts.URL,
|
URL: ts.URL,
|
||||||
Method: model.COMMAND_METHOD_POST,
|
Method: model.CommandMethodPost,
|
||||||
Trigger: "postcommand",
|
Trigger: "postcommand",
|
||||||
}
|
}
|
||||||
_, err := th.App.CreateCommand(postCmd)
|
_, err := th.App.CreateCommand(postCmd)
|
||||||
@@ -851,7 +851,7 @@ func TestExecuteCommandAgainstChannelUserIsNotIn(t *testing.T) {
|
|||||||
|
|
||||||
expectedCommandResponse := &model.CommandResponse{
|
expectedCommandResponse := &model.CommandResponse{
|
||||||
Text: "test post command response",
|
Text: "test post command response",
|
||||||
ResponseType: model.COMMAND_RESPONSE_TYPE_IN_CHANNEL,
|
ResponseType: model.CommandResponseTypeInChannel,
|
||||||
Type: "custom_test",
|
Type: "custom_test",
|
||||||
Props: map[string]interface{}{"someprop": "somevalue"},
|
Props: map[string]interface{}{"someprop": "somevalue"},
|
||||||
}
|
}
|
||||||
@@ -868,14 +868,14 @@ func TestExecuteCommandAgainstChannelUserIsNotIn(t *testing.T) {
|
|||||||
CreatorId: th.BasicUser.Id,
|
CreatorId: th.BasicUser.Id,
|
||||||
TeamId: team2.Id,
|
TeamId: team2.Id,
|
||||||
URL: ts.URL,
|
URL: ts.URL,
|
||||||
Method: model.COMMAND_METHOD_POST,
|
Method: model.CommandMethodPost,
|
||||||
Trigger: "postcommand",
|
Trigger: "postcommand",
|
||||||
}
|
}
|
||||||
_, err := th.App.CreateCommand(postCmd)
|
_, err := th.App.CreateCommand(postCmd)
|
||||||
require.Nil(t, err, "failed to create post command")
|
require.Nil(t, err, "failed to create post command")
|
||||||
|
|
||||||
// make a channel on that team, ensuring that our test user isn't in it
|
// make a channel on that team, ensuring that our test user isn't in it
|
||||||
channel2 := th.CreateChannelWithClientAndTeam(client, model.CHANNEL_OPEN, team2.Id)
|
channel2 := th.CreateChannelWithClientAndTeam(client, model.ChannelTypeOpen, team2.Id)
|
||||||
success, _ := client.RemoveUserFromChannel(channel2.Id, th.BasicUser.Id)
|
success, _ := client.RemoveUserFromChannel(channel2.Id, th.BasicUser.Id)
|
||||||
require.True(t, success, "Failed to remove user from channel")
|
require.True(t, success, "Failed to remove user from channel")
|
||||||
|
|
||||||
@@ -907,7 +907,7 @@ func TestExecuteCommandInDirectMessageChannel(t *testing.T) {
|
|||||||
|
|
||||||
expectedCommandResponse := &model.CommandResponse{
|
expectedCommandResponse := &model.CommandResponse{
|
||||||
Text: "test post command response",
|
Text: "test post command response",
|
||||||
ResponseType: model.COMMAND_RESPONSE_TYPE_IN_CHANNEL,
|
ResponseType: model.CommandResponseTypeInChannel,
|
||||||
Type: "custom_test",
|
Type: "custom_test",
|
||||||
Props: map[string]interface{}{"someprop": "somevalue"},
|
Props: map[string]interface{}{"someprop": "somevalue"},
|
||||||
}
|
}
|
||||||
@@ -924,7 +924,7 @@ func TestExecuteCommandInDirectMessageChannel(t *testing.T) {
|
|||||||
CreatorId: th.BasicUser.Id,
|
CreatorId: th.BasicUser.Id,
|
||||||
TeamId: team2.Id,
|
TeamId: team2.Id,
|
||||||
URL: ts.URL,
|
URL: ts.URL,
|
||||||
Method: model.COMMAND_METHOD_POST,
|
Method: model.CommandMethodPost,
|
||||||
Trigger: "postcommand",
|
Trigger: "postcommand",
|
||||||
}
|
}
|
||||||
_, err := th.App.CreateCommand(postCmd)
|
_, err := th.App.CreateCommand(postCmd)
|
||||||
@@ -966,7 +966,7 @@ func TestExecuteCommandInTeamUserIsNotOn(t *testing.T) {
|
|||||||
|
|
||||||
expectedCommandResponse := &model.CommandResponse{
|
expectedCommandResponse := &model.CommandResponse{
|
||||||
Text: "test post command response",
|
Text: "test post command response",
|
||||||
ResponseType: model.COMMAND_RESPONSE_TYPE_IN_CHANNEL,
|
ResponseType: model.CommandResponseTypeInChannel,
|
||||||
Type: "custom_test",
|
Type: "custom_test",
|
||||||
Props: map[string]interface{}{"someprop": "somevalue"},
|
Props: map[string]interface{}{"someprop": "somevalue"},
|
||||||
}
|
}
|
||||||
@@ -986,7 +986,7 @@ func TestExecuteCommandInTeamUserIsNotOn(t *testing.T) {
|
|||||||
CreatorId: th.BasicUser.Id,
|
CreatorId: th.BasicUser.Id,
|
||||||
TeamId: team2.Id,
|
TeamId: team2.Id,
|
||||||
URL: ts.URL,
|
URL: ts.URL,
|
||||||
Method: model.COMMAND_METHOD_POST,
|
Method: model.CommandMethodPost,
|
||||||
Trigger: "postcommand",
|
Trigger: "postcommand",
|
||||||
}
|
}
|
||||||
_, err := th.App.CreateCommand(postCmd)
|
_, err := th.App.CreateCommand(postCmd)
|
||||||
|
|||||||
@@ -101,14 +101,14 @@ func testJoinCommands(t *testing.T, alias string) {
|
|||||||
team := th.BasicTeam
|
team := th.BasicTeam
|
||||||
user2 := th.BasicUser2
|
user2 := th.BasicUser2
|
||||||
|
|
||||||
channel0 := &model.Channel{DisplayName: "00", Name: "00" + model.NewId() + "a", Type: model.CHANNEL_OPEN, TeamId: team.Id}
|
channel0 := &model.Channel{DisplayName: "00", Name: "00" + model.NewId() + "a", Type: model.ChannelTypeOpen, TeamId: team.Id}
|
||||||
channel0 = Client.Must(Client.CreateChannel(channel0)).(*model.Channel)
|
channel0 = Client.Must(Client.CreateChannel(channel0)).(*model.Channel)
|
||||||
|
|
||||||
channel1 := &model.Channel{DisplayName: "AA", Name: "aa" + model.NewId() + "a", Type: model.CHANNEL_OPEN, TeamId: team.Id}
|
channel1 := &model.Channel{DisplayName: "AA", Name: "aa" + model.NewId() + "a", Type: model.ChannelTypeOpen, TeamId: team.Id}
|
||||||
channel1 = Client.Must(Client.CreateChannel(channel1)).(*model.Channel)
|
channel1 = Client.Must(Client.CreateChannel(channel1)).(*model.Channel)
|
||||||
Client.Must(Client.RemoveUserFromChannel(channel1.Id, th.BasicUser.Id))
|
Client.Must(Client.RemoveUserFromChannel(channel1.Id, th.BasicUser.Id))
|
||||||
|
|
||||||
channel2 := &model.Channel{DisplayName: "BB", Name: "bb" + model.NewId() + "a", Type: model.CHANNEL_OPEN, TeamId: team.Id}
|
channel2 := &model.Channel{DisplayName: "BB", Name: "bb" + model.NewId() + "a", Type: model.ChannelTypeOpen, TeamId: team.Id}
|
||||||
channel2 = Client.Must(Client.CreateChannel(channel2)).(*model.Channel)
|
channel2 = Client.Must(Client.CreateChannel(channel2)).(*model.Channel)
|
||||||
Client.Must(Client.RemoveUserFromChannel(channel2.Id, th.BasicUser.Id))
|
Client.Must(Client.RemoveUserFromChannel(channel2.Id, th.BasicUser.Id))
|
||||||
|
|
||||||
@@ -131,7 +131,7 @@ func testJoinCommands(t *testing.T, alias string) {
|
|||||||
require.True(t, found, "did not join channel")
|
require.True(t, found, "did not join channel")
|
||||||
|
|
||||||
// test case insensitively
|
// test case insensitively
|
||||||
channel4 := &model.Channel{DisplayName: "BB", Name: "bb" + model.NewId() + "a", Type: model.CHANNEL_OPEN, TeamId: team.Id}
|
channel4 := &model.Channel{DisplayName: "BB", Name: "bb" + model.NewId() + "a", Type: model.ChannelTypeOpen, TeamId: team.Id}
|
||||||
channel4 = Client.Must(Client.CreateChannel(channel4)).(*model.Channel)
|
channel4 = Client.Must(Client.CreateChannel(channel4)).(*model.Channel)
|
||||||
Client.Must(Client.RemoveUserFromChannel(channel4.Id, th.BasicUser.Id))
|
Client.Must(Client.RemoveUserFromChannel(channel4.Id, th.BasicUser.Id))
|
||||||
rs7 := Client.Must(Client.ExecuteCommand(channel0.Id, "/"+alias+" "+strings.ToUpper(channel4.Name))).(*model.CommandResponse)
|
rs7 := Client.Must(Client.ExecuteCommand(channel0.Id, "/"+alias+" "+strings.ToUpper(channel4.Name))).(*model.CommandResponse)
|
||||||
@@ -250,11 +250,11 @@ func TestLeaveCommands(t *testing.T) {
|
|||||||
team := th.BasicTeam
|
team := th.BasicTeam
|
||||||
user2 := th.BasicUser2
|
user2 := th.BasicUser2
|
||||||
|
|
||||||
channel1 := &model.Channel{DisplayName: "AA", Name: "aa" + model.NewId() + "a", Type: model.CHANNEL_OPEN, TeamId: team.Id}
|
channel1 := &model.Channel{DisplayName: "AA", Name: "aa" + model.NewId() + "a", Type: model.ChannelTypeOpen, TeamId: team.Id}
|
||||||
channel1 = Client.Must(Client.CreateChannel(channel1)).(*model.Channel)
|
channel1 = Client.Must(Client.CreateChannel(channel1)).(*model.Channel)
|
||||||
Client.Must(Client.AddChannelMember(channel1.Id, th.BasicUser.Id))
|
Client.Must(Client.AddChannelMember(channel1.Id, th.BasicUser.Id))
|
||||||
|
|
||||||
channel2 := &model.Channel{DisplayName: "BB", Name: "bb" + model.NewId() + "a", Type: model.CHANNEL_PRIVATE, TeamId: team.Id}
|
channel2 := &model.Channel{DisplayName: "BB", Name: "bb" + model.NewId() + "a", Type: model.ChannelTypePrivate, TeamId: team.Id}
|
||||||
channel2 = Client.Must(Client.CreateChannel(channel2)).(*model.Channel)
|
channel2 = Client.Must(Client.CreateChannel(channel2)).(*model.Channel)
|
||||||
Client.Must(Client.AddChannelMember(channel2.Id, th.BasicUser.Id))
|
Client.Must(Client.AddChannelMember(channel2.Id, th.BasicUser.Id))
|
||||||
Client.Must(Client.AddChannelMember(channel2.Id, user2.Id))
|
Client.Must(Client.AddChannelMember(channel2.Id, user2.Id))
|
||||||
@@ -262,10 +262,10 @@ func TestLeaveCommands(t *testing.T) {
|
|||||||
channel3 := Client.Must(Client.CreateDirectChannel(th.BasicUser.Id, user2.Id)).(*model.Channel)
|
channel3 := Client.Must(Client.CreateDirectChannel(th.BasicUser.Id, user2.Id)).(*model.Channel)
|
||||||
|
|
||||||
rs1 := Client.Must(Client.ExecuteCommand(channel1.Id, "/leave")).(*model.CommandResponse)
|
rs1 := Client.Must(Client.ExecuteCommand(channel1.Id, "/leave")).(*model.CommandResponse)
|
||||||
require.True(t, strings.HasSuffix(rs1.GotoLocation, "/"+team.Name+"/channels/"+model.DEFAULT_CHANNEL), "failed to leave open channel 1")
|
require.True(t, strings.HasSuffix(rs1.GotoLocation, "/"+team.Name+"/channels/"+model.DefaultChannelName), "failed to leave open channel 1")
|
||||||
|
|
||||||
rs2 := Client.Must(Client.ExecuteCommand(channel2.Id, "/leave")).(*model.CommandResponse)
|
rs2 := Client.Must(Client.ExecuteCommand(channel2.Id, "/leave")).(*model.CommandResponse)
|
||||||
require.True(t, strings.HasSuffix(rs2.GotoLocation, "/"+team.Name+"/channels/"+model.DEFAULT_CHANNEL), "failed to leave private channel 1")
|
require.True(t, strings.HasSuffix(rs2.GotoLocation, "/"+team.Name+"/channels/"+model.DefaultChannelName), "failed to leave private channel 1")
|
||||||
|
|
||||||
_, err := Client.ExecuteCommand(channel3.Id, "/leave")
|
_, err := Client.ExecuteCommand(channel3.Id, "/leave")
|
||||||
require.NotNil(t, err, "should fail leaving direct channel")
|
require.NotNil(t, err, "should fail leaving direct channel")
|
||||||
@@ -281,7 +281,7 @@ func TestLeaveCommands(t *testing.T) {
|
|||||||
require.False(t, found, "did not leave right channels")
|
require.False(t, found, "did not leave right channels")
|
||||||
|
|
||||||
for _, c := range cdata {
|
for _, c := range cdata {
|
||||||
if c.Name == model.DEFAULT_CHANNEL {
|
if c.Name == model.DefaultChannelName {
|
||||||
_, err := Client.RemoveUserFromChannel(c.Id, th.BasicUser.Id)
|
_, err := Client.RemoveUserFromChannel(c.Id, th.BasicUser.Id)
|
||||||
require.NotNil(t, err, "should have errored on leaving default channel")
|
require.NotNil(t, err, "should have errored on leaving default channel")
|
||||||
break
|
break
|
||||||
@@ -314,7 +314,7 @@ func TestMeCommand(t *testing.T) {
|
|||||||
require.Len(t, p1.Order, 2, "Command failed to send")
|
require.Len(t, p1.Order, 2, "Command failed to send")
|
||||||
|
|
||||||
pt := p1.Posts[p1.Order[0]].Type
|
pt := p1.Posts[p1.Order[0]].Type
|
||||||
require.Equal(t, model.POST_ME, pt, "invalid post type")
|
require.Equal(t, model.PostTypeMe, pt, "invalid post type")
|
||||||
|
|
||||||
msg := p1.Posts[p1.Order[0]].Message
|
msg := p1.Posts[p1.Order[0]].Message
|
||||||
want := "*hello*"
|
want := "*hello*"
|
||||||
|
|||||||
@@ -30,8 +30,8 @@ func createComplianceReport(c *Context, w http.ResponseWriter, r *http.Request)
|
|||||||
auditRec := c.MakeAuditRecord("createComplianceReport", audit.Fail)
|
auditRec := c.MakeAuditRecord("createComplianceReport", audit.Fail)
|
||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_CREATE_COMPLIANCE_EXPORT_JOB) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionCreateComplianceExportJob) {
|
||||||
c.SetPermissionError(model.PERMISSION_CREATE_COMPLIANCE_EXPORT_JOB)
|
c.SetPermissionError(model.PermissionCreateComplianceExportJob)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -53,8 +53,8 @@ func createComplianceReport(c *Context, w http.ResponseWriter, r *http.Request)
|
|||||||
}
|
}
|
||||||
|
|
||||||
func getComplianceReports(c *Context, w http.ResponseWriter, r *http.Request) {
|
func getComplianceReports(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_READ_COMPLIANCE_EXPORT_JOB) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionReadComplianceExportJob) {
|
||||||
c.SetPermissionError(model.PERMISSION_READ_COMPLIANCE_EXPORT_JOB)
|
c.SetPermissionError(model.PermissionReadComplianceExportJob)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -80,8 +80,8 @@ func getComplianceReport(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
auditRec := c.MakeAuditRecord("getComplianceReport", audit.Fail)
|
auditRec := c.MakeAuditRecord("getComplianceReport", audit.Fail)
|
||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_READ_COMPLIANCE_EXPORT_JOB) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionReadComplianceExportJob) {
|
||||||
c.SetPermissionError(model.PERMISSION_READ_COMPLIANCE_EXPORT_JOB)
|
c.SetPermissionError(model.PermissionReadComplianceExportJob)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -108,8 +108,8 @@ func downloadComplianceReport(c *Context, w http.ResponseWriter, r *http.Request
|
|||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
auditRec.AddMeta("compliance_id", c.Params.ReportId)
|
auditRec.AddMeta("compliance_id", c.Params.ReportId)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_DOWNLOAD_COMPLIANCE_EXPORT_RESULT) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionDownloadComplianceExportResult) {
|
||||||
c.SetPermissionError(model.PERMISSION_DOWNLOAD_COMPLIANCE_EXPORT_RESULT)
|
c.SetPermissionError(model.PermissionDownloadComplianceExportResult)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -78,8 +78,8 @@ func configReload(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
auditRec := c.MakeAuditRecord("configReload", audit.Fail)
|
auditRec := c.MakeAuditRecord("configReload", audit.Fail)
|
||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_RELOAD_CONFIG) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionReloadConfig) {
|
||||||
c.SetPermissionError(model.PERMISSION_RELOAD_CONFIG)
|
c.SetPermissionError(model.PermissionReloadConfig)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -307,7 +307,7 @@ func makeFilterConfigByPermission(accessType filterType) func(c *Context, struct
|
|||||||
// If there are no access tag values and the role has manage_system, no need to continue
|
// If there are no access tag values and the role has manage_system, no need to continue
|
||||||
// checking permissions.
|
// checking permissions.
|
||||||
if len(tagPermissions) == 0 {
|
if len(tagPermissions) == 0 {
|
||||||
if c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
if c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -355,7 +355,7 @@ func makeFilterConfigByPermission(accessType filterType) func(c *Context, struct
|
|||||||
}
|
}
|
||||||
|
|
||||||
// with manage_system, default to allow, otherwise default not-allow
|
// with manage_system, default to allow, otherwise default not-allow
|
||||||
return c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM)
|
return c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -377,8 +377,8 @@ func migrateConfig(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
auditRec.AddMeta("to", to)
|
auditRec.AddMeta("to", to)
|
||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM)
|
c.SetPermissionError(model.PermissionManageSystem)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -34,26 +34,26 @@ func TestGetConfig(t *testing.T) {
|
|||||||
|
|
||||||
require.NotEqual(t, "", cfg.TeamSettings.SiteName)
|
require.NotEqual(t, "", cfg.TeamSettings.SiteName)
|
||||||
|
|
||||||
if *cfg.LdapSettings.BindPassword != model.FAKE_SETTING && *cfg.LdapSettings.BindPassword != "" {
|
if *cfg.LdapSettings.BindPassword != model.FakeSetting && *cfg.LdapSettings.BindPassword != "" {
|
||||||
require.FailNow(t, "did not sanitize properly")
|
require.FailNow(t, "did not sanitize properly")
|
||||||
}
|
}
|
||||||
require.Equal(t, model.FAKE_SETTING, *cfg.FileSettings.PublicLinkSalt, "did not sanitize properly")
|
require.Equal(t, model.FakeSetting, *cfg.FileSettings.PublicLinkSalt, "did not sanitize properly")
|
||||||
|
|
||||||
if *cfg.FileSettings.AmazonS3SecretAccessKey != model.FAKE_SETTING && *cfg.FileSettings.AmazonS3SecretAccessKey != "" {
|
if *cfg.FileSettings.AmazonS3SecretAccessKey != model.FakeSetting && *cfg.FileSettings.AmazonS3SecretAccessKey != "" {
|
||||||
require.FailNow(t, "did not sanitize properly")
|
require.FailNow(t, "did not sanitize properly")
|
||||||
}
|
}
|
||||||
if *cfg.EmailSettings.SMTPPassword != model.FAKE_SETTING && *cfg.EmailSettings.SMTPPassword != "" {
|
if *cfg.EmailSettings.SMTPPassword != model.FakeSetting && *cfg.EmailSettings.SMTPPassword != "" {
|
||||||
require.FailNow(t, "did not sanitize properly")
|
require.FailNow(t, "did not sanitize properly")
|
||||||
}
|
}
|
||||||
if *cfg.GitLabSettings.Secret != model.FAKE_SETTING && *cfg.GitLabSettings.Secret != "" {
|
if *cfg.GitLabSettings.Secret != model.FakeSetting && *cfg.GitLabSettings.Secret != "" {
|
||||||
require.FailNow(t, "did not sanitize properly")
|
require.FailNow(t, "did not sanitize properly")
|
||||||
}
|
}
|
||||||
require.Equal(t, model.FAKE_SETTING, *cfg.SqlSettings.DataSource, "did not sanitize properly")
|
require.Equal(t, model.FakeSetting, *cfg.SqlSettings.DataSource, "did not sanitize properly")
|
||||||
require.Equal(t, model.FAKE_SETTING, *cfg.SqlSettings.AtRestEncryptKey, "did not sanitize properly")
|
require.Equal(t, model.FakeSetting, *cfg.SqlSettings.AtRestEncryptKey, "did not sanitize properly")
|
||||||
if !strings.Contains(strings.Join(cfg.SqlSettings.DataSourceReplicas, " "), model.FAKE_SETTING) && len(cfg.SqlSettings.DataSourceReplicas) != 0 {
|
if !strings.Contains(strings.Join(cfg.SqlSettings.DataSourceReplicas, " "), model.FakeSetting) && len(cfg.SqlSettings.DataSourceReplicas) != 0 {
|
||||||
require.FailNow(t, "did not sanitize properly")
|
require.FailNow(t, "did not sanitize properly")
|
||||||
}
|
}
|
||||||
if !strings.Contains(strings.Join(cfg.SqlSettings.DataSourceSearchReplicas, " "), model.FAKE_SETTING) && len(cfg.SqlSettings.DataSourceSearchReplicas) != 0 {
|
if !strings.Contains(strings.Join(cfg.SqlSettings.DataSourceSearchReplicas, " "), model.FakeSetting) && len(cfg.SqlSettings.DataSourceSearchReplicas) != 0 {
|
||||||
require.FailNow(t, "did not sanitize properly")
|
require.FailNow(t, "did not sanitize properly")
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@@ -81,8 +81,8 @@ func TestGetConfigWithAccessTag(t *testing.T) {
|
|||||||
th.Client.Login(th.BasicUser.Username, th.BasicUser.Password)
|
th.Client.Login(th.BasicUser.Username, th.BasicUser.Password)
|
||||||
|
|
||||||
// add read sysconsole environment config
|
// add read sysconsole environment config
|
||||||
th.AddPermissionToRole(model.PERMISSION_SYSCONSOLE_READ_ENVIRONMENT_RATE_LIMITING.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionSysconsoleReadEnvironmentRateLimiting.Id, model.SystemUserRoleId)
|
||||||
defer th.RemovePermissionFromRole(model.PERMISSION_SYSCONSOLE_READ_ENVIRONMENT_RATE_LIMITING.Id, model.SYSTEM_USER_ROLE_ID)
|
defer th.RemovePermissionFromRole(model.PermissionSysconsoleReadEnvironmentRateLimiting.Id, model.SystemUserRoleId)
|
||||||
|
|
||||||
cfg, resp := th.Client.GetConfig()
|
cfg, resp := th.Client.GetConfig()
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
@@ -112,8 +112,8 @@ func TestGetConfigAnyFlagsAccess(t *testing.T) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
// add read sysconsole environment config
|
// add read sysconsole environment config
|
||||||
th.AddPermissionToRole(model.PERMISSION_SYSCONSOLE_READ_ENVIRONMENT_RATE_LIMITING.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionSysconsoleReadEnvironmentRateLimiting.Id, model.SystemUserRoleId)
|
||||||
defer th.RemovePermissionFromRole(model.PERMISSION_SYSCONSOLE_READ_ENVIRONMENT_RATE_LIMITING.Id, model.SYSTEM_USER_ROLE_ID)
|
defer th.RemovePermissionFromRole(model.PermissionSysconsoleReadEnvironmentRateLimiting.Id, model.SystemUserRoleId)
|
||||||
|
|
||||||
cfg, resp := th.Client.GetConfig()
|
cfg, resp := th.Client.GetConfig()
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
@@ -258,7 +258,7 @@ func TestGetConfigWithoutManageSystemPermission(t *testing.T) {
|
|||||||
CheckForbiddenStatus(t, resp)
|
CheckForbiddenStatus(t, resp)
|
||||||
|
|
||||||
// add any sysconsole read permission
|
// add any sysconsole read permission
|
||||||
th.AddPermissionToRole(model.SysconsoleReadPermissions[0].Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.SysconsoleReadPermissions[0].Id, model.SystemUserRoleId)
|
||||||
_, resp = th.Client.GetConfig()
|
_, resp = th.Client.GetConfig()
|
||||||
|
|
||||||
// should be readable now
|
// should be readable now
|
||||||
@@ -272,8 +272,8 @@ func TestUpdateConfigWithoutManageSystemPermission(t *testing.T) {
|
|||||||
th.Client.Login(th.BasicUser.Username, th.BasicUser.Password)
|
th.Client.Login(th.BasicUser.Username, th.BasicUser.Password)
|
||||||
|
|
||||||
// add read sysconsole integrations config
|
// add read sysconsole integrations config
|
||||||
th.AddPermissionToRole(model.PERMISSION_SYSCONSOLE_READ_INTEGRATIONS_INTEGRATION_MANAGEMENT.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionSysconsoleReadIntegrationsIntegrationManagement.Id, model.SystemUserRoleId)
|
||||||
defer th.RemovePermissionFromRole(model.PERMISSION_SYSCONSOLE_READ_INTEGRATIONS_INTEGRATION_MANAGEMENT.Id, model.SYSTEM_USER_ROLE_ID)
|
defer th.RemovePermissionFromRole(model.PermissionSysconsoleReadIntegrationsIntegrationManagement.Id, model.SystemUserRoleId)
|
||||||
|
|
||||||
t.Run("sysconsole read permission does not provides config write access", func(t *testing.T) {
|
t.Run("sysconsole read permission does not provides config write access", func(t *testing.T) {
|
||||||
// should be readable because has a sysconsole read permission
|
// should be readable because has a sysconsole read permission
|
||||||
@@ -293,8 +293,8 @@ func TestUpdateConfigWithoutManageSystemPermission(t *testing.T) {
|
|||||||
originalValue := *cfg.ServiceSettings.AllowCorsFrom
|
originalValue := *cfg.ServiceSettings.AllowCorsFrom
|
||||||
|
|
||||||
// add the wrong write permission
|
// add the wrong write permission
|
||||||
th.AddPermissionToRole(model.PERMISSION_SYSCONSOLE_WRITE_ABOUT_EDITION_AND_LICENSE.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionSysconsoleWriteAboutEditionAndLicense.Id, model.SystemUserRoleId)
|
||||||
defer th.RemovePermissionFromRole(model.PERMISSION_SYSCONSOLE_WRITE_ABOUT_EDITION_AND_LICENSE.Id, model.SYSTEM_USER_ROLE_ID)
|
defer th.RemovePermissionFromRole(model.PermissionSysconsoleWriteAboutEditionAndLicense.Id, model.SystemUserRoleId)
|
||||||
|
|
||||||
// try update a config value allowed by sysconsole WRITE integrations
|
// try update a config value allowed by sysconsole WRITE integrations
|
||||||
mockVal := model.NewId()
|
mockVal := model.NewId()
|
||||||
@@ -313,10 +313,10 @@ func TestUpdateConfigWithoutManageSystemPermission(t *testing.T) {
|
|||||||
cfg, resp := th.SystemAdminClient.GetConfig()
|
cfg, resp := th.SystemAdminClient.GetConfig()
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_SYSCONSOLE_WRITE_INTEGRATIONS_CORS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionSysconsoleWriteIntegrationsCors.Id, model.SystemUserRoleId)
|
||||||
defer th.RemovePermissionFromRole(model.PERMISSION_SYSCONSOLE_WRITE_INTEGRATIONS_CORS.Id, model.SYSTEM_USER_ROLE_ID)
|
defer th.RemovePermissionFromRole(model.PermissionSysconsoleWriteIntegrationsCors.Id, model.SystemUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_SYSCONSOLE_READ_INTEGRATIONS_CORS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionSysconsoleReadIntegrationsCors.Id, model.SystemUserRoleId)
|
||||||
defer th.RemovePermissionFromRole(model.PERMISSION_SYSCONSOLE_READ_INTEGRATIONS_CORS.Id, model.SYSTEM_USER_ROLE_ID)
|
defer th.RemovePermissionFromRole(model.PermissionSysconsoleReadIntegrationsCors.Id, model.SystemUserRoleId)
|
||||||
|
|
||||||
// try update a config value allowed by sysconsole WRITE integrations
|
// try update a config value allowed by sysconsole WRITE integrations
|
||||||
mockVal := model.NewId()
|
mockVal := model.NewId()
|
||||||
@@ -704,7 +704,7 @@ func TestPatchConfig(t *testing.T) {
|
|||||||
|
|
||||||
updatedConfig, _ := client.PatchConfig(&config)
|
updatedConfig, _ := client.PatchConfig(&config)
|
||||||
|
|
||||||
assert.Equal(t, model.FAKE_SETTING, *updatedConfig.SqlSettings.DataSource)
|
assert.Equal(t, model.FakeSetting, *updatedConfig.SqlSettings.DataSource)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("not allowing to toggle enable uploads for plugin via api", func(t *testing.T) {
|
t.Run("not allowing to toggle enable uploads for plugin via api", func(t *testing.T) {
|
||||||
|
|||||||
@@ -44,8 +44,8 @@ func getGlobalPolicy(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func getPolicies(c *Context, w http.ResponseWriter, r *http.Request) {
|
func getPolicies(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_READ_COMPLIANCE_DATA_RETENTION_POLICY) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleReadComplianceDataRetentionPolicy) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_READ_COMPLIANCE_DATA_RETENTION_POLICY)
|
c.SetPermissionError(model.PermissionSysconsoleReadComplianceDataRetentionPolicy)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -62,8 +62,8 @@ func getPolicies(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func getPoliciesCount(c *Context, w http.ResponseWriter, r *http.Request) {
|
func getPoliciesCount(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_READ_COMPLIANCE_DATA_RETENTION_POLICY) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleReadComplianceDataRetentionPolicy) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_READ_COMPLIANCE_DATA_RETENTION_POLICY)
|
c.SetPermissionError(model.PermissionSysconsoleReadComplianceDataRetentionPolicy)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -78,8 +78,8 @@ func getPoliciesCount(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func getPolicy(c *Context, w http.ResponseWriter, r *http.Request) {
|
func getPolicy(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_READ_COMPLIANCE_DATA_RETENTION_POLICY) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleReadComplianceDataRetentionPolicy) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_READ_COMPLIANCE_DATA_RETENTION_POLICY)
|
c.SetPermissionError(model.PermissionSysconsoleReadComplianceDataRetentionPolicy)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -102,8 +102,8 @@ func createPolicy(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
auditRec.AddMeta("policy", policy)
|
auditRec.AddMeta("policy", policy)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_WRITE_COMPLIANCE_DATA_RETENTION_POLICY) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleWriteComplianceDataRetentionPolicy) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_WRITE_COMPLIANCE_DATA_RETENTION_POLICY)
|
c.SetPermissionError(model.PermissionSysconsoleWriteComplianceDataRetentionPolicy)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -131,8 +131,8 @@ func patchPolicy(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
auditRec.AddMeta("patch", patch)
|
auditRec.AddMeta("patch", patch)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_WRITE_COMPLIANCE_DATA_RETENTION_POLICY) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleWriteComplianceDataRetentionPolicy) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_WRITE_COMPLIANCE_DATA_RETENTION_POLICY)
|
c.SetPermissionError(model.PermissionSysconsoleWriteComplianceDataRetentionPolicy)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -152,8 +152,8 @@ func deletePolicy(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
auditRec := c.MakeAuditRecord("deletePolicy", audit.Fail)
|
auditRec := c.MakeAuditRecord("deletePolicy", audit.Fail)
|
||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
auditRec.AddMeta("policy_id", policyId)
|
auditRec.AddMeta("policy_id", policyId)
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_WRITE_COMPLIANCE_DATA_RETENTION_POLICY) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleWriteComplianceDataRetentionPolicy) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_WRITE_COMPLIANCE_DATA_RETENTION_POLICY)
|
c.SetPermissionError(model.PermissionSysconsoleWriteComplianceDataRetentionPolicy)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -167,8 +167,8 @@ func deletePolicy(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func getTeamsForPolicy(c *Context, w http.ResponseWriter, r *http.Request) {
|
func getTeamsForPolicy(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_READ_COMPLIANCE_DATA_RETENTION_POLICY) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleReadComplianceDataRetentionPolicy) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_READ_COMPLIANCE_DATA_RETENTION_POLICY)
|
c.SetPermissionError(model.PermissionSysconsoleReadComplianceDataRetentionPolicy)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -194,8 +194,8 @@ func getTeamsForPolicy(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
func searchTeamsInPolicy(c *Context, w http.ResponseWriter, r *http.Request) {
|
func searchTeamsInPolicy(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||||
c.RequirePolicyId()
|
c.RequirePolicyId()
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_READ_COMPLIANCE_DATA_RETENTION_POLICY) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleReadComplianceDataRetentionPolicy) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_READ_COMPLIANCE_DATA_RETENTION_POLICY)
|
c.SetPermissionError(model.PermissionSysconsoleReadComplianceDataRetentionPolicy)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -231,8 +231,8 @@ func addTeamsToPolicy(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
auditRec.AddMeta("policy_id", policyId)
|
auditRec.AddMeta("policy_id", policyId)
|
||||||
auditRec.AddMeta("team_ids", teamIDs)
|
auditRec.AddMeta("team_ids", teamIDs)
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_WRITE_COMPLIANCE_DATA_RETENTION_POLICY) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleWriteComplianceDataRetentionPolicy) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_WRITE_COMPLIANCE_DATA_RETENTION_POLICY)
|
c.SetPermissionError(model.PermissionSysconsoleWriteComplianceDataRetentionPolicy)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -260,8 +260,8 @@ func removeTeamsFromPolicy(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
auditRec.AddMeta("policy_id", policyId)
|
auditRec.AddMeta("policy_id", policyId)
|
||||||
auditRec.AddMeta("team_ids", teamIDs)
|
auditRec.AddMeta("team_ids", teamIDs)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_WRITE_COMPLIANCE_DATA_RETENTION_POLICY) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleWriteComplianceDataRetentionPolicy) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_WRITE_COMPLIANCE_DATA_RETENTION_POLICY)
|
c.SetPermissionError(model.PermissionSysconsoleWriteComplianceDataRetentionPolicy)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -276,8 +276,8 @@ func removeTeamsFromPolicy(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func getChannelsForPolicy(c *Context, w http.ResponseWriter, r *http.Request) {
|
func getChannelsForPolicy(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_READ_COMPLIANCE_DATA_RETENTION_POLICY) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleReadComplianceDataRetentionPolicy) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_READ_COMPLIANCE_DATA_RETENTION_POLICY)
|
c.SetPermissionError(model.PermissionSysconsoleReadComplianceDataRetentionPolicy)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -308,8 +308,8 @@ func searchChannelsInPolicy(c *Context, w http.ResponseWriter, r *http.Request)
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_READ_COMPLIANCE_DATA_RETENTION_POLICY) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleReadComplianceDataRetentionPolicy) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_READ_COMPLIANCE_DATA_RETENTION_POLICY)
|
c.SetPermissionError(model.PermissionSysconsoleReadComplianceDataRetentionPolicy)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -347,8 +347,8 @@ func addChannelsToPolicy(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
auditRec.AddMeta("policy_id", policyId)
|
auditRec.AddMeta("policy_id", policyId)
|
||||||
auditRec.AddMeta("channel_ids", channelIDs)
|
auditRec.AddMeta("channel_ids", channelIDs)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_WRITE_COMPLIANCE_DATA_RETENTION_POLICY) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleWriteComplianceDataRetentionPolicy) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_WRITE_COMPLIANCE_DATA_RETENTION_POLICY)
|
c.SetPermissionError(model.PermissionSysconsoleWriteComplianceDataRetentionPolicy)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -376,8 +376,8 @@ func removeChannelsFromPolicy(c *Context, w http.ResponseWriter, r *http.Request
|
|||||||
auditRec.AddMeta("policy_id", policyId)
|
auditRec.AddMeta("policy_id", policyId)
|
||||||
auditRec.AddMeta("channel_ids", channelIDs)
|
auditRec.AddMeta("channel_ids", channelIDs)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_WRITE_COMPLIANCE_DATA_RETENTION_POLICY) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleWriteComplianceDataRetentionPolicy) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_WRITE_COMPLIANCE_DATA_RETENTION_POLICY)
|
c.SetPermissionError(model.PermissionSysconsoleWriteComplianceDataRetentionPolicy)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -400,8 +400,8 @@ func getTeamPoliciesForUser(c *Context, w http.ResponseWriter, r *http.Request)
|
|||||||
limit := c.Params.PerPage
|
limit := c.Params.PerPage
|
||||||
offset := c.Params.Page * limit
|
offset := c.Params.Page * limit
|
||||||
|
|
||||||
if userID != c.AppContext.Session().UserId && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
if userID != c.AppContext.Session().UserId && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM)
|
c.SetPermissionError(model.PermissionManageSystem)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -423,8 +423,8 @@ func getChannelPoliciesForUser(c *Context, w http.ResponseWriter, r *http.Reques
|
|||||||
limit := c.Params.PerPage
|
limit := c.Params.PerPage
|
||||||
offset := c.Params.Page * limit
|
offset := c.Params.Page * limit
|
||||||
|
|
||||||
if userID != c.AppContext.Session().UserId && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
if userID != c.AppContext.Session().UserId && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM)
|
c.SetPermissionError(model.PermissionManageSystem)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -23,8 +23,8 @@ func testElasticsearch(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
// PERMISSION_TEST_ELASTICSEARCH is an ancillary permission of PERMISSION_SYSCONSOLE_WRITE_ENVIRONMENT_ELASTICSEARCH,
|
// PERMISSION_TEST_ELASTICSEARCH is an ancillary permission of PERMISSION_SYSCONSOLE_WRITE_ENVIRONMENT_ELASTICSEARCH,
|
||||||
// which should prevent read-only managers from password sniffing
|
// which should prevent read-only managers from password sniffing
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_TEST_ELASTICSEARCH) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionTestElasticsearch) {
|
||||||
c.SetPermissionError(model.PERMISSION_TEST_ELASTICSEARCH)
|
c.SetPermissionError(model.PermissionTestElasticsearch)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -45,8 +45,8 @@ func purgeElasticsearchIndexes(c *Context, w http.ResponseWriter, r *http.Reques
|
|||||||
auditRec := c.MakeAuditRecord("purgeElasticsearchIndexes", audit.Fail)
|
auditRec := c.MakeAuditRecord("purgeElasticsearchIndexes", audit.Fail)
|
||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_PURGE_ELASTICSEARCH_INDEXES) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionPurgeElasticsearchIndexes) {
|
||||||
c.SetPermissionError(model.PERMISSION_PURGE_ELASTICSEARCH_INDEXES)
|
c.SetPermissionError(model.PermissionPurgeElasticsearchIndexes)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -59,16 +59,16 @@ func createEmoji(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_CREATE_EMOJIS) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionCreateEmojis) {
|
||||||
hasPermission := false
|
hasPermission := false
|
||||||
for _, membership := range memberships {
|
for _, membership := range memberships {
|
||||||
if c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), membership.TeamId, model.PERMISSION_CREATE_EMOJIS) {
|
if c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), membership.TeamId, model.PermissionCreateEmojis) {
|
||||||
hasPermission = true
|
hasPermission = true
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if !hasPermission {
|
if !hasPermission {
|
||||||
c.SetPermissionError(model.PERMISSION_CREATE_EMOJIS)
|
c.SetPermissionError(model.PermissionCreateEmojis)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -106,7 +106,7 @@ func getEmojiList(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sort := r.URL.Query().Get("sort")
|
sort := r.URL.Query().Get("sort")
|
||||||
if sort != "" && sort != model.EMOJI_SORT_BY_NAME {
|
if sort != "" && sort != model.EmojiSortByName {
|
||||||
c.SetInvalidUrlParam("sort")
|
c.SetInvalidUrlParam("sort")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -145,32 +145,32 @@ func deleteEmoji(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_DELETE_EMOJIS) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionDeleteEmojis) {
|
||||||
hasPermission := false
|
hasPermission := false
|
||||||
for _, membership := range memberships {
|
for _, membership := range memberships {
|
||||||
if c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), membership.TeamId, model.PERMISSION_DELETE_EMOJIS) {
|
if c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), membership.TeamId, model.PermissionDeleteEmojis) {
|
||||||
hasPermission = true
|
hasPermission = true
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if !hasPermission {
|
if !hasPermission {
|
||||||
c.SetPermissionError(model.PERMISSION_DELETE_EMOJIS)
|
c.SetPermissionError(model.PermissionDeleteEmojis)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.AppContext.Session().UserId != emoji.CreatorId {
|
if c.AppContext.Session().UserId != emoji.CreatorId {
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_DELETE_OTHERS_EMOJIS) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionDeleteOthersEmojis) {
|
||||||
hasPermission := false
|
hasPermission := false
|
||||||
for _, membership := range memberships {
|
for _, membership := range memberships {
|
||||||
if c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), membership.TeamId, model.PERMISSION_DELETE_OTHERS_EMOJIS) {
|
if c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), membership.TeamId, model.PermissionDeleteOthersEmojis) {
|
||||||
hasPermission = true
|
hasPermission = true
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if !hasPermission {
|
if !hasPermission {
|
||||||
c.SetPermissionError(model.PERMISSION_DELETE_OTHERS_EMOJIS)
|
c.SetPermissionError(model.PermissionDeleteOthersEmojis)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -169,7 +169,7 @@ func TestCreateEmoji(t *testing.T) {
|
|||||||
CheckForbiddenStatus(t, resp)
|
CheckForbiddenStatus(t, resp)
|
||||||
|
|
||||||
// try to create an emoji without permissions
|
// try to create an emoji without permissions
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_CREATE_EMOJIS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionCreateEmojis.Id, model.SystemUserRoleId)
|
||||||
|
|
||||||
emoji = &model.Emoji{
|
emoji = &model.Emoji{
|
||||||
CreatorId: th.BasicUser.Id,
|
CreatorId: th.BasicUser.Id,
|
||||||
@@ -180,7 +180,7 @@ func TestCreateEmoji(t *testing.T) {
|
|||||||
CheckForbiddenStatus(t, resp)
|
CheckForbiddenStatus(t, resp)
|
||||||
|
|
||||||
// create an emoji with permissions in one team
|
// create an emoji with permissions in one team
|
||||||
th.AddPermissionToRole(model.PERMISSION_CREATE_EMOJIS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionCreateEmojis.Id, model.TeamUserRoleId)
|
||||||
|
|
||||||
emoji = &model.Emoji{
|
emoji = &model.Emoji{
|
||||||
CreatorId: th.BasicUser.Id,
|
CreatorId: th.BasicUser.Id,
|
||||||
@@ -254,7 +254,7 @@ func TestGetEmojiList(t *testing.T) {
|
|||||||
|
|
||||||
require.Len(t, listEmoji, 1, "should only return 1")
|
require.Len(t, listEmoji, 1, "should only return 1")
|
||||||
|
|
||||||
listEmoji, resp = Client.GetSortedEmojiList(0, 100, model.EMOJI_SORT_BY_NAME)
|
listEmoji, resp = Client.GetSortedEmojiList(0, 100, model.EmojiSortByName)
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
|
|
||||||
require.Greater(t, len(listEmoji), 0, "should return more than 0")
|
require.Greater(t, len(listEmoji), 0, "should return more than 0")
|
||||||
@@ -320,10 +320,10 @@ func TestDeleteEmoji(t *testing.T) {
|
|||||||
newEmoji, resp = Client.CreateEmoji(emoji, utils.CreateTestGif(t, 10, 10), "image.gif")
|
newEmoji, resp = Client.CreateEmoji(emoji, utils.CreateTestGif(t, 10, 10), "image.gif")
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
|
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_DELETE_EMOJIS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionDeleteEmojis.Id, model.SystemUserRoleId)
|
||||||
_, resp = Client.DeleteEmoji(newEmoji.Id)
|
_, resp = Client.DeleteEmoji(newEmoji.Id)
|
||||||
CheckForbiddenStatus(t, resp)
|
CheckForbiddenStatus(t, resp)
|
||||||
th.AddPermissionToRole(model.PERMISSION_DELETE_EMOJIS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionDeleteEmojis.Id, model.SystemUserRoleId)
|
||||||
|
|
||||||
//Try to delete other user's custom emoji without DELETE_EMOJIS permissions
|
//Try to delete other user's custom emoji without DELETE_EMOJIS permissions
|
||||||
emoji = &model.Emoji{
|
emoji = &model.Emoji{
|
||||||
@@ -334,8 +334,8 @@ func TestDeleteEmoji(t *testing.T) {
|
|||||||
newEmoji, resp = Client.CreateEmoji(emoji, utils.CreateTestGif(t, 10, 10), "image.gif")
|
newEmoji, resp = Client.CreateEmoji(emoji, utils.CreateTestGif(t, 10, 10), "image.gif")
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
|
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_DELETE_EMOJIS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionDeleteEmojis.Id, model.SystemUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_DELETE_OTHERS_EMOJIS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionDeleteOthersEmojis.Id, model.SystemUserRoleId)
|
||||||
|
|
||||||
Client.Logout()
|
Client.Logout()
|
||||||
th.LoginBasic2()
|
th.LoginBasic2()
|
||||||
@@ -343,8 +343,8 @@ func TestDeleteEmoji(t *testing.T) {
|
|||||||
_, resp = Client.DeleteEmoji(newEmoji.Id)
|
_, resp = Client.DeleteEmoji(newEmoji.Id)
|
||||||
CheckForbiddenStatus(t, resp)
|
CheckForbiddenStatus(t, resp)
|
||||||
|
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_DELETE_OTHERS_EMOJIS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionDeleteOthersEmojis.Id, model.SystemUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_DELETE_EMOJIS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionDeleteEmojis.Id, model.SystemUserRoleId)
|
||||||
|
|
||||||
Client.Logout()
|
Client.Logout()
|
||||||
th.LoginBasic()
|
th.LoginBasic()
|
||||||
@@ -376,8 +376,8 @@ func TestDeleteEmoji(t *testing.T) {
|
|||||||
newEmoji, resp = Client.CreateEmoji(emoji, utils.CreateTestGif(t, 10, 10), "image.gif")
|
newEmoji, resp = Client.CreateEmoji(emoji, utils.CreateTestGif(t, 10, 10), "image.gif")
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_DELETE_EMOJIS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionDeleteEmojis.Id, model.SystemUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_DELETE_OTHERS_EMOJIS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionDeleteOthersEmojis.Id, model.SystemUserRoleId)
|
||||||
|
|
||||||
Client.Logout()
|
Client.Logout()
|
||||||
th.LoginBasic2()
|
th.LoginBasic2()
|
||||||
@@ -392,12 +392,12 @@ func TestDeleteEmoji(t *testing.T) {
|
|||||||
newEmoji, resp = Client.CreateEmoji(emoji, utils.CreateTestGif(t, 10, 10), "image.gif")
|
newEmoji, resp = Client.CreateEmoji(emoji, utils.CreateTestGif(t, 10, 10), "image.gif")
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
|
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_DELETE_EMOJIS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionDeleteEmojis.Id, model.SystemUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_DELETE_EMOJIS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionDeleteEmojis.Id, model.TeamUserRoleId)
|
||||||
_, resp = Client.DeleteEmoji(newEmoji.Id)
|
_, resp = Client.DeleteEmoji(newEmoji.Id)
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
th.AddPermissionToRole(model.PERMISSION_DELETE_EMOJIS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionDeleteEmojis.Id, model.SystemUserRoleId)
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_DELETE_EMOJIS.Id, model.TEAM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionDeleteEmojis.Id, model.TeamUserRoleId)
|
||||||
|
|
||||||
//Try to delete other user's custom emoji with permissions at team level
|
//Try to delete other user's custom emoji with permissions at team level
|
||||||
emoji = &model.Emoji{
|
emoji = &model.Emoji{
|
||||||
@@ -408,11 +408,11 @@ func TestDeleteEmoji(t *testing.T) {
|
|||||||
newEmoji, resp = Client.CreateEmoji(emoji, utils.CreateTestGif(t, 10, 10), "image.gif")
|
newEmoji, resp = Client.CreateEmoji(emoji, utils.CreateTestGif(t, 10, 10), "image.gif")
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
|
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_DELETE_EMOJIS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionDeleteEmojis.Id, model.SystemUserRoleId)
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_DELETE_OTHERS_EMOJIS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionDeleteOthersEmojis.Id, model.SystemUserRoleId)
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_DELETE_EMOJIS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionDeleteEmojis.Id, model.TeamUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_DELETE_OTHERS_EMOJIS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionDeleteOthersEmojis.Id, model.TeamUserRoleId)
|
||||||
|
|
||||||
Client.Logout()
|
Client.Logout()
|
||||||
th.LoginBasic2()
|
th.LoginBasic2()
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ func (api *API) InitExport() {
|
|||||||
|
|
||||||
func listExports(c *Context, w http.ResponseWriter, r *http.Request) {
|
func listExports(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||||
if !c.IsSystemAdmin() {
|
if !c.IsSystemAdmin() {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM)
|
c.SetPermissionError(model.PermissionManageSystem)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -46,7 +46,7 @@ func deleteExport(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
auditRec.AddMeta("export_name", c.Params.ExportName)
|
auditRec.AddMeta("export_name", c.Params.ExportName)
|
||||||
|
|
||||||
if !c.IsSystemAdmin() {
|
if !c.IsSystemAdmin() {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM)
|
c.SetPermissionError(model.PermissionManageSystem)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -61,7 +61,7 @@ func deleteExport(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
func downloadExport(c *Context, w http.ResponseWriter, r *http.Request) {
|
func downloadExport(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||||
if !c.IsSystemAdmin() {
|
if !c.IsSystemAdmin() {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM)
|
c.SetPermissionError(model.PermissionManageSystem)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
40
api4/file.go
40
api4/file.go
@@ -162,8 +162,8 @@ func uploadFileSimple(c *Context, r *http.Request, timestamp time.Time) *model.F
|
|||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
auditRec.AddMeta("channel_id", c.Params.ChannelId)
|
auditRec.AddMeta("channel_id", c.Params.ChannelId)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), c.Params.ChannelId, model.PERMISSION_UPLOAD_FILE) {
|
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), c.Params.ChannelId, model.PermissionUploadFile) {
|
||||||
c.SetPermissionError(model.PERMISSION_UPLOAD_FILE)
|
c.SetPermissionError(model.PermissionUploadFile)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -224,7 +224,7 @@ func uploadFileMultipart(c *Context, r *http.Request, asStream io.Reader, timest
|
|||||||
}
|
}
|
||||||
|
|
||||||
nFiles := 0
|
nFiles := 0
|
||||||
NEXT_PART:
|
NextPart:
|
||||||
for {
|
for {
|
||||||
part, err := mr.NextPart()
|
part, err := mr.NextPart()
|
||||||
if err == io.EOF {
|
if err == io.EOF {
|
||||||
@@ -285,7 +285,7 @@ NEXT_PART:
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
continue NEXT_PART
|
continue NextPart
|
||||||
}
|
}
|
||||||
|
|
||||||
// A file part.
|
// A file part.
|
||||||
@@ -307,8 +307,8 @@ NEXT_PART:
|
|||||||
if c.Err != nil {
|
if c.Err != nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), c.Params.ChannelId, model.PERMISSION_UPLOAD_FILE) {
|
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), c.Params.ChannelId, model.PermissionUploadFile) {
|
||||||
c.SetPermissionError(model.PERMISSION_UPLOAD_FILE)
|
c.SetPermissionError(model.PermissionUploadFile)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -396,8 +396,8 @@ func uploadFileMultipartLegacy(c *Context, mr *multipart.Reader,
|
|||||||
if c.Err != nil {
|
if c.Err != nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), channelId, model.PERMISSION_UPLOAD_FILE) {
|
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), channelId, model.PermissionUploadFile) {
|
||||||
c.SetPermissionError(model.PERMISSION_UPLOAD_FILE)
|
c.SetPermissionError(model.PermissionUploadFile)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -481,8 +481,8 @@ func getFile(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
auditRec.AddMeta("file", info)
|
auditRec.AddMeta("file", info)
|
||||||
|
|
||||||
if info.CreatorId != c.AppContext.Session().UserId && !c.App.SessionHasPermissionToChannelByPost(*c.AppContext.Session(), info.PostId, model.PERMISSION_READ_CHANNEL) {
|
if info.CreatorId != c.AppContext.Session().UserId && !c.App.SessionHasPermissionToChannelByPost(*c.AppContext.Session(), info.PostId, model.PermissionReadChannel) {
|
||||||
c.SetPermissionError(model.PERMISSION_READ_CHANNEL)
|
c.SetPermissionError(model.PermissionReadChannel)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -512,8 +512,8 @@ func getFileThumbnail(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if info.CreatorId != c.AppContext.Session().UserId && !c.App.SessionHasPermissionToChannelByPost(*c.AppContext.Session(), info.PostId, model.PERMISSION_READ_CHANNEL) {
|
if info.CreatorId != c.AppContext.Session().UserId && !c.App.SessionHasPermissionToChannelByPost(*c.AppContext.Session(), info.PostId, model.PermissionReadChannel) {
|
||||||
c.SetPermissionError(model.PERMISSION_READ_CHANNEL)
|
c.SetPermissionError(model.PermissionReadChannel)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -554,8 +554,8 @@ func getFileLink(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
auditRec.AddMeta("file", info)
|
auditRec.AddMeta("file", info)
|
||||||
|
|
||||||
if info.CreatorId != c.AppContext.Session().UserId && !c.App.SessionHasPermissionToChannelByPost(*c.AppContext.Session(), info.PostId, model.PERMISSION_READ_CHANNEL) {
|
if info.CreatorId != c.AppContext.Session().UserId && !c.App.SessionHasPermissionToChannelByPost(*c.AppContext.Session(), info.PostId, model.PermissionReadChannel) {
|
||||||
c.SetPermissionError(model.PERMISSION_READ_CHANNEL)
|
c.SetPermissionError(model.PermissionReadChannel)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -587,8 +587,8 @@ func getFilePreview(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if info.CreatorId != c.AppContext.Session().UserId && !c.App.SessionHasPermissionToChannelByPost(*c.AppContext.Session(), info.PostId, model.PERMISSION_READ_CHANNEL) {
|
if info.CreatorId != c.AppContext.Session().UserId && !c.App.SessionHasPermissionToChannelByPost(*c.AppContext.Session(), info.PostId, model.PermissionReadChannel) {
|
||||||
c.SetPermissionError(model.PERMISSION_READ_CHANNEL)
|
c.SetPermissionError(model.PermissionReadChannel)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -620,8 +620,8 @@ func getFileInfo(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if info.CreatorId != c.AppContext.Session().UserId && !c.App.SessionHasPermissionToChannelByPost(*c.AppContext.Session(), info.PostId, model.PERMISSION_READ_CHANNEL) {
|
if info.CreatorId != c.AppContext.Session().UserId && !c.App.SessionHasPermissionToChannelByPost(*c.AppContext.Session(), info.PostId, model.PermissionReadChannel) {
|
||||||
c.SetPermissionError(model.PERMISSION_READ_CHANNEL)
|
c.SetPermissionError(model.PermissionReadChannel)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -734,8 +734,8 @@ func searchFiles(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PERMISSION_VIEW_TEAM) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PermissionViewTeam) {
|
||||||
c.SetPermissionError(model.PERMISSION_VIEW_TEAM)
|
c.SetPermissionError(model.PermissionViewTeam)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ func testDoUploadFileRequest(t testing.TB, c *model.Client4, url string, blob []
|
|||||||
}
|
}
|
||||||
req.Header.Set("Content-Type", contentType)
|
req.Header.Set("Content-Type", contentType)
|
||||||
if c.AuthToken != "" {
|
if c.AuthToken != "" {
|
||||||
req.Header.Set(model.HEADER_AUTH, c.AuthType+" "+c.AuthToken)
|
req.Header.Set(model.HeaderAuth, c.AuthType+" "+c.AuthToken)
|
||||||
}
|
}
|
||||||
|
|
||||||
resp, err := c.HttpClient.Do(req)
|
resp, err := c.HttpClient.Do(req)
|
||||||
|
|||||||
@@ -88,8 +88,8 @@ func getGroup(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_GROUPS) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleReadUserManagementGroups) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_GROUPS)
|
c.SetPermissionError(model.PermissionSysconsoleReadUserManagementGroups)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -128,8 +128,8 @@ func patchGroup(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_WRITE_USERMANAGEMENT_GROUPS) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleWriteUserManagementGroups) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_WRITE_USERMANAGEMENT_GROUPS)
|
c.SetPermissionError(model.PermissionSysconsoleWriteUserManagementGroups)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -145,7 +145,7 @@ func patchGroup(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
tmp := strings.ReplaceAll(strings.ToLower(group.DisplayName), " ", "-")
|
tmp := strings.ReplaceAll(strings.ToLower(group.DisplayName), " ", "-")
|
||||||
groupPatch.Name = &tmp
|
groupPatch.Name = &tmp
|
||||||
} else {
|
} else {
|
||||||
if *groupPatch.Name == model.USER_NOTIFY_ALL || *groupPatch.Name == model.CHANNEL_MENTIONS_NOTIFY_PROP || *groupPatch.Name == model.USER_NOTIFY_HERE {
|
if *groupPatch.Name == model.UserNotifyAll || *groupPatch.Name == model.ChannelMentionsNotifyProp || *groupPatch.Name == model.UserNotifyHere {
|
||||||
c.Err = model.NewAppError("Api4.patchGroup", "api.ldap_groups.existing_reserved_name_error", nil, "", http.StatusNotImplemented)
|
c.Err = model.NewAppError("Api4.patchGroup", "api.ldap_groups.existing_reserved_name_error", nil, "", http.StatusNotImplemented)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -284,8 +284,8 @@ func getGroupSyncable(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM)
|
c.SetPermissionError(model.PermissionManageSystem)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -321,8 +321,8 @@ func getGroupSyncables(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_GROUPS) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleReadUserManagementGroups) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_GROUPS)
|
c.SetPermissionError(model.PermissionSysconsoleReadUserManagementGroups)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -473,8 +473,8 @@ func unlinkGroupSyncable(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
func verifyLinkUnlinkPermission(c *Context, syncableType model.GroupSyncableType, syncableID string) *model.AppError {
|
func verifyLinkUnlinkPermission(c *Context, syncableType model.GroupSyncableType, syncableID string) *model.AppError {
|
||||||
switch syncableType {
|
switch syncableType {
|
||||||
case model.GroupSyncableTypeTeam:
|
case model.GroupSyncableTypeTeam:
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), syncableID, model.PERMISSION_MANAGE_TEAM) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), syncableID, model.PermissionManageTeam) {
|
||||||
return c.App.MakePermissionError(c.AppContext.Session(), []*model.Permission{model.PERMISSION_MANAGE_TEAM})
|
return c.App.MakePermissionError(c.AppContext.Session(), []*model.Permission{model.PermissionManageTeam})
|
||||||
}
|
}
|
||||||
case model.GroupSyncableTypeChannel:
|
case model.GroupSyncableTypeChannel:
|
||||||
channel, err := c.App.GetChannel(syncableID)
|
channel, err := c.App.GetChannel(syncableID)
|
||||||
@@ -483,10 +483,10 @@ func verifyLinkUnlinkPermission(c *Context, syncableType model.GroupSyncableType
|
|||||||
}
|
}
|
||||||
|
|
||||||
var permission *model.Permission
|
var permission *model.Permission
|
||||||
if channel.Type == model.CHANNEL_PRIVATE {
|
if channel.Type == model.ChannelTypePrivate {
|
||||||
permission = model.PERMISSION_MANAGE_PRIVATE_CHANNEL_MEMBERS
|
permission = model.PermissionManagePrivateChannelMembers
|
||||||
} else {
|
} else {
|
||||||
permission = model.PERMISSION_MANAGE_PUBLIC_CHANNEL_MEMBERS
|
permission = model.PermissionManagePublicChannelMembers
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), syncableID, permission) {
|
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), syncableID, permission) {
|
||||||
@@ -508,8 +508,8 @@ func getGroupMembers(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_GROUPS) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleReadUserManagementGroups) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_GROUPS)
|
c.SetPermissionError(model.PermissionSysconsoleReadUserManagementGroups)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -545,8 +545,8 @@ func getGroupStats(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_GROUPS) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleReadUserManagementGroups) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_GROUPS)
|
c.SetPermissionError(model.PermissionSysconsoleReadUserManagementGroups)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -575,8 +575,8 @@ func getGroupsByUserId(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.AppContext.Session().UserId != c.Params.UserId && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
if c.AppContext.Session().UserId != c.Params.UserId && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM)
|
c.SetPermissionError(model.PermissionManageSystem)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -617,10 +617,10 @@ func getGroupsByChannel(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
var permission *model.Permission
|
var permission *model.Permission
|
||||||
if channel.Type == model.CHANNEL_PRIVATE {
|
if channel.Type == model.ChannelTypePrivate {
|
||||||
permission = model.PERMISSION_READ_PRIVATE_CHANNEL_GROUPS
|
permission = model.PermissionReadPrivateChannelGroups
|
||||||
} else {
|
} else {
|
||||||
permission = model.PERMISSION_READ_PUBLIC_CHANNEL_GROUPS
|
permission = model.PermissionReadPublicChannelGroups
|
||||||
}
|
}
|
||||||
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), c.Params.ChannelId, permission) {
|
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), c.Params.ChannelId, permission) {
|
||||||
c.SetPermissionError(permission)
|
c.SetPermissionError(permission)
|
||||||
@@ -779,10 +779,10 @@ func getGroups(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
var permission *model.Permission
|
var permission *model.Permission
|
||||||
if channel.Type == model.CHANNEL_PRIVATE {
|
if channel.Type == model.ChannelTypePrivate {
|
||||||
permission = model.PERMISSION_MANAGE_PRIVATE_CHANNEL_MEMBERS
|
permission = model.PermissionManagePrivateChannelMembers
|
||||||
} else {
|
} else {
|
||||||
permission = model.PERMISSION_MANAGE_PUBLIC_CHANNEL_MEMBERS
|
permission = model.PermissionManagePublicChannelMembers
|
||||||
}
|
}
|
||||||
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), channelID, permission) {
|
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), channelID, permission) {
|
||||||
c.SetPermissionError(permission)
|
c.SetPermissionError(permission)
|
||||||
|
|||||||
@@ -691,7 +691,7 @@ func TestGetGroupsByChannel(t *testing.T) {
|
|||||||
|
|
||||||
th.App.Srv().SetLicense(model.NewTestLicense("ldap"))
|
th.App.Srv().SetLicense(model.NewTestLicense("ldap"))
|
||||||
|
|
||||||
privateChannel := th.CreateChannelWithClient(th.SystemAdminClient, model.CHANNEL_PRIVATE)
|
privateChannel := th.CreateChannelWithClient(th.SystemAdminClient, model.ChannelTypePrivate)
|
||||||
|
|
||||||
_, _, response := th.Client.GetGroupsByChannel(privateChannel.Id, opts)
|
_, _, response := th.Client.GetGroupsByChannel(privateChannel.Id, opts)
|
||||||
CheckForbiddenStatus(t, response)
|
CheckForbiddenStatus(t, response)
|
||||||
@@ -980,7 +980,7 @@ func TestGetGroupsByUserId(t *testing.T) {
|
|||||||
})
|
})
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
user1, err := th.App.CreateUser(th.Context, &model.User{Email: th.GenerateTestEmail(), Nickname: "test user1", Password: "test-password-1", Username: "test-user-1", Roles: model.SYSTEM_USER_ROLE_ID})
|
user1, err := th.App.CreateUser(th.Context, &model.User{Email: th.GenerateTestEmail(), Nickname: "test user1", Password: "test-password-1", Username: "test-user-1", Roles: model.SystemUserRoleId})
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
user1.Password = "test-password-1"
|
user1.Password = "test-password-1"
|
||||||
_, err = th.App.UpsertGroupMember(group1.Id, user1.Id)
|
_, err = th.App.UpsertGroupMember(group1.Id, user1.Id)
|
||||||
@@ -1064,7 +1064,7 @@ func TestGetGroupStats(t *testing.T) {
|
|||||||
assert.Equal(t, stats.TotalMemberCount, int64(0))
|
assert.Equal(t, stats.TotalMemberCount, int64(0))
|
||||||
})
|
})
|
||||||
|
|
||||||
user1, err := th.App.CreateUser(th.Context, &model.User{Email: th.GenerateTestEmail(), Nickname: "test user1", Password: "test-password-1", Username: "test-user-1", Roles: model.SYSTEM_USER_ROLE_ID})
|
user1, err := th.App.CreateUser(th.Context, &model.User{Email: th.GenerateTestEmail(), Nickname: "test user1", Password: "test-password-1", Username: "test-user-1", Roles: model.SystemUserRoleId})
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
_, err = th.App.UpsertGroupMember(group.Id, user1.Id)
|
_, err = th.App.UpsertGroupMember(group.Id, user1.Id)
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
@@ -1102,7 +1102,7 @@ func TestGetGroupsGroupConstrainedParentTeam(t *testing.T) {
|
|||||||
channel := &model.Channel{
|
channel := &model.Channel{
|
||||||
DisplayName: "dn_" + id,
|
DisplayName: "dn_" + id,
|
||||||
Name: "name" + id,
|
Name: "name" + id,
|
||||||
Type: model.CHANNEL_PRIVATE,
|
Type: model.ChannelTypePrivate,
|
||||||
TeamId: team.Id,
|
TeamId: team.Id,
|
||||||
GroupConstrained: model.NewBool(true),
|
GroupConstrained: model.NewBool(true),
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ func testAPIHandlerGzipMode(t *testing.T, name string, h http.Handler, token str
|
|||||||
t.Run("Handler: "+name+" No Accept-Encoding", func(t *testing.T) {
|
t.Run("Handler: "+name+" No Accept-Encoding", func(t *testing.T) {
|
||||||
resp := httptest.NewRecorder()
|
resp := httptest.NewRecorder()
|
||||||
req := httptest.NewRequest("GET", "/api/v4/test", nil)
|
req := httptest.NewRequest("GET", "/api/v4/test", nil)
|
||||||
req.Header.Set(model.HEADER_AUTH, "Bearer "+token)
|
req.Header.Set(model.HeaderAuth, "Bearer "+token)
|
||||||
h.ServeHTTP(resp, req)
|
h.ServeHTTP(resp, req)
|
||||||
assert.Equal(t, http.StatusOK, resp.Code)
|
assert.Equal(t, http.StatusOK, resp.Code)
|
||||||
assert.Equal(t, "", resp.Header().Get("Content-Encoding"))
|
assert.Equal(t, "", resp.Header().Get("Content-Encoding"))
|
||||||
@@ -33,7 +33,7 @@ func testAPIHandlerGzipMode(t *testing.T, name string, h http.Handler, token str
|
|||||||
resp := httptest.NewRecorder()
|
resp := httptest.NewRecorder()
|
||||||
req := httptest.NewRequest("GET", "/api/v4/test", nil)
|
req := httptest.NewRequest("GET", "/api/v4/test", nil)
|
||||||
req.Header.Set("Accept-Encoding", "gzip")
|
req.Header.Set("Accept-Encoding", "gzip")
|
||||||
req.Header.Set(model.HEADER_AUTH, "Bearer "+token)
|
req.Header.Set(model.HeaderAuth, "Bearer "+token)
|
||||||
|
|
||||||
h.ServeHTTP(resp, req)
|
h.ServeHTTP(resp, req)
|
||||||
assert.Equal(t, http.StatusOK, resp.Code)
|
assert.Equal(t, http.StatusOK, resp.Code)
|
||||||
@@ -45,7 +45,7 @@ func testAPIHandlerNoGzipMode(t *testing.T, name string, h http.Handler, token s
|
|||||||
t.Run("Handler: "+name+" No Accept-Encoding", func(t *testing.T) {
|
t.Run("Handler: "+name+" No Accept-Encoding", func(t *testing.T) {
|
||||||
resp := httptest.NewRecorder()
|
resp := httptest.NewRecorder()
|
||||||
req := httptest.NewRequest("GET", "/api/v4/test", nil)
|
req := httptest.NewRequest("GET", "/api/v4/test", nil)
|
||||||
req.Header.Set(model.HEADER_AUTH, "Bearer "+token)
|
req.Header.Set(model.HeaderAuth, "Bearer "+token)
|
||||||
|
|
||||||
h.ServeHTTP(resp, req)
|
h.ServeHTTP(resp, req)
|
||||||
assert.Equal(t, http.StatusOK, resp.Code)
|
assert.Equal(t, http.StatusOK, resp.Code)
|
||||||
@@ -56,7 +56,7 @@ func testAPIHandlerNoGzipMode(t *testing.T, name string, h http.Handler, token s
|
|||||||
resp := httptest.NewRecorder()
|
resp := httptest.NewRecorder()
|
||||||
req := httptest.NewRequest("GET", "/api/v4/test", nil)
|
req := httptest.NewRequest("GET", "/api/v4/test", nil)
|
||||||
req.Header.Set("Accept-Encoding", "gzip")
|
req.Header.Set("Accept-Encoding", "gzip")
|
||||||
req.Header.Set(model.HEADER_AUTH, "Bearer "+token)
|
req.Header.Set(model.HeaderAuth, "Bearer "+token)
|
||||||
|
|
||||||
h.ServeHTTP(resp, req)
|
h.ServeHTTP(resp, req)
|
||||||
assert.Equal(t, http.StatusOK, resp.Code)
|
assert.Equal(t, http.StatusOK, resp.Code)
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ func TestGetImage(t *testing.T) {
|
|||||||
|
|
||||||
r, err := http.NewRequest("GET", th.Client.ApiUrl+"/image?url="+url.QueryEscape(imageURL), nil)
|
r, err := http.NewRequest("GET", th.Client.ApiUrl+"/image?url="+url.QueryEscape(imageURL), nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
r.Header.Set(model.HEADER_AUTH, th.Client.AuthType+" "+th.Client.AuthToken)
|
r.Header.Set(model.HeaderAuth, th.Client.AuthType+" "+th.Client.AuthToken)
|
||||||
|
|
||||||
resp, err := th.Client.HttpClient.Do(r)
|
resp, err := th.Client.HttpClient.Do(r)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
@@ -56,7 +56,7 @@ func TestGetImage(t *testing.T) {
|
|||||||
|
|
||||||
r, err := http.NewRequest("GET", th.Client.ApiUrl+"/image?url="+url.QueryEscape(imageURL), nil)
|
r, err := http.NewRequest("GET", th.Client.ApiUrl+"/image?url="+url.QueryEscape(imageURL), nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
r.Header.Set(model.HEADER_AUTH, th.Client.AuthType+" "+th.Client.AuthToken)
|
r.Header.Set(model.HeaderAuth, th.Client.AuthType+" "+th.Client.AuthToken)
|
||||||
|
|
||||||
resp, err := th.Client.HttpClient.Do(r)
|
resp, err := th.Client.HttpClient.Do(r)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
@@ -83,7 +83,7 @@ func TestGetImage(t *testing.T) {
|
|||||||
|
|
||||||
r, err := http.NewRequest("GET", th.Client.ApiUrl+"/image?url="+url.QueryEscape(imageServer.URL+"/image.png"), nil)
|
r, err := http.NewRequest("GET", th.Client.ApiUrl+"/image?url="+url.QueryEscape(imageServer.URL+"/image.png"), nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
r.Header.Set(model.HEADER_AUTH, th.Client.AuthType+" "+th.Client.AuthToken)
|
r.Header.Set(model.HeaderAuth, th.Client.AuthType+" "+th.Client.AuthToken)
|
||||||
|
|
||||||
resp, err := th.Client.HttpClient.Do(r)
|
resp, err := th.Client.HttpClient.Do(r)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
@@ -96,7 +96,7 @@ func TestGetImage(t *testing.T) {
|
|||||||
// local images should not be proxied, but forwarded
|
// local images should not be proxied, but forwarded
|
||||||
r, err = http.NewRequest("GET", th.Client.ApiUrl+"/image?url=/plugins/test/image.png", nil)
|
r, err = http.NewRequest("GET", th.Client.ApiUrl+"/image?url=/plugins/test/image.png", nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
r.Header.Set(model.HEADER_AUTH, th.Client.AuthType+" "+th.Client.AuthToken)
|
r.Header.Set(model.HeaderAuth, th.Client.AuthType+" "+th.Client.AuthToken)
|
||||||
|
|
||||||
resp, err = th.Client.HttpClient.Do(r)
|
resp, err = th.Client.HttpClient.Do(r)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
@@ -108,7 +108,7 @@ func TestGetImage(t *testing.T) {
|
|||||||
})
|
})
|
||||||
r, err = http.NewRequest("GET", th.Client.ApiUrl+"/image?url="+strings.TrimPrefix(imageServer.URL, "http:")+"/image.png", nil)
|
r, err = http.NewRequest("GET", th.Client.ApiUrl+"/image?url="+strings.TrimPrefix(imageServer.URL, "http:")+"/image.png", nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
r.Header.Set(model.HEADER_AUTH, th.Client.AuthType+" "+th.Client.AuthToken)
|
r.Header.Set(model.HeaderAuth, th.Client.AuthType+" "+th.Client.AuthToken)
|
||||||
|
|
||||||
resp, err = th.Client.HttpClient.Do(r)
|
resp, err = th.Client.HttpClient.Do(r)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
@@ -117,7 +117,7 @@ func TestGetImage(t *testing.T) {
|
|||||||
// opaque URLs are not supported, should return an error
|
// opaque URLs are not supported, should return an error
|
||||||
r, err = http.NewRequest("GET", th.Client.ApiUrl+"/image?url=mailto:test@example.com", nil)
|
r, err = http.NewRequest("GET", th.Client.ApiUrl+"/image?url=mailto:test@example.com", nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
r.Header.Set(model.HEADER_AUTH, th.Client.AuthType+" "+th.Client.AuthToken)
|
r.Header.Set(model.HeaderAuth, th.Client.AuthType+" "+th.Client.AuthToken)
|
||||||
|
|
||||||
resp, err = th.Client.HttpClient.Do(r)
|
resp, err = th.Client.HttpClient.Do(r)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ func (api *API) InitImport() {
|
|||||||
|
|
||||||
func listImports(c *Context, w http.ResponseWriter, r *http.Request) {
|
func listImports(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||||
if !c.IsSystemAdmin() {
|
if !c.IsSystemAdmin() {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM)
|
c.SetPermissionError(model.PermissionManageSystem)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -41,13 +41,13 @@ func doPostAction(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
c.Err = model.NewAppError("DoPostAction", "api.post.do_action.action_integration.app_error", nil, "err="+err.Error(), http.StatusBadRequest)
|
c.Err = model.NewAppError("DoPostAction", "api.post.do_action.action_integration.app_error", nil, "err="+err.Error(), http.StatusBadRequest)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), cookie.ChannelId, model.PERMISSION_READ_CHANNEL) {
|
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), cookie.ChannelId, model.PermissionReadChannel) {
|
||||||
c.SetPermissionError(model.PERMISSION_READ_CHANNEL)
|
c.SetPermissionError(model.PermissionReadChannel)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if !c.App.SessionHasPermissionToChannelByPost(*c.AppContext.Session(), c.Params.PostId, model.PERMISSION_READ_CHANNEL) {
|
if !c.App.SessionHasPermissionToChannelByPost(*c.AppContext.Session(), c.Params.PostId, model.PermissionReadChannel) {
|
||||||
c.SetPermissionError(model.PERMISSION_READ_CHANNEL)
|
c.SetPermissionError(model.PermissionReadChannel)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -103,13 +103,13 @@ func submitDialog(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
submit.UserId = c.AppContext.Session().UserId
|
submit.UserId = c.AppContext.Session().UserId
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), submit.ChannelId, model.PERMISSION_READ_CHANNEL) {
|
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), submit.ChannelId, model.PermissionReadChannel) {
|
||||||
c.SetPermissionError(model.PERMISSION_READ_CHANNEL)
|
c.SetPermissionError(model.PermissionReadChannel)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), submit.TeamId, model.PERMISSION_VIEW_TEAM) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), submit.TeamId, model.PermissionViewTeam) {
|
||||||
c.SetPermissionError(model.PERMISSION_VIEW_TEAM)
|
c.SetPermissionError(model.PermissionViewTeam)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ func TestPostActionCookies(t *testing.T) {
|
|||||||
Action: model.PostAction{
|
Action: model.PostAction{
|
||||||
Id: model.NewId(),
|
Id: model.NewId(),
|
||||||
Name: "Test-action",
|
Name: "Test-action",
|
||||||
Type: model.POST_ACTION_TYPE_BUTTON,
|
Type: model.PostActionTypeButton,
|
||||||
Integration: &model.PostActionIntegration{
|
Integration: &model.PostActionIntegration{
|
||||||
URL: server.URL,
|
URL: server.URL,
|
||||||
Context: map[string]interface{}{
|
Context: map[string]interface{}{
|
||||||
@@ -76,7 +76,7 @@ func TestPostActionCookies(t *testing.T) {
|
|||||||
Action: model.PostAction{
|
Action: model.PostAction{
|
||||||
Id: "someID",
|
Id: "someID",
|
||||||
Name: "Test-action",
|
Name: "Test-action",
|
||||||
Type: model.POST_ACTION_TYPE_BUTTON,
|
Type: model.PostActionTypeButton,
|
||||||
Integration: &model.PostActionIntegration{
|
Integration: &model.PostActionIntegration{
|
||||||
URL: server.URL,
|
URL: server.URL,
|
||||||
Context: map[string]interface{}{
|
Context: map[string]interface{}{
|
||||||
@@ -91,7 +91,7 @@ func TestPostActionCookies(t *testing.T) {
|
|||||||
Action: model.PostAction{
|
Action: model.PostAction{
|
||||||
Id: "",
|
Id: "",
|
||||||
Name: "Test-action",
|
Name: "Test-action",
|
||||||
Type: model.POST_ACTION_TYPE_BUTTON,
|
Type: model.PostActionTypeButton,
|
||||||
Integration: &model.PostActionIntegration{
|
Integration: &model.PostActionIntegration{
|
||||||
URL: server.URL,
|
URL: server.URL,
|
||||||
Context: map[string]interface{}{
|
Context: map[string]interface{}{
|
||||||
@@ -106,7 +106,7 @@ func TestPostActionCookies(t *testing.T) {
|
|||||||
t.Run(name, func(t *testing.T) {
|
t.Run(name, func(t *testing.T) {
|
||||||
post := &model.Post{
|
post := &model.Post{
|
||||||
Id: model.NewId(),
|
Id: model.NewId(),
|
||||||
Type: model.POST_EPHEMERAL,
|
Type: model.PostTypeEphemeral,
|
||||||
UserId: th.BasicUser.Id,
|
UserId: th.BasicUser.Id,
|
||||||
ChannelId: th.BasicChannel.Id,
|
ChannelId: th.BasicChannel.Id,
|
||||||
CreateAt: model.GetMillis(),
|
CreateAt: model.GetMillis(),
|
||||||
|
|||||||
@@ -71,10 +71,10 @@ func downloadJob(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
// Currently, this endpoint only supports downloading the compliance report.
|
// Currently, this endpoint only supports downloading the compliance report.
|
||||||
// If you need to download another job type, you will need to alter this section of the code to accommodate it.
|
// If you need to download another job type, you will need to alter this section of the code to accommodate it.
|
||||||
if job.Type == model.JOB_TYPE_MESSAGE_EXPORT && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_DOWNLOAD_COMPLIANCE_EXPORT_RESULT) {
|
if job.Type == model.JobTypeMessageExport && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionDownloadComplianceExportResult) {
|
||||||
c.SetPermissionError(model.PERMISSION_DOWNLOAD_COMPLIANCE_EXPORT_RESULT)
|
c.SetPermissionError(model.PermissionDownloadComplianceExportResult)
|
||||||
return
|
return
|
||||||
} else if job.Type != model.JOB_TYPE_MESSAGE_EXPORT {
|
} else if job.Type != model.JobTypeMessageExport {
|
||||||
c.Err = model.NewAppError("unableToDownloadJob", "api.job.unable_to_download_job.incorrect_job_type", nil, "", http.StatusBadRequest)
|
c.Err = model.NewAppError("unableToDownloadJob", "api.job.unable_to_download_job.incorrect_job_type", nil, "", http.StatusBadRequest)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -141,7 +141,7 @@ func getJobs(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var validJobTypes []string
|
var validJobTypes []string
|
||||||
for _, jobType := range model.ALL_JOB_TYPES {
|
for _, jobType := range model.AllJobTypes {
|
||||||
hasPermission, permissionRequired := c.App.SessionHasPermissionToReadJob(*c.AppContext.Session(), jobType)
|
hasPermission, permissionRequired := c.App.SessionHasPermissionToReadJob(*c.AppContext.Session(), jobType)
|
||||||
if permissionRequired == nil {
|
if permissionRequired == nil {
|
||||||
mlog.Warn("The job types of a job you are trying to retrieve does not contain permissions", mlog.String("jobType", jobType))
|
mlog.Warn("The job types of a job you are trying to retrieve does not contain permissions", mlog.String("jobType", jobType))
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ func TestCreateJob(t *testing.T) {
|
|||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
|
|
||||||
job := &model.Job{
|
job := &model.Job{
|
||||||
Type: model.JOB_TYPE_MESSAGE_EXPORT,
|
Type: model.JobTypeMessageExport,
|
||||||
Data: map[string]string{
|
Data: map[string]string{
|
||||||
"thing": "stuff",
|
"thing": "stuff",
|
||||||
},
|
},
|
||||||
@@ -40,7 +40,7 @@ func TestCreateJob(t *testing.T) {
|
|||||||
_, resp = th.SystemAdminClient.CreateJob(job)
|
_, resp = th.SystemAdminClient.CreateJob(job)
|
||||||
CheckBadRequestStatus(t, resp)
|
CheckBadRequestStatus(t, resp)
|
||||||
|
|
||||||
job.Type = model.JOB_TYPE_ELASTICSEARCH_POST_INDEXING
|
job.Type = model.JobTypeElasticsearchPostIndexing
|
||||||
_, resp = th.Client.CreateJob(job)
|
_, resp = th.Client.CreateJob(job)
|
||||||
CheckForbiddenStatus(t, resp)
|
CheckForbiddenStatus(t, resp)
|
||||||
}
|
}
|
||||||
@@ -51,8 +51,8 @@ func TestGetJob(t *testing.T) {
|
|||||||
|
|
||||||
job := &model.Job{
|
job := &model.Job{
|
||||||
Id: model.NewId(),
|
Id: model.NewId(),
|
||||||
Status: model.JOB_STATUS_PENDING,
|
Status: model.JobStatusPending,
|
||||||
Type: model.JOB_TYPE_MESSAGE_EXPORT,
|
Type: model.JobTypeMessageExport,
|
||||||
}
|
}
|
||||||
_, err := th.App.Srv().Store.Job().Save(job)
|
_, err := th.App.Srv().Store.Job().Save(job)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
@@ -79,7 +79,7 @@ func TestGetJobs(t *testing.T) {
|
|||||||
th := Setup(t)
|
th := Setup(t)
|
||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
|
|
||||||
jobType := model.JOB_TYPE_DATA_RETENTION
|
jobType := model.JobTypeDataRetention
|
||||||
|
|
||||||
t0 := model.GetMillis()
|
t0 := model.GetMillis()
|
||||||
jobs := []*model.Job{
|
jobs := []*model.Job{
|
||||||
@@ -126,7 +126,7 @@ func TestGetJobsByType(t *testing.T) {
|
|||||||
th := Setup(t)
|
th := Setup(t)
|
||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
|
|
||||||
jobType := model.JOB_TYPE_DATA_RETENTION
|
jobType := model.JobTypeDataRetention
|
||||||
|
|
||||||
jobs := []*model.Job{
|
jobs := []*model.Job{
|
||||||
{
|
{
|
||||||
@@ -179,7 +179,7 @@ func TestGetJobsByType(t *testing.T) {
|
|||||||
_, resp = th.Client.GetJobsByType(jobType, 0, 60)
|
_, resp = th.Client.GetJobsByType(jobType, 0, 60)
|
||||||
CheckForbiddenStatus(t, resp)
|
CheckForbiddenStatus(t, resp)
|
||||||
|
|
||||||
_, resp = th.SystemManagerClient.GetJobsByType(model.JOB_TYPE_ELASTICSEARCH_POST_INDEXING, 0, 60)
|
_, resp = th.SystemManagerClient.GetJobsByType(model.JobTypeElasticsearchPostIndexing, 0, 60)
|
||||||
require.Nil(t, resp.Error)
|
require.Nil(t, resp.Error)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -189,11 +189,11 @@ func TestDownloadJob(t *testing.T) {
|
|||||||
jobName := model.NewId()
|
jobName := model.NewId()
|
||||||
job := &model.Job{
|
job := &model.Job{
|
||||||
Id: jobName,
|
Id: jobName,
|
||||||
Type: model.JOB_TYPE_MESSAGE_EXPORT,
|
Type: model.JobTypeMessageExport,
|
||||||
Data: map[string]string{
|
Data: map[string]string{
|
||||||
"export_type": "csv",
|
"export_type": "csv",
|
||||||
},
|
},
|
||||||
Status: model.JOB_STATUS_SUCCESS,
|
Status: model.JobStatusSuccess,
|
||||||
}
|
}
|
||||||
|
|
||||||
// DownloadExportResults is not set to true so we should get a not implemented error status
|
// DownloadExportResults is not set to true so we should get a not implemented error status
|
||||||
@@ -235,7 +235,7 @@ func TestDownloadJob(t *testing.T) {
|
|||||||
CheckBadRequestStatus(t, resp)
|
CheckBadRequestStatus(t, resp)
|
||||||
|
|
||||||
job.Data["is_downloadable"] = "true"
|
job.Data["is_downloadable"] = "true"
|
||||||
updateStatus, err := th.App.Srv().Store.Job().UpdateOptimistically(job, model.JOB_STATUS_SUCCESS)
|
updateStatus, err := th.App.Srv().Store.Job().UpdateOptimistically(job, model.JobStatusSuccess)
|
||||||
require.True(t, updateStatus)
|
require.True(t, updateStatus)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -256,11 +256,11 @@ func TestDownloadJob(t *testing.T) {
|
|||||||
jobName = model.NewId()
|
jobName = model.NewId()
|
||||||
job = &model.Job{
|
job = &model.Job{
|
||||||
Id: jobName,
|
Id: jobName,
|
||||||
Type: model.JOB_TYPE_CLOUD,
|
Type: model.JobTypeCloud,
|
||||||
Data: map[string]string{
|
Data: map[string]string{
|
||||||
"export_type": "csv",
|
"export_type": "csv",
|
||||||
},
|
},
|
||||||
Status: model.JOB_STATUS_SUCCESS,
|
Status: model.JobStatusSuccess,
|
||||||
}
|
}
|
||||||
_, err = th.App.Srv().Store.Job().Save(job)
|
_, err = th.App.Srv().Store.Job().Save(job)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
@@ -275,22 +275,22 @@ func TestCancelJob(t *testing.T) {
|
|||||||
th := Setup(t)
|
th := Setup(t)
|
||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
|
|
||||||
jobType := model.JOB_TYPE_MESSAGE_EXPORT
|
jobType := model.JobTypeMessageExport
|
||||||
jobs := []*model.Job{
|
jobs := []*model.Job{
|
||||||
{
|
{
|
||||||
Id: model.NewId(),
|
Id: model.NewId(),
|
||||||
Type: jobType,
|
Type: jobType,
|
||||||
Status: model.JOB_STATUS_PENDING,
|
Status: model.JobStatusPending,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Id: model.NewId(),
|
Id: model.NewId(),
|
||||||
Type: jobType,
|
Type: jobType,
|
||||||
Status: model.JOB_STATUS_IN_PROGRESS,
|
Status: model.JobStatusInProgress,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Id: model.NewId(),
|
Id: model.NewId(),
|
||||||
Type: jobType,
|
Type: jobType,
|
||||||
Status: model.JOB_STATUS_SUCCESS,
|
Status: model.JobStatusSuccess,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
40
api4/ldap.go
40
api4/ldap.go
@@ -56,8 +56,8 @@ func syncLdap(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
auditRec := c.MakeAuditRecord("syncLdap", audit.Fail)
|
auditRec := c.MakeAuditRecord("syncLdap", audit.Fail)
|
||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_CREATE_LDAP_SYNC_JOB) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionCreateLdapSyncJob) {
|
||||||
c.SetPermissionError(model.PERMISSION_CREATE_LDAP_SYNC_JOB)
|
c.SetPermissionError(model.PermissionCreateLdapSyncJob)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -73,8 +73,8 @@ func testLdap(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_TEST_LDAP) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionTestLdap) {
|
||||||
c.SetPermissionError(model.PERMISSION_TEST_LDAP)
|
c.SetPermissionError(model.PermissionTestLdap)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -87,8 +87,8 @@ func testLdap(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func getLdapGroups(c *Context, w http.ResponseWriter, r *http.Request) {
|
func getLdapGroups(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_GROUPS) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleReadUserManagementGroups) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_GROUPS)
|
c.SetPermissionError(model.PermissionSysconsoleReadUserManagementGroups)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -144,8 +144,8 @@ func linkLdapGroup(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_WRITE_USERMANAGEMENT_GROUPS) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleWriteUserManagementGroups) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_WRITE_USERMANAGEMENT_GROUPS)
|
c.SetPermissionError(model.PermissionSysconsoleWriteUserManagementGroups)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -245,8 +245,8 @@ func unlinkLdapGroup(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
auditRec.AddMeta("remote_id", c.Params.RemoteId)
|
auditRec.AddMeta("remote_id", c.Params.RemoteId)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_WRITE_USERMANAGEMENT_GROUPS) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleWriteUserManagementGroups) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_WRITE_USERMANAGEMENT_GROUPS)
|
c.SetPermissionError(model.PermissionSysconsoleWriteUserManagementGroups)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -285,8 +285,8 @@ func migrateIdLdap(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
auditRec := c.MakeAuditRecord("idMigrateLdap", audit.Fail)
|
auditRec := c.MakeAuditRecord("idMigrateLdap", audit.Fail)
|
||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM)
|
c.SetPermissionError(model.PermissionManageSystem)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -325,8 +325,8 @@ func parseLdapCertificateRequest(r *http.Request, maxFileSize int64) (*multipart
|
|||||||
}
|
}
|
||||||
|
|
||||||
func addLdapPublicCertificate(c *Context, w http.ResponseWriter, r *http.Request) {
|
func addLdapPublicCertificate(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_ADD_LDAP_PUBLIC_CERT) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionAddLdapPublicCert) {
|
||||||
c.SetPermissionError(model.PERMISSION_ADD_LDAP_PUBLIC_CERT)
|
c.SetPermissionError(model.PermissionAddLdapPublicCert)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -349,8 +349,8 @@ func addLdapPublicCertificate(c *Context, w http.ResponseWriter, r *http.Request
|
|||||||
}
|
}
|
||||||
|
|
||||||
func addLdapPrivateCertificate(c *Context, w http.ResponseWriter, r *http.Request) {
|
func addLdapPrivateCertificate(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_ADD_LDAP_PRIVATE_CERT) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionAddLdapPrivateCert) {
|
||||||
c.SetPermissionError(model.PERMISSION_ADD_LDAP_PRIVATE_CERT)
|
c.SetPermissionError(model.PermissionAddLdapPrivateCert)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -373,8 +373,8 @@ func addLdapPrivateCertificate(c *Context, w http.ResponseWriter, r *http.Reques
|
|||||||
}
|
}
|
||||||
|
|
||||||
func removeLdapPublicCertificate(c *Context, w http.ResponseWriter, r *http.Request) {
|
func removeLdapPublicCertificate(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_REMOVE_LDAP_PUBLIC_CERT) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionRemoveLdapPublicCert) {
|
||||||
c.SetPermissionError(model.PERMISSION_REMOVE_LDAP_PUBLIC_CERT)
|
c.SetPermissionError(model.PermissionRemoveLdapPublicCert)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -391,8 +391,8 @@ func removeLdapPublicCertificate(c *Context, w http.ResponseWriter, r *http.Requ
|
|||||||
}
|
}
|
||||||
|
|
||||||
func removeLdapPrivateCertificate(c *Context, w http.ResponseWriter, r *http.Request) {
|
func removeLdapPrivateCertificate(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_REMOVE_LDAP_PRIVATE_CERT) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionRemoveLdapPrivateCert) {
|
||||||
c.SetPermissionError(model.PERMISSION_REMOVE_LDAP_PRIVATE_CERT)
|
c.SetPermissionError(model.PermissionRemoveLdapPrivateCert)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ func getClientLicense(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
var clientLicense map[string]string
|
var clientLicense map[string]string
|
||||||
|
|
||||||
if c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_READ_LICENSE_INFORMATION) {
|
if c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionReadLicenseInformation) {
|
||||||
clientLicense = c.App.Srv().ClientLicense()
|
clientLicense = c.App.Srv().ClientLicense()
|
||||||
} else {
|
} else {
|
||||||
clientLicense = c.App.Srv().GetSanitizedClientLicense()
|
clientLicense = c.App.Srv().GetSanitizedClientLicense()
|
||||||
@@ -55,8 +55,8 @@ func addLicense(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
c.LogAudit("attempt")
|
c.LogAudit("attempt")
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_LICENSE_INFORMATION) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageLicenseInformation) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_LICENSE_INFORMATION)
|
c.SetPermissionError(model.PermissionManageLicenseInformation)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -120,9 +120,9 @@ func addLicense(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
license, appErr = c.App.Srv().SaveLicense(licenseBytes)
|
license, appErr = c.App.Srv().SaveLicense(licenseBytes)
|
||||||
if appErr != nil {
|
if appErr != nil {
|
||||||
if appErr.Id == model.EXPIRED_LICENSE_ERROR {
|
if appErr.Id == model.ExpiredLicenseError {
|
||||||
c.LogAudit("failed - expired or non-started license")
|
c.LogAudit("failed - expired or non-started license")
|
||||||
} else if appErr.Id == model.INVALID_LICENSE_ERROR {
|
} else if appErr.Id == model.InvalidLicenseError {
|
||||||
c.LogAudit("failed - invalid license")
|
c.LogAudit("failed - invalid license")
|
||||||
} else {
|
} else {
|
||||||
c.LogAudit("failed - unable to save license")
|
c.LogAudit("failed - unable to save license")
|
||||||
@@ -142,8 +142,8 @@ func removeLicense(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
c.LogAudit("attempt")
|
c.LogAudit("attempt")
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_LICENSE_INFORMATION) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageLicenseInformation) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_LICENSE_INFORMATION)
|
c.SetPermissionError(model.PermissionManageLicenseInformation)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -168,8 +168,8 @@ func requestTrialLicense(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
c.LogAudit("attempt")
|
c.LogAudit("attempt")
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_LICENSE_INFORMATION) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageLicenseInformation) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_LICENSE_INFORMATION)
|
c.SetPermissionError(model.PermissionManageLicenseInformation)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -218,7 +218,7 @@ func requestTrialLicense(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
trialLicenseRequest := &model.TrialLicenseRequest{
|
trialLicenseRequest := &model.TrialLicenseRequest{
|
||||||
ServerID: c.App.TelemetryId(),
|
ServerID: c.App.TelemetryId(),
|
||||||
Name: currentUser.GetDisplayName(model.SHOW_FULLNAME),
|
Name: currentUser.GetDisplayName(model.ShowFullName),
|
||||||
Email: currentUser.Email,
|
Email: currentUser.Email,
|
||||||
SiteName: *c.App.Config().TeamSettings.SiteName,
|
SiteName: *c.App.Config().TeamSettings.SiteName,
|
||||||
SiteURL: *c.App.Config().ServiceSettings.SiteURL,
|
SiteURL: *c.App.Config().ServiceSettings.SiteURL,
|
||||||
@@ -248,8 +248,8 @@ func requestRenewalLink(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
c.LogAudit("attempt")
|
c.LogAudit("attempt")
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_LICENSE_INFORMATION) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageLicenseInformation) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_LICENSE_INFORMATION)
|
c.SetPermissionError(model.PermissionManageLicenseInformation)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -283,7 +283,7 @@ func getPrevTrialLicense(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
var clientLicense map[string]string
|
var clientLicense map[string]string
|
||||||
|
|
||||||
if c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_READ_LICENSE_INFORMATION) {
|
if c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionReadLicenseInformation) {
|
||||||
clientLicense = utils.GetClientLicense(license)
|
clientLicense = utils.GetClientLicense(license)
|
||||||
} else {
|
} else {
|
||||||
clientLicense = utils.GetSanitizedClientLicense(utils.GetClientLicense(license))
|
clientLicense = utils.GetSanitizedClientLicense(utils.GetClientLicense(license))
|
||||||
|
|||||||
@@ -56,9 +56,9 @@ func localAddLicense(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
license, appErr := c.App.Srv().SaveLicense(buf.Bytes())
|
license, appErr := c.App.Srv().SaveLicense(buf.Bytes())
|
||||||
if appErr != nil {
|
if appErr != nil {
|
||||||
if appErr.Id == model.EXPIRED_LICENSE_ERROR {
|
if appErr.Id == model.ExpiredLicenseError {
|
||||||
c.LogAudit("failed - expired or non-started license")
|
c.LogAudit("failed - expired or non-started license")
|
||||||
} else if appErr.Id == model.INVALID_LICENSE_ERROR {
|
} else if appErr.Id == model.InvalidLicenseError {
|
||||||
c.LogAudit("failed - invalid license")
|
c.LogAudit("failed - invalid license")
|
||||||
} else {
|
} else {
|
||||||
c.LogAudit("failed - unable to save license")
|
c.LogAudit("failed - unable to save license")
|
||||||
|
|||||||
@@ -33,12 +33,12 @@ func createOAuthApp(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
auditRec := c.MakeAuditRecord("createOAuthApp", audit.Fail)
|
auditRec := c.MakeAuditRecord("createOAuthApp", audit.Fail)
|
||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_OAUTH) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageOAuth) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_OAUTH)
|
c.SetPermissionError(model.PermissionManageOAuth)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem) {
|
||||||
oauthApp.IsTrusted = false
|
oauthApp.IsTrusted = false
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -69,8 +69,8 @@ func updateOAuthApp(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
auditRec.AddMeta("oauth_app_id", c.Params.AppId)
|
auditRec.AddMeta("oauth_app_id", c.Params.AppId)
|
||||||
c.LogAudit("attempt")
|
c.LogAudit("attempt")
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_OAUTH) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageOAuth) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_OAUTH)
|
c.SetPermissionError(model.PermissionManageOAuth)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -86,49 +86,49 @@ func updateOAuthApp(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
oldOauthApp, err := c.App.GetOAuthApp(c.Params.AppId)
|
oldOAuthApp, err := c.App.GetOAuthApp(c.Params.AppId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.Err = err
|
c.Err = err
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
auditRec.AddMeta("oauth_app", oldOauthApp)
|
auditRec.AddMeta("oauth_app", oldOAuthApp)
|
||||||
|
|
||||||
if c.AppContext.Session().UserId != oldOauthApp.CreatorId && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM_WIDE_OAUTH) {
|
if c.AppContext.Session().UserId != oldOAuthApp.CreatorId && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystemWideOAuth) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM_WIDE_OAUTH)
|
c.SetPermissionError(model.PermissionManageSystemWideOAuth)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem) {
|
||||||
oauthApp.IsTrusted = oldOauthApp.IsTrusted
|
oauthApp.IsTrusted = oldOAuthApp.IsTrusted
|
||||||
}
|
}
|
||||||
|
|
||||||
updatedOauthApp, err := c.App.UpdateOauthApp(oldOauthApp, oauthApp)
|
updatedOAuthApp, err := c.App.UpdateOAuthApp(oldOAuthApp, oauthApp)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.Err = err
|
c.Err = err
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
auditRec.Success()
|
auditRec.Success()
|
||||||
auditRec.AddMeta("update", updatedOauthApp)
|
auditRec.AddMeta("update", updatedOAuthApp)
|
||||||
c.LogAudit("success")
|
c.LogAudit("success")
|
||||||
|
|
||||||
w.Write([]byte(updatedOauthApp.ToJson()))
|
w.Write([]byte(updatedOAuthApp.ToJson()))
|
||||||
}
|
}
|
||||||
|
|
||||||
func getOAuthApps(c *Context, w http.ResponseWriter, r *http.Request) {
|
func getOAuthApps(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_OAUTH) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageOAuth) {
|
||||||
c.Err = model.NewAppError("getOAuthApps", "api.command.admin_only.app_error", nil, "", http.StatusForbidden)
|
c.Err = model.NewAppError("getOAuthApps", "api.command.admin_only.app_error", nil, "", http.StatusForbidden)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var apps []*model.OAuthApp
|
var apps []*model.OAuthApp
|
||||||
var err *model.AppError
|
var err *model.AppError
|
||||||
if c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM_WIDE_OAUTH) {
|
if c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystemWideOAuth) {
|
||||||
apps, err = c.App.GetOAuthApps(c.Params.Page, c.Params.PerPage)
|
apps, err = c.App.GetOAuthApps(c.Params.Page, c.Params.PerPage)
|
||||||
} else if c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_OAUTH) {
|
} else if c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageOAuth) {
|
||||||
apps, err = c.App.GetOAuthAppsByCreator(c.AppContext.Session().UserId, c.Params.Page, c.Params.PerPage)
|
apps, err = c.App.GetOAuthAppsByCreator(c.AppContext.Session().UserId, c.Params.Page, c.Params.PerPage)
|
||||||
} else {
|
} else {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_OAUTH)
|
c.SetPermissionError(model.PermissionManageOAuth)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -146,8 +146,8 @@ func getOAuthApp(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_OAUTH) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageOAuth) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_OAUTH)
|
c.SetPermissionError(model.PermissionManageOAuth)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -157,8 +157,8 @@ func getOAuthApp(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if oauthApp.CreatorId != c.AppContext.Session().UserId && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM_WIDE_OAUTH) {
|
if oauthApp.CreatorId != c.AppContext.Session().UserId && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystemWideOAuth) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM_WIDE_OAUTH)
|
c.SetPermissionError(model.PermissionManageSystemWideOAuth)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -192,8 +192,8 @@ func deleteOAuthApp(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
auditRec.AddMeta("oauth_app_id", c.Params.AppId)
|
auditRec.AddMeta("oauth_app_id", c.Params.AppId)
|
||||||
c.LogAudit("attempt")
|
c.LogAudit("attempt")
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_OAUTH) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageOAuth) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_OAUTH)
|
c.SetPermissionError(model.PermissionManageOAuth)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -204,8 +204,8 @@ func deleteOAuthApp(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
auditRec.AddMeta("oauth_app", oauthApp)
|
auditRec.AddMeta("oauth_app", oauthApp)
|
||||||
|
|
||||||
if c.AppContext.Session().UserId != oauthApp.CreatorId && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM_WIDE_OAUTH) {
|
if c.AppContext.Session().UserId != oauthApp.CreatorId && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystemWideOAuth) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM_WIDE_OAUTH)
|
c.SetPermissionError(model.PermissionManageSystemWideOAuth)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -231,8 +231,8 @@ func regenerateOAuthAppSecret(c *Context, w http.ResponseWriter, r *http.Request
|
|||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
auditRec.AddMeta("oauth_app_id", c.Params.AppId)
|
auditRec.AddMeta("oauth_app_id", c.Params.AppId)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_OAUTH) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageOAuth) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_OAUTH)
|
c.SetPermissionError(model.PermissionManageOAuth)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -243,8 +243,8 @@ func regenerateOAuthAppSecret(c *Context, w http.ResponseWriter, r *http.Request
|
|||||||
}
|
}
|
||||||
auditRec.AddMeta("oauth_app", oauthApp)
|
auditRec.AddMeta("oauth_app", oauthApp)
|
||||||
|
|
||||||
if oauthApp.CreatorId != c.AppContext.Session().UserId && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM_WIDE_OAUTH) {
|
if oauthApp.CreatorId != c.AppContext.Session().UserId && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystemWideOAuth) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM_WIDE_OAUTH)
|
c.SetPermissionError(model.PermissionManageSystemWideOAuth)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -267,7 +267,7 @@ func getAuthorizedOAuthApps(c *Context, w http.ResponseWriter, r *http.Request)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ func TestCreateOAuthApp(t *testing.T) {
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
// Grant permission to regular users.
|
// Grant permission to regular users.
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_OAUTH.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageOAuth.Id, model.SystemUserRoleId)
|
||||||
|
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableOAuthServiceProvider = true })
|
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableOAuthServiceProvider = true })
|
||||||
|
|
||||||
@@ -41,12 +41,12 @@ func TestCreateOAuthApp(t *testing.T) {
|
|||||||
assert.Equal(t, oapp.IsTrusted, rapp.IsTrusted, "trusted did no match")
|
assert.Equal(t, oapp.IsTrusted, rapp.IsTrusted, "trusted did no match")
|
||||||
|
|
||||||
// Revoke permission from regular users.
|
// Revoke permission from regular users.
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_MANAGE_OAUTH.Id, model.SYSTEM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionManageOAuth.Id, model.SystemUserRoleId)
|
||||||
|
|
||||||
_, resp = Client.CreateOAuthApp(oapp)
|
_, resp = Client.CreateOAuthApp(oapp)
|
||||||
CheckForbiddenStatus(t, resp)
|
CheckForbiddenStatus(t, resp)
|
||||||
// Grant permission to regular users.
|
// Grant permission to regular users.
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_OAUTH.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageOAuth.Id, model.SystemUserRoleId)
|
||||||
|
|
||||||
rapp, resp = Client.CreateOAuthApp(oapp)
|
rapp, resp = Client.CreateOAuthApp(oapp)
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
@@ -86,7 +86,7 @@ func TestUpdateOAuthApp(t *testing.T) {
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
// Grant permission to regular users.
|
// Grant permission to regular users.
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_OAUTH.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageOAuth.Id, model.SystemUserRoleId)
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableOAuthServiceProvider = true })
|
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableOAuthServiceProvider = true })
|
||||||
|
|
||||||
oapp := &model.OAuthApp{
|
oapp := &model.OAuthApp{
|
||||||
@@ -134,7 +134,7 @@ func TestUpdateOAuthApp(t *testing.T) {
|
|||||||
th.LoginBasic()
|
th.LoginBasic()
|
||||||
|
|
||||||
// Revoke permission from regular users.
|
// Revoke permission from regular users.
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_MANAGE_OAUTH.Id, model.SYSTEM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionManageOAuth.Id, model.SystemUserRoleId)
|
||||||
|
|
||||||
_, resp = Client.UpdateOAuthApp(oapp)
|
_, resp = Client.UpdateOAuthApp(oapp)
|
||||||
CheckForbiddenStatus(t, resp)
|
CheckForbiddenStatus(t, resp)
|
||||||
@@ -157,7 +157,7 @@ func TestUpdateOAuthApp(t *testing.T) {
|
|||||||
CheckBadRequestStatus(t, resp)
|
CheckBadRequestStatus(t, resp)
|
||||||
|
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableOAuthServiceProvider = true })
|
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableOAuthServiceProvider = true })
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_OAUTH.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageOAuth.Id, model.SystemUserRoleId)
|
||||||
th.LoginBasic()
|
th.LoginBasic()
|
||||||
|
|
||||||
userOapp := &model.OAuthApp{
|
userOapp := &model.OAuthApp{
|
||||||
@@ -202,7 +202,7 @@ func TestGetOAuthApps(t *testing.T) {
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
// Grant permission to regular users.
|
// Grant permission to regular users.
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_OAUTH.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageOAuth.Id, model.SystemUserRoleId)
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableOAuthServiceProvider = true })
|
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableOAuthServiceProvider = true })
|
||||||
|
|
||||||
oapp := &model.OAuthApp{Name: GenerateTestAppName(), Homepage: "https://nowhere.com", Description: "test", CallbackUrls: []string{"https://nowhere.com"}}
|
oapp := &model.OAuthApp{Name: GenerateTestAppName(), Homepage: "https://nowhere.com", Description: "test", CallbackUrls: []string{"https://nowhere.com"}}
|
||||||
@@ -239,7 +239,7 @@ func TestGetOAuthApps(t *testing.T) {
|
|||||||
require.True(t, len(apps) == 1 || apps[0].Id == rapp2.Id, "wrong apps returned")
|
require.True(t, len(apps) == 1 || apps[0].Id == rapp2.Id, "wrong apps returned")
|
||||||
|
|
||||||
// Revoke permission from regular users.
|
// Revoke permission from regular users.
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_MANAGE_OAUTH.Id, model.SYSTEM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionManageOAuth.Id, model.SystemUserRoleId)
|
||||||
|
|
||||||
_, resp = Client.GetOAuthApps(0, 1000)
|
_, resp = Client.GetOAuthApps(0, 1000)
|
||||||
CheckForbiddenStatus(t, resp)
|
CheckForbiddenStatus(t, resp)
|
||||||
@@ -268,7 +268,7 @@ func TestGetOAuthApp(t *testing.T) {
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
// Grant permission to regular users.
|
// Grant permission to regular users.
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_OAUTH.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageOAuth.Id, model.SystemUserRoleId)
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableOAuthServiceProvider = true })
|
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableOAuthServiceProvider = true })
|
||||||
|
|
||||||
oapp := &model.OAuthApp{Name: GenerateTestAppName(), Homepage: "https://nowhere.com", Description: "test", CallbackUrls: []string{"https://nowhere.com"}}
|
oapp := &model.OAuthApp{Name: GenerateTestAppName(), Homepage: "https://nowhere.com", Description: "test", CallbackUrls: []string{"https://nowhere.com"}}
|
||||||
@@ -297,7 +297,7 @@ func TestGetOAuthApp(t *testing.T) {
|
|||||||
CheckForbiddenStatus(t, resp)
|
CheckForbiddenStatus(t, resp)
|
||||||
|
|
||||||
// Revoke permission from regular users.
|
// Revoke permission from regular users.
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_MANAGE_OAUTH.Id, model.SYSTEM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionManageOAuth.Id, model.SystemUserRoleId)
|
||||||
|
|
||||||
_, resp = Client.GetOAuthApp(rapp2.Id)
|
_, resp = Client.GetOAuthApp(rapp2.Id)
|
||||||
CheckForbiddenStatus(t, resp)
|
CheckForbiddenStatus(t, resp)
|
||||||
@@ -332,7 +332,7 @@ func TestGetOAuthAppInfo(t *testing.T) {
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
// Grant permission to regular users.
|
// Grant permission to regular users.
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_OAUTH.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageOAuth.Id, model.SystemUserRoleId)
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableOAuthServiceProvider = true })
|
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableOAuthServiceProvider = true })
|
||||||
|
|
||||||
oapp := &model.OAuthApp{Name: GenerateTestAppName(), Homepage: "https://nowhere.com", Description: "test", CallbackUrls: []string{"https://nowhere.com"}}
|
oapp := &model.OAuthApp{Name: GenerateTestAppName(), Homepage: "https://nowhere.com", Description: "test", CallbackUrls: []string{"https://nowhere.com"}}
|
||||||
@@ -361,7 +361,7 @@ func TestGetOAuthAppInfo(t *testing.T) {
|
|||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
|
|
||||||
// Revoke permission from regular users.
|
// Revoke permission from regular users.
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_MANAGE_OAUTH.Id, model.SYSTEM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionManageOAuth.Id, model.SystemUserRoleId)
|
||||||
|
|
||||||
_, resp = Client.GetOAuthAppInfo(rapp2.Id)
|
_, resp = Client.GetOAuthAppInfo(rapp2.Id)
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
@@ -396,7 +396,7 @@ func TestDeleteOAuthApp(t *testing.T) {
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
// Grant permission to regular users.
|
// Grant permission to regular users.
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_OAUTH.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageOAuth.Id, model.SystemUserRoleId)
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableOAuthServiceProvider = true })
|
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableOAuthServiceProvider = true })
|
||||||
|
|
||||||
oapp := &model.OAuthApp{Name: GenerateTestAppName(), Homepage: "https://nowhere.com", Description: "test", CallbackUrls: []string{"https://nowhere.com"}}
|
oapp := &model.OAuthApp{Name: GenerateTestAppName(), Homepage: "https://nowhere.com", Description: "test", CallbackUrls: []string{"https://nowhere.com"}}
|
||||||
@@ -429,7 +429,7 @@ func TestDeleteOAuthApp(t *testing.T) {
|
|||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
|
|
||||||
// Revoke permission from regular users.
|
// Revoke permission from regular users.
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_MANAGE_OAUTH.Id, model.SYSTEM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionManageOAuth.Id, model.SystemUserRoleId)
|
||||||
|
|
||||||
_, resp = Client.DeleteOAuthApp(rapp.Id)
|
_, resp = Client.DeleteOAuthApp(rapp.Id)
|
||||||
CheckForbiddenStatus(t, resp)
|
CheckForbiddenStatus(t, resp)
|
||||||
@@ -463,7 +463,7 @@ func TestRegenerateOAuthAppSecret(t *testing.T) {
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
// Grant permission to regular users.
|
// Grant permission to regular users.
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_OAUTH.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageOAuth.Id, model.SystemUserRoleId)
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableOAuthServiceProvider = true })
|
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableOAuthServiceProvider = true })
|
||||||
|
|
||||||
oapp := &model.OAuthApp{Name: GenerateTestAppName(), Homepage: "https://nowhere.com", Description: "test", CallbackUrls: []string{"https://nowhere.com"}}
|
oapp := &model.OAuthApp{Name: GenerateTestAppName(), Homepage: "https://nowhere.com", Description: "test", CallbackUrls: []string{"https://nowhere.com"}}
|
||||||
@@ -497,7 +497,7 @@ func TestRegenerateOAuthAppSecret(t *testing.T) {
|
|||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
|
|
||||||
// Revoke permission from regular users.
|
// Revoke permission from regular users.
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_MANAGE_OAUTH.Id, model.SYSTEM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionManageOAuth.Id, model.SystemUserRoleId)
|
||||||
|
|
||||||
_, resp = Client.RegenerateOAuthAppSecret(rapp.Id)
|
_, resp = Client.RegenerateOAuthAppSecret(rapp.Id)
|
||||||
CheckForbiddenStatus(t, resp)
|
CheckForbiddenStatus(t, resp)
|
||||||
@@ -535,7 +535,7 @@ func TestGetAuthorizedOAuthAppsForUser(t *testing.T) {
|
|||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
|
|
||||||
authRequest := &model.AuthorizeRequest{
|
authRequest := &model.AuthorizeRequest{
|
||||||
ResponseType: model.AUTHCODE_RESPONSE_TYPE,
|
ResponseType: model.AuthCodeResponseType,
|
||||||
ClientId: rapp.Id,
|
ClientId: rapp.Id,
|
||||||
RedirectUri: rapp.CallbackUrls[0],
|
RedirectUri: rapp.CallbackUrls[0],
|
||||||
Scope: "",
|
Scope: "",
|
||||||
|
|||||||
@@ -18,8 +18,8 @@ func TestGetAncillaryPermissions(t *testing.T) {
|
|||||||
var subsectionPermissions []string
|
var subsectionPermissions []string
|
||||||
var expectedAncillaryPermissions []string
|
var expectedAncillaryPermissions []string
|
||||||
t.Run("Valid Case, Passing in SubSection Permissions", func(t *testing.T) {
|
t.Run("Valid Case, Passing in SubSection Permissions", func(t *testing.T) {
|
||||||
subsectionPermissions = []string{model.PERMISSION_SYSCONSOLE_READ_REPORTING_SITE_STATISTICS.Id}
|
subsectionPermissions = []string{model.PermissionSysconsoleReadReportingSiteStatistics.Id}
|
||||||
expectedAncillaryPermissions = []string{model.PERMISSION_GET_ANALYTICS.Id}
|
expectedAncillaryPermissions = []string{model.PermissionGetAnalytics.Id}
|
||||||
actualAncillaryPermissions, resp := th.Client.GetAncillaryPermissions(subsectionPermissions)
|
actualAncillaryPermissions, resp := th.Client.GetAncillaryPermissions(subsectionPermissions)
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
assert.Equal(t, append(subsectionPermissions, expectedAncillaryPermissions...), actualAncillaryPermissions)
|
assert.Equal(t, append(subsectionPermissions, expectedAncillaryPermissions...), actualAncillaryPermissions)
|
||||||
|
|||||||
@@ -55,8 +55,8 @@ func uploadPlugin(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
auditRec := c.MakeAuditRecord("uploadPlugin", audit.Fail)
|
auditRec := c.MakeAuditRecord("uploadPlugin", audit.Fail)
|
||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_WRITE_PLUGINS) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleWritePlugins) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_WRITE_PLUGINS)
|
c.SetPermissionError(model.PermissionSysconsoleWritePlugins)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -106,8 +106,8 @@ func installPluginFromUrl(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
auditRec := c.MakeAuditRecord("installPluginFromUrl", audit.Fail)
|
auditRec := c.MakeAuditRecord("installPluginFromUrl", audit.Fail)
|
||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_WRITE_PLUGINS) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleWritePlugins) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_WRITE_PLUGINS)
|
c.SetPermissionError(model.PermissionSysconsoleWritePlugins)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -139,8 +139,8 @@ func installMarketplacePlugin(c *Context, w http.ResponseWriter, r *http.Request
|
|||||||
auditRec := c.MakeAuditRecord("installMarketplacePlugin", audit.Fail)
|
auditRec := c.MakeAuditRecord("installMarketplacePlugin", audit.Fail)
|
||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_WRITE_PLUGINS) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleWritePlugins) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_WRITE_PLUGINS)
|
c.SetPermissionError(model.PermissionSysconsoleWritePlugins)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -171,8 +171,8 @@ func getPlugins(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_READ_PLUGINS) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleReadPlugins) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_READ_PLUGINS)
|
c.SetPermissionError(model.PermissionSysconsoleReadPlugins)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -191,8 +191,8 @@ func getPluginStatuses(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_READ_PLUGINS) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleReadPlugins) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_READ_PLUGINS)
|
c.SetPermissionError(model.PermissionSysconsoleReadPlugins)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -220,8 +220,8 @@ func removePlugin(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
auditRec.AddMeta("plugin_id", c.Params.PluginId)
|
auditRec.AddMeta("plugin_id", c.Params.PluginId)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_WRITE_PLUGINS) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleWritePlugins) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_WRITE_PLUGINS)
|
c.SetPermissionError(model.PermissionSysconsoleWritePlugins)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -272,8 +272,8 @@ func getMarketplacePlugins(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_READ_PLUGINS) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleReadPlugins) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_READ_PLUGINS)
|
c.SetPermissionError(model.PermissionSysconsoleReadPlugins)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -313,8 +313,8 @@ func enablePlugin(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
auditRec.AddMeta("plugin_id", c.Params.PluginId)
|
auditRec.AddMeta("plugin_id", c.Params.PluginId)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_WRITE_PLUGINS) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleWritePlugins) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_WRITE_PLUGINS)
|
c.SetPermissionError(model.PermissionSysconsoleWritePlugins)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -342,8 +342,8 @@ func disablePlugin(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
auditRec.AddMeta("plugin_id", c.Params.PluginId)
|
auditRec.AddMeta("plugin_id", c.Params.PluginId)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_WRITE_PLUGINS) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleWritePlugins) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_WRITE_PLUGINS)
|
c.SetPermissionError(model.PermissionSysconsoleWritePlugins)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -394,13 +394,13 @@ func setFirstAdminVisitMarketplaceStatus(c *Context, w http.ResponseWriter, r *h
|
|||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
c.LogAudit("attempt")
|
c.LogAudit("attempt")
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM)
|
c.SetPermissionError(model.PermissionManageSystem)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
firstAdminVisitMarketplaceObj := model.System{
|
firstAdminVisitMarketplaceObj := model.System{
|
||||||
Name: model.SYSTEM_FIRST_ADMIN_VISIT_MARKETPLACE,
|
Name: model.SystemFirstAdminVisitMarketplace,
|
||||||
Value: "true",
|
Value: "true",
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -409,7 +409,7 @@ func setFirstAdminVisitMarketplaceStatus(c *Context, w http.ResponseWriter, r *h
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
message := model.NewWebSocketEvent(model.WEBSOCKET_FIRST_ADMIN_VISIT_MARKETPLACE_STATUS_RECEIVED, "", "", "", nil)
|
message := model.NewWebSocketEvent(model.WebsocketFirstAdminVisitMarketplaceStatusReceived, "", "", "", nil)
|
||||||
message.Add("firstAdminVisitMarketplaceStatus", firstAdminVisitMarketplaceObj.Value)
|
message.Add("firstAdminVisitMarketplaceStatus", firstAdminVisitMarketplaceObj.Value)
|
||||||
c.App.Publish(message)
|
c.App.Publish(message)
|
||||||
|
|
||||||
@@ -422,18 +422,18 @@ func getFirstAdminVisitMarketplaceStatus(c *Context, w http.ResponseWriter, r *h
|
|||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
c.LogAudit("attempt")
|
c.LogAudit("attempt")
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM)
|
c.SetPermissionError(model.PermissionManageSystem)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
firstAdminVisitMarketplaceObj, err := c.App.Srv().Store.System().GetByName(model.SYSTEM_FIRST_ADMIN_VISIT_MARKETPLACE)
|
firstAdminVisitMarketplaceObj, err := c.App.Srv().Store.System().GetByName(model.SystemFirstAdminVisitMarketplace)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
var nfErr *store.ErrNotFound
|
var nfErr *store.ErrNotFound
|
||||||
switch {
|
switch {
|
||||||
case errors.As(err, &nfErr):
|
case errors.As(err, &nfErr):
|
||||||
firstAdminVisitMarketplaceObj = &model.System{
|
firstAdminVisitMarketplaceObj = &model.System{
|
||||||
Name: model.SYSTEM_FIRST_ADMIN_VISIT_MARKETPLACE,
|
Name: model.SystemFirstAdminVisitMarketplace,
|
||||||
Value: "false",
|
Value: "false",
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -305,12 +305,12 @@ func TestNotifyClusterPluginEvent(t *testing.T) {
|
|||||||
Id: manifest.Id,
|
Id: manifest.Id,
|
||||||
}
|
}
|
||||||
expectedInstallMessage := &model.ClusterMessage{
|
expectedInstallMessage := &model.ClusterMessage{
|
||||||
Event: model.CLUSTER_EVENT_INSTALL_PLUGIN,
|
Event: model.ClusterEventInstallPlugin,
|
||||||
SendType: model.CLUSTER_SEND_RELIABLE,
|
SendType: model.ClusterSendReliable,
|
||||||
WaitForAllToSend: true,
|
WaitForAllToSend: true,
|
||||||
Data: expectedPluginData.ToJson(),
|
Data: expectedPluginData.ToJson(),
|
||||||
}
|
}
|
||||||
actualMessages := findClusterMessages(model.CLUSTER_EVENT_INSTALL_PLUGIN, messages)
|
actualMessages := findClusterMessages(model.ClusterEventInstallPlugin, messages)
|
||||||
require.Equal(t, []*model.ClusterMessage{expectedInstallMessage}, actualMessages)
|
require.Equal(t, []*model.ClusterMessage{expectedInstallMessage}, actualMessages)
|
||||||
|
|
||||||
// Upgrade
|
// Upgrade
|
||||||
@@ -329,7 +329,7 @@ func TestNotifyClusterPluginEvent(t *testing.T) {
|
|||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case resp := <-webSocketClient.EventChannel:
|
case resp := <-webSocketClient.EventChannel:
|
||||||
if resp.EventType() == model.WEBSOCKET_EVENT_PLUGIN_STATUSES_CHANGED && len(resp.GetData()["plugin_statuses"].([]interface{})) == 0 {
|
if resp.EventType() == model.WebsocketEventPluginStatusesChanged && len(resp.GetData()["plugin_statuses"].([]interface{})) == 0 {
|
||||||
done <- true
|
done <- true
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -351,12 +351,12 @@ func TestNotifyClusterPluginEvent(t *testing.T) {
|
|||||||
messages = testCluster.GetMessages()
|
messages = testCluster.GetMessages()
|
||||||
|
|
||||||
expectedRemoveMessage := &model.ClusterMessage{
|
expectedRemoveMessage := &model.ClusterMessage{
|
||||||
Event: model.CLUSTER_EVENT_REMOVE_PLUGIN,
|
Event: model.ClusterEventRemovePlugin,
|
||||||
SendType: model.CLUSTER_SEND_RELIABLE,
|
SendType: model.ClusterSendReliable,
|
||||||
WaitForAllToSend: true,
|
WaitForAllToSend: true,
|
||||||
Data: expectedPluginData.ToJson(),
|
Data: expectedPluginData.ToJson(),
|
||||||
}
|
}
|
||||||
actualMessages = findClusterMessages(model.CLUSTER_EVENT_REMOVE_PLUGIN, messages)
|
actualMessages = findClusterMessages(model.ClusterEventRemovePlugin, messages)
|
||||||
require.Equal(t, []*model.ClusterMessage{expectedRemoveMessage}, actualMessages)
|
require.Equal(t, []*model.ClusterMessage{expectedRemoveMessage}, actualMessages)
|
||||||
|
|
||||||
pluginStored, appErr = th.App.FileExists(expectedPath)
|
pluginStored, appErr = th.App.FileExists(expectedPath)
|
||||||
|
|||||||
104
api4/post.go
104
api4/post.go
@@ -49,21 +49,21 @@ func createPost(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
auditRec.AddMeta("post", post)
|
auditRec.AddMeta("post", post)
|
||||||
|
|
||||||
hasPermission := false
|
hasPermission := false
|
||||||
if c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), post.ChannelId, model.PERMISSION_CREATE_POST) {
|
if c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), post.ChannelId, model.PermissionCreatePost) {
|
||||||
hasPermission = true
|
hasPermission = true
|
||||||
} else if channel, err := c.App.GetChannel(post.ChannelId); err == nil {
|
} else if channel, err := c.App.GetChannel(post.ChannelId); err == nil {
|
||||||
// Temporary permission check method until advanced permissions, please do not copy
|
// Temporary permission check method until advanced permissions, please do not copy
|
||||||
if channel.Type == model.CHANNEL_OPEN && c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), channel.TeamId, model.PERMISSION_CREATE_POST_PUBLIC) {
|
if channel.Type == model.ChannelTypeOpen && c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), channel.TeamId, model.PermissionCreatePostPublic) {
|
||||||
hasPermission = true
|
hasPermission = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if !hasPermission {
|
if !hasPermission {
|
||||||
c.SetPermissionError(model.PERMISSION_CREATE_POST)
|
c.SetPermissionError(model.PermissionCreatePost)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if post.CreateAt != 0 && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
if post.CreateAt != 0 && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem) {
|
||||||
post.CreateAt = 0
|
post.CreateAt = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -116,8 +116,8 @@ func createEphemeralPost(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
ephRequest.Post.UserId = c.AppContext.Session().UserId
|
ephRequest.Post.UserId = c.AppContext.Session().UserId
|
||||||
ephRequest.Post.CreateAt = model.GetMillis()
|
ephRequest.Post.CreateAt = model.GetMillis()
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_CREATE_POST_EPHEMERAL) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionCreatePostEphemeral) {
|
||||||
c.SetPermissionError(model.PERMISSION_CREATE_POST_EPHEMERAL)
|
c.SetPermissionError(model.PermissionCreatePostEphemeral)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -164,8 +164,8 @@ func getPostsForChannel(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
page := c.Params.Page
|
page := c.Params.Page
|
||||||
perPage := c.Params.PerPage
|
perPage := c.Params.PerPage
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), channelId, model.PERMISSION_READ_CHANNEL) {
|
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), channelId, model.PermissionReadChannel) {
|
||||||
c.SetPermissionError(model.PERMISSION_READ_CHANNEL)
|
c.SetPermissionError(model.PermissionReadChannel)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -207,7 +207,7 @@ func getPostsForChannel(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if etag != "" {
|
if etag != "" {
|
||||||
w.Header().Set(model.HEADER_ETAG_SERVER, etag)
|
w.Header().Set(model.HeaderEtagServer, etag)
|
||||||
}
|
}
|
||||||
|
|
||||||
c.App.AddCursorIdsForPostList(list, afterPost, beforePost, since, page, perPage, collapsedThreads)
|
c.App.AddCursorIdsForPostList(list, afterPost, beforePost, since, page, perPage, collapsedThreads)
|
||||||
@@ -224,13 +224,13 @@ func getPostsForChannelAroundLastUnread(c *Context, w http.ResponseWriter, r *ht
|
|||||||
|
|
||||||
userId := c.Params.UserId
|
userId := c.Params.UserId
|
||||||
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), userId) {
|
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), userId) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
channelId := c.Params.ChannelId
|
channelId := c.Params.ChannelId
|
||||||
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), channelId, model.PERMISSION_READ_CHANNEL) {
|
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), channelId, model.PermissionReadChannel) {
|
||||||
c.SetPermissionError(model.PERMISSION_READ_CHANNEL)
|
c.SetPermissionError(model.PermissionReadChannel)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -270,7 +270,7 @@ func getPostsForChannelAroundLastUnread(c *Context, w http.ResponseWriter, r *ht
|
|||||||
clientPostList := c.App.PreparePostListForClient(postList)
|
clientPostList := c.App.PreparePostListForClient(postList)
|
||||||
|
|
||||||
if etag != "" {
|
if etag != "" {
|
||||||
w.Header().Set(model.HEADER_ETAG_SERVER, etag)
|
w.Header().Set(model.HeaderEtagServer, etag)
|
||||||
}
|
}
|
||||||
w.Write([]byte(clientPostList.ToJson()))
|
w.Write([]byte(clientPostList.ToJson()))
|
||||||
}
|
}
|
||||||
@@ -282,7 +282,7 @@ func getFlaggedPostsForUser(c *Context, w http.ResponseWriter, r *http.Request)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -313,7 +313,7 @@ func getFlaggedPostsForUser(c *Context, w http.ResponseWriter, r *http.Request)
|
|||||||
if !ok {
|
if !ok {
|
||||||
allowed = false
|
allowed = false
|
||||||
|
|
||||||
if c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), post.ChannelId, model.PERMISSION_READ_CHANNEL) {
|
if c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), post.ChannelId, model.PermissionReadChannel) {
|
||||||
allowed = true
|
allowed = true
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -350,14 +350,14 @@ func getPost(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), channel.Id, model.PERMISSION_READ_CHANNEL) {
|
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), channel.Id, model.PermissionReadChannel) {
|
||||||
if channel.Type == model.CHANNEL_OPEN {
|
if channel.Type == model.ChannelTypeOpen {
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), channel.TeamId, model.PERMISSION_READ_PUBLIC_CHANNEL) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), channel.TeamId, model.PermissionReadPublicChannel) {
|
||||||
c.SetPermissionError(model.PERMISSION_READ_PUBLIC_CHANNEL)
|
c.SetPermissionError(model.PermissionReadPublicChannel)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
c.SetPermissionError(model.PERMISSION_READ_CHANNEL)
|
c.SetPermissionError(model.PermissionReadChannel)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -368,7 +368,7 @@ func getPost(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
w.Header().Set(model.HEADER_ETAG_SERVER, post.Etag())
|
w.Header().Set(model.HeaderEtagServer, post.Etag())
|
||||||
w.Write([]byte(post.ToJson()))
|
w.Write([]byte(post.ToJson()))
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -384,19 +384,19 @@ func deletePost(c *Context, w http.ResponseWriter, _ *http.Request) {
|
|||||||
|
|
||||||
post, err := c.App.GetSinglePost(c.Params.PostId)
|
post, err := c.App.GetSinglePost(c.Params.PostId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.SetPermissionError(model.PERMISSION_DELETE_POST)
|
c.SetPermissionError(model.PermissionDeletePost)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
auditRec.AddMeta("post", post)
|
auditRec.AddMeta("post", post)
|
||||||
|
|
||||||
if c.AppContext.Session().UserId == post.UserId {
|
if c.AppContext.Session().UserId == post.UserId {
|
||||||
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), post.ChannelId, model.PERMISSION_DELETE_POST) {
|
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), post.ChannelId, model.PermissionDeletePost) {
|
||||||
c.SetPermissionError(model.PERMISSION_DELETE_POST)
|
c.SetPermissionError(model.PermissionDeletePost)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), post.ChannelId, model.PERMISSION_DELETE_OTHERS_POSTS) {
|
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), post.ChannelId, model.PermissionDeleteOthersPosts) {
|
||||||
c.SetPermissionError(model.PERMISSION_DELETE_OTHERS_POSTS)
|
c.SetPermissionError(model.PermissionDeleteOthersPosts)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -436,14 +436,14 @@ func getPostThread(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), channel.Id, model.PERMISSION_READ_CHANNEL) {
|
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), channel.Id, model.PermissionReadChannel) {
|
||||||
if channel.Type == model.CHANNEL_OPEN {
|
if channel.Type == model.ChannelTypeOpen {
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), channel.TeamId, model.PERMISSION_READ_PUBLIC_CHANNEL) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), channel.TeamId, model.PermissionReadPublicChannel) {
|
||||||
c.SetPermissionError(model.PERMISSION_READ_PUBLIC_CHANNEL)
|
c.SetPermissionError(model.PermissionReadPublicChannel)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
c.SetPermissionError(model.PERMISSION_READ_CHANNEL)
|
c.SetPermissionError(model.PermissionReadChannel)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -454,7 +454,7 @@ func getPostThread(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
clientPostList := c.App.PreparePostListForClient(list)
|
clientPostList := c.App.PreparePostListForClient(list)
|
||||||
|
|
||||||
w.Header().Set(model.HEADER_ETAG_SERVER, clientPostList.Etag())
|
w.Header().Set(model.HeaderEtagServer, clientPostList.Etag())
|
||||||
|
|
||||||
w.Write([]byte(clientPostList.ToJson()))
|
w.Write([]byte(clientPostList.ToJson()))
|
||||||
}
|
}
|
||||||
@@ -465,8 +465,8 @@ func searchPosts(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PERMISSION_VIEW_TEAM) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PermissionViewTeam) {
|
||||||
c.SetPermissionError(model.PERMISSION_VIEW_TEAM)
|
c.SetPermissionError(model.PermissionViewTeam)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -553,14 +553,14 @@ func updatePost(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToChannelByPost(*c.AppContext.Session(), c.Params.PostId, model.PERMISSION_EDIT_POST) {
|
if !c.App.SessionHasPermissionToChannelByPost(*c.AppContext.Session(), c.Params.PostId, model.PermissionEditPost) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_POST)
|
c.SetPermissionError(model.PermissionEditPost)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
originalPost, err := c.App.GetSinglePost(c.Params.PostId)
|
originalPost, err := c.App.GetSinglePost(c.Params.PostId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_POST)
|
c.SetPermissionError(model.PermissionEditPost)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
auditRec.AddMeta("post", originalPost)
|
auditRec.AddMeta("post", originalPost)
|
||||||
@@ -569,8 +569,8 @@ func updatePost(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
post.FileIds = originalPost.FileIds
|
post.FileIds = originalPost.FileIds
|
||||||
|
|
||||||
if c.AppContext.Session().UserId != originalPost.UserId {
|
if c.AppContext.Session().UserId != originalPost.UserId {
|
||||||
if !c.App.SessionHasPermissionToChannelByPost(*c.AppContext.Session(), c.Params.PostId, model.PERMISSION_EDIT_OTHERS_POSTS) {
|
if !c.App.SessionHasPermissionToChannelByPost(*c.AppContext.Session(), c.Params.PostId, model.PermissionEditOthersPosts) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHERS_POSTS)
|
c.SetPermissionError(model.PermissionEditOthersPosts)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -610,16 +610,16 @@ func patchPost(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
originalPost, err := c.App.GetSinglePost(c.Params.PostId)
|
originalPost, err := c.App.GetSinglePost(c.Params.PostId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_POST)
|
c.SetPermissionError(model.PermissionEditPost)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
auditRec.AddMeta("post", originalPost)
|
auditRec.AddMeta("post", originalPost)
|
||||||
|
|
||||||
var permission *model.Permission
|
var permission *model.Permission
|
||||||
if c.AppContext.Session().UserId == originalPost.UserId {
|
if c.AppContext.Session().UserId == originalPost.UserId {
|
||||||
permission = model.PERMISSION_EDIT_POST
|
permission = model.PermissionEditPost
|
||||||
} else {
|
} else {
|
||||||
permission = model.PERMISSION_EDIT_OTHERS_POSTS
|
permission = model.PermissionEditOthersPosts
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToChannelByPost(*c.AppContext.Session(), c.Params.PostId, permission) {
|
if !c.App.SessionHasPermissionToChannelByPost(*c.AppContext.Session(), c.Params.PostId, permission) {
|
||||||
@@ -649,11 +649,11 @@ func setPostUnread(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
collapsedThreadsSupported := props["collapsed_threads_supported"]
|
collapsedThreadsSupported := props["collapsed_threads_supported"]
|
||||||
|
|
||||||
if c.AppContext.Session().UserId != c.Params.UserId && !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
if c.AppContext.Session().UserId != c.Params.UserId && !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if !c.App.SessionHasPermissionToChannelByPost(*c.AppContext.Session(), c.Params.PostId, model.PERMISSION_READ_CHANNEL) {
|
if !c.App.SessionHasPermissionToChannelByPost(*c.AppContext.Session(), c.Params.PostId, model.PermissionReadChannel) {
|
||||||
c.SetPermissionError(model.PERMISSION_READ_CHANNEL)
|
c.SetPermissionError(model.PermissionReadChannel)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -674,8 +674,8 @@ func saveIsPinnedPost(c *Context, w http.ResponseWriter, isPinned bool) {
|
|||||||
auditRec := c.MakeAuditRecord("saveIsPinnedPost", audit.Fail)
|
auditRec := c.MakeAuditRecord("saveIsPinnedPost", audit.Fail)
|
||||||
defer c.LogAuditRecWithLevel(auditRec, app.LevelContent)
|
defer c.LogAuditRecWithLevel(auditRec, app.LevelContent)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToChannelByPost(*c.AppContext.Session(), c.Params.PostId, model.PERMISSION_READ_CHANNEL) {
|
if !c.App.SessionHasPermissionToChannelByPost(*c.AppContext.Session(), c.Params.PostId, model.PermissionReadChannel) {
|
||||||
c.SetPermissionError(model.PERMISSION_READ_CHANNEL)
|
c.SetPermissionError(model.PermissionReadChannel)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -701,8 +701,8 @@ func saveIsPinnedPost(c *Context, w http.ResponseWriter, isPinned bool) {
|
|||||||
|
|
||||||
if c.App.Srv().License() != nil &&
|
if c.App.Srv().License() != nil &&
|
||||||
*c.App.Config().TeamSettings.ExperimentalTownSquareIsReadOnly &&
|
*c.App.Config().TeamSettings.ExperimentalTownSquareIsReadOnly &&
|
||||||
channel.Name == model.DEFAULT_CHANNEL &&
|
channel.Name == model.DefaultChannelName &&
|
||||||
!c.App.RolesGrantPermission(user.GetRoles(), model.PERMISSION_MANAGE_SYSTEM.Id) {
|
!c.App.RolesGrantPermission(user.GetRoles(), model.PermissionManageSystem.Id) {
|
||||||
c.Err = model.NewAppError("saveIsPinnedPost", "api.post.save_is_pinned_post.town_square_read_only", nil, "", http.StatusForbidden)
|
c.Err = model.NewAppError("saveIsPinnedPost", "api.post.save_is_pinned_post.town_square_read_only", nil, "", http.StatusForbidden)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -735,8 +735,8 @@ func getFileInfosForPost(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToChannelByPost(*c.AppContext.Session(), c.Params.PostId, model.PERMISSION_READ_CHANNEL) {
|
if !c.App.SessionHasPermissionToChannelByPost(*c.AppContext.Session(), c.Params.PostId, model.PermissionReadChannel) {
|
||||||
c.SetPermissionError(model.PERMISSION_READ_CHANNEL)
|
c.SetPermissionError(model.PermissionReadChannel)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -751,6 +751,6 @@ func getFileInfosForPost(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
w.Header().Set("Cache-Control", "max-age=2592000, private")
|
w.Header().Set("Cache-Control", "max-age=2592000, private")
|
||||||
w.Header().Set(model.HEADER_ETAG_SERVER, model.GetEtagForFileInfos(infos))
|
w.Header().Set(model.HeaderEtagServer, model.GetEtagForFileInfos(infos))
|
||||||
w.Write([]byte(model.FileInfosToJson(infos)))
|
w.Write([]byte(model.FileInfosToJson(infos)))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ func TestCreatePost(t *testing.T) {
|
|||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
Client := th.Client
|
Client := th.Client
|
||||||
|
|
||||||
post := &model.Post{ChannelId: th.BasicChannel.Id, Message: "#hashtag a" + model.NewId() + "a", Props: model.StringInterface{model.PROPS_ADD_CHANNEL_MEMBER: "no good"}}
|
post := &model.Post{ChannelId: th.BasicChannel.Id, Message: "#hashtag a" + model.NewId() + "a", Props: model.StringInterface{model.PropsAddChannelMember: "no good"}}
|
||||||
rpost, resp := Client.CreatePost(post)
|
rpost, resp := Client.CreatePost(post)
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
CheckCreatedStatus(t, resp)
|
CheckCreatedStatus(t, resp)
|
||||||
@@ -43,7 +43,7 @@ func TestCreatePost(t *testing.T) {
|
|||||||
require.Equal(t, "#hashtag", rpost.Hashtags, "hashtag didn't match")
|
require.Equal(t, "#hashtag", rpost.Hashtags, "hashtag didn't match")
|
||||||
require.Empty(t, rpost.FileIds)
|
require.Empty(t, rpost.FileIds)
|
||||||
require.Equal(t, 0, int(rpost.EditAt), "newly created post shouldn't have EditAt set")
|
require.Equal(t, 0, int(rpost.EditAt), "newly created post shouldn't have EditAt set")
|
||||||
require.Nil(t, rpost.GetProp(model.PROPS_ADD_CHANNEL_MEMBER), "newly created post shouldn't have Props['add_channel_member'] set")
|
require.Nil(t, rpost.GetProp(model.PropsAddChannelMember), "newly created post shouldn't have Props['add_channel_member'] set")
|
||||||
|
|
||||||
post.RootId = rpost.Id
|
post.RootId = rpost.Id
|
||||||
post.ParentId = rpost.Id
|
post.ParentId = rpost.Id
|
||||||
@@ -124,7 +124,7 @@ func TestCreatePost(t *testing.T) {
|
|||||||
|
|
||||||
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
||||||
|
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_USE_CHANNEL_MENTIONS.Id, model.CHANNEL_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionUseChannelMentions.Id, model.ChannelUserRoleId)
|
||||||
|
|
||||||
post.RootId = rpost.Id
|
post.RootId = rpost.Id
|
||||||
post.ParentId = rpost.Id
|
post.ParentId = rpost.Id
|
||||||
@@ -138,7 +138,7 @@ func TestCreatePost(t *testing.T) {
|
|||||||
for waiting {
|
for waiting {
|
||||||
select {
|
select {
|
||||||
case event := <-WebSocketClient.EventChannel:
|
case event := <-WebSocketClient.EventChannel:
|
||||||
require.NotEqual(t, model.WEBSOCKET_EVENT_EPHEMERAL_MESSAGE, event.EventType(), "should not have ephemeral message event")
|
require.NotEqual(t, model.WebsocketEventEphemeralMessage, event.EventType(), "should not have ephemeral message event")
|
||||||
case <-timeout:
|
case <-timeout:
|
||||||
waiting = false
|
waiting = false
|
||||||
}
|
}
|
||||||
@@ -167,8 +167,8 @@ func TestCreatePost(t *testing.T) {
|
|||||||
for eventsToGo > 0 {
|
for eventsToGo > 0 {
|
||||||
select {
|
select {
|
||||||
case event := <-WebSocketClient.EventChannel:
|
case event := <-WebSocketClient.EventChannel:
|
||||||
if event.Event == model.WEBSOCKET_EVENT_EPHEMERAL_MESSAGE {
|
if event.Event == model.WebsocketEventEphemeralMessage {
|
||||||
require.Equal(t, model.WEBSOCKET_EVENT_EPHEMERAL_MESSAGE, event.Event)
|
require.Equal(t, model.WebsocketEventEphemeralMessage, event.Event)
|
||||||
eventsToGo = eventsToGo - 1
|
eventsToGo = eventsToGo - 1
|
||||||
}
|
}
|
||||||
case <-timeout:
|
case <-timeout:
|
||||||
@@ -180,7 +180,7 @@ func TestCreatePost(t *testing.T) {
|
|||||||
|
|
||||||
post.RootId = ""
|
post.RootId = ""
|
||||||
post.ParentId = ""
|
post.ParentId = ""
|
||||||
post.Type = model.POST_SYSTEM_GENERIC
|
post.Type = model.PostTypeSystemGeneric
|
||||||
_, resp = Client.CreatePost(post)
|
_, resp = Client.CreatePost(post)
|
||||||
CheckBadRequestStatus(t, resp)
|
CheckBadRequestStatus(t, resp)
|
||||||
|
|
||||||
@@ -222,7 +222,7 @@ func TestCreatePostEphemeral(t *testing.T) {
|
|||||||
|
|
||||||
ephemeralPost := &model.PostEphemeral{
|
ephemeralPost := &model.PostEphemeral{
|
||||||
UserID: th.BasicUser2.Id,
|
UserID: th.BasicUser2.Id,
|
||||||
Post: &model.Post{ChannelId: th.BasicChannel.Id, Message: "a" + model.NewId() + "a", Props: model.StringInterface{model.PROPS_ADD_CHANNEL_MEMBER: "no good"}},
|
Post: &model.Post{ChannelId: th.BasicChannel.Id, Message: "a" + model.NewId() + "a", Props: model.StringInterface{model.PropsAddChannelMember: "no good"}},
|
||||||
}
|
}
|
||||||
|
|
||||||
rpost, resp := Client.CreatePostEphemeral(ephemeralPost)
|
rpost, resp := Client.CreatePostEphemeral(ephemeralPost)
|
||||||
@@ -334,7 +334,7 @@ func testCreatePostWithOutgoingHook(
|
|||||||
|
|
||||||
respPostType := "" //if is empty or post will do a normal post.
|
respPostType := "" //if is empty or post will do a normal post.
|
||||||
if commentPostType {
|
if commentPostType {
|
||||||
respPostType = model.OUTGOING_HOOK_RESPONSE_TYPE_COMMENT
|
respPostType = model.OutgoingHookResponseTypeComment
|
||||||
}
|
}
|
||||||
|
|
||||||
outGoingHookResponse := &model.OutgoingWebhookResponse{
|
outGoingHookResponse := &model.OutgoingWebhookResponse{
|
||||||
@@ -437,7 +437,7 @@ func TestCreatePostPublic(t *testing.T) {
|
|||||||
|
|
||||||
post := &model.Post{ChannelId: th.BasicChannel.Id, Message: "#hashtag a" + model.NewId() + "a"}
|
post := &model.Post{ChannelId: th.BasicChannel.Id, Message: "#hashtag a" + model.NewId() + "a"}
|
||||||
|
|
||||||
user := model.User{Email: th.GenerateTestEmail(), Nickname: "Joram Wilander", Password: "hello1", Username: GenerateTestUsername(), Roles: model.SYSTEM_USER_ROLE_ID}
|
user := model.User{Email: th.GenerateTestEmail(), Nickname: "Joram Wilander", Password: "hello1", Username: GenerateTestUsername(), Roles: model.SystemUserRoleId}
|
||||||
|
|
||||||
ruser, resp := Client.CreateUser(&user)
|
ruser, resp := Client.CreateUser(&user)
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
@@ -447,7 +447,7 @@ func TestCreatePostPublic(t *testing.T) {
|
|||||||
_, resp = Client.CreatePost(post)
|
_, resp = Client.CreatePost(post)
|
||||||
CheckForbiddenStatus(t, resp)
|
CheckForbiddenStatus(t, resp)
|
||||||
|
|
||||||
th.App.UpdateUserRoles(ruser.Id, model.SYSTEM_USER_ROLE_ID+" "+model.SYSTEM_POST_ALL_PUBLIC_ROLE_ID, false)
|
th.App.UpdateUserRoles(ruser.Id, model.SystemUserRoleId+" "+model.SystemPostAllPublicRoleId, false)
|
||||||
th.App.Srv().InvalidateAllCaches()
|
th.App.Srv().InvalidateAllCaches()
|
||||||
|
|
||||||
Client.Login(user.Email, user.Password)
|
Client.Login(user.Email, user.Password)
|
||||||
@@ -459,9 +459,9 @@ func TestCreatePostPublic(t *testing.T) {
|
|||||||
_, resp = Client.CreatePost(post)
|
_, resp = Client.CreatePost(post)
|
||||||
CheckForbiddenStatus(t, resp)
|
CheckForbiddenStatus(t, resp)
|
||||||
|
|
||||||
th.App.UpdateUserRoles(ruser.Id, model.SYSTEM_USER_ROLE_ID, false)
|
th.App.UpdateUserRoles(ruser.Id, model.SystemUserRoleId, false)
|
||||||
th.App.JoinUserToTeam(th.Context, th.BasicTeam, ruser, "")
|
th.App.JoinUserToTeam(th.Context, th.BasicTeam, ruser, "")
|
||||||
th.App.UpdateTeamMemberRoles(th.BasicTeam.Id, ruser.Id, model.TEAM_USER_ROLE_ID+" "+model.TEAM_POST_ALL_PUBLIC_ROLE_ID)
|
th.App.UpdateTeamMemberRoles(th.BasicTeam.Id, ruser.Id, model.TeamUserRoleId+" "+model.TeamPostAllPublicRoleId)
|
||||||
th.App.Srv().InvalidateAllCaches()
|
th.App.Srv().InvalidateAllCaches()
|
||||||
|
|
||||||
Client.Login(user.Email, user.Password)
|
Client.Login(user.Email, user.Password)
|
||||||
@@ -482,7 +482,7 @@ func TestCreatePostAll(t *testing.T) {
|
|||||||
|
|
||||||
post := &model.Post{ChannelId: th.BasicChannel.Id, Message: "#hashtag a" + model.NewId() + "a"}
|
post := &model.Post{ChannelId: th.BasicChannel.Id, Message: "#hashtag a" + model.NewId() + "a"}
|
||||||
|
|
||||||
user := model.User{Email: th.GenerateTestEmail(), Nickname: "Joram Wilander", Password: "hello1", Username: GenerateTestUsername(), Roles: model.SYSTEM_USER_ROLE_ID}
|
user := model.User{Email: th.GenerateTestEmail(), Nickname: "Joram Wilander", Password: "hello1", Username: GenerateTestUsername(), Roles: model.SystemUserRoleId}
|
||||||
|
|
||||||
directChannel, _ := th.App.GetOrCreateDirectChannel(th.Context, th.BasicUser.Id, th.BasicUser2.Id)
|
directChannel, _ := th.App.GetOrCreateDirectChannel(th.Context, th.BasicUser.Id, th.BasicUser2.Id)
|
||||||
|
|
||||||
@@ -494,7 +494,7 @@ func TestCreatePostAll(t *testing.T) {
|
|||||||
_, resp = Client.CreatePost(post)
|
_, resp = Client.CreatePost(post)
|
||||||
CheckForbiddenStatus(t, resp)
|
CheckForbiddenStatus(t, resp)
|
||||||
|
|
||||||
th.App.UpdateUserRoles(ruser.Id, model.SYSTEM_USER_ROLE_ID+" "+model.SYSTEM_POST_ALL_ROLE_ID, false)
|
th.App.UpdateUserRoles(ruser.Id, model.SystemUserRoleId+" "+model.SystemPostAllRoleId, false)
|
||||||
th.App.Srv().InvalidateAllCaches()
|
th.App.Srv().InvalidateAllCaches()
|
||||||
|
|
||||||
Client.Login(user.Email, user.Password)
|
Client.Login(user.Email, user.Password)
|
||||||
@@ -510,9 +510,9 @@ func TestCreatePostAll(t *testing.T) {
|
|||||||
_, resp = Client.CreatePost(post)
|
_, resp = Client.CreatePost(post)
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
|
|
||||||
th.App.UpdateUserRoles(ruser.Id, model.SYSTEM_USER_ROLE_ID, false)
|
th.App.UpdateUserRoles(ruser.Id, model.SystemUserRoleId, false)
|
||||||
th.App.JoinUserToTeam(th.Context, th.BasicTeam, ruser, "")
|
th.App.JoinUserToTeam(th.Context, th.BasicTeam, ruser, "")
|
||||||
th.App.UpdateTeamMemberRoles(th.BasicTeam.Id, ruser.Id, model.TEAM_USER_ROLE_ID+" "+model.TEAM_POST_ALL_ROLE_ID)
|
th.App.UpdateTeamMemberRoles(th.BasicTeam.Id, ruser.Id, model.TeamUserRoleId+" "+model.TeamPostAllRoleId)
|
||||||
th.App.Srv().InvalidateAllCaches()
|
th.App.Srv().InvalidateAllCaches()
|
||||||
|
|
||||||
Client.Login(user.Email, user.Password)
|
Client.Login(user.Email, user.Password)
|
||||||
@@ -553,7 +553,7 @@ func TestCreatePostSendOutOfChannelMentions(t *testing.T) {
|
|||||||
for waiting {
|
for waiting {
|
||||||
select {
|
select {
|
||||||
case event := <-WebSocketClient.EventChannel:
|
case event := <-WebSocketClient.EventChannel:
|
||||||
require.NotEqual(t, model.WEBSOCKET_EVENT_EPHEMERAL_MESSAGE, event.EventType(), "should not have ephemeral message event")
|
require.NotEqual(t, model.WebsocketEventEphemeralMessage, event.EventType(), "should not have ephemeral message event")
|
||||||
case <-timeout:
|
case <-timeout:
|
||||||
waiting = false
|
waiting = false
|
||||||
}
|
}
|
||||||
@@ -572,14 +572,14 @@ func TestCreatePostSendOutOfChannelMentions(t *testing.T) {
|
|||||||
for waiting {
|
for waiting {
|
||||||
select {
|
select {
|
||||||
case event := <-WebSocketClient.EventChannel:
|
case event := <-WebSocketClient.EventChannel:
|
||||||
if event.EventType() != model.WEBSOCKET_EVENT_EPHEMERAL_MESSAGE {
|
if event.EventType() != model.WebsocketEventEphemeralMessage {
|
||||||
// Ignore any other events
|
// Ignore any other events
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
wpost := model.PostFromJson(strings.NewReader(event.GetData()["post"].(string)))
|
wpost := model.PostFromJson(strings.NewReader(event.GetData()["post"].(string)))
|
||||||
|
|
||||||
acm, ok := wpost.GetProp(model.PROPS_ADD_CHANNEL_MEMBER).(map[string]interface{})
|
acm, ok := wpost.GetProp(model.PropsAddChannelMember).(map[string]interface{})
|
||||||
require.True(t, ok, "should have received ephemeral post with 'add_channel_member' in props")
|
require.True(t, ok, "should have received ephemeral post with 'add_channel_member' in props")
|
||||||
require.True(t, acm["post_id"] != nil, "should not be nil")
|
require.True(t, acm["post_id"] != nil, "should not be nil")
|
||||||
require.True(t, acm["user_ids"] != nil, "should not be nil")
|
require.True(t, acm["user_ids"] != nil, "should not be nil")
|
||||||
@@ -613,7 +613,7 @@ func TestCreatePostCheckOnlineStatus(t *testing.T) {
|
|||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case ev := <-wsClient.EventChannel:
|
case ev := <-wsClient.EventChannel:
|
||||||
if ev.EventType() == model.WEBSOCKET_EVENT_POSTED {
|
if ev.EventType() == model.WebsocketEventPosted {
|
||||||
assert.True(t, ev.GetData()["set_online"].(bool) == isSetOnline)
|
assert.True(t, ev.GetData()["set_online"].(bool) == isSetOnline)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -634,7 +634,7 @@ func TestCreatePostCheckOnlineStatus(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
req := httptest.NewRequest("POST", "/api/v4/posts?set_online=false", strings.NewReader(post.ToJson()))
|
req := httptest.NewRequest("POST", "/api/v4/posts?set_online=false", strings.NewReader(post.ToJson()))
|
||||||
req.Header.Set(model.HEADER_AUTH, "Bearer "+session.Token)
|
req.Header.Set(model.HeaderAuth, "Bearer "+session.Token)
|
||||||
|
|
||||||
handler.ServeHTTP(resp, req)
|
handler.ServeHTTP(resp, req)
|
||||||
assert.Equal(t, http.StatusCreated, resp.Code)
|
assert.Equal(t, http.StatusCreated, resp.Code)
|
||||||
@@ -645,7 +645,7 @@ func TestCreatePostCheckOnlineStatus(t *testing.T) {
|
|||||||
assert.Equal(t, "app.status.get.missing.app_error", err.Id)
|
assert.Equal(t, "app.status.get.missing.app_error", err.Id)
|
||||||
|
|
||||||
req = httptest.NewRequest("POST", "/api/v4/posts", strings.NewReader(post.ToJson()))
|
req = httptest.NewRequest("POST", "/api/v4/posts", strings.NewReader(post.ToJson()))
|
||||||
req.Header.Set(model.HEADER_AUTH, "Bearer "+session.Token)
|
req.Header.Set(model.HeaderAuth, "Bearer "+session.Token)
|
||||||
|
|
||||||
handler.ServeHTTP(resp, req)
|
handler.ServeHTTP(resp, req)
|
||||||
assert.Equal(t, http.StatusCreated, resp.Code)
|
assert.Equal(t, http.StatusCreated, resp.Code)
|
||||||
@@ -712,27 +712,27 @@ func TestUpdatePost(t *testing.T) {
|
|||||||
t.Run("new message, invalid props", func(t *testing.T) {
|
t.Run("new message, invalid props", func(t *testing.T) {
|
||||||
msg1 := "#hashtag a" + model.NewId() + " update post again"
|
msg1 := "#hashtag a" + model.NewId() + " update post again"
|
||||||
rpost.Message = msg1
|
rpost.Message = msg1
|
||||||
rpost.AddProp(model.PROPS_ADD_CHANNEL_MEMBER, "no good")
|
rpost.AddProp(model.PropsAddChannelMember, "no good")
|
||||||
rrupost, resp := Client.UpdatePost(rpost.Id, rpost)
|
rrupost, resp := Client.UpdatePost(rpost.Id, rpost)
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
|
|
||||||
assert.Equal(t, msg1, rrupost.Message, "failed to update message")
|
assert.Equal(t, msg1, rrupost.Message, "failed to update message")
|
||||||
assert.Equal(t, "#hashtag", rrupost.Hashtags, "failed to update hashtags")
|
assert.Equal(t, "#hashtag", rrupost.Hashtags, "failed to update hashtags")
|
||||||
assert.Nil(t, rrupost.GetProp(model.PROPS_ADD_CHANNEL_MEMBER), "failed to sanitize Props['add_channel_member'], should be nil")
|
assert.Nil(t, rrupost.GetProp(model.PropsAddChannelMember), "failed to sanitize Props['add_channel_member'], should be nil")
|
||||||
|
|
||||||
actual, resp := Client.GetPost(rpost.Id, "")
|
actual, resp := Client.GetPost(rpost.Id, "")
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
|
|
||||||
assert.Equal(t, msg1, actual.Message, "failed to update message")
|
assert.Equal(t, msg1, actual.Message, "failed to update message")
|
||||||
assert.Equal(t, "#hashtag", actual.Hashtags, "failed to update hashtags")
|
assert.Equal(t, "#hashtag", actual.Hashtags, "failed to update hashtags")
|
||||||
assert.Nil(t, actual.GetProp(model.PROPS_ADD_CHANNEL_MEMBER), "failed to sanitize Props['add_channel_member'], should be nil")
|
assert.Nil(t, actual.GetProp(model.PropsAddChannelMember), "failed to sanitize Props['add_channel_member'], should be nil")
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("join/leave post", func(t *testing.T) {
|
t.Run("join/leave post", func(t *testing.T) {
|
||||||
rpost2, err := th.App.CreatePost(th.Context, &model.Post{
|
rpost2, err := th.App.CreatePost(th.Context, &model.Post{
|
||||||
ChannelId: channel.Id,
|
ChannelId: channel.Id,
|
||||||
Message: "zz" + model.NewId() + "a",
|
Message: "zz" + model.NewId() + "a",
|
||||||
Type: model.POST_JOIN_LEAVE,
|
Type: model.PostTypeJoinLeave,
|
||||||
UserId: th.BasicUser.Id,
|
UserId: th.BasicUser.Id,
|
||||||
}, channel, false, true)
|
}, channel, false, true)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
@@ -955,8 +955,8 @@ func TestPatchPost(t *testing.T) {
|
|||||||
|
|
||||||
// Add permission to edit others'
|
// Add permission to edit others'
|
||||||
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions())
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_EDIT_POST.Id, model.CHANNEL_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionEditPost.Id, model.ChannelUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_EDIT_OTHERS_POSTS.Id, model.CHANNEL_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionEditOthersPosts.Id, model.ChannelUserRoleId)
|
||||||
|
|
||||||
_, resp = Client.PatchPost(post.Id, patch)
|
_, resp = Client.PatchPost(post.Id, patch)
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
@@ -1203,7 +1203,7 @@ func TestGetFlaggedPostsForUser(t *testing.T) {
|
|||||||
|
|
||||||
preference := model.Preference{
|
preference := model.Preference{
|
||||||
UserId: user.Id,
|
UserId: user.Id,
|
||||||
Category: model.PREFERENCE_CATEGORY_FLAGGED_POST,
|
Category: model.PreferenceCategoryFlaggedPost,
|
||||||
Name: post1.Id,
|
Name: post1.Id,
|
||||||
Value: "true",
|
Value: "true",
|
||||||
}
|
}
|
||||||
@@ -1293,7 +1293,7 @@ func TestGetFlaggedPostsForUser(t *testing.T) {
|
|||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
require.Empty(t, rpl.Posts)
|
require.Empty(t, rpl.Posts)
|
||||||
|
|
||||||
channel4 := th.CreateChannelWithClient(th.SystemAdminClient, model.CHANNEL_PRIVATE)
|
channel4 := th.CreateChannelWithClient(th.SystemAdminClient, model.ChannelTypePrivate)
|
||||||
post5 := th.CreatePostWithClient(th.SystemAdminClient, channel4)
|
post5 := th.CreatePostWithClient(th.SystemAdminClient, channel4)
|
||||||
|
|
||||||
preference.Name = post5.Id
|
preference.Name = post5.Id
|
||||||
@@ -2031,7 +2031,7 @@ func TestDeletePostMessage(t *testing.T) {
|
|||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case ev := <-wsClient.EventChannel:
|
case ev := <-wsClient.EventChannel:
|
||||||
if ev.EventType() == model.WEBSOCKET_EVENT_POST_DELETED {
|
if ev.EventType() == model.WebsocketEventPostDeleted {
|
||||||
assert.Equal(t, tc.delete_by, ev.GetData()["delete_by"])
|
assert.Equal(t, tc.delete_by, ev.GetData()["delete_by"])
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -2554,7 +2554,7 @@ func TestSetPostUnreadWithoutCollapsedThreads(t *testing.T) {
|
|||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) {
|
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||||
*cfg.ServiceSettings.ThreadAutoFollow = true
|
*cfg.ServiceSettings.ThreadAutoFollow = true
|
||||||
*cfg.ServiceSettings.CollapsedThreads = model.COLLAPSED_THREADS_DEFAULT_ON
|
*cfg.ServiceSettings.CollapsedThreads = model.CollapsedThreadsDefaultOn
|
||||||
})
|
})
|
||||||
|
|
||||||
// user2: first root mention @user1
|
// user2: first root mention @user1
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ func getPreferences(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -45,7 +45,7 @@ func getPreferencesByCategory(c *Context, w http.ResponseWriter, r *http.Request
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -65,7 +65,7 @@ func getPreferenceByCategoryAndName(c *Context, w http.ResponseWriter, r *http.R
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -88,7 +88,7 @@ func updatePreferences(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -101,15 +101,15 @@ func updatePreferences(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
var sanitizedPreferences model.Preferences
|
var sanitizedPreferences model.Preferences
|
||||||
|
|
||||||
for _, pref := range preferences {
|
for _, pref := range preferences {
|
||||||
if pref.Category == model.PREFERENCE_CATEGORY_FLAGGED_POST {
|
if pref.Category == model.PreferenceCategoryFlaggedPost {
|
||||||
post, err := c.App.GetSinglePost(pref.Name)
|
post, err := c.App.GetSinglePost(pref.Name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.SetInvalidParam("preference.name")
|
c.SetInvalidParam("preference.name")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), post.ChannelId, model.PERMISSION_READ_CHANNEL) {
|
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), post.ChannelId, model.PermissionReadChannel) {
|
||||||
c.SetPermissionError(model.PERMISSION_READ_CHANNEL)
|
c.SetPermissionError(model.PermissionReadChannel)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -136,7 +136,7 @@ func deletePreferences(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -139,13 +139,13 @@ func TestGetPreferenceByCategoryAndName(t *testing.T) {
|
|||||||
preferences := model.Preferences{
|
preferences := model.Preferences{
|
||||||
{
|
{
|
||||||
UserId: user.Id,
|
UserId: user.Id,
|
||||||
Category: model.PREFERENCE_CATEGORY_DIRECT_CHANNEL_SHOW,
|
Category: model.PreferenceCategoryDirectChannelShow,
|
||||||
Name: name,
|
Name: name,
|
||||||
Value: value,
|
Value: value,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
UserId: user.Id,
|
UserId: user.Id,
|
||||||
Category: model.PREFERENCE_CATEGORY_DIRECT_CHANNEL_SHOW,
|
Category: model.PreferenceCategoryDirectChannelShow,
|
||||||
Name: model.NewId(),
|
Name: model.NewId(),
|
||||||
Value: model.NewId(),
|
Value: model.NewId(),
|
||||||
},
|
},
|
||||||
@@ -153,7 +153,7 @@ func TestGetPreferenceByCategoryAndName(t *testing.T) {
|
|||||||
|
|
||||||
Client.UpdatePreferences(user.Id, &preferences)
|
Client.UpdatePreferences(user.Id, &preferences)
|
||||||
|
|
||||||
pref, resp := Client.GetPreferenceByCategoryAndName(user.Id, model.PREFERENCE_CATEGORY_DIRECT_CHANNEL_SHOW, name)
|
pref, resp := Client.GetPreferenceByCategoryAndName(user.Id, model.PreferenceCategoryDirectChannelShow, name)
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
|
|
||||||
require.Equal(t, preferences[0].UserId, pref.UserId, "UserId preference not saved")
|
require.Equal(t, preferences[0].UserId, pref.UserId, "UserId preference not saved")
|
||||||
@@ -250,7 +250,7 @@ func TestUpdatePreferencesWebsocket(t *testing.T) {
|
|||||||
WebSocketClient.Listen()
|
WebSocketClient.Listen()
|
||||||
time.Sleep(300 * time.Millisecond)
|
time.Sleep(300 * time.Millisecond)
|
||||||
wsResp := <-WebSocketClient.ResponseChannel
|
wsResp := <-WebSocketClient.ResponseChannel
|
||||||
require.Equal(t, wsResp.Status, model.STATUS_OK, "expected OK from auth challenge")
|
require.Equal(t, wsResp.Status, model.StatusOk, "expected OK from auth challenge")
|
||||||
|
|
||||||
userId := th.BasicUser.Id
|
userId := th.BasicUser.Id
|
||||||
preferences := &model.Preferences{
|
preferences := &model.Preferences{
|
||||||
@@ -275,7 +275,7 @@ func TestUpdatePreferencesWebsocket(t *testing.T) {
|
|||||||
for waiting {
|
for waiting {
|
||||||
select {
|
select {
|
||||||
case event := <-WebSocketClient.EventChannel:
|
case event := <-WebSocketClient.EventChannel:
|
||||||
if event.EventType() != model.WEBSOCKET_EVENT_PREFERENCES_CHANGED {
|
if event.EventType() != model.WebsocketEventPreferencesChanged {
|
||||||
// Ignore any other events
|
// Ignore any other events
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
@@ -309,7 +309,7 @@ func TestUpdateSidebarPreferences(t *testing.T) {
|
|||||||
_, resp := th.Client.GetSidebarCategoriesForTeamForUser(user.Id, team1.Id, "")
|
_, resp := th.Client.GetSidebarCategoriesForTeamForUser(user.Id, team1.Id, "")
|
||||||
require.Nil(t, resp.Error)
|
require.Nil(t, resp.Error)
|
||||||
|
|
||||||
channel := th.CreateChannelWithClientAndTeam(th.Client, model.CHANNEL_OPEN, team1.Id)
|
channel := th.CreateChannelWithClientAndTeam(th.Client, model.ChannelTypeOpen, team1.Id)
|
||||||
th.AddUserToChannel(user, channel)
|
th.AddUserToChannel(user, channel)
|
||||||
|
|
||||||
// Confirm that the sidebar is populated correctly to begin with
|
// Confirm that the sidebar is populated correctly to begin with
|
||||||
@@ -324,7 +324,7 @@ func TestUpdateSidebarPreferences(t *testing.T) {
|
|||||||
_, resp = th.Client.UpdatePreferences(user.Id, &model.Preferences{
|
_, resp = th.Client.UpdatePreferences(user.Id, &model.Preferences{
|
||||||
{
|
{
|
||||||
UserId: user.Id,
|
UserId: user.Id,
|
||||||
Category: model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL,
|
Category: model.PreferenceCategoryFavoriteChannel,
|
||||||
Name: channel.Id,
|
Name: channel.Id,
|
||||||
Value: "true",
|
Value: "true",
|
||||||
},
|
},
|
||||||
@@ -343,7 +343,7 @@ func TestUpdateSidebarPreferences(t *testing.T) {
|
|||||||
_, resp = th.Client.UpdatePreferences(user.Id, &model.Preferences{
|
_, resp = th.Client.UpdatePreferences(user.Id, &model.Preferences{
|
||||||
{
|
{
|
||||||
UserId: user.Id,
|
UserId: user.Id,
|
||||||
Category: model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL,
|
Category: model.PreferenceCategoryFavoriteChannel,
|
||||||
Name: channel.Id,
|
Name: channel.Id,
|
||||||
Value: "false",
|
Value: "false",
|
||||||
},
|
},
|
||||||
@@ -377,7 +377,7 @@ func TestUpdateSidebarPreferences(t *testing.T) {
|
|||||||
_, resp := th.Client.UpdatePreferences(user.Id, &model.Preferences{
|
_, resp := th.Client.UpdatePreferences(user.Id, &model.Preferences{
|
||||||
{
|
{
|
||||||
UserId: user.Id,
|
UserId: user.Id,
|
||||||
Category: model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL,
|
Category: model.PreferenceCategoryFavoriteChannel,
|
||||||
Name: dmChannel.Id,
|
Name: dmChannel.Id,
|
||||||
Value: "true",
|
Value: "true",
|
||||||
},
|
},
|
||||||
@@ -403,7 +403,7 @@ func TestUpdateSidebarPreferences(t *testing.T) {
|
|||||||
_, resp = th.Client.UpdatePreferences(user.Id, &model.Preferences{
|
_, resp = th.Client.UpdatePreferences(user.Id, &model.Preferences{
|
||||||
{
|
{
|
||||||
UserId: user.Id,
|
UserId: user.Id,
|
||||||
Category: model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL,
|
Category: model.PreferenceCategoryFavoriteChannel,
|
||||||
Name: dmChannel.Id,
|
Name: dmChannel.Id,
|
||||||
Value: "false",
|
Value: "false",
|
||||||
},
|
},
|
||||||
@@ -445,7 +445,7 @@ func TestUpdateSidebarPreferences(t *testing.T) {
|
|||||||
_, resp = client2.GetSidebarCategoriesForTeamForUser(user2.Id, team1.Id, "")
|
_, resp = client2.GetSidebarCategoriesForTeamForUser(user2.Id, team1.Id, "")
|
||||||
require.Nil(t, resp.Error)
|
require.Nil(t, resp.Error)
|
||||||
|
|
||||||
channel := th.CreateChannelWithClientAndTeam(th.Client, model.CHANNEL_OPEN, team1.Id)
|
channel := th.CreateChannelWithClientAndTeam(th.Client, model.ChannelTypeOpen, team1.Id)
|
||||||
th.AddUserToChannel(user, channel)
|
th.AddUserToChannel(user, channel)
|
||||||
th.AddUserToChannel(user2, channel)
|
th.AddUserToChannel(user2, channel)
|
||||||
|
|
||||||
@@ -468,7 +468,7 @@ func TestUpdateSidebarPreferences(t *testing.T) {
|
|||||||
_, resp = th.Client.UpdatePreferences(user.Id, &model.Preferences{
|
_, resp = th.Client.UpdatePreferences(user.Id, &model.Preferences{
|
||||||
{
|
{
|
||||||
UserId: user.Id,
|
UserId: user.Id,
|
||||||
Category: model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL,
|
Category: model.PreferenceCategoryFavoriteChannel,
|
||||||
Name: channel.Id,
|
Name: channel.Id,
|
||||||
Value: "true",
|
Value: "true",
|
||||||
},
|
},
|
||||||
@@ -487,7 +487,7 @@ func TestUpdateSidebarPreferences(t *testing.T) {
|
|||||||
_, resp = client2.UpdatePreferences(user2.Id, &model.Preferences{
|
_, resp = client2.UpdatePreferences(user2.Id, &model.Preferences{
|
||||||
{
|
{
|
||||||
UserId: user2.Id,
|
UserId: user2.Id,
|
||||||
Category: model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL,
|
Category: model.PreferenceCategoryFavoriteChannel,
|
||||||
Name: channel.Id,
|
Name: channel.Id,
|
||||||
Value: "true",
|
Value: "true",
|
||||||
},
|
},
|
||||||
@@ -506,7 +506,7 @@ func TestUpdateSidebarPreferences(t *testing.T) {
|
|||||||
_, resp = th.Client.UpdatePreferences(user.Id, &model.Preferences{
|
_, resp = th.Client.UpdatePreferences(user.Id, &model.Preferences{
|
||||||
{
|
{
|
||||||
UserId: user.Id,
|
UserId: user.Id,
|
||||||
Category: model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL,
|
Category: model.PreferenceCategoryFavoriteChannel,
|
||||||
Name: channel.Id,
|
Name: channel.Id,
|
||||||
Value: "false",
|
Value: "false",
|
||||||
},
|
},
|
||||||
@@ -538,7 +538,7 @@ func TestDeletePreferences(t *testing.T) {
|
|||||||
for i := 0; i < 10; i++ {
|
for i := 0; i < 10; i++ {
|
||||||
preference := model.Preference{
|
preference := model.Preference{
|
||||||
UserId: th.BasicUser.Id,
|
UserId: th.BasicUser.Id,
|
||||||
Category: model.PREFERENCE_CATEGORY_DIRECT_CHANNEL_SHOW,
|
Category: model.PreferenceCategoryDirectChannelShow,
|
||||||
Name: model.NewId(),
|
Name: model.NewId(),
|
||||||
}
|
}
|
||||||
preferences = append(preferences, preference)
|
preferences = append(preferences, preference)
|
||||||
@@ -593,7 +593,7 @@ func TestDeletePreferencesWebsocket(t *testing.T) {
|
|||||||
|
|
||||||
WebSocketClient.Listen()
|
WebSocketClient.Listen()
|
||||||
wsResp := <-WebSocketClient.ResponseChannel
|
wsResp := <-WebSocketClient.ResponseChannel
|
||||||
require.Equal(t, model.STATUS_OK, wsResp.Status, "should have responded OK to authentication challenge")
|
require.Equal(t, model.StatusOk, wsResp.Status, "should have responded OK to authentication challenge")
|
||||||
|
|
||||||
_, resp = th.Client.DeletePreferences(userId, preferences)
|
_, resp = th.Client.DeletePreferences(userId, preferences)
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
@@ -604,7 +604,7 @@ func TestDeletePreferencesWebsocket(t *testing.T) {
|
|||||||
for waiting {
|
for waiting {
|
||||||
select {
|
select {
|
||||||
case event := <-WebSocketClient.EventChannel:
|
case event := <-WebSocketClient.EventChannel:
|
||||||
if event.EventType() != model.WEBSOCKET_EVENT_PREFERENCES_DELETED {
|
if event.EventType() != model.WebsocketEventPreferencesDeleted {
|
||||||
// Ignore any other events
|
// Ignore any other events
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
@@ -638,7 +638,7 @@ func TestDeleteSidebarPreferences(t *testing.T) {
|
|||||||
_, resp := th.Client.GetSidebarCategoriesForTeamForUser(user.Id, team1.Id, "")
|
_, resp := th.Client.GetSidebarCategoriesForTeamForUser(user.Id, team1.Id, "")
|
||||||
require.Nil(t, resp.Error)
|
require.Nil(t, resp.Error)
|
||||||
|
|
||||||
channel := th.CreateChannelWithClientAndTeam(th.Client, model.CHANNEL_OPEN, team1.Id)
|
channel := th.CreateChannelWithClientAndTeam(th.Client, model.ChannelTypeOpen, team1.Id)
|
||||||
th.AddUserToChannel(user, channel)
|
th.AddUserToChannel(user, channel)
|
||||||
|
|
||||||
// Confirm that the sidebar is populated correctly to begin with
|
// Confirm that the sidebar is populated correctly to begin with
|
||||||
@@ -653,7 +653,7 @@ func TestDeleteSidebarPreferences(t *testing.T) {
|
|||||||
_, resp = th.Client.UpdatePreferences(user.Id, &model.Preferences{
|
_, resp = th.Client.UpdatePreferences(user.Id, &model.Preferences{
|
||||||
{
|
{
|
||||||
UserId: user.Id,
|
UserId: user.Id,
|
||||||
Category: model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL,
|
Category: model.PreferenceCategoryFavoriteChannel,
|
||||||
Name: channel.Id,
|
Name: channel.Id,
|
||||||
Value: "true",
|
Value: "true",
|
||||||
},
|
},
|
||||||
@@ -672,7 +672,7 @@ func TestDeleteSidebarPreferences(t *testing.T) {
|
|||||||
_, resp = th.Client.DeletePreferences(user.Id, &model.Preferences{
|
_, resp = th.Client.DeletePreferences(user.Id, &model.Preferences{
|
||||||
{
|
{
|
||||||
UserId: user.Id,
|
UserId: user.Id,
|
||||||
Category: model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL,
|
Category: model.PreferenceCategoryFavoriteChannel,
|
||||||
Name: channel.Id,
|
Name: channel.Id,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
@@ -705,7 +705,7 @@ func TestDeleteSidebarPreferences(t *testing.T) {
|
|||||||
_, resp := th.Client.UpdatePreferences(user.Id, &model.Preferences{
|
_, resp := th.Client.UpdatePreferences(user.Id, &model.Preferences{
|
||||||
{
|
{
|
||||||
UserId: user.Id,
|
UserId: user.Id,
|
||||||
Category: model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL,
|
Category: model.PreferenceCategoryFavoriteChannel,
|
||||||
Name: dmChannel.Id,
|
Name: dmChannel.Id,
|
||||||
Value: "true",
|
Value: "true",
|
||||||
},
|
},
|
||||||
@@ -731,7 +731,7 @@ func TestDeleteSidebarPreferences(t *testing.T) {
|
|||||||
_, resp = th.Client.DeletePreferences(user.Id, &model.Preferences{
|
_, resp = th.Client.DeletePreferences(user.Id, &model.Preferences{
|
||||||
{
|
{
|
||||||
UserId: user.Id,
|
UserId: user.Id,
|
||||||
Category: model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL,
|
Category: model.PreferenceCategoryFavoriteChannel,
|
||||||
Name: dmChannel.Id,
|
Name: dmChannel.Id,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
@@ -772,7 +772,7 @@ func TestDeleteSidebarPreferences(t *testing.T) {
|
|||||||
_, resp = client2.GetSidebarCategoriesForTeamForUser(user2.Id, team1.Id, "")
|
_, resp = client2.GetSidebarCategoriesForTeamForUser(user2.Id, team1.Id, "")
|
||||||
require.Nil(t, resp.Error)
|
require.Nil(t, resp.Error)
|
||||||
|
|
||||||
channel := th.CreateChannelWithClientAndTeam(th.Client, model.CHANNEL_OPEN, team1.Id)
|
channel := th.CreateChannelWithClientAndTeam(th.Client, model.ChannelTypeOpen, team1.Id)
|
||||||
th.AddUserToChannel(user, channel)
|
th.AddUserToChannel(user, channel)
|
||||||
th.AddUserToChannel(user2, channel)
|
th.AddUserToChannel(user2, channel)
|
||||||
|
|
||||||
@@ -795,7 +795,7 @@ func TestDeleteSidebarPreferences(t *testing.T) {
|
|||||||
_, resp = th.Client.UpdatePreferences(user.Id, &model.Preferences{
|
_, resp = th.Client.UpdatePreferences(user.Id, &model.Preferences{
|
||||||
{
|
{
|
||||||
UserId: user.Id,
|
UserId: user.Id,
|
||||||
Category: model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL,
|
Category: model.PreferenceCategoryFavoriteChannel,
|
||||||
Name: channel.Id,
|
Name: channel.Id,
|
||||||
Value: "true",
|
Value: "true",
|
||||||
},
|
},
|
||||||
@@ -805,7 +805,7 @@ func TestDeleteSidebarPreferences(t *testing.T) {
|
|||||||
_, resp = client2.UpdatePreferences(user2.Id, &model.Preferences{
|
_, resp = client2.UpdatePreferences(user2.Id, &model.Preferences{
|
||||||
{
|
{
|
||||||
UserId: user2.Id,
|
UserId: user2.Id,
|
||||||
Category: model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL,
|
Category: model.PreferenceCategoryFavoriteChannel,
|
||||||
Name: channel.Id,
|
Name: channel.Id,
|
||||||
Value: "true",
|
Value: "true",
|
||||||
},
|
},
|
||||||
@@ -824,7 +824,7 @@ func TestDeleteSidebarPreferences(t *testing.T) {
|
|||||||
_, resp = th.Client.UpdatePreferences(user.Id, &model.Preferences{
|
_, resp = th.Client.UpdatePreferences(user.Id, &model.Preferences{
|
||||||
{
|
{
|
||||||
UserId: user.Id,
|
UserId: user.Id,
|
||||||
Category: model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL,
|
Category: model.PreferenceCategoryFavoriteChannel,
|
||||||
Name: channel.Id,
|
Name: channel.Id,
|
||||||
Value: "false",
|
Value: "false",
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ func saveReaction(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !model.IsValidId(reaction.UserId) || !model.IsValidId(reaction.PostId) || reaction.EmojiName == "" || len(reaction.EmojiName) > model.EMOJI_NAME_MAX_LENGTH {
|
if !model.IsValidId(reaction.UserId) || !model.IsValidId(reaction.PostId) || reaction.EmojiName == "" || len(reaction.EmojiName) > model.EmojiNameMaxLength {
|
||||||
c.Err = model.NewAppError("saveReaction", "api.reaction.save_reaction.invalid.app_error", nil, "", http.StatusBadRequest)
|
c.Err = model.NewAppError("saveReaction", "api.reaction.save_reaction.invalid.app_error", nil, "", http.StatusBadRequest)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -33,8 +33,8 @@ func saveReaction(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToChannelByPost(*c.AppContext.Session(), reaction.PostId, model.PERMISSION_ADD_REACTION) {
|
if !c.App.SessionHasPermissionToChannelByPost(*c.AppContext.Session(), reaction.PostId, model.PermissionAddReaction) {
|
||||||
c.SetPermissionError(model.PERMISSION_ADD_REACTION)
|
c.SetPermissionError(model.PermissionAddReaction)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -53,8 +53,8 @@ func getReactions(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToChannelByPost(*c.AppContext.Session(), c.Params.PostId, model.PERMISSION_READ_CHANNEL) {
|
if !c.App.SessionHasPermissionToChannelByPost(*c.AppContext.Session(), c.Params.PostId, model.PermissionReadChannel) {
|
||||||
c.SetPermissionError(model.PERMISSION_READ_CHANNEL)
|
c.SetPermissionError(model.PermissionReadChannel)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -83,13 +83,13 @@ func deleteReaction(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToChannelByPost(*c.AppContext.Session(), c.Params.PostId, model.PERMISSION_REMOVE_REACTION) {
|
if !c.App.SessionHasPermissionToChannelByPost(*c.AppContext.Session(), c.Params.PostId, model.PermissionRemoveReaction) {
|
||||||
c.SetPermissionError(model.PERMISSION_REMOVE_REACTION)
|
c.SetPermissionError(model.PermissionRemoveReaction)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.Params.UserId != c.AppContext.Session().UserId && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_REMOVE_OTHERS_REACTIONS) {
|
if c.Params.UserId != c.AppContext.Session().UserId && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionRemoveOthersReactions) {
|
||||||
c.SetPermissionError(model.PERMISSION_REMOVE_OTHERS_REACTIONS)
|
c.SetPermissionError(model.PermissionRemoveOthersReactions)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -111,8 +111,8 @@ func deleteReaction(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
func getBulkReactions(c *Context, w http.ResponseWriter, r *http.Request) {
|
func getBulkReactions(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||||
postIds := model.ArrayFromJson(r.Body)
|
postIds := model.ArrayFromJson(r.Body)
|
||||||
for _, postId := range postIds {
|
for _, postId := range postIds {
|
||||||
if !c.App.SessionHasPermissionToChannelByPost(*c.AppContext.Session(), postId, model.PERMISSION_READ_CHANNEL) {
|
if !c.App.SessionHasPermissionToChannelByPost(*c.AppContext.Session(), postId, model.PermissionReadChannel) {
|
||||||
c.SetPermissionError(model.PERMISSION_READ_CHANNEL)
|
c.SetPermissionError(model.PermissionReadChannel)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -145,14 +145,14 @@ func TestSaveReaction(t *testing.T) {
|
|||||||
t.Run("unable-to-create-reaction-without-permissions", func(t *testing.T) {
|
t.Run("unable-to-create-reaction-without-permissions", func(t *testing.T) {
|
||||||
th.LoginBasic()
|
th.LoginBasic()
|
||||||
|
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_ADD_REACTION.Id, model.CHANNEL_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionAddReaction.Id, model.ChannelUserRoleId)
|
||||||
_, resp := Client.SaveReaction(reaction)
|
_, resp := Client.SaveReaction(reaction)
|
||||||
CheckForbiddenStatus(t, resp)
|
CheckForbiddenStatus(t, resp)
|
||||||
|
|
||||||
reactions, err := th.App.GetReactionsForPost(postId)
|
reactions, err := th.App.GetReactionsForPost(postId)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
require.Equal(t, 3, len(reactions), "should have not created a reactions")
|
require.Equal(t, 3, len(reactions), "should have not created a reactions")
|
||||||
th.AddPermissionToRole(model.PERMISSION_ADD_REACTION.Id, model.CHANNEL_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionAddReaction.Id, model.ChannelUserRoleId)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("unable-to-react-in-read-only-town-square", func(t *testing.T) {
|
t.Run("unable-to-react-in-read-only-town-square", func(t *testing.T) {
|
||||||
@@ -455,7 +455,7 @@ func TestDeleteReaction(t *testing.T) {
|
|||||||
t.Run("unable-to-delete-reaction-without-permissions", func(t *testing.T) {
|
t.Run("unable-to-delete-reaction-without-permissions", func(t *testing.T) {
|
||||||
th.LoginBasic()
|
th.LoginBasic()
|
||||||
|
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_REMOVE_REACTION.Id, model.CHANNEL_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionRemoveReaction.Id, model.ChannelUserRoleId)
|
||||||
th.App.SaveReactionForPost(th.Context, r1)
|
th.App.SaveReactionForPost(th.Context, r1)
|
||||||
|
|
||||||
_, resp := Client.DeleteReaction(r1)
|
_, resp := Client.DeleteReaction(r1)
|
||||||
@@ -464,11 +464,11 @@ func TestDeleteReaction(t *testing.T) {
|
|||||||
reactions, err := th.App.GetReactionsForPost(postId)
|
reactions, err := th.App.GetReactionsForPost(postId)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
require.Equal(t, 1, len(reactions), "should have not deleted a reactions")
|
require.Equal(t, 1, len(reactions), "should have not deleted a reactions")
|
||||||
th.AddPermissionToRole(model.PERMISSION_REMOVE_REACTION.Id, model.CHANNEL_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionRemoveReaction.Id, model.ChannelUserRoleId)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("unable-to-delete-others-reactions-without-permissions", func(t *testing.T) {
|
t.Run("unable-to-delete-others-reactions-without-permissions", func(t *testing.T) {
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_REMOVE_OTHERS_REACTIONS.Id, model.SYSTEM_ADMIN_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionRemoveOthersReactions.Id, model.SystemAdminRoleId)
|
||||||
th.App.SaveReactionForPost(th.Context, r1)
|
th.App.SaveReactionForPost(th.Context, r1)
|
||||||
|
|
||||||
_, resp := th.SystemAdminClient.DeleteReaction(r1)
|
_, resp := th.SystemAdminClient.DeleteReaction(r1)
|
||||||
@@ -477,7 +477,7 @@ func TestDeleteReaction(t *testing.T) {
|
|||||||
reactions, err := th.App.GetReactionsForPost(postId)
|
reactions, err := th.App.GetReactionsForPost(postId)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
require.Equal(t, 1, len(reactions), "should have not deleted a reactions")
|
require.Equal(t, 1, len(reactions), "should have not deleted a reactions")
|
||||||
th.AddPermissionToRole(model.PERMISSION_REMOVE_OTHERS_REACTIONS.Id, model.SYSTEM_ADMIN_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionRemoveOthersReactions.Id, model.SystemAdminRoleId)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("unable-to-delete-reactions-in-read-only-town-square", func(t *testing.T) {
|
t.Run("unable-to-delete-reactions-in-read-only-town-square", func(t *testing.T) {
|
||||||
|
|||||||
42
api4/role.go
42
api4/role.go
@@ -11,21 +11,21 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var allowedPermissions = []string{
|
var allowedPermissions = []string{
|
||||||
model.PERMISSION_CREATE_TEAM.Id,
|
model.PermissionCreateTeam.Id,
|
||||||
model.PERMISSION_MANAGE_INCOMING_WEBHOOKS.Id,
|
model.PermissionManageIncomingWebhooks.Id,
|
||||||
model.PERMISSION_MANAGE_OUTGOING_WEBHOOKS.Id,
|
model.PermissionManageOutgoingWebhooks.Id,
|
||||||
model.PERMISSION_MANAGE_SLASH_COMMANDS.Id,
|
model.PermissionManageSlashCommands.Id,
|
||||||
model.PERMISSION_MANAGE_OAUTH.Id,
|
model.PermissionManageOAuth.Id,
|
||||||
model.PERMISSION_MANAGE_SYSTEM_WIDE_OAUTH.Id,
|
model.PermissionManageSystemWideOAuth.Id,
|
||||||
model.PERMISSION_CREATE_EMOJIS.Id,
|
model.PermissionCreateEmojis.Id,
|
||||||
model.PERMISSION_DELETE_EMOJIS.Id,
|
model.PermissionDeleteEmojis.Id,
|
||||||
model.PERMISSION_EDIT_OTHERS_POSTS.Id,
|
model.PermissionEditOthersPosts.Id,
|
||||||
}
|
}
|
||||||
|
|
||||||
var notAllowedPermissions = []string{
|
var notAllowedPermissions = []string{
|
||||||
model.PERMISSION_SYSCONSOLE_WRITE_USERMANAGEMENT_SYSTEM_ROLES.Id,
|
model.PermissionSysconsoleWriteUserManagementSystemRoles.Id,
|
||||||
model.PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_SYSTEM_ROLES.Id,
|
model.PermissionSysconsoleReadUserManagementSystemRoles.Id,
|
||||||
model.PERMISSION_MANAGE_ROLES.Id,
|
model.PermissionManageRoles.Id,
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *API) InitRole() {
|
func (api *API) InitRole() {
|
||||||
@@ -111,11 +111,11 @@ func patchRole(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
auditRec.AddMeta("role", oldRole)
|
auditRec.AddMeta("role", oldRole)
|
||||||
|
|
||||||
// manage_system permission is required to patch system_admin
|
// manage_system permission is required to patch system_admin
|
||||||
requiredPermission := model.PERMISSION_SYSCONSOLE_WRITE_USERMANAGEMENT_PERMISSIONS
|
requiredPermission := model.PermissionSysconsoleWriteUserManagementPermissions
|
||||||
specialProtectedSystemRoles := append(model.NewSystemRoleIDs, model.SYSTEM_ADMIN_ROLE_ID)
|
specialProtectedSystemRoles := append(model.NewSystemRoleIDs, model.SystemAdminRoleId)
|
||||||
for _, roleID := range specialProtectedSystemRoles {
|
for _, roleID := range specialProtectedSystemRoles {
|
||||||
if oldRole.Name == roleID {
|
if oldRole.Name == roleID {
|
||||||
requiredPermission = model.PERMISSION_MANAGE_SYSTEM
|
requiredPermission = model.PermissionManageSystem
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), requiredPermission) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), requiredPermission) {
|
||||||
@@ -123,7 +123,7 @@ func patchRole(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
isGuest := oldRole.Name == model.SYSTEM_GUEST_ROLE_ID || oldRole.Name == model.TEAM_GUEST_ROLE_ID || oldRole.Name == model.CHANNEL_GUEST_ROLE_ID
|
isGuest := oldRole.Name == model.SystemGuestRoleId || oldRole.Name == model.TeamGuestRoleId || oldRole.Name == model.ChannelGuestRoleId
|
||||||
if c.App.Srv().License() == nil && patch.Permissions != nil {
|
if c.App.Srv().License() == nil && patch.Permissions != nil {
|
||||||
if isGuest {
|
if isGuest {
|
||||||
c.Err = model.NewAppError("Api4.PatchRoles", "api.roles.patch_roles.license.error", nil, "", http.StatusNotImplemented)
|
c.Err = model.NewAppError("Api4.PatchRoles", "api.roles.patch_roles.license.error", nil, "", http.StatusNotImplemented)
|
||||||
@@ -171,14 +171,14 @@ func patchRole(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if oldRole.Name == model.TEAM_ADMIN_ROLE_ID || oldRole.Name == model.CHANNEL_ADMIN_ROLE_ID || oldRole.Name == model.SYSTEM_USER_ROLE_ID || oldRole.Name == model.TEAM_USER_ROLE_ID || oldRole.Name == model.CHANNEL_USER_ROLE_ID || oldRole.Name == model.SYSTEM_GUEST_ROLE_ID || oldRole.Name == model.TEAM_GUEST_ROLE_ID || oldRole.Name == model.CHANNEL_GUEST_ROLE_ID {
|
if oldRole.Name == model.TeamAdminRoleId || oldRole.Name == model.ChannelAdminRoleId || oldRole.Name == model.SystemUserRoleId || oldRole.Name == model.TeamUserRoleId || oldRole.Name == model.ChannelUserRoleId || oldRole.Name == model.SystemGuestRoleId || oldRole.Name == model.TeamGuestRoleId || oldRole.Name == model.ChannelGuestRoleId {
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_WRITE_USERMANAGEMENT_PERMISSIONS) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleWriteUserManagementPermissions) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_WRITE_USERMANAGEMENT_PERMISSIONS)
|
c.SetPermissionError(model.PermissionSysconsoleWriteUserManagementPermissions)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_WRITE_USERMANAGEMENT_SYSTEM_ROLES) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleWriteUserManagementSystemRoles) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_WRITE_USERMANAGEMENT_SYSTEM_ROLES)
|
c.SetPermissionError(model.PermissionSysconsoleWriteUserManagementSystemRoles)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -194,21 +194,21 @@ func TestPatchRole(t *testing.T) {
|
|||||||
defer th.App.Srv().Store.Job().Delete(systemManager.Id)
|
defer th.App.Srv().Store.Job().Delete(systemManager.Id)
|
||||||
|
|
||||||
patchWriteSystemRoles := &model.RolePatch{
|
patchWriteSystemRoles := &model.RolePatch{
|
||||||
Permissions: &[]string{model.PERMISSION_SYSCONSOLE_WRITE_USERMANAGEMENT_SYSTEM_ROLES.Id},
|
Permissions: &[]string{model.PermissionSysconsoleWriteUserManagementSystemRoles.Id},
|
||||||
}
|
}
|
||||||
|
|
||||||
_, resp = client.PatchRole(systemManager.Id, patchWriteSystemRoles)
|
_, resp = client.PatchRole(systemManager.Id, patchWriteSystemRoles)
|
||||||
CheckNotImplementedStatus(t, resp)
|
CheckNotImplementedStatus(t, resp)
|
||||||
|
|
||||||
patchReadSystemRoles := &model.RolePatch{
|
patchReadSystemRoles := &model.RolePatch{
|
||||||
Permissions: &[]string{model.PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_SYSTEM_ROLES.Id},
|
Permissions: &[]string{model.PermissionSysconsoleReadUserManagementSystemRoles.Id},
|
||||||
}
|
}
|
||||||
|
|
||||||
_, resp = client.PatchRole(systemManager.Id, patchReadSystemRoles)
|
_, resp = client.PatchRole(systemManager.Id, patchReadSystemRoles)
|
||||||
CheckNotImplementedStatus(t, resp)
|
CheckNotImplementedStatus(t, resp)
|
||||||
|
|
||||||
patchManageRoles := &model.RolePatch{
|
patchManageRoles := &model.RolePatch{
|
||||||
Permissions: &[]string{model.PERMISSION_MANAGE_ROLES.Id},
|
Permissions: &[]string{model.PermissionManageRoles.Id},
|
||||||
}
|
}
|
||||||
|
|
||||||
_, resp = client.PatchRole(systemManager.Id, patchManageRoles)
|
_, resp = client.PatchRole(systemManager.Id, patchManageRoles)
|
||||||
|
|||||||
36
api4/saml.go
36
api4/saml.go
@@ -69,8 +69,8 @@ func parseSamlCertificateRequest(r *http.Request, maxFileSize int64) (*multipart
|
|||||||
}
|
}
|
||||||
|
|
||||||
func addSamlPublicCertificate(c *Context, w http.ResponseWriter, r *http.Request) {
|
func addSamlPublicCertificate(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_ADD_SAML_PUBLIC_CERT) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionAddSamlPublicCert) {
|
||||||
c.SetPermissionError(model.PERMISSION_ADD_SAML_PUBLIC_CERT)
|
c.SetPermissionError(model.PermissionAddSamlPublicCert)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -93,8 +93,8 @@ func addSamlPublicCertificate(c *Context, w http.ResponseWriter, r *http.Request
|
|||||||
}
|
}
|
||||||
|
|
||||||
func addSamlPrivateCertificate(c *Context, w http.ResponseWriter, r *http.Request) {
|
func addSamlPrivateCertificate(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_ADD_SAML_PRIVATE_CERT) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionAddSamlPrivateCert) {
|
||||||
c.SetPermissionError(model.PERMISSION_ADD_SAML_PRIVATE_CERT)
|
c.SetPermissionError(model.PermissionAddSamlPrivateCert)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -117,8 +117,8 @@ func addSamlPrivateCertificate(c *Context, w http.ResponseWriter, r *http.Reques
|
|||||||
}
|
}
|
||||||
|
|
||||||
func addSamlIdpCertificate(c *Context, w http.ResponseWriter, r *http.Request) {
|
func addSamlIdpCertificate(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_ADD_SAML_IDP_CERT) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionAddSamlIdpCert) {
|
||||||
c.SetPermissionError(model.PERMISSION_ADD_SAML_IDP_CERT)
|
c.SetPermissionError(model.PermissionAddSamlIdpCert)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -170,8 +170,8 @@ func addSamlIdpCertificate(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func removeSamlPublicCertificate(c *Context, w http.ResponseWriter, r *http.Request) {
|
func removeSamlPublicCertificate(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_REMOVE_SAML_PUBLIC_CERT) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionRemoveSamlPublicCert) {
|
||||||
c.SetPermissionError(model.PERMISSION_REMOVE_SAML_PUBLIC_CERT)
|
c.SetPermissionError(model.PermissionRemoveSamlPublicCert)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -188,8 +188,8 @@ func removeSamlPublicCertificate(c *Context, w http.ResponseWriter, r *http.Requ
|
|||||||
}
|
}
|
||||||
|
|
||||||
func removeSamlPrivateCertificate(c *Context, w http.ResponseWriter, r *http.Request) {
|
func removeSamlPrivateCertificate(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_REMOVE_SAML_PRIVATE_CERT) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionRemoveSamlPrivateCert) {
|
||||||
c.SetPermissionError(model.PERMISSION_REMOVE_SAML_PRIVATE_CERT)
|
c.SetPermissionError(model.PermissionRemoveSamlPrivateCert)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -206,8 +206,8 @@ func removeSamlPrivateCertificate(c *Context, w http.ResponseWriter, r *http.Req
|
|||||||
}
|
}
|
||||||
|
|
||||||
func removeSamlIdpCertificate(c *Context, w http.ResponseWriter, r *http.Request) {
|
func removeSamlIdpCertificate(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_REMOVE_SAML_IDP_CERT) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionRemoveSamlIdpCert) {
|
||||||
c.SetPermissionError(model.PERMISSION_REMOVE_SAML_IDP_CERT)
|
c.SetPermissionError(model.PermissionRemoveSamlIdpCert)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -224,8 +224,8 @@ func removeSamlIdpCertificate(c *Context, w http.ResponseWriter, r *http.Request
|
|||||||
}
|
}
|
||||||
|
|
||||||
func getSamlCertificateStatus(c *Context, w http.ResponseWriter, r *http.Request) {
|
func getSamlCertificateStatus(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_GET_SAML_CERT_STATUS) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionGetSamlCertStatus) {
|
||||||
c.SetPermissionError(model.PERMISSION_GET_SAML_CERT_STATUS)
|
c.SetPermissionError(model.PermissionGetSamlCertStatus)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -234,8 +234,8 @@ func getSamlCertificateStatus(c *Context, w http.ResponseWriter, r *http.Request
|
|||||||
}
|
}
|
||||||
|
|
||||||
func getSamlMetadataFromIdp(c *Context, w http.ResponseWriter, r *http.Request) {
|
func getSamlMetadataFromIdp(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_GET_SAML_METADATA_FROM_IDP) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionGetSamlMetadataFromIdp) {
|
||||||
c.SetPermissionError(model.PERMISSION_GET_SAML_METADATA_FROM_IDP)
|
c.SetPermissionError(model.PermissionGetSamlMetadataFromIdp)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -256,8 +256,8 @@ func getSamlMetadataFromIdp(c *Context, w http.ResponseWriter, r *http.Request)
|
|||||||
}
|
}
|
||||||
|
|
||||||
func resetAuthDataToEmail(c *Context, w http.ResponseWriter, r *http.Request) {
|
func resetAuthDataToEmail(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM)
|
c.SetPermissionError(model.PermissionManageSystem)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
type ResetAuthDataParams struct {
|
type ResetAuthDataParams struct {
|
||||||
|
|||||||
@@ -35,11 +35,11 @@ func TestSamlCompleteCSRFPass(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
cookie1 := &http.Cookie{
|
cookie1 := &http.Cookie{
|
||||||
Name: model.SESSION_COOKIE_USER,
|
Name: model.SessionCookieUser,
|
||||||
Value: th.BasicUser.Username,
|
Value: th.BasicUser.Username,
|
||||||
}
|
}
|
||||||
cookie2 := &http.Cookie{
|
cookie2 := &http.Cookie{
|
||||||
Name: model.SESSION_COOKIE_TOKEN,
|
Name: model.SessionCookieToken,
|
||||||
Value: th.Client.AuthToken,
|
Value: th.Client.AuthToken,
|
||||||
}
|
}
|
||||||
req.AddCookie(cookie1)
|
req.AddCookie(cookie1)
|
||||||
@@ -60,7 +60,7 @@ func TestSamlResetId(t *testing.T) {
|
|||||||
user := th.BasicUser
|
user := th.BasicUser
|
||||||
_, appErr := th.App.UpdateUserAuth(user.Id, &model.UserAuth{
|
_, appErr := th.App.UpdateUserAuth(user.Id, &model.UserAuth{
|
||||||
AuthData: model.NewString(model.NewId()),
|
AuthData: model.NewString(model.NewId()),
|
||||||
AuthService: model.USER_AUTH_SERVICE_SAML,
|
AuthService: model.UserAuthServiceSaml,
|
||||||
})
|
})
|
||||||
require.Nil(t, appErr)
|
require.Nil(t, appErr)
|
||||||
|
|
||||||
|
|||||||
@@ -36,8 +36,8 @@ func createScheme(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_WRITE_USERMANAGEMENT_PERMISSIONS) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleWriteUserManagementPermissions) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_WRITE_USERMANAGEMENT_PERMISSIONS)
|
c.SetPermissionError(model.PermissionSysconsoleWriteUserManagementPermissions)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -60,8 +60,8 @@ func getScheme(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_PERMISSIONS) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleReadUserManagementPermissions) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_PERMISSIONS)
|
c.SetPermissionError(model.PermissionSysconsoleReadUserManagementPermissions)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -75,13 +75,13 @@ func getScheme(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func getSchemes(c *Context, w http.ResponseWriter, r *http.Request) {
|
func getSchemes(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_PERMISSIONS) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleReadUserManagementPermissions) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_PERMISSIONS)
|
c.SetPermissionError(model.PermissionSysconsoleReadUserManagementPermissions)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
scope := c.Params.Scope
|
scope := c.Params.Scope
|
||||||
if scope != "" && scope != model.SCHEME_SCOPE_TEAM && scope != model.SCHEME_SCOPE_CHANNEL {
|
if scope != "" && scope != model.SchemeScopeTeam && scope != model.SchemeScopeChannel {
|
||||||
c.SetInvalidParam("scope")
|
c.SetInvalidParam("scope")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -101,8 +101,8 @@ func getTeamsForScheme(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_TEAMS) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleReadUserManagementTeams) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_TEAMS)
|
c.SetPermissionError(model.PermissionSysconsoleReadUserManagementTeams)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -112,7 +112,7 @@ func getTeamsForScheme(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if scheme.Scope != model.SCHEME_SCOPE_TEAM {
|
if scheme.Scope != model.SchemeScopeTeam {
|
||||||
c.Err = model.NewAppError("Api4.GetTeamsForScheme", "api.scheme.get_teams_for_scheme.scope.error", nil, "", http.StatusBadRequest)
|
c.Err = model.NewAppError("Api4.GetTeamsForScheme", "api.scheme.get_teams_for_scheme.scope.error", nil, "", http.StatusBadRequest)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -132,8 +132,8 @@ func getChannelsForScheme(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_CHANNELS) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleReadUserManagementChannels) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_CHANNELS)
|
c.SetPermissionError(model.PermissionSysconsoleReadUserManagementChannels)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -143,7 +143,7 @@ func getChannelsForScheme(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if scheme.Scope != model.SCHEME_SCOPE_CHANNEL {
|
if scheme.Scope != model.SchemeScopeChannel {
|
||||||
c.Err = model.NewAppError("Api4.GetChannelsForScheme", "api.scheme.get_channels_for_scheme.scope.error", nil, "", http.StatusBadRequest)
|
c.Err = model.NewAppError("Api4.GetChannelsForScheme", "api.scheme.get_channels_for_scheme.scope.error", nil, "", http.StatusBadRequest)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -184,8 +184,8 @@ func patchScheme(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
auditRec.AddMeta("scheme", scheme)
|
auditRec.AddMeta("scheme", scheme)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_WRITE_USERMANAGEMENT_PERMISSIONS) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleWriteUserManagementPermissions) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_WRITE_USERMANAGEMENT_PERMISSIONS)
|
c.SetPermissionError(model.PermissionSysconsoleWriteUserManagementPermissions)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -216,8 +216,8 @@ func deleteScheme(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_WRITE_USERMANAGEMENT_PERMISSIONS) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleWriteUserManagementPermissions) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_WRITE_USERMANAGEMENT_PERMISSIONS)
|
c.SetPermissionError(model.PermissionSysconsoleWriteUserManagementPermissions)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ func TestCreateScheme(t *testing.T) {
|
|||||||
DisplayName: model.NewId(),
|
DisplayName: model.NewId(),
|
||||||
Name: model.NewId(),
|
Name: model.NewId(),
|
||||||
Description: model.NewId(),
|
Description: model.NewId(),
|
||||||
Scope: model.SCHEME_SCOPE_TEAM,
|
Scope: model.SchemeScopeTeam,
|
||||||
}
|
}
|
||||||
|
|
||||||
s1, r1 := th.SystemAdminClient.CreateScheme(scheme1)
|
s1, r1 := th.SystemAdminClient.CreateScheme(scheme1)
|
||||||
@@ -66,7 +66,7 @@ func TestCreateScheme(t *testing.T) {
|
|||||||
DisplayName: model.NewId(),
|
DisplayName: model.NewId(),
|
||||||
Name: model.NewId(),
|
Name: model.NewId(),
|
||||||
Description: model.NewId(),
|
Description: model.NewId(),
|
||||||
Scope: model.SCHEME_SCOPE_CHANNEL,
|
Scope: model.SchemeScopeChannel,
|
||||||
}
|
}
|
||||||
|
|
||||||
s2, r2 := th.SystemAdminClient.CreateScheme(scheme2)
|
s2, r2 := th.SystemAdminClient.CreateScheme(scheme2)
|
||||||
@@ -130,7 +130,7 @@ func TestCreateScheme(t *testing.T) {
|
|||||||
DisplayName: model.NewId(),
|
DisplayName: model.NewId(),
|
||||||
Name: model.NewId(),
|
Name: model.NewId(),
|
||||||
Description: model.NewId(),
|
Description: model.NewId(),
|
||||||
Scope: model.SCHEME_SCOPE_TEAM,
|
Scope: model.SchemeScopeTeam,
|
||||||
}
|
}
|
||||||
_, r5 := th.Client.CreateScheme(scheme5)
|
_, r5 := th.Client.CreateScheme(scheme5)
|
||||||
CheckForbiddenStatus(t, r5)
|
CheckForbiddenStatus(t, r5)
|
||||||
@@ -141,7 +141,7 @@ func TestCreateScheme(t *testing.T) {
|
|||||||
DisplayName: model.NewId(),
|
DisplayName: model.NewId(),
|
||||||
Name: model.NewId(),
|
Name: model.NewId(),
|
||||||
Description: model.NewId(),
|
Description: model.NewId(),
|
||||||
Scope: model.SCHEME_SCOPE_TEAM,
|
Scope: model.SchemeScopeTeam,
|
||||||
}
|
}
|
||||||
_, r6 := th.SystemAdminClient.CreateScheme(scheme6)
|
_, r6 := th.SystemAdminClient.CreateScheme(scheme6)
|
||||||
CheckNotImplementedStatus(t, r6)
|
CheckNotImplementedStatus(t, r6)
|
||||||
@@ -155,7 +155,7 @@ func TestCreateScheme(t *testing.T) {
|
|||||||
DisplayName: model.NewId(),
|
DisplayName: model.NewId(),
|
||||||
Name: model.NewId(),
|
Name: model.NewId(),
|
||||||
Description: model.NewId(),
|
Description: model.NewId(),
|
||||||
Scope: model.SCHEME_SCOPE_TEAM,
|
Scope: model.SchemeScopeTeam,
|
||||||
}
|
}
|
||||||
_, r7 := th.SystemAdminClient.CreateScheme(scheme7)
|
_, r7 := th.SystemAdminClient.CreateScheme(scheme7)
|
||||||
CheckNotImplementedStatus(t, r7)
|
CheckNotImplementedStatus(t, r7)
|
||||||
@@ -172,7 +172,7 @@ func TestGetScheme(t *testing.T) {
|
|||||||
DisplayName: model.NewId(),
|
DisplayName: model.NewId(),
|
||||||
Name: model.NewId(),
|
Name: model.NewId(),
|
||||||
Description: model.NewId(),
|
Description: model.NewId(),
|
||||||
Scope: model.SCHEME_SCOPE_TEAM,
|
Scope: model.SchemeScopeTeam,
|
||||||
}
|
}
|
||||||
|
|
||||||
th.App.SetPhase2PermissionsMigrationStatus(true)
|
th.App.SetPhase2PermissionsMigrationStatus(true)
|
||||||
@@ -233,14 +233,14 @@ func TestGetSchemes(t *testing.T) {
|
|||||||
DisplayName: model.NewId(),
|
DisplayName: model.NewId(),
|
||||||
Name: model.NewId(),
|
Name: model.NewId(),
|
||||||
Description: model.NewId(),
|
Description: model.NewId(),
|
||||||
Scope: model.SCHEME_SCOPE_TEAM,
|
Scope: model.SchemeScopeTeam,
|
||||||
}
|
}
|
||||||
|
|
||||||
scheme2 := &model.Scheme{
|
scheme2 := &model.Scheme{
|
||||||
DisplayName: model.NewId(),
|
DisplayName: model.NewId(),
|
||||||
Name: model.NewId(),
|
Name: model.NewId(),
|
||||||
Description: model.NewId(),
|
Description: model.NewId(),
|
||||||
Scope: model.SCHEME_SCOPE_CHANNEL,
|
Scope: model.SchemeScopeChannel,
|
||||||
}
|
}
|
||||||
|
|
||||||
th.App.SetPhase2PermissionsMigrationStatus(true)
|
th.App.SetPhase2PermissionsMigrationStatus(true)
|
||||||
@@ -298,7 +298,7 @@ func TestGetTeamsForScheme(t *testing.T) {
|
|||||||
DisplayName: model.NewId(),
|
DisplayName: model.NewId(),
|
||||||
Name: model.NewId(),
|
Name: model.NewId(),
|
||||||
Description: model.NewId(),
|
Description: model.NewId(),
|
||||||
Scope: model.SCHEME_SCOPE_TEAM,
|
Scope: model.SchemeScopeTeam,
|
||||||
}
|
}
|
||||||
scheme1, r1 := th.SystemAdminClient.CreateScheme(scheme1)
|
scheme1, r1 := th.SystemAdminClient.CreateScheme(scheme1)
|
||||||
CheckNoError(t, r1)
|
CheckNoError(t, r1)
|
||||||
@@ -306,7 +306,7 @@ func TestGetTeamsForScheme(t *testing.T) {
|
|||||||
team1 := &model.Team{
|
team1 := &model.Team{
|
||||||
Name: GenerateTestUsername(),
|
Name: GenerateTestUsername(),
|
||||||
DisplayName: "A Test Team",
|
DisplayName: "A Test Team",
|
||||||
Type: model.TEAM_OPEN,
|
Type: model.TeamOpen,
|
||||||
}
|
}
|
||||||
|
|
||||||
team1, err := th.App.Srv().Store.Team().Save(team1)
|
team1, err := th.App.Srv().Store.Team().Save(team1)
|
||||||
@@ -328,7 +328,7 @@ func TestGetTeamsForScheme(t *testing.T) {
|
|||||||
team2 := &model.Team{
|
team2 := &model.Team{
|
||||||
Name: GenerateTestUsername(),
|
Name: GenerateTestUsername(),
|
||||||
DisplayName: "B Test Team",
|
DisplayName: "B Test Team",
|
||||||
Type: model.TEAM_OPEN,
|
Type: model.TeamOpen,
|
||||||
SchemeId: &scheme1.Id,
|
SchemeId: &scheme1.Id,
|
||||||
}
|
}
|
||||||
team2, err = th.App.Srv().Store.Team().Save(team2)
|
team2, err = th.App.Srv().Store.Team().Save(team2)
|
||||||
@@ -364,7 +364,7 @@ func TestGetTeamsForScheme(t *testing.T) {
|
|||||||
DisplayName: model.NewId(),
|
DisplayName: model.NewId(),
|
||||||
Name: model.NewId(),
|
Name: model.NewId(),
|
||||||
Description: model.NewId(),
|
Description: model.NewId(),
|
||||||
Scope: model.SCHEME_SCOPE_CHANNEL,
|
Scope: model.SchemeScopeChannel,
|
||||||
}
|
}
|
||||||
scheme2, rs2 := th.SystemAdminClient.CreateScheme(scheme2)
|
scheme2, rs2 := th.SystemAdminClient.CreateScheme(scheme2)
|
||||||
CheckNoError(t, rs2)
|
CheckNoError(t, rs2)
|
||||||
@@ -390,7 +390,7 @@ func TestGetChannelsForScheme(t *testing.T) {
|
|||||||
DisplayName: model.NewId(),
|
DisplayName: model.NewId(),
|
||||||
Name: model.NewId(),
|
Name: model.NewId(),
|
||||||
Description: model.NewId(),
|
Description: model.NewId(),
|
||||||
Scope: model.SCHEME_SCOPE_CHANNEL,
|
Scope: model.SchemeScopeChannel,
|
||||||
}
|
}
|
||||||
scheme1, r1 := th.SystemAdminClient.CreateScheme(scheme1)
|
scheme1, r1 := th.SystemAdminClient.CreateScheme(scheme1)
|
||||||
CheckNoError(t, r1)
|
CheckNoError(t, r1)
|
||||||
@@ -399,7 +399,7 @@ func TestGetChannelsForScheme(t *testing.T) {
|
|||||||
TeamId: model.NewId(),
|
TeamId: model.NewId(),
|
||||||
DisplayName: "A Name",
|
DisplayName: "A Name",
|
||||||
Name: model.NewId(),
|
Name: model.NewId(),
|
||||||
Type: model.CHANNEL_OPEN,
|
Type: model.ChannelTypeOpen,
|
||||||
}
|
}
|
||||||
|
|
||||||
channel1, errCh := th.App.Srv().Store.Channel().Save(channel1, 1000000)
|
channel1, errCh := th.App.Srv().Store.Channel().Save(channel1, 1000000)
|
||||||
@@ -422,7 +422,7 @@ func TestGetChannelsForScheme(t *testing.T) {
|
|||||||
TeamId: model.NewId(),
|
TeamId: model.NewId(),
|
||||||
DisplayName: "B Name",
|
DisplayName: "B Name",
|
||||||
Name: model.NewId(),
|
Name: model.NewId(),
|
||||||
Type: model.CHANNEL_OPEN,
|
Type: model.ChannelTypeOpen,
|
||||||
SchemeId: &scheme1.Id,
|
SchemeId: &scheme1.Id,
|
||||||
}
|
}
|
||||||
channel2, nErr := th.App.Srv().Store.Channel().Save(channel2, 1000000)
|
channel2, nErr := th.App.Srv().Store.Channel().Save(channel2, 1000000)
|
||||||
@@ -458,7 +458,7 @@ func TestGetChannelsForScheme(t *testing.T) {
|
|||||||
DisplayName: model.NewId(),
|
DisplayName: model.NewId(),
|
||||||
Name: model.NewId(),
|
Name: model.NewId(),
|
||||||
Description: model.NewId(),
|
Description: model.NewId(),
|
||||||
Scope: model.SCHEME_SCOPE_TEAM,
|
Scope: model.SchemeScopeTeam,
|
||||||
}
|
}
|
||||||
scheme2, rs2 := th.SystemAdminClient.CreateScheme(scheme2)
|
scheme2, rs2 := th.SystemAdminClient.CreateScheme(scheme2)
|
||||||
CheckNoError(t, rs2)
|
CheckNoError(t, rs2)
|
||||||
@@ -485,7 +485,7 @@ func TestPatchScheme(t *testing.T) {
|
|||||||
DisplayName: model.NewId(),
|
DisplayName: model.NewId(),
|
||||||
Name: model.NewId(),
|
Name: model.NewId(),
|
||||||
Description: model.NewId(),
|
Description: model.NewId(),
|
||||||
Scope: model.SCHEME_SCOPE_TEAM,
|
Scope: model.SchemeScopeTeam,
|
||||||
}
|
}
|
||||||
|
|
||||||
s1, r1 := th.SystemAdminClient.CreateScheme(scheme1)
|
s1, r1 := th.SystemAdminClient.CreateScheme(scheme1)
|
||||||
@@ -593,7 +593,7 @@ func TestDeleteScheme(t *testing.T) {
|
|||||||
DisplayName: model.NewId(),
|
DisplayName: model.NewId(),
|
||||||
Name: model.NewId(),
|
Name: model.NewId(),
|
||||||
Description: model.NewId(),
|
Description: model.NewId(),
|
||||||
Scope: model.SCHEME_SCOPE_TEAM,
|
Scope: model.SchemeScopeTeam,
|
||||||
}
|
}
|
||||||
|
|
||||||
s1, r1 := th.SystemAdminClient.CreateScheme(scheme1)
|
s1, r1 := th.SystemAdminClient.CreateScheme(scheme1)
|
||||||
@@ -625,7 +625,7 @@ func TestDeleteScheme(t *testing.T) {
|
|||||||
Name: "zz" + model.NewId(),
|
Name: "zz" + model.NewId(),
|
||||||
DisplayName: model.NewId(),
|
DisplayName: model.NewId(),
|
||||||
Email: model.NewId() + "@nowhere.com",
|
Email: model.NewId() + "@nowhere.com",
|
||||||
Type: model.TEAM_OPEN,
|
Type: model.TeamOpen,
|
||||||
SchemeId: &s1.Id,
|
SchemeId: &s1.Id,
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
@@ -671,7 +671,7 @@ func TestDeleteScheme(t *testing.T) {
|
|||||||
DisplayName: model.NewId(),
|
DisplayName: model.NewId(),
|
||||||
Name: model.NewId(),
|
Name: model.NewId(),
|
||||||
Description: model.NewId(),
|
Description: model.NewId(),
|
||||||
Scope: model.SCHEME_SCOPE_CHANNEL,
|
Scope: model.SchemeScopeChannel,
|
||||||
}
|
}
|
||||||
|
|
||||||
s1, r1 := th.SystemAdminClient.CreateScheme(scheme1)
|
s1, r1 := th.SystemAdminClient.CreateScheme(scheme1)
|
||||||
@@ -694,7 +694,7 @@ func TestDeleteScheme(t *testing.T) {
|
|||||||
TeamId: model.NewId(),
|
TeamId: model.NewId(),
|
||||||
DisplayName: model.NewId(),
|
DisplayName: model.NewId(),
|
||||||
Name: model.NewId(),
|
Name: model.NewId(),
|
||||||
Type: model.CHANNEL_OPEN,
|
Type: model.ChannelTypeOpen,
|
||||||
SchemeId: &s1.Id,
|
SchemeId: &s1.Id,
|
||||||
}, -1)
|
}, -1)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
@@ -730,7 +730,7 @@ func TestDeleteScheme(t *testing.T) {
|
|||||||
DisplayName: model.NewId(),
|
DisplayName: model.NewId(),
|
||||||
Name: model.NewId(),
|
Name: model.NewId(),
|
||||||
Description: model.NewId(),
|
Description: model.NewId(),
|
||||||
Scope: model.SCHEME_SCOPE_CHANNEL,
|
Scope: model.SchemeScopeChannel,
|
||||||
}
|
}
|
||||||
|
|
||||||
s1, r1 := th.SystemAdminClient.CreateScheme(scheme1)
|
s1, r1 := th.SystemAdminClient.CreateScheme(scheme1)
|
||||||
@@ -783,14 +783,14 @@ func TestUpdateTeamSchemeWithTeamMembers(t *testing.T) {
|
|||||||
|
|
||||||
th.LoginBasic()
|
th.LoginBasic()
|
||||||
|
|
||||||
_, resp := th.Client.CreateChannel(&model.Channel{DisplayName: "Test API Name", Name: GenerateTestChannelName(), Type: model.CHANNEL_OPEN, TeamId: team.Id})
|
_, resp := th.Client.CreateChannel(&model.Channel{DisplayName: "Test API Name", Name: GenerateTestChannelName(), Type: model.ChannelTypeOpen, TeamId: team.Id})
|
||||||
require.Nil(t, resp.Error)
|
require.Nil(t, resp.Error)
|
||||||
|
|
||||||
team.SchemeId = &teamScheme.Id
|
team.SchemeId = &teamScheme.Id
|
||||||
team, err = th.App.UpdateTeamScheme(team)
|
team, err = th.App.UpdateTeamScheme(team)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
|
|
||||||
_, resp = th.Client.CreateChannel(&model.Channel{DisplayName: "Test API Name", Name: GenerateTestChannelName(), Type: model.CHANNEL_OPEN, TeamId: team.Id})
|
_, resp = th.Client.CreateChannel(&model.Channel{DisplayName: "Test API Name", Name: GenerateTestChannelName(), Type: model.ChannelTypeOpen, TeamId: team.Id})
|
||||||
require.NotNil(t, resp.Error)
|
require.NotNil(t, resp.Error)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ func TestGetAllSharedChannels(t *testing.T) {
|
|||||||
|
|
||||||
// make some shared channels
|
// make some shared channels
|
||||||
for i := 0; i < pages*pageSize; i++ {
|
for i := 0; i < pages*pageSize; i++ {
|
||||||
channel := th.CreateChannelWithClientAndTeam(th.Client, model.CHANNEL_OPEN, th.BasicTeam.Id)
|
channel := th.CreateChannelWithClientAndTeam(th.Client, model.ChannelTypeOpen, th.BasicTeam.Id)
|
||||||
sc := &model.SharedChannel{
|
sc := &model.SharedChannel{
|
||||||
ChannelId: channel.Id,
|
ChannelId: channel.Id,
|
||||||
TeamId: channel.TeamId,
|
TeamId: channel.TeamId,
|
||||||
|
|||||||
@@ -89,12 +89,12 @@ func updateUserStatus(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
currentStatus, err := c.App.GetStatus(c.Params.UserId)
|
currentStatus, err := c.App.GetStatus(c.Params.UserId)
|
||||||
if err == nil && currentStatus.Status == model.STATUS_OUT_OF_OFFICE && status.Status != model.STATUS_OUT_OF_OFFICE {
|
if err == nil && currentStatus.Status == model.StatusOutOfOffice && status.Status != model.StatusOutOfOffice {
|
||||||
c.App.DisableAutoResponder(c.Params.UserId, c.IsSystemAdmin())
|
c.App.DisableAutoResponder(c.Params.UserId, c.IsSystemAdmin())
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -137,7 +137,7 @@ func updateUserCustomStatus(c *Context, w http.ResponseWriter, r *http.Request)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -163,7 +163,7 @@ func removeUserCustomStatus(c *Context, w http.ResponseWriter, r *http.Request)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -193,7 +193,7 @@ func removeUserRecentCustomStatus(c *Context, w http.ResponseWriter, r *http.Req
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ func getSystemPing(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
reqs := c.App.Config().ClientRequirements
|
reqs := c.App.Config().ClientRequirements
|
||||||
|
|
||||||
s := make(map[string]string)
|
s := make(map[string]string)
|
||||||
s[model.STATUS] = model.STATUS_OK
|
s[model.STATUS] = model.StatusOk
|
||||||
s["AndroidLatestVersion"] = reqs.AndroidLatestVersion
|
s["AndroidLatestVersion"] = reqs.AndroidLatestVersion
|
||||||
s["AndroidMinVersion"] = reqs.AndroidMinVersion
|
s["AndroidMinVersion"] = reqs.AndroidMinVersion
|
||||||
s["DesktopLatestVersion"] = reqs.DesktopLatestVersion
|
s["DesktopLatestVersion"] = reqs.DesktopLatestVersion
|
||||||
@@ -142,7 +142,7 @@ func getSystemPing(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
actualGoroutines := runtime.NumGoroutine()
|
actualGoroutines := runtime.NumGoroutine()
|
||||||
if *c.App.Config().ServiceSettings.GoroutineHealthThreshold > 0 && actualGoroutines >= *c.App.Config().ServiceSettings.GoroutineHealthThreshold {
|
if *c.App.Config().ServiceSettings.GoroutineHealthThreshold > 0 && actualGoroutines >= *c.App.Config().ServiceSettings.GoroutineHealthThreshold {
|
||||||
mlog.Warn("The number of running goroutines is over the health threshold", mlog.Int("goroutines", actualGoroutines), mlog.Int("health_threshold", *c.App.Config().ServiceSettings.GoroutineHealthThreshold))
|
mlog.Warn("The number of running goroutines is over the health threshold", mlog.Int("goroutines", actualGoroutines), mlog.Int("health_threshold", *c.App.Config().ServiceSettings.GoroutineHealthThreshold))
|
||||||
s[model.STATUS] = model.STATUS_UNHEALTHY
|
s[model.STATUS] = model.StatusUnhealthy
|
||||||
}
|
}
|
||||||
|
|
||||||
// Enhanced ping health check:
|
// Enhanced ping health check:
|
||||||
@@ -150,32 +150,32 @@ func getSystemPing(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
// database and file storage backends.
|
// database and file storage backends.
|
||||||
if r.FormValue("get_server_status") != "" {
|
if r.FormValue("get_server_status") != "" {
|
||||||
dbStatusKey := "database_status"
|
dbStatusKey := "database_status"
|
||||||
s[dbStatusKey] = model.STATUS_OK
|
s[dbStatusKey] = model.StatusOk
|
||||||
|
|
||||||
writeErr := c.App.DBHealthCheckWrite()
|
writeErr := c.App.DBHealthCheckWrite()
|
||||||
if writeErr != nil {
|
if writeErr != nil {
|
||||||
mlog.Warn("Unable to write to database.", mlog.Err(writeErr))
|
mlog.Warn("Unable to write to database.", mlog.Err(writeErr))
|
||||||
s[dbStatusKey] = model.STATUS_UNHEALTHY
|
s[dbStatusKey] = model.StatusUnhealthy
|
||||||
s[model.STATUS] = model.STATUS_UNHEALTHY
|
s[model.STATUS] = model.StatusUnhealthy
|
||||||
}
|
}
|
||||||
|
|
||||||
writeErr = c.App.DBHealthCheckDelete()
|
writeErr = c.App.DBHealthCheckDelete()
|
||||||
if writeErr != nil {
|
if writeErr != nil {
|
||||||
mlog.Warn("Unable to remove ping health check value from database.", mlog.Err(writeErr))
|
mlog.Warn("Unable to remove ping health check value from database.", mlog.Err(writeErr))
|
||||||
s[dbStatusKey] = model.STATUS_UNHEALTHY
|
s[dbStatusKey] = model.StatusUnhealthy
|
||||||
s[model.STATUS] = model.STATUS_UNHEALTHY
|
s[model.STATUS] = model.StatusUnhealthy
|
||||||
}
|
}
|
||||||
|
|
||||||
if s[dbStatusKey] == model.STATUS_OK {
|
if s[dbStatusKey] == model.StatusOk {
|
||||||
mlog.Debug("Able to write to database.")
|
mlog.Debug("Able to write to database.")
|
||||||
}
|
}
|
||||||
|
|
||||||
filestoreStatusKey := "filestore_status"
|
filestoreStatusKey := "filestore_status"
|
||||||
s[filestoreStatusKey] = model.STATUS_OK
|
s[filestoreStatusKey] = model.StatusOk
|
||||||
appErr := c.App.TestFileStoreConnection()
|
appErr := c.App.TestFileStoreConnection()
|
||||||
if appErr != nil {
|
if appErr != nil {
|
||||||
s[filestoreStatusKey] = model.STATUS_UNHEALTHY
|
s[filestoreStatusKey] = model.StatusUnhealthy
|
||||||
s[model.STATUS] = model.STATUS_UNHEALTHY
|
s[model.STATUS] = model.StatusUnhealthy
|
||||||
}
|
}
|
||||||
|
|
||||||
w.Header().Set(model.STATUS, s[model.STATUS])
|
w.Header().Set(model.STATUS, s[model.STATUS])
|
||||||
@@ -183,7 +183,7 @@ func getSystemPing(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
w.Header().Set(filestoreStatusKey, s[filestoreStatusKey])
|
w.Header().Set(filestoreStatusKey, s[filestoreStatusKey])
|
||||||
}
|
}
|
||||||
|
|
||||||
if s[model.STATUS] != model.STATUS_OK {
|
if s[model.STATUS] != model.StatusOk {
|
||||||
w.WriteHeader(http.StatusInternalServerError)
|
w.WriteHeader(http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
w.Write([]byte(model.MapToJson(s)))
|
w.Write([]byte(model.MapToJson(s)))
|
||||||
@@ -195,8 +195,8 @@ func testEmail(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
cfg = c.App.Config()
|
cfg = c.App.Config()
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_TEST_EMAIL) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionTestEmail) {
|
||||||
c.SetPermissionError(model.PERMISSION_TEST_EMAIL)
|
c.SetPermissionError(model.PermissionTestEmail)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -215,8 +215,8 @@ func testEmail(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func testSiteURL(c *Context, w http.ResponseWriter, r *http.Request) {
|
func testSiteURL(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_TEST_SITE_URL) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionTestSiteUrl) {
|
||||||
c.SetPermissionError(model.PERMISSION_TEST_SITE_URL)
|
c.SetPermissionError(model.PermissionTestSiteUrl)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -245,8 +245,8 @@ func getAudits(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
auditRec := c.MakeAuditRecord("getAudits", audit.Fail)
|
auditRec := c.MakeAuditRecord("getAudits", audit.Fail)
|
||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_READ_AUDITS) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionReadAudits) {
|
||||||
c.SetPermissionError(model.PERMISSION_READ_AUDITS)
|
c.SetPermissionError(model.PermissionReadAudits)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -264,8 +264,8 @@ func getAudits(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func databaseRecycle(c *Context, w http.ResponseWriter, r *http.Request) {
|
func databaseRecycle(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_RECYCLE_DATABASE_CONNECTIONS) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionRecycleDatabaseConnections) {
|
||||||
c.SetPermissionError(model.PERMISSION_RECYCLE_DATABASE_CONNECTIONS)
|
c.SetPermissionError(model.PermissionRecycleDatabaseConnections)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -284,8 +284,8 @@ func databaseRecycle(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func invalidateCaches(c *Context, w http.ResponseWriter, r *http.Request) {
|
func invalidateCaches(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_INVALIDATE_CACHES) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionInvalidateCaches) {
|
||||||
c.SetPermissionError(model.PERMISSION_INVALIDATE_CACHES)
|
c.SetPermissionError(model.PermissionInvalidateCaches)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -318,8 +318,8 @@ func getLogs(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_GET_LOGS) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionGetLogs) {
|
||||||
c.SetPermissionError(model.PERMISSION_GET_LOGS)
|
c.SetPermissionError(model.PermissionGetLogs)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -344,7 +344,7 @@ func postLog(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem) {
|
||||||
forceToDebug = true
|
forceToDebug = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -381,8 +381,8 @@ func getAnalytics(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
name = "standard"
|
name = "standard"
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_GET_ANALYTICS) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionGetAnalytics) {
|
||||||
c.SetPermissionError(model.PERMISSION_GET_ANALYTICS)
|
c.SetPermissionError(model.PermissionGetAnalytics)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -421,8 +421,8 @@ func testS3(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
cfg = c.App.Config()
|
cfg = c.App.Config()
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_TEST_S3) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionTestS3) {
|
||||||
c.SetPermissionError(model.PERMISSION_TEST_S3)
|
c.SetPermissionError(model.PermissionTestS3)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -437,7 +437,7 @@ func testS3(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if *cfg.FileSettings.AmazonS3SecretAccessKey == model.FAKE_SETTING {
|
if *cfg.FileSettings.AmazonS3SecretAccessKey == model.FakeSetting {
|
||||||
cfg.FileSettings.AmazonS3SecretAccessKey = c.App.Config().FileSettings.AmazonS3SecretAccessKey
|
cfg.FileSettings.AmazonS3SecretAccessKey = c.App.Config().FileSettings.AmazonS3SecretAccessKey
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -551,8 +551,8 @@ func pushNotificationAck(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func setServerBusy(c *Context, w http.ResponseWriter, r *http.Request) {
|
func setServerBusy(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM)
|
c.SetPermissionError(model.PermissionManageSystem)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -580,8 +580,8 @@ func setServerBusy(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func clearServerBusy(c *Context, w http.ResponseWriter, r *http.Request) {
|
func clearServerBusy(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM)
|
c.SetPermissionError(model.PermissionManageSystem)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -596,8 +596,8 @@ func clearServerBusy(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func getServerBusyExpires(c *Context, w http.ResponseWriter, r *http.Request) {
|
func getServerBusyExpires(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM)
|
c.SetPermissionError(model.PermissionManageSystem)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
w.Write([]byte(c.App.Srv().Busy.ToJson()))
|
w.Write([]byte(c.App.Srv().Busy.ToJson()))
|
||||||
@@ -607,8 +607,8 @@ func upgradeToEnterprise(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
auditRec := c.MakeAuditRecord("upgradeToEnterprise", audit.Fail)
|
auditRec := c.MakeAuditRecord("upgradeToEnterprise", audit.Fail)
|
||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM)
|
c.SetPermissionError(model.PermissionManageSystem)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -663,8 +663,8 @@ func upgradeToEnterprise(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func upgradeToEnterpriseStatus(c *Context, w http.ResponseWriter, r *http.Request) {
|
func upgradeToEnterpriseStatus(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM)
|
c.SetPermissionError(model.PermissionManageSystem)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -691,8 +691,8 @@ func restart(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
auditRec := c.MakeAuditRecord("restartServer", audit.Fail)
|
auditRec := c.MakeAuditRecord("restartServer", audit.Fail)
|
||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM)
|
c.SetPermissionError(model.PermissionManageSystem)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -731,8 +731,8 @@ func sendWarnMetricAckEmail(c *Context, w http.ResponseWriter, r *http.Request)
|
|||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
c.LogAudit("attempt")
|
c.LogAudit("attempt")
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM)
|
c.SetPermissionError(model.PermissionManageSystem)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -768,8 +768,8 @@ func requestTrialLicenseAndAckWarnMetric(c *Context, w http.ResponseWriter, r *h
|
|||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
c.LogAudit("attempt")
|
c.LogAudit("attempt")
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM)
|
c.SetPermissionError(model.PermissionManageSystem)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ func TestGetPing(t *testing.T) {
|
|||||||
t.Run("healthy", func(t *testing.T) {
|
t.Run("healthy", func(t *testing.T) {
|
||||||
status, resp := client.GetPing()
|
status, resp := client.GetPing()
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
assert.Equal(t, model.STATUS_OK, status)
|
assert.Equal(t, model.StatusOk, status)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("unhealthy", func(t *testing.T) {
|
t.Run("unhealthy", func(t *testing.T) {
|
||||||
@@ -41,7 +41,7 @@ func TestGetPing(t *testing.T) {
|
|||||||
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.GoroutineHealthThreshold = 10 })
|
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.GoroutineHealthThreshold = 10 })
|
||||||
status, resp := client.GetPing()
|
status, resp := client.GetPing()
|
||||||
CheckInternalErrorStatus(t, resp)
|
CheckInternalErrorStatus(t, resp)
|
||||||
assert.Equal(t, model.STATUS_UNHEALTHY, status)
|
assert.Equal(t, model.StatusUnhealthy, status)
|
||||||
})
|
})
|
||||||
}, "basic ping")
|
}, "basic ping")
|
||||||
|
|
||||||
@@ -50,7 +50,7 @@ func TestGetPing(t *testing.T) {
|
|||||||
status, resp := client.GetPingWithServerStatus()
|
status, resp := client.GetPingWithServerStatus()
|
||||||
|
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
assert.Equal(t, model.STATUS_OK, status)
|
assert.Equal(t, model.StatusOk, status)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("unhealthy", func(t *testing.T) {
|
t.Run("unhealthy", func(t *testing.T) {
|
||||||
@@ -63,7 +63,7 @@ func TestGetPing(t *testing.T) {
|
|||||||
|
|
||||||
status, resp := client.GetPingWithServerStatus()
|
status, resp := client.GetPingWithServerStatus()
|
||||||
CheckInternalErrorStatus(t, resp)
|
CheckInternalErrorStatus(t, resp)
|
||||||
assert.Equal(t, model.STATUS_UNHEALTHY, status)
|
assert.Equal(t, model.StatusUnhealthy, status)
|
||||||
})
|
})
|
||||||
}, "with server status")
|
}, "with server status")
|
||||||
|
|
||||||
@@ -148,7 +148,7 @@ func TestEmailTest(t *testing.T) {
|
|||||||
SMTPServerTimeout: model.NewInt(15),
|
SMTPServerTimeout: model.NewInt(15),
|
||||||
},
|
},
|
||||||
FileSettings: model.FileSettings{
|
FileSettings: model.FileSettings{
|
||||||
DriverName: model.NewString(model.IMAGE_DRIVER_LOCAL),
|
DriverName: model.NewString(model.ImageDriverLocal),
|
||||||
Directory: model.NewString(dir),
|
Directory: model.NewString(dir),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@@ -472,9 +472,9 @@ func TestS3TestConnection(t *testing.T) {
|
|||||||
s3Endpoint := fmt.Sprintf("%s:%s", s3Host, s3Port)
|
s3Endpoint := fmt.Sprintf("%s:%s", s3Host, s3Port)
|
||||||
config := model.Config{
|
config := model.Config{
|
||||||
FileSettings: model.FileSettings{
|
FileSettings: model.FileSettings{
|
||||||
DriverName: model.NewString(model.IMAGE_DRIVER_S3),
|
DriverName: model.NewString(model.ImageDriverS3),
|
||||||
AmazonS3AccessKeyId: model.NewString(model.MINIO_ACCESS_KEY),
|
AmazonS3AccessKeyId: model.NewString(model.MinioAccessKey),
|
||||||
AmazonS3SecretAccessKey: model.NewString(model.MINIO_SECRET_KEY),
|
AmazonS3SecretAccessKey: model.NewString(model.MinioSecretKey),
|
||||||
AmazonS3Bucket: model.NewString(""),
|
AmazonS3Bucket: model.NewString(""),
|
||||||
AmazonS3Endpoint: model.NewString(s3Endpoint),
|
AmazonS3Endpoint: model.NewString(s3Endpoint),
|
||||||
AmazonS3Region: model.NewString(""),
|
AmazonS3Region: model.NewString(""),
|
||||||
@@ -494,7 +494,7 @@ func TestS3TestConnection(t *testing.T) {
|
|||||||
require.Equal(t, resp.Error.Message, "S3 Bucket is required", "should return error - missing s3 bucket")
|
require.Equal(t, resp.Error.Message, "S3 Bucket is required", "should return error - missing s3 bucket")
|
||||||
// If this fails, check the test configuration to ensure minio is setup with the
|
// If this fails, check the test configuration to ensure minio is setup with the
|
||||||
// `mattermost-test` bucket defined by model.MINIO_BUCKET.
|
// `mattermost-test` bucket defined by model.MINIO_BUCKET.
|
||||||
*config.FileSettings.AmazonS3Bucket = model.MINIO_BUCKET
|
*config.FileSettings.AmazonS3Bucket = model.MinioBucket
|
||||||
config.FileSettings.AmazonS3PathPrefix = model.NewString("")
|
config.FileSettings.AmazonS3PathPrefix = model.NewString("")
|
||||||
*config.FileSettings.AmazonS3Region = "us-east-1"
|
*config.FileSettings.AmazonS3Region = "us-east-1"
|
||||||
_, resp = th.SystemAdminClient.TestS3Connection(&config)
|
_, resp = th.SystemAdminClient.TestS3Connection(&config)
|
||||||
@@ -741,7 +741,7 @@ func TestPushNotificationAck(t *testing.T) {
|
|||||||
handler := api.ApiHandler(pushNotificationAck)
|
handler := api.ApiHandler(pushNotificationAck)
|
||||||
resp := httptest.NewRecorder()
|
resp := httptest.NewRecorder()
|
||||||
req := httptest.NewRequest("POST", "/api/v4/notifications/ack", nil)
|
req := httptest.NewRequest("POST", "/api/v4/notifications/ack", nil)
|
||||||
req.Header.Set(model.HEADER_AUTH, "Bearer "+session.Token)
|
req.Header.Set(model.HeaderAuth, "Bearer "+session.Token)
|
||||||
|
|
||||||
handler.ServeHTTP(resp, req)
|
handler.ServeHTTP(resp, req)
|
||||||
assert.Equal(t, http.StatusBadRequest, resp.Code)
|
assert.Equal(t, http.StatusBadRequest, resp.Code)
|
||||||
|
|||||||
182
api4/team.go
182
api4/team.go
@@ -88,7 +88,7 @@ func createTeam(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
auditRec.AddMeta("team", team)
|
auditRec.AddMeta("team", team)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_CREATE_TEAM) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionCreateTeam) {
|
||||||
c.Err = model.NewAppError("createTeam", "api.team.is_team_creation_allowed.disabled.app_error", nil, "", http.StatusForbidden)
|
c.Err = model.NewAppError("createTeam", "api.team.is_team_creation_allowed.disabled.app_error", nil, "", http.StatusForbidden)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -120,8 +120,8 @@ func getTeam(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!team.AllowOpenInvite || team.Type != model.TEAM_OPEN) && !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), team.Id, model.PERMISSION_VIEW_TEAM) {
|
if (!team.AllowOpenInvite || team.Type != model.TeamOpen) && !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), team.Id, model.PermissionViewTeam) {
|
||||||
c.SetPermissionError(model.PERMISSION_VIEW_TEAM)
|
c.SetPermissionError(model.PermissionViewTeam)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -141,8 +141,8 @@ func getTeamByName(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!team.AllowOpenInvite || team.Type != model.TEAM_OPEN) && !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), team.Id, model.PERMISSION_VIEW_TEAM) {
|
if (!team.AllowOpenInvite || team.Type != model.TeamOpen) && !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), team.Id, model.PermissionViewTeam) {
|
||||||
c.SetPermissionError(model.PERMISSION_VIEW_TEAM)
|
c.SetPermissionError(model.PermissionViewTeam)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -174,8 +174,8 @@ func updateTeam(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
auditRec.AddMeta("team", team)
|
auditRec.AddMeta("team", team)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PERMISSION_MANAGE_TEAM) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PermissionManageTeam) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_TEAM)
|
c.SetPermissionError(model.PermissionManageTeam)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -208,8 +208,8 @@ func patchTeam(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
auditRec := c.MakeAuditRecord("patchTeam", audit.Fail)
|
auditRec := c.MakeAuditRecord("patchTeam", audit.Fail)
|
||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PERMISSION_MANAGE_TEAM) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PermissionManageTeam) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_TEAM)
|
c.SetPermissionError(model.PermissionManageTeam)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -243,8 +243,8 @@ func restoreTeam(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
auditRec.AddMeta("team_id", c.Params.TeamId)
|
auditRec.AddMeta("team_id", c.Params.TeamId)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PERMISSION_MANAGE_TEAM) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PermissionManageTeam) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_TEAM)
|
c.SetPermissionError(model.PermissionManageTeam)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -282,9 +282,9 @@ func updateTeamPrivacy(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
var openInvite bool
|
var openInvite bool
|
||||||
switch privacy {
|
switch privacy {
|
||||||
case model.TEAM_OPEN:
|
case model.TeamOpen:
|
||||||
openInvite = true
|
openInvite = true
|
||||||
case model.TEAM_INVITE:
|
case model.TeamInvite:
|
||||||
openInvite = false
|
openInvite = false
|
||||||
default:
|
default:
|
||||||
c.SetInvalidParam("privacy")
|
c.SetInvalidParam("privacy")
|
||||||
@@ -295,9 +295,9 @@ func updateTeamPrivacy(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
auditRec.AddMeta("privacy", privacy)
|
auditRec.AddMeta("privacy", privacy)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PERMISSION_MANAGE_TEAM) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PermissionManageTeam) {
|
||||||
auditRec.AddMeta("team_id", c.Params.TeamId)
|
auditRec.AddMeta("team_id", c.Params.TeamId)
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_TEAM)
|
c.SetPermissionError(model.PermissionManageTeam)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -325,8 +325,8 @@ func regenerateTeamInviteId(c *Context, w http.ResponseWriter, r *http.Request)
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PERMISSION_MANAGE_TEAM) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PermissionManageTeam) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_TEAM)
|
c.SetPermissionError(model.PermissionManageTeam)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -354,8 +354,8 @@ func deleteTeam(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PERMISSION_MANAGE_TEAM) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PermissionManageTeam) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_TEAM)
|
c.SetPermissionError(model.PermissionManageTeam)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -392,8 +392,8 @@ func getTeamsForUser(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.AppContext.Session().UserId != c.Params.UserId && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_USERS) {
|
if c.AppContext.Session().UserId != c.Params.UserId && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleReadUserManagementUsers) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_USERS)
|
c.SetPermissionError(model.PermissionSysconsoleReadUserManagementUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -413,8 +413,8 @@ func getTeamsUnreadForUser(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.AppContext.Session().UserId != c.Params.UserId && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
if c.AppContext.Session().UserId != c.Params.UserId && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM)
|
c.SetPermissionError(model.PermissionManageSystem)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -436,8 +436,8 @@ func getTeamMember(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PERMISSION_VIEW_TEAM) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PermissionViewTeam) {
|
||||||
c.SetPermissionError(model.PERMISSION_VIEW_TEAM)
|
c.SetPermissionError(model.PermissionViewTeam)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -448,7 +448,7 @@ func getTeamMember(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !canSee {
|
if !canSee {
|
||||||
c.SetPermissionError(model.PERMISSION_VIEW_MEMBERS)
|
c.SetPermissionError(model.PermissionViewMembers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -471,8 +471,8 @@ func getTeamMembers(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
excludeDeletedUsers := r.URL.Query().Get("exclude_deleted_users")
|
excludeDeletedUsers := r.URL.Query().Get("exclude_deleted_users")
|
||||||
excludeDeletedUsersBool, _ := strconv.ParseBool(excludeDeletedUsers)
|
excludeDeletedUsersBool, _ := strconv.ParseBool(excludeDeletedUsers)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PERMISSION_VIEW_TEAM) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PermissionViewTeam) {
|
||||||
c.SetPermissionError(model.PERMISSION_VIEW_TEAM)
|
c.SetPermissionError(model.PermissionViewTeam)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -503,8 +503,8 @@ func getTeamMembersForUser(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_READ_OTHER_USERS_TEAMS) {
|
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionReadOtherUsersTeams) {
|
||||||
c.SetPermissionError(model.PERMISSION_READ_OTHER_USERS_TEAMS)
|
c.SetPermissionError(model.PermissionReadOtherUsersTeams)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -515,7 +515,7 @@ func getTeamMembersForUser(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !canSee {
|
if !canSee {
|
||||||
c.SetPermissionError(model.PERMISSION_VIEW_MEMBERS)
|
c.SetPermissionError(model.PermissionViewMembers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -541,8 +541,8 @@ func getTeamMembersByIds(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PERMISSION_VIEW_TEAM) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PermissionViewTeam) {
|
||||||
c.SetPermissionError(model.PERMISSION_VIEW_TEAM)
|
c.SetPermissionError(model.PermissionViewTeam)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -595,17 +595,17 @@ func addTeamMember(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if team.AllowOpenInvite && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_JOIN_PUBLIC_TEAMS) {
|
if team.AllowOpenInvite && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionJoinPublicTeams) {
|
||||||
c.SetPermissionError(model.PERMISSION_JOIN_PUBLIC_TEAMS)
|
c.SetPermissionError(model.PermissionJoinPublicTeams)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if !team.AllowOpenInvite && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_JOIN_PRIVATE_TEAMS) {
|
if !team.AllowOpenInvite && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionJoinPrivateTeams) {
|
||||||
c.SetPermissionError(model.PERMISSION_JOIN_PRIVATE_TEAMS)
|
c.SetPermissionError(model.PermissionJoinPrivateTeams)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), member.TeamId, model.PERMISSION_ADD_USER_TO_TEAM) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), member.TeamId, model.PermissionAddUserToTeam) {
|
||||||
c.SetPermissionError(model.PERMISSION_ADD_USER_TO_TEAM)
|
c.SetPermissionError(model.PermissionAddUserToTeam)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -660,7 +660,7 @@ func addUserToTeamFromInvite(c *Context, w http.ResponseWriter, r *http.Request)
|
|||||||
if tokenId != "" {
|
if tokenId != "" {
|
||||||
member, err = c.App.AddTeamMemberByToken(c.AppContext, c.AppContext.Session().UserId, tokenId)
|
member, err = c.App.AddTeamMemberByToken(c.AppContext, c.AppContext.Session().UserId, tokenId)
|
||||||
} else if inviteId != "" {
|
} else if inviteId != "" {
|
||||||
if c.AppContext.Session().Props[model.SESSION_PROP_IS_GUEST] == "true" {
|
if c.AppContext.Session().Props[model.SessionPropIsGuest] == "true" {
|
||||||
c.Err = model.NewAppError("addUserToTeamFromInvite", "api.team.add_user_to_team_from_invite.guest.app_error", nil, "", http.StatusForbidden)
|
c.Err = model.NewAppError("addUserToTeamFromInvite", "api.team.add_user_to_team_from_invite.guest.app_error", nil, "", http.StatusForbidden)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -753,8 +753,8 @@ func addTeamMembers(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
userIds = append(userIds, member.UserId)
|
userIds = append(userIds, member.UserId)
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PERMISSION_ADD_USER_TO_TEAM) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PermissionAddUserToTeam) {
|
||||||
c.SetPermissionError(model.PERMISSION_ADD_USER_TO_TEAM)
|
c.SetPermissionError(model.PermissionAddUserToTeam)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -797,8 +797,8 @@ func removeTeamMember(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
|
|
||||||
if c.AppContext.Session().UserId != c.Params.UserId {
|
if c.AppContext.Session().UserId != c.Params.UserId {
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PERMISSION_REMOVE_USER_FROM_TEAM) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PermissionRemoveUserFromTeam) {
|
||||||
c.SetPermissionError(model.PERMISSION_REMOVE_USER_FROM_TEAM)
|
c.SetPermissionError(model.PermissionRemoveUserFromTeam)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -838,12 +838,12 @@ func getTeamUnread(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PERMISSION_VIEW_TEAM) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PermissionViewTeam) {
|
||||||
c.SetPermissionError(model.PERMISSION_VIEW_TEAM)
|
c.SetPermissionError(model.PermissionViewTeam)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -862,8 +862,8 @@ func getTeamStats(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PERMISSION_VIEW_TEAM) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PermissionViewTeam) {
|
||||||
c.SetPermissionError(model.PERMISSION_VIEW_TEAM)
|
c.SetPermissionError(model.PermissionViewTeam)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -900,8 +900,8 @@ func updateTeamMemberRoles(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
auditRec.AddMeta("roles", newRoles)
|
auditRec.AddMeta("roles", newRoles)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PERMISSION_MANAGE_TEAM_ROLES) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PermissionManageTeamRoles) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_TEAM_ROLES)
|
c.SetPermissionError(model.PermissionManageTeamRoles)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -933,8 +933,8 @@ func updateTeamMemberSchemeRoles(c *Context, w http.ResponseWriter, r *http.Requ
|
|||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
auditRec.AddMeta("roles", schemeRoles)
|
auditRec.AddMeta("roles", schemeRoles)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PERMISSION_MANAGE_TEAM_ROLES) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PermissionManageTeamRoles) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_TEAM_ROLES)
|
c.SetPermissionError(model.PermissionManageTeamRoles)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -957,18 +957,18 @@ func getAllTeams(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
opts := &model.TeamSearch{}
|
opts := &model.TeamSearch{}
|
||||||
if c.Params.ExcludePolicyConstrained {
|
if c.Params.ExcludePolicyConstrained {
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_READ_COMPLIANCE_DATA_RETENTION_POLICY) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleReadComplianceDataRetentionPolicy) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_READ_COMPLIANCE_DATA_RETENTION_POLICY)
|
c.SetPermissionError(model.PermissionSysconsoleReadComplianceDataRetentionPolicy)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
opts.ExcludePolicyConstrained = model.NewBool(true)
|
opts.ExcludePolicyConstrained = model.NewBool(true)
|
||||||
}
|
}
|
||||||
if c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_READ_COMPLIANCE_DATA_RETENTION_POLICY) {
|
if c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleReadComplianceDataRetentionPolicy) {
|
||||||
opts.IncludePolicyID = model.NewBool(true)
|
opts.IncludePolicyID = model.NewBool(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
listPrivate := c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_LIST_PRIVATE_TEAMS)
|
listPrivate := c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionListPrivateTeams)
|
||||||
listPublic := c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_LIST_PUBLIC_TEAMS)
|
listPublic := c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionListPublicTeams)
|
||||||
limit := c.Params.PerPage
|
limit := c.Params.PerPage
|
||||||
offset := limit * c.Params.Page
|
offset := limit * c.Params.Page
|
||||||
if listPrivate && listPublic {
|
if listPrivate && listPublic {
|
||||||
@@ -1012,13 +1012,13 @@ func searchTeams(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
// Only system managers may use the ExcludePolicyConstrained field
|
// Only system managers may use the ExcludePolicyConstrained field
|
||||||
if props.ExcludePolicyConstrained != nil && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_READ_COMPLIANCE_DATA_RETENTION_POLICY) {
|
if props.ExcludePolicyConstrained != nil && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleReadComplianceDataRetentionPolicy) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_READ_COMPLIANCE_DATA_RETENTION_POLICY)
|
c.SetPermissionError(model.PermissionSysconsoleReadComplianceDataRetentionPolicy)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
// policy ID may only be used through the /data_retention/policies endpoint
|
// policy ID may only be used through the /data_retention/policies endpoint
|
||||||
props.PolicyID = nil
|
props.PolicyID = nil
|
||||||
if c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_READ_COMPLIANCE_DATA_RETENTION_POLICY) {
|
if c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleReadComplianceDataRetentionPolicy) {
|
||||||
props.IncludePolicyID = model.NewBool(true)
|
props.IncludePolicyID = model.NewBool(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1026,15 +1026,15 @@ func searchTeams(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
var totalCount int64
|
var totalCount int64
|
||||||
var err *model.AppError
|
var err *model.AppError
|
||||||
|
|
||||||
if c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_LIST_PRIVATE_TEAMS) && c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_LIST_PUBLIC_TEAMS) {
|
if c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionListPrivateTeams) && c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionListPublicTeams) {
|
||||||
teams, totalCount, err = c.App.SearchAllTeams(props)
|
teams, totalCount, err = c.App.SearchAllTeams(props)
|
||||||
} else if c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_LIST_PRIVATE_TEAMS) {
|
} else if c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionListPrivateTeams) {
|
||||||
if props.Page != nil || props.PerPage != nil {
|
if props.Page != nil || props.PerPage != nil {
|
||||||
c.Err = model.NewAppError("searchTeams", "api.team.search_teams.pagination_not_implemented.private_team_search", nil, "", http.StatusNotImplemented)
|
c.Err = model.NewAppError("searchTeams", "api.team.search_teams.pagination_not_implemented.private_team_search", nil, "", http.StatusNotImplemented)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
teams, err = c.App.SearchPrivateTeams(props)
|
teams, err = c.App.SearchPrivateTeams(props)
|
||||||
} else if c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_LIST_PUBLIC_TEAMS) {
|
} else if c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionListPublicTeams) {
|
||||||
if props.Page != nil || props.PerPage != nil {
|
if props.Page != nil || props.PerPage != nil {
|
||||||
c.Err = model.NewAppError("searchTeams", "api.team.search_teams.pagination_not_implemented.public_team_search", nil, "", http.StatusNotImplemented)
|
c.Err = model.NewAppError("searchTeams", "api.team.search_teams.pagination_not_implemented.public_team_search", nil, "", http.StatusNotImplemented)
|
||||||
return
|
return
|
||||||
@@ -1086,8 +1086,8 @@ func teamExists(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
// Verify that the user can see the team (be a member or have the permission to list the team)
|
// Verify that the user can see the team (be a member or have the permission to list the team)
|
||||||
if (teamMember != nil && teamMember.DeleteAt == 0) ||
|
if (teamMember != nil && teamMember.DeleteAt == 0) ||
|
||||||
(team.AllowOpenInvite && c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_LIST_PUBLIC_TEAMS)) ||
|
(team.AllowOpenInvite && c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionListPublicTeams)) ||
|
||||||
(!team.AllowOpenInvite && c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_LIST_PRIVATE_TEAMS)) {
|
(!team.AllowOpenInvite && c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionListPrivateTeams)) {
|
||||||
exists = true
|
exists = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1107,8 +1107,8 @@ func importTeam(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PERMISSION_IMPORT_TEAM) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PermissionImportTeam) {
|
||||||
c.SetPermissionError(model.PERMISSION_IMPORT_TEAM)
|
c.SetPermissionError(model.PermissionImportTeam)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1193,13 +1193,13 @@ func inviteUsersToTeam(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PERMISSION_INVITE_USER) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PermissionInviteUser) {
|
||||||
c.SetPermissionError(model.PERMISSION_INVITE_USER)
|
c.SetPermissionError(model.PermissionInviteUser)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PERMISSION_ADD_USER_TO_TEAM) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PermissionAddUserToTeam) {
|
||||||
c.SetPermissionError(model.PERMISSION_INVITE_USER)
|
c.SetPermissionError(model.PermissionInviteUser)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1250,7 +1250,7 @@ func inviteUsersToTeam(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// we then manually schedule the job
|
// we then manually schedule the job
|
||||||
_, e := c.App.Srv().Jobs.CreateJob(model.JOB_TYPE_RESEND_INVITATION_EMAIL, jobData)
|
_, e := c.App.Srv().Jobs.CreateJob(model.JobTypeResendInvitationEmail, jobData)
|
||||||
if e != nil {
|
if e != nil {
|
||||||
c.Err = model.NewAppError("Api4.inviteUsersToTeam", e.Id, nil, e.Error(), e.StatusCode)
|
c.Err = model.NewAppError("Api4.inviteUsersToTeam", e.Id, nil, e.Error(), e.StatusCode)
|
||||||
return
|
return
|
||||||
@@ -1313,8 +1313,8 @@ func inviteGuestsToChannels(c *Context, w http.ResponseWriter, r *http.Request)
|
|||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
auditRec.AddMeta("team_id", c.Params.TeamId)
|
auditRec.AddMeta("team_id", c.Params.TeamId)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PERMISSION_INVITE_GUEST) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PermissionInviteGuest) {
|
||||||
c.SetPermissionError(model.PERMISSION_INVITE_GUEST)
|
c.SetPermissionError(model.PermissionInviteGuest)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1400,7 +1400,7 @@ func getInviteInfo(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if team.Type != model.TEAM_OPEN {
|
if team.Type != model.TeamOpen {
|
||||||
c.Err = model.NewAppError("getInviteInfo", "api.team.get_invite_info.not_open_team", nil, "id="+c.Params.InviteId, http.StatusForbidden)
|
c.Err = model.NewAppError("getInviteInfo", "api.team.get_invite_info.not_open_team", nil, "id="+c.Params.InviteId, http.StatusForbidden)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -1414,8 +1414,8 @@ func getInviteInfo(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func invalidateAllEmailInvites(c *Context, w http.ResponseWriter, r *http.Request) {
|
func invalidateAllEmailInvites(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_INVALIDATE_EMAIL_INVITE) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionInvalidateEmailInvite) {
|
||||||
c.SetPermissionError(model.PERMISSION_INVALIDATE_EMAIL_INVITE)
|
c.SetPermissionError(model.PermissionInvalidateEmailInvite)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1444,9 +1444,9 @@ func getTeamIcon(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PERMISSION_VIEW_TEAM) &&
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PermissionViewTeam) &&
|
||||||
(team.Type != model.TEAM_OPEN || !team.AllowOpenInvite) {
|
(team.Type != model.TeamOpen || !team.AllowOpenInvite) {
|
||||||
c.SetPermissionError(model.PERMISSION_VIEW_TEAM)
|
c.SetPermissionError(model.PermissionViewTeam)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1464,7 +1464,7 @@ func getTeamIcon(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
w.Header().Set("Content-Type", "image/png")
|
w.Header().Set("Content-Type", "image/png")
|
||||||
w.Header().Set("Cache-Control", fmt.Sprintf("max-age=%v, private", 24*60*60)) // 24 hrs
|
w.Header().Set("Cache-Control", fmt.Sprintf("max-age=%v, private", 24*60*60)) // 24 hrs
|
||||||
w.Header().Set(model.HEADER_ETAG_SERVER, etag)
|
w.Header().Set(model.HeaderEtagServer, etag)
|
||||||
w.Write(img)
|
w.Write(img)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1480,8 +1480,8 @@ func setTeamIcon(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
auditRec.AddMeta("team_id", c.Params.TeamId)
|
auditRec.AddMeta("team_id", c.Params.TeamId)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PERMISSION_MANAGE_TEAM) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PermissionManageTeam) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_TEAM)
|
c.SetPermissionError(model.PermissionManageTeam)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1531,8 +1531,8 @@ func removeTeamIcon(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
auditRec.AddMeta("team_id", c.Params.TeamId)
|
auditRec.AddMeta("team_id", c.Params.TeamId)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PERMISSION_MANAGE_TEAM) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PermissionManageTeam) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_TEAM)
|
c.SetPermissionError(model.PermissionManageTeam)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1567,8 +1567,8 @@ func updateTeamScheme(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_WRITE_USERMANAGEMENT_PERMISSIONS) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleWriteUserManagementPermissions) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_WRITE_USERMANAGEMENT_PERMISSIONS)
|
c.SetPermissionError(model.PermissionSysconsoleWriteUserManagementPermissions)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1580,7 +1580,7 @@ func updateTeamScheme(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
auditRec.AddMeta("scheme", scheme)
|
auditRec.AddMeta("scheme", scheme)
|
||||||
|
|
||||||
if scheme.Scope != model.SCHEME_SCOPE_TEAM {
|
if scheme.Scope != model.SchemeScopeTeam {
|
||||||
c.Err = model.NewAppError("Api4.UpdateTeamScheme", "api.team.update_team_scheme.scheme_scope.error", nil, "", http.StatusBadRequest)
|
c.Err = model.NewAppError("Api4.UpdateTeamScheme", "api.team.update_team_scheme.scheme_scope.error", nil, "", http.StatusBadRequest)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -1627,8 +1627,8 @@ func teamMembersMinusGroupMembers(c *Context, w http.ResponseWriter, r *http.Req
|
|||||||
groupIDs = append(groupIDs, gid)
|
groupIDs = append(groupIDs, gid)
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_GROUPS) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleReadUserManagementGroups) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_GROUPS)
|
c.SetPermissionError(model.PermissionSysconsoleReadUserManagementGroups)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ func TestCreateTeam(t *testing.T) {
|
|||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
|
|
||||||
th.TestForAllClients(t, func(t *testing.T, client *model.Client4) {
|
th.TestForAllClients(t, func(t *testing.T, client *model.Client4) {
|
||||||
team := &model.Team{Name: GenerateTestUsername(), DisplayName: "Some Team", Type: model.TEAM_OPEN}
|
team := &model.Team{Name: GenerateTestUsername(), DisplayName: "Some Team", Type: model.TeamOpen}
|
||||||
rteam, resp := client.CreateTeam(team)
|
rteam, resp := client.CreateTeam(team)
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
CheckCreatedStatus(t, resp)
|
CheckCreatedStatus(t, resp)
|
||||||
@@ -57,7 +57,7 @@ func TestCreateTeam(t *testing.T) {
|
|||||||
require.Equalf(t, r.StatusCode, http.StatusBadRequest, "wrong status code, actual: %s, expected: %s", strconv.Itoa(r.StatusCode), strconv.Itoa(http.StatusBadRequest))
|
require.Equalf(t, r.StatusCode, http.StatusBadRequest, "wrong status code, actual: %s, expected: %s", strconv.Itoa(r.StatusCode), strconv.Itoa(http.StatusBadRequest))
|
||||||
|
|
||||||
// Test GroupConstrained flag
|
// Test GroupConstrained flag
|
||||||
groupConstrainedTeam := &model.Team{Name: GenerateTestUsername(), DisplayName: "Some Team", Type: model.TEAM_OPEN, GroupConstrained: model.NewBool(true)}
|
groupConstrainedTeam := &model.Team{Name: GenerateTestUsername(), DisplayName: "Some Team", Type: model.TeamOpen, GroupConstrained: model.NewBool(true)}
|
||||||
rteam, resp = client.CreateTeam(groupConstrainedTeam)
|
rteam, resp = client.CreateTeam(groupConstrainedTeam)
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
CheckCreatedStatus(t, resp)
|
CheckCreatedStatus(t, resp)
|
||||||
@@ -67,7 +67,7 @@ func TestCreateTeam(t *testing.T) {
|
|||||||
|
|
||||||
th.Client.Logout()
|
th.Client.Logout()
|
||||||
|
|
||||||
team := &model.Team{Name: GenerateTestUsername(), DisplayName: "Some Team", Type: model.TEAM_OPEN}
|
team := &model.Team{Name: GenerateTestUsername(), DisplayName: "Some Team", Type: model.TeamOpen}
|
||||||
_, resp := th.Client.CreateTeam(team)
|
_, resp := th.Client.CreateTeam(team)
|
||||||
CheckUnauthorizedStatus(t, resp)
|
CheckUnauthorizedStatus(t, resp)
|
||||||
|
|
||||||
@@ -79,8 +79,8 @@ func TestCreateTeam(t *testing.T) {
|
|||||||
th.RestoreDefaultRolePermissions(defaultRolePermissions)
|
th.RestoreDefaultRolePermissions(defaultRolePermissions)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_CREATE_TEAM.Id, model.SYSTEM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionCreateTeam.Id, model.SystemUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_CREATE_TEAM.Id, model.SYSTEM_ADMIN_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionCreateTeam.Id, model.SystemAdminRoleId)
|
||||||
|
|
||||||
_, resp = th.Client.CreateTeam(team)
|
_, resp = th.Client.CreateTeam(team)
|
||||||
CheckForbiddenStatus(t, resp)
|
CheckForbiddenStatus(t, resp)
|
||||||
@@ -97,7 +97,7 @@ func TestCreateTeamSanitization(t *testing.T) {
|
|||||||
DisplayName: t.Name() + "_1",
|
DisplayName: t.Name() + "_1",
|
||||||
Name: GenerateTestTeamName(),
|
Name: GenerateTestTeamName(),
|
||||||
Email: th.GenerateTestEmail(),
|
Email: th.GenerateTestEmail(),
|
||||||
Type: model.TEAM_OPEN,
|
Type: model.TeamOpen,
|
||||||
AllowedDomains: "simulator.amazonses.com,localhost",
|
AllowedDomains: "simulator.amazonses.com,localhost",
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -112,7 +112,7 @@ func TestCreateTeamSanitization(t *testing.T) {
|
|||||||
DisplayName: t.Name() + "_2",
|
DisplayName: t.Name() + "_2",
|
||||||
Name: GenerateTestTeamName(),
|
Name: GenerateTestTeamName(),
|
||||||
Email: th.GenerateTestEmail(),
|
Email: th.GenerateTestEmail(),
|
||||||
Type: model.TEAM_OPEN,
|
Type: model.TeamOpen,
|
||||||
AllowedDomains: "simulator.amazonses.com,localhost",
|
AllowedDomains: "simulator.amazonses.com,localhost",
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -147,10 +147,10 @@ func TestGetTeam(t *testing.T) {
|
|||||||
|
|
||||||
th.LoginTeamAdmin()
|
th.LoginTeamAdmin()
|
||||||
|
|
||||||
team2 := &model.Team{DisplayName: "Name", Name: GenerateTestTeamName(), Email: th.GenerateTestEmail(), Type: model.TEAM_OPEN, AllowOpenInvite: false}
|
team2 := &model.Team{DisplayName: "Name", Name: GenerateTestTeamName(), Email: th.GenerateTestEmail(), Type: model.TeamOpen, AllowOpenInvite: false}
|
||||||
rteam2, _ := Client.CreateTeam(team2)
|
rteam2, _ := Client.CreateTeam(team2)
|
||||||
|
|
||||||
team3 := &model.Team{DisplayName: "Name", Name: GenerateTestTeamName(), Email: th.GenerateTestEmail(), Type: model.TEAM_INVITE, AllowOpenInvite: true}
|
team3 := &model.Team{DisplayName: "Name", Name: GenerateTestTeamName(), Email: th.GenerateTestEmail(), Type: model.TeamInvite, AllowOpenInvite: true}
|
||||||
rteam3, _ := Client.CreateTeam(team3)
|
rteam3, _ := Client.CreateTeam(team3)
|
||||||
|
|
||||||
th.LoginBasic()
|
th.LoginBasic()
|
||||||
@@ -180,7 +180,7 @@ func TestGetTeamSanitization(t *testing.T) {
|
|||||||
DisplayName: t.Name() + "_1",
|
DisplayName: t.Name() + "_1",
|
||||||
Name: GenerateTestTeamName(),
|
Name: GenerateTestTeamName(),
|
||||||
Email: th.GenerateTestEmail(),
|
Email: th.GenerateTestEmail(),
|
||||||
Type: model.TEAM_OPEN,
|
Type: model.TeamOpen,
|
||||||
AllowedDomains: "simulator.amazonses.com,localhost",
|
AllowedDomains: "simulator.amazonses.com,localhost",
|
||||||
})
|
})
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
@@ -199,7 +199,7 @@ func TestGetTeamSanitization(t *testing.T) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
t.Run("team user without invite permissions", func(t *testing.T) {
|
t.Run("team user without invite permissions", func(t *testing.T) {
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_INVITE_USER.Id, model.TEAM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionInviteUser.Id, model.TeamUserRoleId)
|
||||||
th.LinkUserToTeam(th.BasicUser2, team)
|
th.LinkUserToTeam(th.BasicUser2, team)
|
||||||
|
|
||||||
client := th.CreateClient()
|
client := th.CreateClient()
|
||||||
@@ -264,7 +264,7 @@ func TestUpdateTeam(t *testing.T) {
|
|||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
|
|
||||||
th.TestForAllClients(t, func(t *testing.T, client *model.Client4) {
|
th.TestForAllClients(t, func(t *testing.T, client *model.Client4) {
|
||||||
team := &model.Team{DisplayName: "Name", Description: "Some description", AllowOpenInvite: false, InviteId: "inviteid0", Name: "z-z-" + model.NewRandomTeamName() + "a", Email: "success+" + model.NewId() + "@simulator.amazonses.com", Type: model.TEAM_OPEN}
|
team := &model.Team{DisplayName: "Name", Description: "Some description", AllowOpenInvite: false, InviteId: "inviteid0", Name: "z-z-" + model.NewRandomTeamName() + "a", Email: "success+" + model.NewId() + "@simulator.amazonses.com", Type: model.TeamOpen}
|
||||||
var resp *model.Response
|
var resp *model.Response
|
||||||
team, resp = th.Client.CreateTeam(team)
|
team, resp = th.Client.CreateTeam(team)
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
@@ -321,11 +321,11 @@ func TestUpdateTeam(t *testing.T) {
|
|||||||
|
|
||||||
require.NotEqual(t, uteam.Email, "test@domain.com", "Should not update email")
|
require.NotEqual(t, uteam.Email, "test@domain.com", "Should not update email")
|
||||||
|
|
||||||
team.Type = model.TEAM_INVITE
|
team.Type = model.TeamInvite
|
||||||
uteam, resp = client.UpdateTeam(team)
|
uteam, resp = client.UpdateTeam(team)
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
|
|
||||||
require.NotEqual(t, uteam.Type, model.TEAM_INVITE, "Should not update type")
|
require.NotEqual(t, uteam.Type, model.TeamInvite, "Should not update type")
|
||||||
|
|
||||||
originalTeamId := team.Id
|
originalTeamId := team.Id
|
||||||
team.Id = model.NewId()
|
team.Id = model.NewId()
|
||||||
@@ -346,7 +346,7 @@ func TestUpdateTeam(t *testing.T) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
th.TestForSystemAdminAndLocal(t, func(t *testing.T, client *model.Client4) {
|
th.TestForSystemAdminAndLocal(t, func(t *testing.T, client *model.Client4) {
|
||||||
team := &model.Team{DisplayName: "New", Description: "Some description", AllowOpenInvite: false, InviteId: "inviteid0", Name: "z-z-" + model.NewRandomTeamName() + "a", Email: "success+" + model.NewId() + "@simulator.amazonses.com", Type: model.TEAM_OPEN}
|
team := &model.Team{DisplayName: "New", Description: "Some description", AllowOpenInvite: false, InviteId: "inviteid0", Name: "z-z-" + model.NewRandomTeamName() + "a", Email: "success+" + model.NewId() + "@simulator.amazonses.com", Type: model.TeamOpen}
|
||||||
var resp *model.Response
|
var resp *model.Response
|
||||||
team, resp = client.CreateTeam(team)
|
team, resp = client.CreateTeam(team)
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
@@ -365,7 +365,7 @@ func TestUpdateTeamSanitization(t *testing.T) {
|
|||||||
DisplayName: t.Name() + "_1",
|
DisplayName: t.Name() + "_1",
|
||||||
Name: GenerateTestTeamName(),
|
Name: GenerateTestTeamName(),
|
||||||
Email: th.GenerateTestEmail(),
|
Email: th.GenerateTestEmail(),
|
||||||
Type: model.TEAM_OPEN,
|
Type: model.TeamOpen,
|
||||||
AllowedDomains: "simulator.amazonses.com,localhost",
|
AllowedDomains: "simulator.amazonses.com,localhost",
|
||||||
})
|
})
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
@@ -393,7 +393,7 @@ func TestPatchTeam(t *testing.T) {
|
|||||||
th := Setup(t).InitBasic()
|
th := Setup(t).InitBasic()
|
||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
|
|
||||||
team := &model.Team{DisplayName: "Name", Description: "Some description", CompanyName: "Some company name", AllowOpenInvite: false, InviteId: "inviteid0", Name: "z-z-" + model.NewRandomTeamName() + "a", Email: "success+" + model.NewId() + "@simulator.amazonses.com", Type: model.TEAM_OPEN}
|
team := &model.Team{DisplayName: "Name", Description: "Some description", CompanyName: "Some company name", AllowOpenInvite: false, InviteId: "inviteid0", Name: "z-z-" + model.NewRandomTeamName() + "a", Email: "success+" + model.NewId() + "@simulator.amazonses.com", Type: model.TeamOpen}
|
||||||
team, _ = th.Client.CreateTeam(team)
|
team, _ = th.Client.CreateTeam(team)
|
||||||
|
|
||||||
patch := &model.TeamPatch{}
|
patch := &model.TeamPatch{}
|
||||||
@@ -425,7 +425,7 @@ func TestPatchTeam(t *testing.T) {
|
|||||||
require.True(t, rteam.AllowOpenInvite, "AllowOpenInvite did not update properly")
|
require.True(t, rteam.AllowOpenInvite, "AllowOpenInvite did not update properly")
|
||||||
|
|
||||||
t.Run("Changing AllowOpenInvite to false regenerates InviteID", func(t *testing.T) {
|
t.Run("Changing AllowOpenInvite to false regenerates InviteID", func(t *testing.T) {
|
||||||
team2 := &model.Team{DisplayName: "Name2", Description: "Some description", CompanyName: "Some company name", AllowOpenInvite: true, InviteId: model.NewId(), Name: "z-z-" + model.NewRandomTeamName() + "a", Email: "success+" + model.NewId() + "@simulator.amazonses.com", Type: model.TEAM_OPEN}
|
team2 := &model.Team{DisplayName: "Name2", Description: "Some description", CompanyName: "Some company name", AllowOpenInvite: true, InviteId: model.NewId(), Name: "z-z-" + model.NewRandomTeamName() + "a", Email: "success+" + model.NewId() + "@simulator.amazonses.com", Type: model.TeamOpen}
|
||||||
team2, _ = client.CreateTeam(team2)
|
team2, _ = client.CreateTeam(team2)
|
||||||
|
|
||||||
patch2 := &model.TeamPatch{
|
patch2 := &model.TeamPatch{
|
||||||
@@ -440,7 +440,7 @@ func TestPatchTeam(t *testing.T) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
t.Run("Changing AllowOpenInvite to true doesn't regenerate InviteID", func(t *testing.T) {
|
t.Run("Changing AllowOpenInvite to true doesn't regenerate InviteID", func(t *testing.T) {
|
||||||
team2 := &model.Team{DisplayName: "Name3", Description: "Some description", CompanyName: "Some company name", AllowOpenInvite: false, InviteId: model.NewId(), Name: "z-z-" + model.NewRandomTeamName() + "a", Email: "success+" + model.NewId() + "@simulator.amazonses.com", Type: model.TEAM_OPEN}
|
team2 := &model.Team{DisplayName: "Name3", Description: "Some description", CompanyName: "Some company name", AllowOpenInvite: false, InviteId: model.NewId(), Name: "z-z-" + model.NewRandomTeamName() + "a", Email: "success+" + model.NewId() + "@simulator.amazonses.com", Type: model.TeamOpen}
|
||||||
team2, _ = client.CreateTeam(team2)
|
team2, _ = client.CreateTeam(team2)
|
||||||
|
|
||||||
patch2 := &model.TeamPatch{
|
patch2 := &model.TeamPatch{
|
||||||
@@ -487,7 +487,7 @@ func TestRestoreTeam(t *testing.T) {
|
|||||||
DisplayName: "Some Team",
|
DisplayName: "Some Team",
|
||||||
Description: "Some description",
|
Description: "Some description",
|
||||||
CompanyName: "Some company name",
|
CompanyName: "Some company name",
|
||||||
AllowOpenInvite: (teamType == model.TEAM_OPEN),
|
AllowOpenInvite: (teamType == model.TeamOpen),
|
||||||
InviteId: model.NewId(),
|
InviteId: model.NewId(),
|
||||||
Name: "aa-" + model.NewRandomTeamName() + "zz",
|
Name: "aa-" + model.NewRandomTeamName() + "zz",
|
||||||
Email: "success+" + model.NewId() + "@simulator.amazonses.com",
|
Email: "success+" + model.NewId() + "@simulator.amazonses.com",
|
||||||
@@ -501,7 +501,7 @@ func TestRestoreTeam(t *testing.T) {
|
|||||||
}
|
}
|
||||||
return team
|
return team
|
||||||
}
|
}
|
||||||
teamPublic := createTeam(t, true, model.TEAM_OPEN)
|
teamPublic := createTeam(t, true, model.TeamOpen)
|
||||||
|
|
||||||
t.Run("invalid team", func(t *testing.T) {
|
t.Run("invalid team", func(t *testing.T) {
|
||||||
_, resp := Client.RestoreTeam(model.NewId())
|
_, resp := Client.RestoreTeam(model.NewId())
|
||||||
@@ -509,27 +509,27 @@ func TestRestoreTeam(t *testing.T) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
th.TestForAllClients(t, func(t *testing.T, client *model.Client4) {
|
th.TestForAllClients(t, func(t *testing.T, client *model.Client4) {
|
||||||
team := createTeam(t, true, model.TEAM_OPEN)
|
team := createTeam(t, true, model.TeamOpen)
|
||||||
team, resp := client.RestoreTeam(team.Id)
|
team, resp := client.RestoreTeam(team.Id)
|
||||||
CheckOKStatus(t, resp)
|
CheckOKStatus(t, resp)
|
||||||
require.Zero(t, team.DeleteAt)
|
require.Zero(t, team.DeleteAt)
|
||||||
require.Equal(t, model.TEAM_OPEN, team.Type)
|
require.Equal(t, model.TeamOpen, team.Type)
|
||||||
}, "restore archived public team")
|
}, "restore archived public team")
|
||||||
|
|
||||||
th.TestForAllClients(t, func(t *testing.T, client *model.Client4) {
|
th.TestForAllClients(t, func(t *testing.T, client *model.Client4) {
|
||||||
team := createTeam(t, true, model.TEAM_INVITE)
|
team := createTeam(t, true, model.TeamInvite)
|
||||||
team, resp := client.RestoreTeam(team.Id)
|
team, resp := client.RestoreTeam(team.Id)
|
||||||
CheckOKStatus(t, resp)
|
CheckOKStatus(t, resp)
|
||||||
require.Zero(t, team.DeleteAt)
|
require.Zero(t, team.DeleteAt)
|
||||||
require.Equal(t, model.TEAM_INVITE, team.Type)
|
require.Equal(t, model.TeamInvite, team.Type)
|
||||||
}, "restore archived private team")
|
}, "restore archived private team")
|
||||||
|
|
||||||
th.TestForAllClients(t, func(t *testing.T, client *model.Client4) {
|
th.TestForAllClients(t, func(t *testing.T, client *model.Client4) {
|
||||||
team := createTeam(t, false, model.TEAM_OPEN)
|
team := createTeam(t, false, model.TeamOpen)
|
||||||
team, resp := client.RestoreTeam(team.Id)
|
team, resp := client.RestoreTeam(team.Id)
|
||||||
CheckOKStatus(t, resp)
|
CheckOKStatus(t, resp)
|
||||||
require.Zero(t, team.DeleteAt)
|
require.Zero(t, team.DeleteAt)
|
||||||
require.Equal(t, model.TEAM_OPEN, team.Type)
|
require.Equal(t, model.TeamOpen, team.Type)
|
||||||
}, "restore active public team")
|
}, "restore active public team")
|
||||||
|
|
||||||
t.Run("not logged in", func(t *testing.T) {
|
t.Run("not logged in", func(t *testing.T) {
|
||||||
@@ -558,7 +558,7 @@ func TestPatchTeamSanitization(t *testing.T) {
|
|||||||
DisplayName: t.Name() + "_1",
|
DisplayName: t.Name() + "_1",
|
||||||
Name: GenerateTestTeamName(),
|
Name: GenerateTestTeamName(),
|
||||||
Email: th.GenerateTestEmail(),
|
Email: th.GenerateTestEmail(),
|
||||||
Type: model.TEAM_OPEN,
|
Type: model.TeamOpen,
|
||||||
AllowedDomains: "simulator.amazonses.com,localhost",
|
AllowedDomains: "simulator.amazonses.com,localhost",
|
||||||
})
|
})
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
@@ -602,11 +602,11 @@ func TestUpdateTeamPrivacy(t *testing.T) {
|
|||||||
return team
|
return team
|
||||||
}
|
}
|
||||||
|
|
||||||
teamPublic := createTeam(model.TEAM_OPEN, true)
|
teamPublic := createTeam(model.TeamOpen, true)
|
||||||
teamPrivate := createTeam(model.TEAM_INVITE, false)
|
teamPrivate := createTeam(model.TeamInvite, false)
|
||||||
|
|
||||||
teamPublic2 := createTeam(model.TEAM_OPEN, true)
|
teamPublic2 := createTeam(model.TeamOpen, true)
|
||||||
teamPrivate2 := createTeam(model.TEAM_INVITE, false)
|
teamPrivate2 := createTeam(model.TeamInvite, false)
|
||||||
|
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
@@ -618,11 +618,11 @@ func TestUpdateTeamPrivacy(t *testing.T) {
|
|||||||
wantInviteIdChanged bool
|
wantInviteIdChanged bool
|
||||||
originalInviteId string
|
originalInviteId string
|
||||||
}{
|
}{
|
||||||
{name: "bad privacy", team: teamPublic, privacy: "blap", errChecker: CheckBadRequestStatus, wantType: model.TEAM_OPEN, wantOpenInvite: true},
|
{name: "bad privacy", team: teamPublic, privacy: "blap", errChecker: CheckBadRequestStatus, wantType: model.TeamOpen, wantOpenInvite: true},
|
||||||
{name: "public to private", team: teamPublic, privacy: model.TEAM_INVITE, errChecker: nil, wantType: model.TEAM_INVITE, wantOpenInvite: false, originalInviteId: teamPublic.InviteId, wantInviteIdChanged: true},
|
{name: "public to private", team: teamPublic, privacy: model.TeamInvite, errChecker: nil, wantType: model.TeamInvite, wantOpenInvite: false, originalInviteId: teamPublic.InviteId, wantInviteIdChanged: true},
|
||||||
{name: "private to public", team: teamPrivate, privacy: model.TEAM_OPEN, errChecker: nil, wantType: model.TEAM_OPEN, wantOpenInvite: true, originalInviteId: teamPrivate.InviteId, wantInviteIdChanged: false},
|
{name: "private to public", team: teamPrivate, privacy: model.TeamOpen, errChecker: nil, wantType: model.TeamOpen, wantOpenInvite: true, originalInviteId: teamPrivate.InviteId, wantInviteIdChanged: false},
|
||||||
{name: "public to public", team: teamPublic2, privacy: model.TEAM_OPEN, errChecker: nil, wantType: model.TEAM_OPEN, wantOpenInvite: true, originalInviteId: teamPublic2.InviteId, wantInviteIdChanged: false},
|
{name: "public to public", team: teamPublic2, privacy: model.TeamOpen, errChecker: nil, wantType: model.TeamOpen, wantOpenInvite: true, originalInviteId: teamPublic2.InviteId, wantInviteIdChanged: false},
|
||||||
{name: "private to private", team: teamPrivate2, privacy: model.TEAM_INVITE, errChecker: nil, wantType: model.TEAM_INVITE, wantOpenInvite: false, originalInviteId: teamPrivate2.InviteId, wantInviteIdChanged: false},
|
{name: "private to private", team: teamPrivate2, privacy: model.TeamInvite, errChecker: nil, wantType: model.TeamInvite, wantOpenInvite: false, originalInviteId: teamPrivate2.InviteId, wantInviteIdChanged: false},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
@@ -647,24 +647,24 @@ func TestUpdateTeamPrivacy(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
t.Run("non-existent team", func(t *testing.T) {
|
t.Run("non-existent team", func(t *testing.T) {
|
||||||
_, resp := Client.UpdateTeamPrivacy(model.NewId(), model.TEAM_INVITE)
|
_, resp := Client.UpdateTeamPrivacy(model.NewId(), model.TeamInvite)
|
||||||
CheckForbiddenStatus(t, resp)
|
CheckForbiddenStatus(t, resp)
|
||||||
})
|
})
|
||||||
|
|
||||||
th.TestForSystemAdminAndLocal(t, func(t *testing.T, client *model.Client4) {
|
th.TestForSystemAdminAndLocal(t, func(t *testing.T, client *model.Client4) {
|
||||||
_, resp := client.UpdateTeamPrivacy(model.NewId(), model.TEAM_INVITE)
|
_, resp := client.UpdateTeamPrivacy(model.NewId(), model.TeamInvite)
|
||||||
CheckNotFoundStatus(t, resp)
|
CheckNotFoundStatus(t, resp)
|
||||||
}, "non-existent team for admins")
|
}, "non-existent team for admins")
|
||||||
|
|
||||||
t.Run("not logged in", func(t *testing.T) {
|
t.Run("not logged in", func(t *testing.T) {
|
||||||
Client.Logout()
|
Client.Logout()
|
||||||
_, resp := Client.UpdateTeamPrivacy(teamPublic.Id, model.TEAM_INVITE)
|
_, resp := Client.UpdateTeamPrivacy(teamPublic.Id, model.TeamInvite)
|
||||||
CheckUnauthorizedStatus(t, resp)
|
CheckUnauthorizedStatus(t, resp)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("no permission to manage team", func(t *testing.T) {
|
t.Run("no permission to manage team", func(t *testing.T) {
|
||||||
th.LoginBasic2()
|
th.LoginBasic2()
|
||||||
_, resp := Client.UpdateTeamPrivacy(teamPublic.Id, model.TEAM_INVITE)
|
_, resp := Client.UpdateTeamPrivacy(teamPublic.Id, model.TeamInvite)
|
||||||
CheckForbiddenStatus(t, resp)
|
CheckForbiddenStatus(t, resp)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -680,7 +680,7 @@ func TestTeamUnicodeNames(t *testing.T) {
|
|||||||
DisplayName: "Some\u206c Team",
|
DisplayName: "Some\u206c Team",
|
||||||
Description: "A \ufffatest\ufffb channel.",
|
Description: "A \ufffatest\ufffb channel.",
|
||||||
CompanyName: "\ufeffAcme Inc\ufffc",
|
CompanyName: "\ufeffAcme Inc\ufffc",
|
||||||
Type: model.TEAM_OPEN}
|
Type: model.TeamOpen}
|
||||||
rteam, resp := Client.CreateTeam(team)
|
rteam, resp := Client.CreateTeam(team)
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
CheckCreatedStatus(t, resp)
|
CheckCreatedStatus(t, resp)
|
||||||
@@ -697,7 +697,7 @@ func TestTeamUnicodeNames(t *testing.T) {
|
|||||||
CompanyName: "Bad Company",
|
CompanyName: "Bad Company",
|
||||||
Name: model.NewRandomTeamName(),
|
Name: model.NewRandomTeamName(),
|
||||||
Email: "success+" + model.NewId() + "@simulator.amazonses.com",
|
Email: "success+" + model.NewId() + "@simulator.amazonses.com",
|
||||||
Type: model.TEAM_OPEN}
|
Type: model.TeamOpen}
|
||||||
team, _ = Client.CreateTeam(team)
|
team, _ = Client.CreateTeam(team)
|
||||||
|
|
||||||
team.DisplayName = "\u206eThe Team\u206f"
|
team.DisplayName = "\u206eThe Team\u206f"
|
||||||
@@ -718,7 +718,7 @@ func TestTeamUnicodeNames(t *testing.T) {
|
|||||||
CompanyName: "Some company name",
|
CompanyName: "Some company name",
|
||||||
Name: model.NewRandomTeamName(),
|
Name: model.NewRandomTeamName(),
|
||||||
Email: "success+" + model.NewId() + "@simulator.amazonses.com",
|
Email: "success+" + model.NewId() + "@simulator.amazonses.com",
|
||||||
Type: model.TEAM_OPEN}
|
Type: model.TeamOpen}
|
||||||
team, _ = Client.CreateTeam(team)
|
team, _ = Client.CreateTeam(team)
|
||||||
|
|
||||||
patch := &model.TeamPatch{}
|
patch := &model.TeamPatch{}
|
||||||
@@ -741,7 +741,7 @@ func TestRegenerateTeamInviteId(t *testing.T) {
|
|||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
Client := th.Client
|
Client := th.Client
|
||||||
|
|
||||||
team := &model.Team{DisplayName: "Name", Description: "Some description", CompanyName: "Some company name", AllowOpenInvite: false, InviteId: "inviteid0", Name: "z-z-" + model.NewRandomTeamName() + "a", Email: "success+" + model.NewId() + "@simulator.amazonses.com", Type: model.TEAM_OPEN}
|
team := &model.Team{DisplayName: "Name", Description: "Some description", CompanyName: "Some company name", AllowOpenInvite: false, InviteId: "inviteid0", Name: "z-z-" + model.NewRandomTeamName() + "a", Email: "success+" + model.NewId() + "@simulator.amazonses.com", Type: model.TeamOpen}
|
||||||
team, _ = Client.CreateTeam(team)
|
team, _ = Client.CreateTeam(team)
|
||||||
|
|
||||||
assert.NotEqual(t, team.InviteId, "")
|
assert.NotEqual(t, team.InviteId, "")
|
||||||
@@ -766,7 +766,7 @@ func TestSoftDeleteTeam(t *testing.T) {
|
|||||||
CheckUnauthorizedStatus(t, resp)
|
CheckUnauthorizedStatus(t, resp)
|
||||||
|
|
||||||
th.LoginBasic()
|
th.LoginBasic()
|
||||||
team := &model.Team{DisplayName: "DisplayName", Name: GenerateTestTeamName(), Email: th.GenerateTestEmail(), Type: model.TEAM_OPEN}
|
team := &model.Team{DisplayName: "DisplayName", Name: GenerateTestTeamName(), Email: th.GenerateTestEmail(), Type: model.TeamOpen}
|
||||||
team, _ = th.Client.CreateTeam(team)
|
team, _ = th.Client.CreateTeam(team)
|
||||||
|
|
||||||
th.TestForAllClients(t, func(t *testing.T, client *model.Client4) {
|
th.TestForAllClients(t, func(t *testing.T, client *model.Client4) {
|
||||||
@@ -802,7 +802,7 @@ func TestPermanentDeleteTeam(t *testing.T) {
|
|||||||
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableAPITeamDeletion = false })
|
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableAPITeamDeletion = false })
|
||||||
|
|
||||||
t.Run("Permanent deletion not available through API if EnableAPITeamDeletion is not set", func(t *testing.T) {
|
t.Run("Permanent deletion not available through API if EnableAPITeamDeletion is not set", func(t *testing.T) {
|
||||||
team := &model.Team{DisplayName: "DisplayName", Name: GenerateTestTeamName(), Email: th.GenerateTestEmail(), Type: model.TEAM_OPEN}
|
team := &model.Team{DisplayName: "DisplayName", Name: GenerateTestTeamName(), Email: th.GenerateTestEmail(), Type: model.TeamOpen}
|
||||||
team, _ = th.Client.CreateTeam(team)
|
team, _ = th.Client.CreateTeam(team)
|
||||||
|
|
||||||
_, resp := th.Client.PermanentDeleteTeam(team.Id)
|
_, resp := th.Client.PermanentDeleteTeam(team.Id)
|
||||||
@@ -813,7 +813,7 @@ func TestPermanentDeleteTeam(t *testing.T) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
t.Run("Permanent deletion available through local mode even if EnableAPITeamDeletion is not set", func(t *testing.T) {
|
t.Run("Permanent deletion available through local mode even if EnableAPITeamDeletion is not set", func(t *testing.T) {
|
||||||
team := &model.Team{DisplayName: "DisplayName", Name: GenerateTestTeamName(), Email: th.GenerateTestEmail(), Type: model.TEAM_OPEN}
|
team := &model.Team{DisplayName: "DisplayName", Name: GenerateTestTeamName(), Email: th.GenerateTestEmail(), Type: model.TeamOpen}
|
||||||
team, _ = th.Client.CreateTeam(team)
|
team, _ = th.Client.CreateTeam(team)
|
||||||
|
|
||||||
ok, resp := th.LocalClient.PermanentDeleteTeam(team.Id)
|
ok, resp := th.LocalClient.PermanentDeleteTeam(team.Id)
|
||||||
@@ -827,7 +827,7 @@ func TestPermanentDeleteTeam(t *testing.T) {
|
|||||||
}()
|
}()
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableAPITeamDeletion = true })
|
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableAPITeamDeletion = true })
|
||||||
|
|
||||||
team := &model.Team{DisplayName: "DisplayName", Name: GenerateTestTeamName(), Email: th.GenerateTestEmail(), Type: model.TEAM_OPEN}
|
team := &model.Team{DisplayName: "DisplayName", Name: GenerateTestTeamName(), Email: th.GenerateTestEmail(), Type: model.TeamOpen}
|
||||||
team, _ = client.CreateTeam(team)
|
team, _ = client.CreateTeam(team)
|
||||||
ok, resp := client.PermanentDeleteTeam(team.Id)
|
ok, resp := client.PermanentDeleteTeam(team.Id)
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
@@ -848,19 +848,19 @@ func TestGetAllTeams(t *testing.T) {
|
|||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
Client := th.Client
|
Client := th.Client
|
||||||
|
|
||||||
team1 := &model.Team{DisplayName: "Name", Name: GenerateTestTeamName(), Email: th.GenerateTestEmail(), Type: model.TEAM_OPEN, AllowOpenInvite: true}
|
team1 := &model.Team{DisplayName: "Name", Name: GenerateTestTeamName(), Email: th.GenerateTestEmail(), Type: model.TeamOpen, AllowOpenInvite: true}
|
||||||
team1, resp := Client.CreateTeam(team1)
|
team1, resp := Client.CreateTeam(team1)
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
|
|
||||||
team2 := &model.Team{DisplayName: "Name2", Name: GenerateTestTeamName(), Email: th.GenerateTestEmail(), Type: model.TEAM_OPEN, AllowOpenInvite: true}
|
team2 := &model.Team{DisplayName: "Name2", Name: GenerateTestTeamName(), Email: th.GenerateTestEmail(), Type: model.TeamOpen, AllowOpenInvite: true}
|
||||||
team2, resp = Client.CreateTeam(team2)
|
team2, resp = Client.CreateTeam(team2)
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
|
|
||||||
team3 := &model.Team{DisplayName: "Name3", Name: GenerateTestTeamName(), Email: th.GenerateTestEmail(), Type: model.TEAM_OPEN, AllowOpenInvite: false}
|
team3 := &model.Team{DisplayName: "Name3", Name: GenerateTestTeamName(), Email: th.GenerateTestEmail(), Type: model.TeamOpen, AllowOpenInvite: false}
|
||||||
team3, resp = Client.CreateTeam(team3)
|
team3, resp = Client.CreateTeam(team3)
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
|
|
||||||
team4 := &model.Team{DisplayName: "Name4", Name: GenerateTestTeamName(), Email: th.GenerateTestEmail(), Type: model.TEAM_OPEN, AllowOpenInvite: false}
|
team4 := &model.Team{DisplayName: "Name4", Name: GenerateTestTeamName(), Email: th.GenerateTestEmail(), Type: model.TeamOpen, AllowOpenInvite: false}
|
||||||
team4, resp = Client.CreateTeam(team4)
|
team4, resp = Client.CreateTeam(team4)
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
|
|
||||||
@@ -880,42 +880,42 @@ func TestGetAllTeams(t *testing.T) {
|
|||||||
Name: "Get 1 team per page",
|
Name: "Get 1 team per page",
|
||||||
Page: 0,
|
Page: 0,
|
||||||
PerPage: 1,
|
PerPage: 1,
|
||||||
Permissions: []string{model.PERMISSION_LIST_PUBLIC_TEAMS.Id},
|
Permissions: []string{model.PermissionListPublicTeams.Id},
|
||||||
ExpectedTeams: []string{team1.Id},
|
ExpectedTeams: []string{team1.Id},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Name: "Get second page with 1 team per page",
|
Name: "Get second page with 1 team per page",
|
||||||
Page: 1,
|
Page: 1,
|
||||||
PerPage: 1,
|
PerPage: 1,
|
||||||
Permissions: []string{model.PERMISSION_LIST_PUBLIC_TEAMS.Id},
|
Permissions: []string{model.PermissionListPublicTeams.Id},
|
||||||
ExpectedTeams: []string{team2.Id},
|
ExpectedTeams: []string{team2.Id},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Name: "Get no items per page",
|
Name: "Get no items per page",
|
||||||
Page: 1,
|
Page: 1,
|
||||||
PerPage: 0,
|
PerPage: 0,
|
||||||
Permissions: []string{model.PERMISSION_LIST_PUBLIC_TEAMS.Id},
|
Permissions: []string{model.PermissionListPublicTeams.Id},
|
||||||
ExpectedTeams: []string{},
|
ExpectedTeams: []string{},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Name: "Get all open teams",
|
Name: "Get all open teams",
|
||||||
Page: 0,
|
Page: 0,
|
||||||
PerPage: 10,
|
PerPage: 10,
|
||||||
Permissions: []string{model.PERMISSION_LIST_PUBLIC_TEAMS.Id},
|
Permissions: []string{model.PermissionListPublicTeams.Id},
|
||||||
ExpectedTeams: []string{team1.Id, team2.Id},
|
ExpectedTeams: []string{team1.Id, team2.Id},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Name: "Get all private teams",
|
Name: "Get all private teams",
|
||||||
Page: 0,
|
Page: 0,
|
||||||
PerPage: 10,
|
PerPage: 10,
|
||||||
Permissions: []string{model.PERMISSION_LIST_PRIVATE_TEAMS.Id},
|
Permissions: []string{model.PermissionListPrivateTeams.Id},
|
||||||
ExpectedTeams: []string{th.BasicTeam.Id, team3.Id, team4.Id},
|
ExpectedTeams: []string{th.BasicTeam.Id, team3.Id, team4.Id},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Name: "Get all teams",
|
Name: "Get all teams",
|
||||||
Page: 0,
|
Page: 0,
|
||||||
PerPage: 10,
|
PerPage: 10,
|
||||||
Permissions: []string{model.PERMISSION_LIST_PUBLIC_TEAMS.Id, model.PERMISSION_LIST_PRIVATE_TEAMS.Id},
|
Permissions: []string{model.PermissionListPublicTeams.Id, model.PermissionListPrivateTeams.Id},
|
||||||
ExpectedTeams: []string{th.BasicTeam.Id, team1.Id, team2.Id, team3.Id, team4.Id},
|
ExpectedTeams: []string{th.BasicTeam.Id, team1.Id, team2.Id, team3.Id, team4.Id},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -941,7 +941,7 @@ func TestGetAllTeams(t *testing.T) {
|
|||||||
Name: "Get all teams with count",
|
Name: "Get all teams with count",
|
||||||
Page: 0,
|
Page: 0,
|
||||||
PerPage: 10,
|
PerPage: 10,
|
||||||
Permissions: []string{model.PERMISSION_LIST_PUBLIC_TEAMS.Id, model.PERMISSION_LIST_PRIVATE_TEAMS.Id},
|
Permissions: []string{model.PermissionListPublicTeams.Id, model.PermissionListPrivateTeams.Id},
|
||||||
ExpectedTeams: []string{th.BasicTeam.Id, team1.Id, team2.Id, team3.Id, team4.Id},
|
ExpectedTeams: []string{th.BasicTeam.Id, team1.Id, team2.Id, team3.Id, team4.Id},
|
||||||
WithCount: true,
|
WithCount: true,
|
||||||
ExpectedCount: 5,
|
ExpectedCount: 5,
|
||||||
@@ -950,7 +950,7 @@ func TestGetAllTeams(t *testing.T) {
|
|||||||
Name: "Get all public teams with count",
|
Name: "Get all public teams with count",
|
||||||
Page: 0,
|
Page: 0,
|
||||||
PerPage: 10,
|
PerPage: 10,
|
||||||
Permissions: []string{model.PERMISSION_LIST_PUBLIC_TEAMS.Id},
|
Permissions: []string{model.PermissionListPublicTeams.Id},
|
||||||
ExpectedTeams: []string{team1.Id, team2.Id},
|
ExpectedTeams: []string{team1.Id, team2.Id},
|
||||||
WithCount: true,
|
WithCount: true,
|
||||||
ExpectedCount: 2,
|
ExpectedCount: 2,
|
||||||
@@ -959,7 +959,7 @@ func TestGetAllTeams(t *testing.T) {
|
|||||||
Name: "Get all private teams with count",
|
Name: "Get all private teams with count",
|
||||||
Page: 0,
|
Page: 0,
|
||||||
PerPage: 10,
|
PerPage: 10,
|
||||||
Permissions: []string{model.PERMISSION_LIST_PRIVATE_TEAMS.Id},
|
Permissions: []string{model.PermissionListPrivateTeams.Id},
|
||||||
ExpectedTeams: []string{th.BasicTeam.Id, team3.Id, team4.Id},
|
ExpectedTeams: []string{th.BasicTeam.Id, team3.Id, team4.Id},
|
||||||
WithCount: true,
|
WithCount: true,
|
||||||
ExpectedCount: 3,
|
ExpectedCount: 3,
|
||||||
@@ -972,12 +972,12 @@ func TestGetAllTeams(t *testing.T) {
|
|||||||
defer func() {
|
defer func() {
|
||||||
th.RestoreDefaultRolePermissions(defaultRolePermissions)
|
th.RestoreDefaultRolePermissions(defaultRolePermissions)
|
||||||
}()
|
}()
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_LIST_PUBLIC_TEAMS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionListPublicTeams.Id, model.SystemUserRoleId)
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_JOIN_PUBLIC_TEAMS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionJoinPublicTeams.Id, model.SystemUserRoleId)
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_LIST_PRIVATE_TEAMS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionListPrivateTeams.Id, model.SystemUserRoleId)
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_JOIN_PRIVATE_TEAMS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionJoinPrivateTeams.Id, model.SystemUserRoleId)
|
||||||
for _, permission := range tc.Permissions {
|
for _, permission := range tc.Permissions {
|
||||||
th.AddPermissionToRole(permission, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(permission, model.SystemUserRoleId)
|
||||||
}
|
}
|
||||||
|
|
||||||
var teams []*model.Team
|
var teams []*model.Team
|
||||||
@@ -1092,7 +1092,7 @@ func TestGetAllTeamsSanitization(t *testing.T) {
|
|||||||
DisplayName: t.Name() + "_1",
|
DisplayName: t.Name() + "_1",
|
||||||
Name: GenerateTestTeamName(),
|
Name: GenerateTestTeamName(),
|
||||||
Email: th.GenerateTestEmail(),
|
Email: th.GenerateTestEmail(),
|
||||||
Type: model.TEAM_OPEN,
|
Type: model.TeamOpen,
|
||||||
AllowedDomains: "simulator.amazonses.com,localhost",
|
AllowedDomains: "simulator.amazonses.com,localhost",
|
||||||
AllowOpenInvite: true,
|
AllowOpenInvite: true,
|
||||||
})
|
})
|
||||||
@@ -1101,7 +1101,7 @@ func TestGetAllTeamsSanitization(t *testing.T) {
|
|||||||
DisplayName: t.Name() + "_2",
|
DisplayName: t.Name() + "_2",
|
||||||
Name: GenerateTestTeamName(),
|
Name: GenerateTestTeamName(),
|
||||||
Email: th.GenerateTestEmail(),
|
Email: th.GenerateTestEmail(),
|
||||||
Type: model.TEAM_OPEN,
|
Type: model.TeamOpen,
|
||||||
AllowedDomains: "simulator.amazonses.com,localhost",
|
AllowedDomains: "simulator.amazonses.com,localhost",
|
||||||
AllowOpenInvite: true,
|
AllowOpenInvite: true,
|
||||||
})
|
})
|
||||||
@@ -1178,10 +1178,10 @@ func TestGetTeamByName(t *testing.T) {
|
|||||||
|
|
||||||
th.LoginTeamAdmin()
|
th.LoginTeamAdmin()
|
||||||
|
|
||||||
team2 := &model.Team{DisplayName: "Name", Name: GenerateTestTeamName(), Email: th.GenerateTestEmail(), Type: model.TEAM_OPEN, AllowOpenInvite: false}
|
team2 := &model.Team{DisplayName: "Name", Name: GenerateTestTeamName(), Email: th.GenerateTestEmail(), Type: model.TeamOpen, AllowOpenInvite: false}
|
||||||
rteam2, _ := th.Client.CreateTeam(team2)
|
rteam2, _ := th.Client.CreateTeam(team2)
|
||||||
|
|
||||||
team3 := &model.Team{DisplayName: "Name", Name: GenerateTestTeamName(), Email: th.GenerateTestEmail(), Type: model.TEAM_INVITE, AllowOpenInvite: true}
|
team3 := &model.Team{DisplayName: "Name", Name: GenerateTestTeamName(), Email: th.GenerateTestEmail(), Type: model.TeamInvite, AllowOpenInvite: true}
|
||||||
rteam3, _ := th.Client.CreateTeam(team3)
|
rteam3, _ := th.Client.CreateTeam(team3)
|
||||||
|
|
||||||
th.LoginBasic()
|
th.LoginBasic()
|
||||||
@@ -1202,7 +1202,7 @@ func TestGetTeamByNameSanitization(t *testing.T) {
|
|||||||
DisplayName: t.Name() + "_1",
|
DisplayName: t.Name() + "_1",
|
||||||
Name: GenerateTestTeamName(),
|
Name: GenerateTestTeamName(),
|
||||||
Email: th.GenerateTestEmail(),
|
Email: th.GenerateTestEmail(),
|
||||||
Type: model.TEAM_OPEN,
|
Type: model.TeamOpen,
|
||||||
AllowedDomains: "simulator.amazonses.com,localhost",
|
AllowedDomains: "simulator.amazonses.com,localhost",
|
||||||
})
|
})
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
@@ -1221,7 +1221,7 @@ func TestGetTeamByNameSanitization(t *testing.T) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
t.Run("team user without invite permissions", func(t *testing.T) {
|
t.Run("team user without invite permissions", func(t *testing.T) {
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_INVITE_USER.Id, model.TEAM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionInviteUser.Id, model.TeamUserRoleId)
|
||||||
th.LinkUserToTeam(th.BasicUser2, team)
|
th.LinkUserToTeam(th.BasicUser2, team)
|
||||||
|
|
||||||
client := th.CreateClient()
|
client := th.CreateClient()
|
||||||
@@ -1263,7 +1263,7 @@ func TestSearchAllTeams(t *testing.T) {
|
|||||||
require.Nil(t, err, err)
|
require.Nil(t, err, err)
|
||||||
oTeam.UpdateAt = updatedTeam.UpdateAt
|
oTeam.UpdateAt = updatedTeam.UpdateAt
|
||||||
|
|
||||||
pTeam := &model.Team{DisplayName: "PName", Name: GenerateTestTeamName(), Email: th.GenerateTestEmail(), Type: model.TEAM_INVITE}
|
pTeam := &model.Team{DisplayName: "PName", Name: GenerateTestTeamName(), Email: th.GenerateTestEmail(), Type: model.TeamInvite}
|
||||||
th.Client.CreateTeam(pTeam)
|
th.Client.CreateTeam(pTeam)
|
||||||
|
|
||||||
rteams, resp := th.Client.SearchTeams(&model.TeamSearch{Term: pTeam.Name})
|
rteams, resp := th.Client.SearchTeams(&model.TeamSearch{Term: pTeam.Name})
|
||||||
@@ -1362,7 +1362,7 @@ func TestSearchAllTeamsPaged(t *testing.T) {
|
|||||||
newTeam, err := th.App.CreateTeam(th.Context, &model.Team{
|
newTeam, err := th.App.CreateTeam(th.Context, &model.Team{
|
||||||
DisplayName: fmt.Sprintf("%s %d %s", commonRandom, i, uid),
|
DisplayName: fmt.Sprintf("%s %d %s", commonRandom, i, uid),
|
||||||
Name: fmt.Sprintf("%s-%d-%s", commonRandom, i, uid),
|
Name: fmt.Sprintf("%s-%d-%s", commonRandom, i, uid),
|
||||||
Type: model.TEAM_OPEN,
|
Type: model.TeamOpen,
|
||||||
Email: th.GenerateTestEmail(),
|
Email: th.GenerateTestEmail(),
|
||||||
})
|
})
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
@@ -1372,7 +1372,7 @@ func TestSearchAllTeamsPaged(t *testing.T) {
|
|||||||
foobarTeam, err := th.App.CreateTeam(th.Context, &model.Team{
|
foobarTeam, err := th.App.CreateTeam(th.Context, &model.Team{
|
||||||
DisplayName: "FOOBARDISPLAYNAME",
|
DisplayName: "FOOBARDISPLAYNAME",
|
||||||
Name: "whatever",
|
Name: "whatever",
|
||||||
Type: model.TEAM_OPEN,
|
Type: model.TeamOpen,
|
||||||
Email: th.GenerateTestEmail(),
|
Email: th.GenerateTestEmail(),
|
||||||
})
|
})
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
@@ -1488,7 +1488,7 @@ func TestSearchAllTeamsSanitization(t *testing.T) {
|
|||||||
DisplayName: t.Name() + "_1",
|
DisplayName: t.Name() + "_1",
|
||||||
Name: GenerateTestTeamName(),
|
Name: GenerateTestTeamName(),
|
||||||
Email: th.GenerateTestEmail(),
|
Email: th.GenerateTestEmail(),
|
||||||
Type: model.TEAM_OPEN,
|
Type: model.TeamOpen,
|
||||||
AllowedDomains: "simulator.amazonses.com,localhost",
|
AllowedDomains: "simulator.amazonses.com,localhost",
|
||||||
})
|
})
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
@@ -1496,7 +1496,7 @@ func TestSearchAllTeamsSanitization(t *testing.T) {
|
|||||||
DisplayName: t.Name() + "_2",
|
DisplayName: t.Name() + "_2",
|
||||||
Name: GenerateTestTeamName(),
|
Name: GenerateTestTeamName(),
|
||||||
Email: th.GenerateTestEmail(),
|
Email: th.GenerateTestEmail(),
|
||||||
Type: model.TEAM_OPEN,
|
Type: model.TeamOpen,
|
||||||
AllowedDomains: "simulator.amazonses.com,localhost",
|
AllowedDomains: "simulator.amazonses.com,localhost",
|
||||||
})
|
})
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
@@ -1555,7 +1555,7 @@ func TestGetTeamsForUser(t *testing.T) {
|
|||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
Client := th.Client
|
Client := th.Client
|
||||||
|
|
||||||
team2 := &model.Team{DisplayName: "Name", Name: GenerateTestTeamName(), Email: th.GenerateTestEmail(), Type: model.TEAM_INVITE}
|
team2 := &model.Team{DisplayName: "Name", Name: GenerateTestTeamName(), Email: th.GenerateTestEmail(), Type: model.TeamInvite}
|
||||||
rteam2, _ := Client.CreateTeam(team2)
|
rteam2, _ := Client.CreateTeam(team2)
|
||||||
|
|
||||||
teams, resp := Client.GetTeamsForUser(th.BasicUser.Id, "")
|
teams, resp := Client.GetTeamsForUser(th.BasicUser.Id, "")
|
||||||
@@ -1597,7 +1597,7 @@ func TestGetTeamsForUserSanitization(t *testing.T) {
|
|||||||
DisplayName: t.Name() + "_1",
|
DisplayName: t.Name() + "_1",
|
||||||
Name: GenerateTestTeamName(),
|
Name: GenerateTestTeamName(),
|
||||||
Email: th.GenerateTestEmail(),
|
Email: th.GenerateTestEmail(),
|
||||||
Type: model.TEAM_OPEN,
|
Type: model.TeamOpen,
|
||||||
AllowedDomains: "simulator.amazonses.com,localhost",
|
AllowedDomains: "simulator.amazonses.com,localhost",
|
||||||
})
|
})
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
@@ -1605,7 +1605,7 @@ func TestGetTeamsForUserSanitization(t *testing.T) {
|
|||||||
DisplayName: t.Name() + "_2",
|
DisplayName: t.Name() + "_2",
|
||||||
Name: GenerateTestTeamName(),
|
Name: GenerateTestTeamName(),
|
||||||
Email: th.GenerateTestEmail(),
|
Email: th.GenerateTestEmail(),
|
||||||
Type: model.TEAM_OPEN,
|
Type: model.TeamOpen,
|
||||||
AllowedDomains: "simulator.amazonses.com,localhost",
|
AllowedDomains: "simulator.amazonses.com,localhost",
|
||||||
})
|
})
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
@@ -1634,7 +1634,7 @@ func TestGetTeamsForUserSanitization(t *testing.T) {
|
|||||||
th.LinkUserToTeam(th.BasicUser2, team2)
|
th.LinkUserToTeam(th.BasicUser2, team2)
|
||||||
|
|
||||||
client := th.CreateClient()
|
client := th.CreateClient()
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_INVITE_USER.Id, model.TEAM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionInviteUser.Id, model.TeamUserRoleId)
|
||||||
th.LoginBasic2WithClient(client)
|
th.LoginBasic2WithClient(client)
|
||||||
|
|
||||||
rteams, resp := client.GetTeamsForUser(th.BasicUser2.Id, "")
|
rteams, resp := client.GetTeamsForUser(th.BasicUser2.Id, "")
|
||||||
@@ -1923,10 +1923,10 @@ func TestAddTeamMember(t *testing.T) {
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
// Set the config so that only team admins can add a user to a team.
|
// Set the config so that only team admins can add a user to a team.
|
||||||
th.AddPermissionToRole(model.PERMISSION_INVITE_USER.Id, model.TEAM_ADMIN_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionInviteUser.Id, model.TeamAdminRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_ADD_USER_TO_TEAM.Id, model.TEAM_ADMIN_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionAddUserToTeam.Id, model.TeamAdminRoleId)
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_INVITE_USER.Id, model.TEAM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionInviteUser.Id, model.TeamUserRoleId)
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_ADD_USER_TO_TEAM.Id, model.TEAM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionAddUserToTeam.Id, model.TeamUserRoleId)
|
||||||
|
|
||||||
th.LoginBasic()
|
th.LoginBasic()
|
||||||
|
|
||||||
@@ -1944,10 +1944,10 @@ func TestAddTeamMember(t *testing.T) {
|
|||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
|
|
||||||
// Change permission level to team user
|
// Change permission level to team user
|
||||||
th.AddPermissionToRole(model.PERMISSION_INVITE_USER.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionInviteUser.Id, model.TeamUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_ADD_USER_TO_TEAM.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionAddUserToTeam.Id, model.TeamUserRoleId)
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_INVITE_USER.Id, model.TEAM_ADMIN_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionInviteUser.Id, model.TeamAdminRoleId)
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_ADD_USER_TO_TEAM.Id, model.TEAM_ADMIN_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionAddUserToTeam.Id, model.TeamAdminRoleId)
|
||||||
|
|
||||||
th.UpdateUserToNonTeamAdmin(th.BasicUser, th.BasicTeam)
|
th.UpdateUserToNonTeamAdmin(th.BasicUser, th.BasicTeam)
|
||||||
th.App.Srv().InvalidateAllCaches()
|
th.App.Srv().InvalidateAllCaches()
|
||||||
@@ -2147,14 +2147,14 @@ func TestAddTeamMemberMyself(t *testing.T) {
|
|||||||
team.AllowOpenInvite = tc.Public
|
team.AllowOpenInvite = tc.Public
|
||||||
th.App.UpdateTeam(team)
|
th.App.UpdateTeam(team)
|
||||||
if tc.PublicPermission {
|
if tc.PublicPermission {
|
||||||
th.AddPermissionToRole(model.PERMISSION_JOIN_PUBLIC_TEAMS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionJoinPublicTeams.Id, model.SystemUserRoleId)
|
||||||
} else {
|
} else {
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_JOIN_PUBLIC_TEAMS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionJoinPublicTeams.Id, model.SystemUserRoleId)
|
||||||
}
|
}
|
||||||
if tc.PrivatePermission {
|
if tc.PrivatePermission {
|
||||||
th.AddPermissionToRole(model.PERMISSION_JOIN_PRIVATE_TEAMS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionJoinPrivateTeams.Id, model.SystemUserRoleId)
|
||||||
} else {
|
} else {
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_JOIN_PRIVATE_TEAMS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionJoinPrivateTeams.Id, model.SystemUserRoleId)
|
||||||
}
|
}
|
||||||
_, resp := Client.AddTeamMember(team.Id, th.BasicUser.Id)
|
_, resp := Client.AddTeamMember(team.Id, th.BasicUser.Id)
|
||||||
if tc.ExpectedSuccess {
|
if tc.ExpectedSuccess {
|
||||||
@@ -2291,10 +2291,10 @@ func TestAddTeamMembers(t *testing.T) {
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
// Set the config so that only team admins can add a user to a team.
|
// Set the config so that only team admins can add a user to a team.
|
||||||
th.AddPermissionToRole(model.PERMISSION_INVITE_USER.Id, model.TEAM_ADMIN_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionInviteUser.Id, model.TeamAdminRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_ADD_USER_TO_TEAM.Id, model.TEAM_ADMIN_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionAddUserToTeam.Id, model.TeamAdminRoleId)
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_INVITE_USER.Id, model.TEAM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionInviteUser.Id, model.TeamUserRoleId)
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_ADD_USER_TO_TEAM.Id, model.TEAM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionAddUserToTeam.Id, model.TeamUserRoleId)
|
||||||
|
|
||||||
th.LoginBasic()
|
th.LoginBasic()
|
||||||
|
|
||||||
@@ -2312,10 +2312,10 @@ func TestAddTeamMembers(t *testing.T) {
|
|||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
|
|
||||||
// Change permission level to team user
|
// Change permission level to team user
|
||||||
th.AddPermissionToRole(model.PERMISSION_INVITE_USER.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionInviteUser.Id, model.TeamUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_ADD_USER_TO_TEAM.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionAddUserToTeam.Id, model.TeamUserRoleId)
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_INVITE_USER.Id, model.TEAM_ADMIN_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionInviteUser.Id, model.TeamAdminRoleId)
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_ADD_USER_TO_TEAM.Id, model.TEAM_ADMIN_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionAddUserToTeam.Id, model.TeamAdminRoleId)
|
||||||
|
|
||||||
th.UpdateUserToNonTeamAdmin(th.BasicUser, th.BasicTeam)
|
th.UpdateUserToNonTeamAdmin(th.BasicUser, th.BasicTeam)
|
||||||
th.App.Srv().InvalidateAllCaches()
|
th.App.Srv().InvalidateAllCaches()
|
||||||
@@ -2675,20 +2675,20 @@ func TestTeamExists(t *testing.T) {
|
|||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
Client := th.Client
|
Client := th.Client
|
||||||
public_member_team := th.BasicTeam
|
public_member_team := th.BasicTeam
|
||||||
err := th.App.UpdateTeamPrivacy(public_member_team.Id, model.TEAM_OPEN, true)
|
err := th.App.UpdateTeamPrivacy(public_member_team.Id, model.TeamOpen, true)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
|
|
||||||
public_not_member_team := th.CreateTeamWithClient(th.SystemAdminClient)
|
public_not_member_team := th.CreateTeamWithClient(th.SystemAdminClient)
|
||||||
err = th.App.UpdateTeamPrivacy(public_not_member_team.Id, model.TEAM_OPEN, true)
|
err = th.App.UpdateTeamPrivacy(public_not_member_team.Id, model.TeamOpen, true)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
|
|
||||||
private_member_team := th.CreateTeamWithClient(th.SystemAdminClient)
|
private_member_team := th.CreateTeamWithClient(th.SystemAdminClient)
|
||||||
th.LinkUserToTeam(th.BasicUser, private_member_team)
|
th.LinkUserToTeam(th.BasicUser, private_member_team)
|
||||||
err = th.App.UpdateTeamPrivacy(private_member_team.Id, model.TEAM_INVITE, false)
|
err = th.App.UpdateTeamPrivacy(private_member_team.Id, model.TeamInvite, false)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
|
|
||||||
private_not_member_team := th.CreateTeamWithClient(th.SystemAdminClient)
|
private_not_member_team := th.CreateTeamWithClient(th.SystemAdminClient)
|
||||||
err = th.App.UpdateTeamPrivacy(private_not_member_team.Id, model.TEAM_INVITE, false)
|
err = th.App.UpdateTeamPrivacy(private_not_member_team.Id, model.TeamInvite, false)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
|
|
||||||
// Check the appropriate permissions are enforced.
|
// Check the appropriate permissions are enforced.
|
||||||
@@ -2697,8 +2697,8 @@ func TestTeamExists(t *testing.T) {
|
|||||||
th.RestoreDefaultRolePermissions(defaultRolePermissions)
|
th.RestoreDefaultRolePermissions(defaultRolePermissions)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_LIST_PUBLIC_TEAMS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionListPublicTeams.Id, model.SystemUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_LIST_PRIVATE_TEAMS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionListPrivateTeams.Id, model.SystemUserRoleId)
|
||||||
|
|
||||||
t.Run("Logged user with permissions and valid public team", func(t *testing.T) {
|
t.Run("Logged user with permissions and valid public team", func(t *testing.T) {
|
||||||
th.LoginBasic()
|
th.LoginBasic()
|
||||||
@@ -2729,7 +2729,7 @@ func TestTeamExists(t *testing.T) {
|
|||||||
|
|
||||||
t.Run("Logged without LIST_PUBLIC_TEAMS permissions and member public team", func(t *testing.T) {
|
t.Run("Logged without LIST_PUBLIC_TEAMS permissions and member public team", func(t *testing.T) {
|
||||||
th.LoginBasic()
|
th.LoginBasic()
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_LIST_PUBLIC_TEAMS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionListPublicTeams.Id, model.SystemUserRoleId)
|
||||||
|
|
||||||
exists, resp := Client.TeamExists(public_member_team.Name, "")
|
exists, resp := Client.TeamExists(public_member_team.Name, "")
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
@@ -2738,7 +2738,7 @@ func TestTeamExists(t *testing.T) {
|
|||||||
|
|
||||||
t.Run("Logged without LIST_PUBLIC_TEAMS permissions and not member public team", func(t *testing.T) {
|
t.Run("Logged without LIST_PUBLIC_TEAMS permissions and not member public team", func(t *testing.T) {
|
||||||
th.LoginBasic()
|
th.LoginBasic()
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_LIST_PUBLIC_TEAMS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionListPublicTeams.Id, model.SystemUserRoleId)
|
||||||
|
|
||||||
exists, resp := Client.TeamExists(public_not_member_team.Name, "")
|
exists, resp := Client.TeamExists(public_not_member_team.Name, "")
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
@@ -2747,7 +2747,7 @@ func TestTeamExists(t *testing.T) {
|
|||||||
|
|
||||||
t.Run("Logged without LIST_PRIVATE_TEAMS permissions and member private team", func(t *testing.T) {
|
t.Run("Logged without LIST_PRIVATE_TEAMS permissions and member private team", func(t *testing.T) {
|
||||||
th.LoginBasic()
|
th.LoginBasic()
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_LIST_PRIVATE_TEAMS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionListPrivateTeams.Id, model.SystemUserRoleId)
|
||||||
|
|
||||||
exists, resp := Client.TeamExists(private_member_team.Name, "")
|
exists, resp := Client.TeamExists(private_member_team.Name, "")
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
@@ -2756,7 +2756,7 @@ func TestTeamExists(t *testing.T) {
|
|||||||
|
|
||||||
t.Run("Logged without LIST_PRIVATE_TEAMS permissions and not member private team", func(t *testing.T) {
|
t.Run("Logged without LIST_PRIVATE_TEAMS permissions and not member private team", func(t *testing.T) {
|
||||||
th.LoginBasic()
|
th.LoginBasic()
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_LIST_PRIVATE_TEAMS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionListPrivateTeams.Id, model.SystemUserRoleId)
|
||||||
|
|
||||||
exists, resp := Client.TeamExists(private_not_member_team.Name, "")
|
exists, resp := Client.TeamExists(private_not_member_team.Name, "")
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
@@ -3272,7 +3272,7 @@ func TestUpdateTeamScheme(t *testing.T) {
|
|||||||
InviteId: "inviteid0",
|
InviteId: "inviteid0",
|
||||||
Name: "z-z-" + model.NewId() + "a",
|
Name: "z-z-" + model.NewId() + "a",
|
||||||
Email: "success+" + model.NewId() + "@simulator.amazonses.com",
|
Email: "success+" + model.NewId() + "@simulator.amazonses.com",
|
||||||
Type: model.TEAM_OPEN,
|
Type: model.TeamOpen,
|
||||||
}
|
}
|
||||||
team, _ = th.SystemAdminClient.CreateTeam(team)
|
team, _ = th.SystemAdminClient.CreateTeam(team)
|
||||||
|
|
||||||
@@ -3280,14 +3280,14 @@ func TestUpdateTeamScheme(t *testing.T) {
|
|||||||
DisplayName: "DisplayName",
|
DisplayName: "DisplayName",
|
||||||
Name: model.NewId(),
|
Name: model.NewId(),
|
||||||
Description: "Some description",
|
Description: "Some description",
|
||||||
Scope: model.SCHEME_SCOPE_TEAM,
|
Scope: model.SchemeScopeTeam,
|
||||||
}
|
}
|
||||||
teamScheme, _ = th.SystemAdminClient.CreateScheme(teamScheme)
|
teamScheme, _ = th.SystemAdminClient.CreateScheme(teamScheme)
|
||||||
channelScheme := &model.Scheme{
|
channelScheme := &model.Scheme{
|
||||||
DisplayName: "DisplayName",
|
DisplayName: "DisplayName",
|
||||||
Name: model.NewId(),
|
Name: model.NewId(),
|
||||||
Description: "Some description",
|
Description: "Some description",
|
||||||
Scope: model.SCHEME_SCOPE_CHANNEL,
|
Scope: model.SchemeScopeChannel,
|
||||||
}
|
}
|
||||||
channelScheme, _ = th.SystemAdminClient.CreateScheme(channelScheme)
|
channelScheme, _ = th.SystemAdminClient.CreateScheme(channelScheme)
|
||||||
|
|
||||||
@@ -3431,8 +3431,8 @@ func TestInvalidateAllEmailInvites(t *testing.T) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
t.Run("OK when request performed by system user with requisite system permission", func(t *testing.T) {
|
t.Run("OK when request performed by system user with requisite system permission", func(t *testing.T) {
|
||||||
th.AddPermissionToRole(model.PERMISSION_INVALIDATE_EMAIL_INVITE.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionInvalidateEmailInvite.Id, model.SystemUserRoleId)
|
||||||
defer th.RemovePermissionFromRole(model.PERMISSION_INVALIDATE_EMAIL_INVITE.Id, model.SYSTEM_USER_ROLE_ID)
|
defer th.RemovePermissionFromRole(model.PermissionInvalidateEmailInvite.Id, model.SystemUserRoleId)
|
||||||
ok, res := th.Client.InvalidateEmailInvites()
|
ok, res := th.Client.InvalidateEmailInvites()
|
||||||
require.Equal(t, true, ok)
|
require.Equal(t, true, ok)
|
||||||
CheckOKStatus(t, res)
|
CheckOKStatus(t, res)
|
||||||
|
|||||||
@@ -27,8 +27,8 @@ func getLatestTermsOfService(c *Context, w http.ResponseWriter, r *http.Request)
|
|||||||
}
|
}
|
||||||
|
|
||||||
func createTermsOfService(c *Context, w http.ResponseWriter, r *http.Request) {
|
func createTermsOfService(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM)
|
c.SetPermissionError(model.PermissionManageSystem)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -43,12 +43,12 @@ func createUpload(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
if us.Type == model.UploadTypeImport {
|
if us.Type == model.UploadTypeImport {
|
||||||
if !c.IsSystemAdmin() {
|
if !c.IsSystemAdmin() {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM)
|
c.SetPermissionError(model.PermissionManageSystem)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), us.ChannelId, model.PERMISSION_UPLOAD_FILE) {
|
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), us.ChannelId, model.PermissionUploadFile) {
|
||||||
c.SetPermissionError(model.PERMISSION_UPLOAD_FILE)
|
c.SetPermissionError(model.PermissionUploadFile)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
us.Type = model.UploadTypeAttachment
|
us.Type = model.UploadTypeAttachment
|
||||||
@@ -113,12 +113,12 @@ func uploadData(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
if us.Type == model.UploadTypeImport {
|
if us.Type == model.UploadTypeImport {
|
||||||
if !c.IsSystemAdmin() {
|
if !c.IsSystemAdmin() {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM)
|
c.SetPermissionError(model.PermissionManageSystem)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if us.UserId != c.AppContext.Session().UserId || !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), us.ChannelId, model.PERMISSION_UPLOAD_FILE) {
|
if us.UserId != c.AppContext.Session().UserId || !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), us.ChannelId, model.PermissionUploadFile) {
|
||||||
c.SetPermissionError(model.PERMISSION_UPLOAD_FILE)
|
c.SetPermissionError(model.PermissionUploadFile)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -333,7 +333,7 @@ func TestUploadDataMultipart(t *testing.T) {
|
|||||||
req, err := http.NewRequest("POST", th.Client.ApiUrl+"/uploads/"+us.Id, mpData)
|
req, err := http.NewRequest("POST", th.Client.ApiUrl+"/uploads/"+us.Id, mpData)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
req.Header.Set("Content-Type", contentType)
|
req.Header.Set("Content-Type", contentType)
|
||||||
req.Header.Set(model.HEADER_AUTH, th.Client.AuthType+" "+th.Client.AuthToken)
|
req.Header.Set(model.HeaderAuth, th.Client.AuthType+" "+th.Client.AuthToken)
|
||||||
res, err := th.Client.HttpClient.Do(req)
|
res, err := th.Client.HttpClient.Do(req)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
info := model.FileInfoFromJson(res.Body)
|
info := model.FileInfoFromJson(res.Body)
|
||||||
@@ -357,7 +357,7 @@ func TestUploadDataMultipart(t *testing.T) {
|
|||||||
req, err := http.NewRequest("POST", th.Client.ApiUrl+"/uploads/"+u.Id, mpData)
|
req, err := http.NewRequest("POST", th.Client.ApiUrl+"/uploads/"+u.Id, mpData)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
req.Header.Set("Content-Type", contentType)
|
req.Header.Set("Content-Type", contentType)
|
||||||
req.Header.Set(model.HEADER_AUTH, th.Client.AuthType+" "+th.Client.AuthToken)
|
req.Header.Set(model.HeaderAuth, th.Client.AuthType+" "+th.Client.AuthToken)
|
||||||
res, err := th.Client.HttpClient.Do(req)
|
res, err := th.Client.HttpClient.Do(req)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, http.StatusNoContent, res.StatusCode)
|
require.Equal(t, http.StatusNoContent, res.StatusCode)
|
||||||
@@ -368,7 +368,7 @@ func TestUploadDataMultipart(t *testing.T) {
|
|||||||
req, err = http.NewRequest("POST", th.Client.ApiUrl+"/uploads/"+u.Id, mpData)
|
req, err = http.NewRequest("POST", th.Client.ApiUrl+"/uploads/"+u.Id, mpData)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
req.Header.Set("Content-Type", contentType)
|
req.Header.Set("Content-Type", contentType)
|
||||||
req.Header.Set(model.HEADER_AUTH, th.Client.AuthType+" "+th.Client.AuthToken)
|
req.Header.Set(model.HeaderAuth, th.Client.AuthType+" "+th.Client.AuthToken)
|
||||||
res, err = th.Client.HttpClient.Do(req)
|
res, err = th.Client.HttpClient.Do(req)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
info := model.FileInfoFromJson(res.Body)
|
info := model.FileInfoFromJson(res.Body)
|
||||||
|
|||||||
264
api4/user.go
264
api4/user.go
@@ -187,12 +187,12 @@ func getUser(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
canSee, err := c.App.UserCanSeeOtherUser(c.AppContext.Session().UserId, c.Params.UserId)
|
canSee, err := c.App.UserCanSeeOtherUser(c.AppContext.Session().UserId, c.Params.UserId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.SetPermissionError(model.PERMISSION_VIEW_MEMBERS)
|
c.SetPermissionError(model.PermissionViewMembers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !canSee {
|
if !canSee {
|
||||||
c.SetPermissionError(model.PERMISSION_VIEW_MEMBERS)
|
c.SetPermissionError(model.PermissionViewMembers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -227,7 +227,7 @@ func getUser(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
c.App.SanitizeProfile(user, c.IsSystemAdmin())
|
c.App.SanitizeProfile(user, c.IsSystemAdmin())
|
||||||
}
|
}
|
||||||
c.App.UpdateLastActivityAtIfNeeded(*c.AppContext.Session())
|
c.App.UpdateLastActivityAtIfNeeded(*c.AppContext.Session())
|
||||||
w.Header().Set(model.HEADER_ETAG_SERVER, etag)
|
w.Header().Set(model.HeaderEtagServer, etag)
|
||||||
w.Write([]byte(user.ToJson()))
|
w.Write([]byte(user.ToJson()))
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -245,7 +245,7 @@ func getUserByUsername(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
if restrictions != nil {
|
if restrictions != nil {
|
||||||
c.SetPermissionError(model.PERMISSION_VIEW_MEMBERS)
|
c.SetPermissionError(model.PermissionViewMembers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
c.Err = err
|
c.Err = err
|
||||||
@@ -259,7 +259,7 @@ func getUserByUsername(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !canSee {
|
if !canSee {
|
||||||
c.SetPermissionError(model.PERMISSION_VIEW_MEMBERS)
|
c.SetPermissionError(model.PermissionViewMembers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -287,7 +287,7 @@ func getUserByUsername(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
} else {
|
} else {
|
||||||
c.App.SanitizeProfile(user, c.IsSystemAdmin())
|
c.App.SanitizeProfile(user, c.IsSystemAdmin())
|
||||||
}
|
}
|
||||||
w.Header().Set(model.HEADER_ETAG_SERVER, etag)
|
w.Header().Set(model.HeaderEtagServer, etag)
|
||||||
w.Write([]byte(user.ToJson()))
|
w.Write([]byte(user.ToJson()))
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -311,7 +311,7 @@ func getUserByEmail(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
if restrictions != nil {
|
if restrictions != nil {
|
||||||
c.SetPermissionError(model.PERMISSION_VIEW_MEMBERS)
|
c.SetPermissionError(model.PermissionViewMembers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
c.Err = err
|
c.Err = err
|
||||||
@@ -325,7 +325,7 @@ func getUserByEmail(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !canSee {
|
if !canSee {
|
||||||
c.SetPermissionError(model.PERMISSION_VIEW_MEMBERS)
|
c.SetPermissionError(model.PermissionViewMembers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -336,7 +336,7 @@ func getUserByEmail(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
c.App.SanitizeProfile(user, c.IsSystemAdmin())
|
c.App.SanitizeProfile(user, c.IsSystemAdmin())
|
||||||
w.Header().Set(model.HEADER_ETAG_SERVER, etag)
|
w.Header().Set(model.HeaderEtagServer, etag)
|
||||||
w.Write([]byte(user.ToJson()))
|
w.Write([]byte(user.ToJson()))
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -353,7 +353,7 @@ func getDefaultProfileImage(c *Context, w http.ResponseWriter, r *http.Request)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !canSee {
|
if !canSee {
|
||||||
c.SetPermissionError(model.PERMISSION_VIEW_MEMBERS)
|
c.SetPermissionError(model.PermissionViewMembers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -387,7 +387,7 @@ func getProfileImage(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !canSee {
|
if !canSee {
|
||||||
c.SetPermissionError(model.PERMISSION_VIEW_MEMBERS)
|
c.SetPermissionError(model.PermissionViewMembers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -412,7 +412,7 @@ func getProfileImage(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
w.Header().Set("Cache-Control", fmt.Sprintf("max-age=%v, private", 5*60)) // 5 mins
|
w.Header().Set("Cache-Control", fmt.Sprintf("max-age=%v, private", 5*60)) // 5 mins
|
||||||
} else {
|
} else {
|
||||||
w.Header().Set("Cache-Control", fmt.Sprintf("max-age=%v, private", 24*60*60)) // 24 hrs
|
w.Header().Set("Cache-Control", fmt.Sprintf("max-age=%v, private", 24*60*60)) // 24 hrs
|
||||||
w.Header().Set(model.HEADER_ETAG_SERVER, etag)
|
w.Header().Set(model.HeaderEtagServer, etag)
|
||||||
}
|
}
|
||||||
|
|
||||||
w.Header().Set("Content-Type", "image/png")
|
w.Header().Set("Content-Type", "image/png")
|
||||||
@@ -428,7 +428,7 @@ func setProfileImage(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -499,7 +499,7 @@ func setDefaultProfileImage(c *Context, w http.ResponseWriter, r *http.Request)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -597,8 +597,8 @@ func getFilteredUsersStats(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
TeamRoles: teamRoles,
|
TeamRoles: teamRoles,
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_USERS) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleReadUserManagementUsers) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_USERS)
|
c.SetPermissionError(model.PermissionSysconsoleReadUserManagementUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -732,22 +732,22 @@ func getUsers(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
if withoutTeamBool, _ := strconv.ParseBool(withoutTeam); withoutTeamBool {
|
if withoutTeamBool, _ := strconv.ParseBool(withoutTeam); withoutTeamBool {
|
||||||
// Use a special permission for now
|
// Use a special permission for now
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_LIST_USERS_WITHOUT_TEAM) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionListUsersWithoutTeam) {
|
||||||
c.SetPermissionError(model.PERMISSION_LIST_USERS_WITHOUT_TEAM)
|
c.SetPermissionError(model.PermissionListUsersWithoutTeam)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
profiles, err = c.App.GetUsersWithoutTeamPage(userGetOptions, c.IsSystemAdmin())
|
profiles, err = c.App.GetUsersWithoutTeamPage(userGetOptions, c.IsSystemAdmin())
|
||||||
} else if notInChannelId != "" {
|
} else if notInChannelId != "" {
|
||||||
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), notInChannelId, model.PERMISSION_READ_CHANNEL) {
|
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), notInChannelId, model.PermissionReadChannel) {
|
||||||
c.SetPermissionError(model.PERMISSION_READ_CHANNEL)
|
c.SetPermissionError(model.PermissionReadChannel)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
profiles, err = c.App.GetUsersNotInChannelPage(inTeamId, notInChannelId, groupConstrainedBool, c.Params.Page, c.Params.PerPage, c.IsSystemAdmin(), restrictions)
|
profiles, err = c.App.GetUsersNotInChannelPage(inTeamId, notInChannelId, groupConstrainedBool, c.Params.Page, c.Params.PerPage, c.IsSystemAdmin(), restrictions)
|
||||||
} else if notInTeamId != "" {
|
} else if notInTeamId != "" {
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), notInTeamId, model.PERMISSION_VIEW_TEAM) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), notInTeamId, model.PermissionViewTeam) {
|
||||||
c.SetPermissionError(model.PERMISSION_VIEW_TEAM)
|
c.SetPermissionError(model.PermissionViewTeam)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -758,8 +758,8 @@ func getUsers(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
profiles, err = c.App.GetUsersNotInTeamPage(notInTeamId, groupConstrainedBool, c.Params.Page, c.Params.PerPage, c.IsSystemAdmin(), restrictions)
|
profiles, err = c.App.GetUsersNotInTeamPage(notInTeamId, groupConstrainedBool, c.Params.Page, c.Params.PerPage, c.IsSystemAdmin(), restrictions)
|
||||||
} else if inTeamId != "" {
|
} else if inTeamId != "" {
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), inTeamId, model.PERMISSION_VIEW_TEAM) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), inTeamId, model.PermissionViewTeam) {
|
||||||
c.SetPermissionError(model.PERMISSION_VIEW_TEAM)
|
c.SetPermissionError(model.PermissionViewTeam)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -775,8 +775,8 @@ func getUsers(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
profiles, err = c.App.GetUsersInTeamPage(userGetOptions, c.IsSystemAdmin())
|
profiles, err = c.App.GetUsersInTeamPage(userGetOptions, c.IsSystemAdmin())
|
||||||
}
|
}
|
||||||
} else if inChannelId != "" {
|
} else if inChannelId != "" {
|
||||||
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), inChannelId, model.PERMISSION_READ_CHANNEL) {
|
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), inChannelId, model.PermissionReadChannel) {
|
||||||
c.SetPermissionError(model.PERMISSION_READ_CHANNEL)
|
c.SetPermissionError(model.PermissionReadChannel)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if sort == "status" {
|
if sort == "status" {
|
||||||
@@ -790,8 +790,8 @@ func getUsers(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_GROUPS) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleReadUserManagementGroups) {
|
||||||
c.SetPermissionError(model.PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_GROUPS)
|
c.SetPermissionError(model.PermissionSysconsoleReadUserManagementGroups)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -815,7 +815,7 @@ func getUsers(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if etag != "" {
|
if etag != "" {
|
||||||
w.Header().Set(model.HEADER_ETAG_SERVER, etag)
|
w.Header().Set(model.HeaderEtagServer, etag)
|
||||||
}
|
}
|
||||||
c.App.UpdateLastActivityAtIfNeeded(*c.AppContext.Session())
|
c.App.UpdateLastActivityAtIfNeeded(*c.AppContext.Session())
|
||||||
w.Write([]byte(model.UserListToJson(profiles)))
|
w.Write([]byte(model.UserListToJson(profiles)))
|
||||||
@@ -918,33 +918,33 @@ func searchUsers(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM)
|
c.SetPermissionError(model.PermissionManageSystem)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if props.InChannelId != "" && !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), props.InChannelId, model.PERMISSION_READ_CHANNEL) {
|
if props.InChannelId != "" && !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), props.InChannelId, model.PermissionReadChannel) {
|
||||||
c.SetPermissionError(model.PERMISSION_READ_CHANNEL)
|
c.SetPermissionError(model.PermissionReadChannel)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if props.NotInChannelId != "" && !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), props.NotInChannelId, model.PERMISSION_READ_CHANNEL) {
|
if props.NotInChannelId != "" && !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), props.NotInChannelId, model.PermissionReadChannel) {
|
||||||
c.SetPermissionError(model.PERMISSION_READ_CHANNEL)
|
c.SetPermissionError(model.PermissionReadChannel)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if props.TeamId != "" && !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), props.TeamId, model.PERMISSION_VIEW_TEAM) {
|
if props.TeamId != "" && !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), props.TeamId, model.PermissionViewTeam) {
|
||||||
c.SetPermissionError(model.PERMISSION_VIEW_TEAM)
|
c.SetPermissionError(model.PermissionViewTeam)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if props.NotInTeamId != "" && !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), props.NotInTeamId, model.PERMISSION_VIEW_TEAM) {
|
if props.NotInTeamId != "" && !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), props.NotInTeamId, model.PermissionViewTeam) {
|
||||||
c.SetPermissionError(model.PERMISSION_VIEW_TEAM)
|
c.SetPermissionError(model.PermissionViewTeam)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if props.Limit <= 0 || props.Limit > model.USER_SEARCH_MAX_LIMIT {
|
if props.Limit <= 0 || props.Limit > model.UserSearchMaxLimit {
|
||||||
c.SetInvalidParam("limit")
|
c.SetInvalidParam("limit")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -960,7 +960,7 @@ func searchUsers(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
TeamRoles: props.TeamRoles,
|
TeamRoles: props.TeamRoles,
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
if c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem) {
|
||||||
options.AllowEmails = true
|
options.AllowEmails = true
|
||||||
options.AllowFullNames = true
|
options.AllowFullNames = true
|
||||||
} else {
|
} else {
|
||||||
@@ -990,9 +990,9 @@ func autocompleteUsers(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
limitStr := r.URL.Query().Get("limit")
|
limitStr := r.URL.Query().Get("limit")
|
||||||
limit, _ := strconv.Atoi(limitStr)
|
limit, _ := strconv.Atoi(limitStr)
|
||||||
if limitStr == "" {
|
if limitStr == "" {
|
||||||
limit = model.USER_SEARCH_DEFAULT_LIMIT
|
limit = model.UserSearchDefaultLimit
|
||||||
} else if limit > model.USER_SEARCH_MAX_LIMIT {
|
} else if limit > model.UserSearchMaxLimit {
|
||||||
limit = model.USER_SEARCH_MAX_LIMIT
|
limit = model.UserSearchMaxLimit
|
||||||
}
|
}
|
||||||
|
|
||||||
options := &model.UserSearchOptions{
|
options := &model.UserSearchOptions{
|
||||||
@@ -1002,22 +1002,22 @@ func autocompleteUsers(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
Limit: limit,
|
Limit: limit,
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
if c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem) {
|
||||||
options.AllowFullNames = true
|
options.AllowFullNames = true
|
||||||
} else {
|
} else {
|
||||||
options.AllowFullNames = *c.App.Config().PrivacySettings.ShowFullName
|
options.AllowFullNames = *c.App.Config().PrivacySettings.ShowFullName
|
||||||
}
|
}
|
||||||
|
|
||||||
if channelId != "" {
|
if channelId != "" {
|
||||||
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), channelId, model.PERMISSION_READ_CHANNEL) {
|
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), channelId, model.PermissionReadChannel) {
|
||||||
c.SetPermissionError(model.PERMISSION_READ_CHANNEL)
|
c.SetPermissionError(model.PermissionReadChannel)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if teamId != "" {
|
if teamId != "" {
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), teamId, model.PERMISSION_VIEW_TEAM) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), teamId, model.PermissionViewTeam) {
|
||||||
c.SetPermissionError(model.PERMISSION_VIEW_TEAM)
|
c.SetPermissionError(model.PermissionViewTeam)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1094,13 +1094,13 @@ func updateUser(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
|
|
||||||
// Cannot update a system admin unless user making request is a systemadmin also.
|
// Cannot update a system admin unless user making request is a systemadmin also.
|
||||||
if user.IsSystemAdmin() && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
if user.IsSystemAdmin() && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM)
|
c.SetPermissionError(model.PermissionManageSystem)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), user.Id) {
|
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), user.Id) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1113,7 +1113,7 @@ func updateUser(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
if c.AppContext.Session().IsOAuth {
|
if c.AppContext.Session().IsOAuth {
|
||||||
if ouser.Email != user.Email {
|
if ouser.Email != user.Email {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
c.Err.DetailedError += ", attempted email update by oauth app"
|
c.Err.DetailedError += ", attempted email update by oauth app"
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -1166,7 +1166,7 @@ func patchUser(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1178,14 +1178,14 @@ func patchUser(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
auditRec.AddMeta("user", ouser)
|
auditRec.AddMeta("user", ouser)
|
||||||
|
|
||||||
// Cannot update a system admin unless user making request is a systemadmin also
|
// Cannot update a system admin unless user making request is a systemadmin also
|
||||||
if ouser.IsSystemAdmin() && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
if ouser.IsSystemAdmin() && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM)
|
c.SetPermissionError(model.PermissionManageSystem)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.AppContext.Session().IsOAuth && patch.Email != nil {
|
if c.AppContext.Session().IsOAuth && patch.Email != nil {
|
||||||
if ouser.Email != *patch.Email {
|
if ouser.Email != *patch.Email {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
c.Err.DetailedError += ", attempted email update by oauth app"
|
c.Err.DetailedError += ", attempted email update by oauth app"
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -1239,12 +1239,12 @@ func deleteUser(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), userId) {
|
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), userId) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// if EnableUserDeactivation flag is disabled the user cannot deactivate himself.
|
// if EnableUserDeactivation flag is disabled the user cannot deactivate himself.
|
||||||
if c.Params.UserId == c.AppContext.Session().UserId && !*c.App.Config().TeamSettings.EnableUserDeactivation && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
if c.Params.UserId == c.AppContext.Session().UserId && !*c.App.Config().TeamSettings.EnableUserDeactivation && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem) {
|
||||||
c.Err = model.NewAppError("deleteUser", "api.user.update_active.not_enable.app_error", nil, "userId="+c.Params.UserId, http.StatusUnauthorized)
|
c.Err = model.NewAppError("deleteUser", "api.user.update_active.not_enable.app_error", nil, "userId="+c.Params.UserId, http.StatusUnauthorized)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -1257,8 +1257,8 @@ func deleteUser(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
auditRec.AddMeta("user", user)
|
auditRec.AddMeta("user", user)
|
||||||
|
|
||||||
// Cannot update a system admin unless user making request is a systemadmin also
|
// Cannot update a system admin unless user making request is a systemadmin also
|
||||||
if user.IsSystemAdmin() && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
if user.IsSystemAdmin() && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM)
|
c.SetPermissionError(model.PermissionManageSystem)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1310,8 +1310,8 @@ func updateUserRoles(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
auditRec.AddMeta("roles", newRoles)
|
auditRec.AddMeta("roles", newRoles)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_ROLES) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageRoles) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_ROLES)
|
c.SetPermissionError(model.PermissionManageRoles)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1349,7 +1349,7 @@ func updateUserActive(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
// true when you're trying to de-activate yourself
|
// true when you're trying to de-activate yourself
|
||||||
isSelfDeactive := !active && c.Params.UserId == c.AppContext.Session().UserId
|
isSelfDeactive := !active && c.Params.UserId == c.AppContext.Session().UserId
|
||||||
|
|
||||||
if !isSelfDeactive && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_WRITE_USERMANAGEMENT_USERS) {
|
if !isSelfDeactive && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleWriteUserManagementUsers) {
|
||||||
c.Err = model.NewAppError("updateUserActive", "api.user.update_active.permissions.app_error", nil, "userId="+c.Params.UserId, http.StatusForbidden)
|
c.Err = model.NewAppError("updateUserActive", "api.user.update_active.permissions.app_error", nil, "userId="+c.Params.UserId, http.StatusForbidden)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -1367,8 +1367,8 @@ func updateUserActive(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
auditRec.AddMeta("user", user)
|
auditRec.AddMeta("user", user)
|
||||||
|
|
||||||
if user.IsSystemAdmin() && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
if user.IsSystemAdmin() && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM)
|
c.SetPermissionError(model.PermissionManageSystem)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1404,7 +1404,7 @@ func updateUserActive(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_USER_ACTIVATION_STATUS_CHANGE, "", "", "", nil)
|
message := model.NewWebSocketEvent(model.WebsocketEventUserActivationStatusChange, "", "", "", nil)
|
||||||
c.App.Publish(message)
|
c.App.Publish(message)
|
||||||
|
|
||||||
// If activating, run cloud check for limit overages
|
// If activating, run cloud check for limit overages
|
||||||
@@ -1421,7 +1421,7 @@ func updateUserActive(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
func updateUserAuth(c *Context, w http.ResponseWriter, r *http.Request) {
|
func updateUserAuth(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||||
if !c.IsSystemAdmin() {
|
if !c.IsSystemAdmin() {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1505,13 +1505,13 @@ func updateUserMfa(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
|
|
||||||
if c.AppContext.Session().IsOAuth {
|
if c.AppContext.Session().IsOAuth {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
c.Err.DetailedError += ", attempted access by oauth app"
|
c.Err.DetailedError += ", attempted access by oauth app"
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1556,13 +1556,13 @@ func generateMfaSecret(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if c.AppContext.Session().IsOAuth {
|
if c.AppContext.Session().IsOAuth {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
c.Err.DetailedError += ", attempted access by oauth app"
|
c.Err.DetailedError += ", attempted access by oauth app"
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1596,9 +1596,9 @@ func updatePassword(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
auditRec.AddMeta("user", user)
|
auditRec.AddMeta("user", user)
|
||||||
|
|
||||||
if user.IsSystemAdmin() {
|
if user.IsSystemAdmin() {
|
||||||
canUpdatePassword = c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM)
|
canUpdatePassword = c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem)
|
||||||
} else {
|
} else {
|
||||||
canUpdatePassword = c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_SYSCONSOLE_WRITE_USERMANAGEMENT_USERS)
|
canUpdatePassword = c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionSysconsoleWriteUserManagementUsers)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1646,7 +1646,7 @@ func resetPassword(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
props := model.MapFromJson(r.Body)
|
props := model.MapFromJson(r.Body)
|
||||||
|
|
||||||
token := props["token"]
|
token := props["token"]
|
||||||
if len(token) != model.TOKEN_SIZE {
|
if len(token) != model.TokenSize {
|
||||||
c.SetInvalidParam("token")
|
c.SetInvalidParam("token")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -1781,7 +1781,7 @@ func login(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if *c.App.Config().ExperimentalSettings.ClientSideCertCheck == model.CLIENT_SIDE_CERT_CHECK_PRIMARY_AUTH {
|
if *c.App.Config().ExperimentalSettings.ClientSideCertCheck == model.ClientSideCertCheckPrimaryAuth {
|
||||||
loginId = certEmail
|
loginId = certEmail
|
||||||
password = "certificate"
|
password = "certificate"
|
||||||
}
|
}
|
||||||
@@ -1823,7 +1823,7 @@ func login(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
c.LogAuditWithUserId(user.Id, "success")
|
c.LogAuditWithUserId(user.Id, "success")
|
||||||
|
|
||||||
if r.Header.Get(model.HEADER_REQUESTED_WITH) == model.HEADER_REQUESTED_WITH_XML {
|
if r.Header.Get(model.HeaderRequestedWith) == model.HeaderRequestedWithXml {
|
||||||
c.App.AttachSessionCookies(c.AppContext, w, r)
|
c.App.AttachSessionCookies(c.AppContext, w, r)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1914,7 +1914,7 @@ func getSessions(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1941,7 +1941,7 @@ func revokeSession(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1986,7 +1986,7 @@ func revokeAllSessionsForUser(c *Context, w http.ResponseWriter, r *http.Request
|
|||||||
auditRec.AddMeta("user_id", c.Params.UserId)
|
auditRec.AddMeta("user_id", c.Params.UserId)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2002,8 +2002,8 @@ func revokeAllSessionsForUser(c *Context, w http.ResponseWriter, r *http.Request
|
|||||||
}
|
}
|
||||||
|
|
||||||
func revokeAllSessionsAllUsers(c *Context, w http.ResponseWriter, r *http.Request) {
|
func revokeAllSessionsAllUsers(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM)
|
c.SetPermissionError(model.PermissionManageSystem)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2054,7 +2054,7 @@ func attachDeviceId(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
expiresAt := time.Unix(model.GetMillis()/1000+int64(maxAge), 0)
|
expiresAt := time.Unix(model.GetMillis()/1000+int64(maxAge), 0)
|
||||||
sessionCookie := &http.Cookie{
|
sessionCookie := &http.Cookie{
|
||||||
Name: model.SESSION_COOKIE_TOKEN,
|
Name: model.SessionCookieToken,
|
||||||
Value: c.AppContext.Session().Token,
|
Value: c.AppContext.Session().Token,
|
||||||
Path: subpath,
|
Path: subpath,
|
||||||
MaxAge: maxAge,
|
MaxAge: maxAge,
|
||||||
@@ -2091,7 +2091,7 @@ func getUserAudits(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2112,7 +2112,7 @@ func verifyUserEmail(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
props := model.MapFromJson(r.Body)
|
props := model.MapFromJson(r.Body)
|
||||||
|
|
||||||
token := props["token"]
|
token := props["token"]
|
||||||
if len(token) != model.TOKEN_SIZE {
|
if len(token) != model.TokenSize {
|
||||||
c.SetInvalidParam("token")
|
c.SetInvalidParam("token")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -2224,7 +2224,7 @@ func createUserAccessToken(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if c.AppContext.Session().IsOAuth {
|
if c.AppContext.Session().IsOAuth {
|
||||||
c.SetPermissionError(model.PERMISSION_CREATE_USER_ACCESS_TOKEN)
|
c.SetPermissionError(model.PermissionCreateUserAccessToken)
|
||||||
c.Err.DetailedError += ", attempted access by oauth app"
|
c.Err.DetailedError += ", attempted access by oauth app"
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -2242,13 +2242,13 @@ func createUserAccessToken(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
c.LogAudit("")
|
c.LogAudit("")
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_CREATE_USER_ACCESS_TOKEN) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionCreateUserAccessToken) {
|
||||||
c.SetPermissionError(model.PERMISSION_CREATE_USER_ACCESS_TOKEN)
|
c.SetPermissionError(model.PermissionCreateUserAccessToken)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToUserOrBot(*c.AppContext.Session(), c.Params.UserId) {
|
if !c.App.SessionHasPermissionToUserOrBot(*c.AppContext.Session(), c.Params.UserId) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2269,8 +2269,8 @@ func createUserAccessToken(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func searchUserAccessTokens(c *Context, w http.ResponseWriter, r *http.Request) {
|
func searchUserAccessTokens(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM)
|
c.SetPermissionError(model.PermissionManageSystem)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
props := model.UserAccessTokenSearchFromJson(r.Body)
|
props := model.UserAccessTokenSearchFromJson(r.Body)
|
||||||
@@ -2294,8 +2294,8 @@ func searchUserAccessTokens(c *Context, w http.ResponseWriter, r *http.Request)
|
|||||||
}
|
}
|
||||||
|
|
||||||
func getUserAccessTokens(c *Context, w http.ResponseWriter, r *http.Request) {
|
func getUserAccessTokens(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM)
|
c.SetPermissionError(model.PermissionManageSystem)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2314,13 +2314,13 @@ func getUserAccessTokensForUser(c *Context, w http.ResponseWriter, r *http.Reque
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_READ_USER_ACCESS_TOKEN) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionReadUserAccessToken) {
|
||||||
c.SetPermissionError(model.PERMISSION_READ_USER_ACCESS_TOKEN)
|
c.SetPermissionError(model.PermissionReadUserAccessToken)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToUserOrBot(*c.AppContext.Session(), c.Params.UserId) {
|
if !c.App.SessionHasPermissionToUserOrBot(*c.AppContext.Session(), c.Params.UserId) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2339,8 +2339,8 @@ func getUserAccessToken(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_READ_USER_ACCESS_TOKEN) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionReadUserAccessToken) {
|
||||||
c.SetPermissionError(model.PERMISSION_READ_USER_ACCESS_TOKEN)
|
c.SetPermissionError(model.PermissionReadUserAccessToken)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2351,7 +2351,7 @@ func getUserAccessToken(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToUserOrBot(*c.AppContext.Session(), accessToken.UserId) {
|
if !c.App.SessionHasPermissionToUserOrBot(*c.AppContext.Session(), accessToken.UserId) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2371,8 +2371,8 @@ func revokeUserAccessToken(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
auditRec.AddMeta("token_id", tokenId)
|
auditRec.AddMeta("token_id", tokenId)
|
||||||
c.LogAudit("")
|
c.LogAudit("")
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_REVOKE_USER_ACCESS_TOKEN) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionRevokeUserAccessToken) {
|
||||||
c.SetPermissionError(model.PERMISSION_REVOKE_USER_ACCESS_TOKEN)
|
c.SetPermissionError(model.PermissionRevokeUserAccessToken)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2387,7 +2387,7 @@ func revokeUserAccessToken(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToUserOrBot(*c.AppContext.Session(), accessToken.UserId) {
|
if !c.App.SessionHasPermissionToUserOrBot(*c.AppContext.Session(), accessToken.UserId) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2416,8 +2416,8 @@ func disableUserAccessToken(c *Context, w http.ResponseWriter, r *http.Request)
|
|||||||
c.LogAudit("")
|
c.LogAudit("")
|
||||||
|
|
||||||
// No separate permission for this action for now
|
// No separate permission for this action for now
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_REVOKE_USER_ACCESS_TOKEN) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionRevokeUserAccessToken) {
|
||||||
c.SetPermissionError(model.PERMISSION_REVOKE_USER_ACCESS_TOKEN)
|
c.SetPermissionError(model.PermissionRevokeUserAccessToken)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2432,7 +2432,7 @@ func disableUserAccessToken(c *Context, w http.ResponseWriter, r *http.Request)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToUserOrBot(*c.AppContext.Session(), accessToken.UserId) {
|
if !c.App.SessionHasPermissionToUserOrBot(*c.AppContext.Session(), accessToken.UserId) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2461,8 +2461,8 @@ func enableUserAccessToken(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
c.LogAudit("")
|
c.LogAudit("")
|
||||||
|
|
||||||
// No separate permission for this action for now
|
// No separate permission for this action for now
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_CREATE_USER_ACCESS_TOKEN) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionCreateUserAccessToken) {
|
||||||
c.SetPermissionError(model.PERMISSION_CREATE_USER_ACCESS_TOKEN)
|
c.SetPermissionError(model.PermissionCreateUserAccessToken)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2477,7 +2477,7 @@ func enableUserAccessToken(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToUserOrBot(*c.AppContext.Session(), accessToken.UserId) {
|
if !c.App.SessionHasPermissionToUserOrBot(*c.AppContext.Session(), accessToken.UserId) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2551,8 +2551,8 @@ func promoteGuestToUser(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
auditRec := c.MakeAuditRecord("promoteGuestToUser", audit.Fail)
|
auditRec := c.MakeAuditRecord("promoteGuestToUser", audit.Fail)
|
||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_PROMOTE_GUEST) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionPromoteGuest) {
|
||||||
c.SetPermissionError(model.PERMISSION_PROMOTE_GUEST)
|
c.SetPermissionError(model.PermissionPromoteGuest)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2596,8 +2596,8 @@ func demoteUserToGuest(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
auditRec := c.MakeAuditRecord("demoteUserToGuest", audit.Fail)
|
auditRec := c.MakeAuditRecord("demoteUserToGuest", audit.Fail)
|
||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_DEMOTE_TO_GUEST) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionDemoteToGuest) {
|
||||||
c.SetPermissionError(model.PERMISSION_DEMOTE_TO_GUEST)
|
c.SetPermissionError(model.PermissionDemoteToGuest)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2607,8 +2607,8 @@ func demoteUserToGuest(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if user.IsSystemAdmin() && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
if user.IsSystemAdmin() && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM)
|
c.SetPermissionError(model.PermissionManageSystem)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2640,13 +2640,13 @@ func publishUserTyping(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.Params.UserId != c.AppContext.Session().UserId && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
if c.Params.UserId != c.AppContext.Session().UserId && !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM)
|
c.SetPermissionError(model.PermissionManageSystem)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.HasPermissionToChannel(c.Params.UserId, typingRequest.ChannelId, model.PERMISSION_CREATE_POST) {
|
if !c.App.HasPermissionToChannel(c.Params.UserId, typingRequest.ChannelId, model.PermissionCreatePost) {
|
||||||
c.SetPermissionError(model.PERMISSION_CREATE_POST)
|
c.SetPermissionError(model.PermissionCreatePost)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2674,8 +2674,8 @@ func verifyUserEmailWithoutToken(c *Context, w http.ResponseWriter, r *http.Requ
|
|||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
auditRec.AddMeta("user_id", user.Id)
|
auditRec.AddMeta("user_id", user.Id)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM)
|
c.SetPermissionError(model.PermissionManageSystem)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2706,8 +2706,8 @@ func convertUserToBot(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
auditRec.AddMeta("user", user)
|
auditRec.AddMeta("user", user)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM)
|
c.SetPermissionError(model.PermissionManageSystem)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2773,8 +2773,8 @@ func migrateAuthToLDAP(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
auditRec.AddMeta("match_field", matchField)
|
auditRec.AddMeta("match_field", matchField)
|
||||||
auditRec.AddMeta("force", force)
|
auditRec.AddMeta("force", force)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM)
|
c.SetPermissionError(model.PermissionManageSystem)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2832,8 +2832,8 @@ func migrateAuthToSaml(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
auditRec.AddMeta("matches", matches)
|
auditRec.AddMeta("matches", matches)
|
||||||
auditRec.AddMeta("auto", auto)
|
auditRec.AddMeta("auto", auto)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM)
|
c.SetPermissionError(model.PermissionManageSystem)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2867,7 +2867,7 @@ func getThreadForUser(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
extendedStr := r.URL.Query().Get("extended")
|
extendedStr := r.URL.Query().Get("extended")
|
||||||
@@ -2895,7 +2895,7 @@ func getThreadsForUser(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2966,7 +2966,7 @@ func updateReadStateThreadByUser(c *Context, w http.ResponseWriter, r *http.Requ
|
|||||||
auditRec.AddMeta("team_id", c.Params.TeamId)
|
auditRec.AddMeta("team_id", c.Params.TeamId)
|
||||||
auditRec.AddMeta("timestamp", c.Params.Timestamp)
|
auditRec.AddMeta("timestamp", c.Params.Timestamp)
|
||||||
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2994,7 +2994,7 @@ func unfollowThreadByUser(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
auditRec.AddMeta("team_id", c.Params.TeamId)
|
auditRec.AddMeta("team_id", c.Params.TeamId)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3022,7 +3022,7 @@ func followThreadByUser(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
auditRec.AddMeta("team_id", c.Params.TeamId)
|
auditRec.AddMeta("team_id", c.Params.TeamId)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3048,7 +3048,7 @@ func updateReadStateAllThreadsByUser(c *Context, w http.ResponseWriter, r *http.
|
|||||||
auditRec.AddMeta("team_id", c.Params.TeamId)
|
auditRec.AddMeta("team_id", c.Params.TeamId)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
if !c.App.SessionHasPermissionToUser(*c.AppContext.Session(), c.Params.UserId) {
|
||||||
c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS)
|
c.SetPermissionError(model.PermissionEditOtherUsers)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -141,7 +141,7 @@ func localGetUsers(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if etag != "" {
|
if etag != "" {
|
||||||
w.Header().Set(model.HEADER_ETAG_SERVER, etag)
|
w.Header().Set(model.HeaderEtagServer, etag)
|
||||||
}
|
}
|
||||||
w.Write([]byte(model.UserListToJson(profiles)))
|
w.Write([]byte(model.UserListToJson(profiles)))
|
||||||
}
|
}
|
||||||
@@ -208,7 +208,7 @@ func localGetUser(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
c.App.SanitizeProfile(user, c.IsSystemAdmin())
|
c.App.SanitizeProfile(user, c.IsSystemAdmin())
|
||||||
w.Header().Set(model.HEADER_ETAG_SERVER, etag)
|
w.Header().Set(model.HeaderEtagServer, etag)
|
||||||
w.Write([]byte(user.ToJson()))
|
w.Write([]byte(user.ToJson()))
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -287,7 +287,7 @@ func localGetUserByUsername(c *Context, w http.ResponseWriter, r *http.Request)
|
|||||||
}
|
}
|
||||||
|
|
||||||
c.App.SanitizeProfile(user, c.IsSystemAdmin())
|
c.App.SanitizeProfile(user, c.IsSystemAdmin())
|
||||||
w.Header().Set(model.HEADER_ETAG_SERVER, etag)
|
w.Header().Set(model.HeaderEtagServer, etag)
|
||||||
w.Write([]byte(user.ToJson()))
|
w.Write([]byte(user.ToJson()))
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -316,7 +316,7 @@ func localGetUserByEmail(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
c.App.SanitizeProfile(user, c.IsSystemAdmin())
|
c.App.SanitizeProfile(user, c.IsSystemAdmin())
|
||||||
w.Header().Set(model.HEADER_ETAG_SERVER, etag)
|
w.Header().Set(model.HeaderEtagServer, etag)
|
||||||
w.Write([]byte(user.ToJson()))
|
w.Write([]byte(user.ToJson()))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
@@ -16,30 +16,30 @@ func TestApiResctrictedViewMembers(t *testing.T) {
|
|||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
|
|
||||||
// Create first account for system admin
|
// Create first account for system admin
|
||||||
_, err := th.App.CreateUser(th.Context, &model.User{Email: th.GenerateTestEmail(), Nickname: "test user0", Password: "test-password-0", Username: "test-user-0", Roles: model.SYSTEM_USER_ROLE_ID})
|
_, err := th.App.CreateUser(th.Context, &model.User{Email: th.GenerateTestEmail(), Nickname: "test user0", Password: "test-password-0", Username: "test-user-0", Roles: model.SystemUserRoleId})
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
|
|
||||||
user1, err := th.App.CreateUser(th.Context, &model.User{Email: th.GenerateTestEmail(), Nickname: "test user1", Password: "test-password-1", Username: "test-user-1", Roles: model.SYSTEM_USER_ROLE_ID})
|
user1, err := th.App.CreateUser(th.Context, &model.User{Email: th.GenerateTestEmail(), Nickname: "test user1", Password: "test-password-1", Username: "test-user-1", Roles: model.SystemUserRoleId})
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
user2, err := th.App.CreateUser(th.Context, &model.User{Email: th.GenerateTestEmail(), Nickname: "test user2", Password: "test-password-2", Username: "test-user-2", Roles: model.SYSTEM_USER_ROLE_ID})
|
user2, err := th.App.CreateUser(th.Context, &model.User{Email: th.GenerateTestEmail(), Nickname: "test user2", Password: "test-password-2", Username: "test-user-2", Roles: model.SystemUserRoleId})
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
user3, err := th.App.CreateUser(th.Context, &model.User{Email: th.GenerateTestEmail(), Nickname: "test user3", Password: "test-password-3", Username: "test-user-3", Roles: model.SYSTEM_USER_ROLE_ID})
|
user3, err := th.App.CreateUser(th.Context, &model.User{Email: th.GenerateTestEmail(), Nickname: "test user3", Password: "test-password-3", Username: "test-user-3", Roles: model.SystemUserRoleId})
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
user4, err := th.App.CreateUser(th.Context, &model.User{Email: th.GenerateTestEmail(), Nickname: "test user4", Password: "test-password-4", Username: "test-user-4", Roles: model.SYSTEM_USER_ROLE_ID})
|
user4, err := th.App.CreateUser(th.Context, &model.User{Email: th.GenerateTestEmail(), Nickname: "test user4", Password: "test-password-4", Username: "test-user-4", Roles: model.SystemUserRoleId})
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
user5, err := th.App.CreateUser(th.Context, &model.User{Email: th.GenerateTestEmail(), Nickname: "test user5", Password: "test-password-5", Username: "test-user-5", Roles: model.SYSTEM_USER_ROLE_ID})
|
user5, err := th.App.CreateUser(th.Context, &model.User{Email: th.GenerateTestEmail(), Nickname: "test user5", Password: "test-password-5", Username: "test-user-5", Roles: model.SystemUserRoleId})
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
|
|
||||||
team1, err := th.App.CreateTeam(th.Context, &model.Team{DisplayName: "dn_" + model.NewId(), Name: GenerateTestTeamName(), Email: th.GenerateTestEmail(), Type: model.TEAM_OPEN})
|
team1, err := th.App.CreateTeam(th.Context, &model.Team{DisplayName: "dn_" + model.NewId(), Name: GenerateTestTeamName(), Email: th.GenerateTestEmail(), Type: model.TeamOpen})
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
team2, err := th.App.CreateTeam(th.Context, &model.Team{DisplayName: "dn_" + model.NewId(), Name: GenerateTestTeamName(), Email: th.GenerateTestEmail(), Type: model.TEAM_OPEN})
|
team2, err := th.App.CreateTeam(th.Context, &model.Team{DisplayName: "dn_" + model.NewId(), Name: GenerateTestTeamName(), Email: th.GenerateTestEmail(), Type: model.TeamOpen})
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
|
|
||||||
channel1, err := th.App.CreateChannel(th.Context, &model.Channel{DisplayName: "dn_" + model.NewId(), Name: "name_" + model.NewId(), Type: model.CHANNEL_OPEN, TeamId: team1.Id, CreatorId: model.NewId()}, false)
|
channel1, err := th.App.CreateChannel(th.Context, &model.Channel{DisplayName: "dn_" + model.NewId(), Name: "name_" + model.NewId(), Type: model.ChannelTypeOpen, TeamId: team1.Id, CreatorId: model.NewId()}, false)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
channel2, err := th.App.CreateChannel(th.Context, &model.Channel{DisplayName: "dn_" + model.NewId(), Name: "name_" + model.NewId(), Type: model.CHANNEL_OPEN, TeamId: team1.Id, CreatorId: model.NewId()}, false)
|
channel2, err := th.App.CreateChannel(th.Context, &model.Channel{DisplayName: "dn_" + model.NewId(), Name: "name_" + model.NewId(), Type: model.ChannelTypeOpen, TeamId: team1.Id, CreatorId: model.NewId()}, false)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
channel3, err := th.App.CreateChannel(th.Context, &model.Channel{DisplayName: "dn_" + model.NewId(), Name: "name_" + model.NewId(), Type: model.CHANNEL_OPEN, TeamId: team2.Id, CreatorId: model.NewId()}, false)
|
channel3, err := th.App.CreateChannel(th.Context, &model.Channel{DisplayName: "dn_" + model.NewId(), Name: "name_" + model.NewId(), Type: model.ChannelTypeOpen, TeamId: team2.Id, CreatorId: model.NewId()}, false)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
|
|
||||||
th.LinkUserToTeam(user1, team1)
|
th.LinkUserToTeam(user1, team1)
|
||||||
@@ -124,14 +124,14 @@ func TestApiResctrictedViewMembers(t *testing.T) {
|
|||||||
for _, tc := range testCases {
|
for _, tc := range testCases {
|
||||||
t.Run(tc.Name, func(t *testing.T) {
|
t.Run(tc.Name, func(t *testing.T) {
|
||||||
if tc.RestrictedTo == "channels" {
|
if tc.RestrictedTo == "channels" {
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_VIEW_MEMBERS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionViewMembers.Id, model.SystemUserRoleId)
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_VIEW_MEMBERS.Id, model.TEAM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionViewMembers.Id, model.TeamUserRoleId)
|
||||||
} else if tc.RestrictedTo == "teams" {
|
} else if tc.RestrictedTo == "teams" {
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_VIEW_MEMBERS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionViewMembers.Id, model.SystemUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_VIEW_MEMBERS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionViewMembers.Id, model.TeamUserRoleId)
|
||||||
} else {
|
} else {
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_VIEW_MEMBERS.Id, model.TEAM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionViewMembers.Id, model.TeamUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_VIEW_MEMBERS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionViewMembers.Id, model.SystemUserRoleId)
|
||||||
}
|
}
|
||||||
|
|
||||||
_, resp := th.Client.GetUser(tc.UserId, "")
|
_, resp := th.Client.GetUser(tc.UserId, "")
|
||||||
@@ -206,14 +206,14 @@ func TestApiResctrictedViewMembers(t *testing.T) {
|
|||||||
for _, tc := range testCases {
|
for _, tc := range testCases {
|
||||||
t.Run(tc.Name, func(t *testing.T) {
|
t.Run(tc.Name, func(t *testing.T) {
|
||||||
if tc.RestrictedTo == "channels" {
|
if tc.RestrictedTo == "channels" {
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_VIEW_MEMBERS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionViewMembers.Id, model.SystemUserRoleId)
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_VIEW_MEMBERS.Id, model.TEAM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionViewMembers.Id, model.TeamUserRoleId)
|
||||||
} else if tc.RestrictedTo == "teams" {
|
} else if tc.RestrictedTo == "teams" {
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_VIEW_MEMBERS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionViewMembers.Id, model.SystemUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_VIEW_MEMBERS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionViewMembers.Id, model.TeamUserRoleId)
|
||||||
} else {
|
} else {
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_VIEW_MEMBERS.Id, model.TEAM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionViewMembers.Id, model.TeamUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_VIEW_MEMBERS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionViewMembers.Id, model.SystemUserRoleId)
|
||||||
}
|
}
|
||||||
|
|
||||||
_, resp := th.Client.GetUserByUsername(tc.Username, "")
|
_, resp := th.Client.GetUserByUsername(tc.Username, "")
|
||||||
@@ -288,14 +288,14 @@ func TestApiResctrictedViewMembers(t *testing.T) {
|
|||||||
for _, tc := range testCases {
|
for _, tc := range testCases {
|
||||||
t.Run(tc.Name, func(t *testing.T) {
|
t.Run(tc.Name, func(t *testing.T) {
|
||||||
if tc.RestrictedTo == "channels" {
|
if tc.RestrictedTo == "channels" {
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_VIEW_MEMBERS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionViewMembers.Id, model.SystemUserRoleId)
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_VIEW_MEMBERS.Id, model.TEAM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionViewMembers.Id, model.TeamUserRoleId)
|
||||||
} else if tc.RestrictedTo == "teams" {
|
} else if tc.RestrictedTo == "teams" {
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_VIEW_MEMBERS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionViewMembers.Id, model.SystemUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_VIEW_MEMBERS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionViewMembers.Id, model.TeamUserRoleId)
|
||||||
} else {
|
} else {
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_VIEW_MEMBERS.Id, model.TEAM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionViewMembers.Id, model.TeamUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_VIEW_MEMBERS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionViewMembers.Id, model.SystemUserRoleId)
|
||||||
}
|
}
|
||||||
|
|
||||||
_, resp := th.Client.GetUserByEmail(tc.Email, "")
|
_, resp := th.Client.GetUserByEmail(tc.Email, "")
|
||||||
@@ -370,14 +370,14 @@ func TestApiResctrictedViewMembers(t *testing.T) {
|
|||||||
for _, tc := range testCases {
|
for _, tc := range testCases {
|
||||||
t.Run(tc.Name, func(t *testing.T) {
|
t.Run(tc.Name, func(t *testing.T) {
|
||||||
if tc.RestrictedTo == "channels" {
|
if tc.RestrictedTo == "channels" {
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_VIEW_MEMBERS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionViewMembers.Id, model.SystemUserRoleId)
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_VIEW_MEMBERS.Id, model.TEAM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionViewMembers.Id, model.TeamUserRoleId)
|
||||||
} else if tc.RestrictedTo == "teams" {
|
} else if tc.RestrictedTo == "teams" {
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_VIEW_MEMBERS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionViewMembers.Id, model.SystemUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_VIEW_MEMBERS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionViewMembers.Id, model.TeamUserRoleId)
|
||||||
} else {
|
} else {
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_VIEW_MEMBERS.Id, model.TEAM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionViewMembers.Id, model.TeamUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_VIEW_MEMBERS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionViewMembers.Id, model.SystemUserRoleId)
|
||||||
}
|
}
|
||||||
|
|
||||||
_, resp := th.Client.GetDefaultProfileImage(tc.UserId)
|
_, resp := th.Client.GetDefaultProfileImage(tc.UserId)
|
||||||
@@ -452,14 +452,14 @@ func TestApiResctrictedViewMembers(t *testing.T) {
|
|||||||
for _, tc := range testCases {
|
for _, tc := range testCases {
|
||||||
t.Run(tc.Name, func(t *testing.T) {
|
t.Run(tc.Name, func(t *testing.T) {
|
||||||
if tc.RestrictedTo == "channels" {
|
if tc.RestrictedTo == "channels" {
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_VIEW_MEMBERS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionViewMembers.Id, model.SystemUserRoleId)
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_VIEW_MEMBERS.Id, model.TEAM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionViewMembers.Id, model.TeamUserRoleId)
|
||||||
} else if tc.RestrictedTo == "teams" {
|
} else if tc.RestrictedTo == "teams" {
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_VIEW_MEMBERS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionViewMembers.Id, model.SystemUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_VIEW_MEMBERS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionViewMembers.Id, model.TeamUserRoleId)
|
||||||
} else {
|
} else {
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_VIEW_MEMBERS.Id, model.TEAM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionViewMembers.Id, model.TeamUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_VIEW_MEMBERS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionViewMembers.Id, model.SystemUserRoleId)
|
||||||
}
|
}
|
||||||
|
|
||||||
_, resp := th.Client.GetProfileImage(tc.UserId, "")
|
_, resp := th.Client.GetProfileImage(tc.UserId, "")
|
||||||
|
|||||||
114
api4/webhook.go
114
api4/webhook.go
@@ -43,22 +43,22 @@ func createIncomingHook(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
auditRec.AddMeta("channel", channel)
|
auditRec.AddMeta("channel", channel)
|
||||||
c.LogAudit("attempt")
|
c.LogAudit("attempt")
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), channel.TeamId, model.PERMISSION_MANAGE_INCOMING_WEBHOOKS) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), channel.TeamId, model.PermissionManageIncomingWebhooks) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_INCOMING_WEBHOOKS)
|
c.SetPermissionError(model.PermissionManageIncomingWebhooks)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if channel.Type != model.CHANNEL_OPEN && !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), channel.Id, model.PERMISSION_READ_CHANNEL) {
|
if channel.Type != model.ChannelTypeOpen && !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), channel.Id, model.PermissionReadChannel) {
|
||||||
c.LogAudit("fail - bad channel permissions")
|
c.LogAudit("fail - bad channel permissions")
|
||||||
c.SetPermissionError(model.PERMISSION_READ_CHANNEL)
|
c.SetPermissionError(model.PermissionReadChannel)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
userId := c.AppContext.Session().UserId
|
userId := c.AppContext.Session().UserId
|
||||||
if hook.UserId != "" && hook.UserId != userId {
|
if hook.UserId != "" && hook.UserId != userId {
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), channel.TeamId, model.PERMISSION_MANAGE_OTHERS_INCOMING_WEBHOOKS) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), channel.TeamId, model.PermissionManageOthersIncomingWebhooks) {
|
||||||
c.LogAudit("fail - innapropriate permissions")
|
c.LogAudit("fail - innapropriate permissions")
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_OTHERS_INCOMING_WEBHOOKS)
|
c.SetPermissionError(model.PermissionManageOthersIncomingWebhooks)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -136,20 +136,20 @@ func updateIncomingHook(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), channel.TeamId, model.PERMISSION_MANAGE_INCOMING_WEBHOOKS) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), channel.TeamId, model.PermissionManageIncomingWebhooks) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_INCOMING_WEBHOOKS)
|
c.SetPermissionError(model.PermissionManageIncomingWebhooks)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.AppContext.Session().UserId != oldHook.UserId && !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), channel.TeamId, model.PERMISSION_MANAGE_OTHERS_INCOMING_WEBHOOKS) {
|
if c.AppContext.Session().UserId != oldHook.UserId && !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), channel.TeamId, model.PermissionManageOthersIncomingWebhooks) {
|
||||||
c.LogAudit("fail - inappropriate permissions")
|
c.LogAudit("fail - inappropriate permissions")
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_OTHERS_INCOMING_WEBHOOKS)
|
c.SetPermissionError(model.PermissionManageOthersIncomingWebhooks)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if channel.Type != model.CHANNEL_OPEN && !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), channel.Id, model.PERMISSION_READ_CHANNEL) {
|
if channel.Type != model.ChannelTypeOpen && !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), channel.Id, model.PermissionReadChannel) {
|
||||||
c.LogAudit("fail - bad channel permissions")
|
c.LogAudit("fail - bad channel permissions")
|
||||||
c.SetPermissionError(model.PERMISSION_READ_CHANNEL)
|
c.SetPermissionError(model.PermissionReadChannel)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -174,25 +174,25 @@ func getIncomingHooks(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
var err *model.AppError
|
var err *model.AppError
|
||||||
|
|
||||||
if teamId != "" {
|
if teamId != "" {
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), teamId, model.PERMISSION_MANAGE_INCOMING_WEBHOOKS) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), teamId, model.PermissionManageIncomingWebhooks) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_INCOMING_WEBHOOKS)
|
c.SetPermissionError(model.PermissionManageIncomingWebhooks)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove userId as a filter if they have permission to manage others.
|
// Remove userId as a filter if they have permission to manage others.
|
||||||
if c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), teamId, model.PERMISSION_MANAGE_OTHERS_INCOMING_WEBHOOKS) {
|
if c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), teamId, model.PermissionManageOthersIncomingWebhooks) {
|
||||||
userId = ""
|
userId = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
hooks, err = c.App.GetIncomingWebhooksForTeamPageByUser(teamId, userId, c.Params.Page, c.Params.PerPage)
|
hooks, err = c.App.GetIncomingWebhooksForTeamPageByUser(teamId, userId, c.Params.Page, c.Params.PerPage)
|
||||||
} else {
|
} else {
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_INCOMING_WEBHOOKS) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageIncomingWebhooks) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_INCOMING_WEBHOOKS)
|
c.SetPermissionError(model.PermissionManageIncomingWebhooks)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove userId as a filter if they have permission to manage others.
|
// Remove userId as a filter if they have permission to manage others.
|
||||||
if c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_OTHERS_INCOMING_WEBHOOKS) {
|
if c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageOthersIncomingWebhooks) {
|
||||||
userId = ""
|
userId = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -239,16 +239,16 @@ func getIncomingHook(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), hook.TeamId, model.PERMISSION_MANAGE_INCOMING_WEBHOOKS) ||
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), hook.TeamId, model.PermissionManageIncomingWebhooks) ||
|
||||||
(channel.Type != model.CHANNEL_OPEN && !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), hook.ChannelId, model.PERMISSION_READ_CHANNEL)) {
|
(channel.Type != model.ChannelTypeOpen && !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), hook.ChannelId, model.PermissionReadChannel)) {
|
||||||
c.LogAudit("fail - bad permissions")
|
c.LogAudit("fail - bad permissions")
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_INCOMING_WEBHOOKS)
|
c.SetPermissionError(model.PermissionManageIncomingWebhooks)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.AppContext.Session().UserId != hook.UserId && !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), hook.TeamId, model.PERMISSION_MANAGE_OTHERS_INCOMING_WEBHOOKS) {
|
if c.AppContext.Session().UserId != hook.UserId && !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), hook.TeamId, model.PermissionManageOthersIncomingWebhooks) {
|
||||||
c.LogAudit("fail - inappropriate permissions")
|
c.LogAudit("fail - inappropriate permissions")
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_OTHERS_INCOMING_WEBHOOKS)
|
c.SetPermissionError(model.PermissionManageOthersIncomingWebhooks)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -290,16 +290,16 @@ func deleteIncomingHook(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
auditRec.AddMeta("channel_name", channel.Name)
|
auditRec.AddMeta("channel_name", channel.Name)
|
||||||
auditRec.AddMeta("team_id", hook.TeamId)
|
auditRec.AddMeta("team_id", hook.TeamId)
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), hook.TeamId, model.PERMISSION_MANAGE_INCOMING_WEBHOOKS) ||
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), hook.TeamId, model.PermissionManageIncomingWebhooks) ||
|
||||||
(channel.Type != model.CHANNEL_OPEN && !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), hook.ChannelId, model.PERMISSION_READ_CHANNEL)) {
|
(channel.Type != model.ChannelTypeOpen && !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), hook.ChannelId, model.PermissionReadChannel)) {
|
||||||
c.LogAudit("fail - bad permissions")
|
c.LogAudit("fail - bad permissions")
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_INCOMING_WEBHOOKS)
|
c.SetPermissionError(model.PermissionManageIncomingWebhooks)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.AppContext.Session().UserId != hook.UserId && !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), hook.TeamId, model.PERMISSION_MANAGE_OTHERS_INCOMING_WEBHOOKS) {
|
if c.AppContext.Session().UserId != hook.UserId && !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), hook.TeamId, model.PermissionManageOthersIncomingWebhooks) {
|
||||||
c.LogAudit("fail - inappropriate permissions")
|
c.LogAudit("fail - inappropriate permissions")
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_OTHERS_INCOMING_WEBHOOKS)
|
c.SetPermissionError(model.PermissionManageOthersIncomingWebhooks)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -353,14 +353,14 @@ func updateOutgoingHook(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), updatedHook.TeamId, model.PERMISSION_MANAGE_OUTGOING_WEBHOOKS) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), updatedHook.TeamId, model.PermissionManageOutgoingWebhooks) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_OUTGOING_WEBHOOKS)
|
c.SetPermissionError(model.PermissionManageOutgoingWebhooks)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.AppContext.Session().UserId != oldHook.CreatorId && !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), updatedHook.TeamId, model.PERMISSION_MANAGE_OTHERS_OUTGOING_WEBHOOKS) {
|
if c.AppContext.Session().UserId != oldHook.CreatorId && !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), updatedHook.TeamId, model.PermissionManageOthersOutgoingWebhooks) {
|
||||||
c.LogAudit("fail - inappropriate permissions")
|
c.LogAudit("fail - inappropriate permissions")
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_OTHERS_OUTGOING_WEBHOOKS)
|
c.SetPermissionError(model.PermissionManageOthersOutgoingWebhooks)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -390,17 +390,17 @@ func createOutgoingHook(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
auditRec.AddMeta("hook_id", hook.Id)
|
auditRec.AddMeta("hook_id", hook.Id)
|
||||||
c.LogAudit("attempt")
|
c.LogAudit("attempt")
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), hook.TeamId, model.PERMISSION_MANAGE_OUTGOING_WEBHOOKS) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), hook.TeamId, model.PermissionManageOutgoingWebhooks) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_OUTGOING_WEBHOOKS)
|
c.SetPermissionError(model.PermissionManageOutgoingWebhooks)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if hook.CreatorId == "" {
|
if hook.CreatorId == "" {
|
||||||
hook.CreatorId = c.AppContext.Session().UserId
|
hook.CreatorId = c.AppContext.Session().UserId
|
||||||
} else {
|
} else {
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), hook.TeamId, model.PERMISSION_MANAGE_OTHERS_OUTGOING_WEBHOOKS) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), hook.TeamId, model.PermissionManageOthersOutgoingWebhooks) {
|
||||||
c.LogAudit("fail - innapropriate permissions")
|
c.LogAudit("fail - innapropriate permissions")
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_OTHERS_OUTGOING_WEBHOOKS)
|
c.SetPermissionError(model.PermissionManageOthersOutgoingWebhooks)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -437,37 +437,37 @@ func getOutgoingHooks(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
var err *model.AppError
|
var err *model.AppError
|
||||||
|
|
||||||
if channelId != "" {
|
if channelId != "" {
|
||||||
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), channelId, model.PERMISSION_MANAGE_OUTGOING_WEBHOOKS) {
|
if !c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), channelId, model.PermissionManageOutgoingWebhooks) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_OUTGOING_WEBHOOKS)
|
c.SetPermissionError(model.PermissionManageOutgoingWebhooks)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove userId as a filter if they have permission to manage others.
|
// Remove userId as a filter if they have permission to manage others.
|
||||||
if c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), channelId, model.PERMISSION_MANAGE_OTHERS_OUTGOING_WEBHOOKS) {
|
if c.App.SessionHasPermissionToChannel(*c.AppContext.Session(), channelId, model.PermissionManageOthersOutgoingWebhooks) {
|
||||||
userId = ""
|
userId = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
hooks, err = c.App.GetOutgoingWebhooksForChannelPageByUser(channelId, userId, c.Params.Page, c.Params.PerPage)
|
hooks, err = c.App.GetOutgoingWebhooksForChannelPageByUser(channelId, userId, c.Params.Page, c.Params.PerPage)
|
||||||
} else if teamId != "" {
|
} else if teamId != "" {
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), teamId, model.PERMISSION_MANAGE_OUTGOING_WEBHOOKS) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), teamId, model.PermissionManageOutgoingWebhooks) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_OUTGOING_WEBHOOKS)
|
c.SetPermissionError(model.PermissionManageOutgoingWebhooks)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove userId as a filter if they have permission to manage others.
|
// Remove userId as a filter if they have permission to manage others.
|
||||||
if c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), teamId, model.PERMISSION_MANAGE_OTHERS_OUTGOING_WEBHOOKS) {
|
if c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), teamId, model.PermissionManageOthersOutgoingWebhooks) {
|
||||||
userId = ""
|
userId = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
hooks, err = c.App.GetOutgoingWebhooksForTeamPageByUser(teamId, userId, c.Params.Page, c.Params.PerPage)
|
hooks, err = c.App.GetOutgoingWebhooksForTeamPageByUser(teamId, userId, c.Params.Page, c.Params.PerPage)
|
||||||
} else {
|
} else {
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_OUTGOING_WEBHOOKS) {
|
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageOutgoingWebhooks) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_OUTGOING_WEBHOOKS)
|
c.SetPermissionError(model.PermissionManageOutgoingWebhooks)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove userId as a filter if they have permission to manage others.
|
// Remove userId as a filter if they have permission to manage others.
|
||||||
if c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PERMISSION_MANAGE_OTHERS_OUTGOING_WEBHOOKS) {
|
if c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageOthersOutgoingWebhooks) {
|
||||||
userId = ""
|
userId = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -502,14 +502,14 @@ func getOutgoingHook(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
auditRec.AddMeta("team_id", hook.TeamId)
|
auditRec.AddMeta("team_id", hook.TeamId)
|
||||||
c.LogAudit("attempt")
|
c.LogAudit("attempt")
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), hook.TeamId, model.PERMISSION_MANAGE_OUTGOING_WEBHOOKS) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), hook.TeamId, model.PermissionManageOutgoingWebhooks) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_OUTGOING_WEBHOOKS)
|
c.SetPermissionError(model.PermissionManageOutgoingWebhooks)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.AppContext.Session().UserId != hook.CreatorId && !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), hook.TeamId, model.PERMISSION_MANAGE_OTHERS_OUTGOING_WEBHOOKS) {
|
if c.AppContext.Session().UserId != hook.CreatorId && !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), hook.TeamId, model.PermissionManageOthersOutgoingWebhooks) {
|
||||||
c.LogAudit("fail - inappropriate permissions")
|
c.LogAudit("fail - inappropriate permissions")
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_OTHERS_OUTGOING_WEBHOOKS)
|
c.SetPermissionError(model.PermissionManageOthersOutgoingWebhooks)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -539,14 +539,14 @@ func regenOutgoingHookToken(c *Context, w http.ResponseWriter, r *http.Request)
|
|||||||
auditRec.AddMeta("team_id", hook.TeamId)
|
auditRec.AddMeta("team_id", hook.TeamId)
|
||||||
c.LogAudit("attempt")
|
c.LogAudit("attempt")
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), hook.TeamId, model.PERMISSION_MANAGE_OUTGOING_WEBHOOKS) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), hook.TeamId, model.PermissionManageOutgoingWebhooks) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_OUTGOING_WEBHOOKS)
|
c.SetPermissionError(model.PermissionManageOutgoingWebhooks)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.AppContext.Session().UserId != hook.CreatorId && !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), hook.TeamId, model.PERMISSION_MANAGE_OTHERS_OUTGOING_WEBHOOKS) {
|
if c.AppContext.Session().UserId != hook.CreatorId && !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), hook.TeamId, model.PermissionManageOthersOutgoingWebhooks) {
|
||||||
c.LogAudit("fail - inappropriate permissions")
|
c.LogAudit("fail - inappropriate permissions")
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_OTHERS_OUTGOING_WEBHOOKS)
|
c.SetPermissionError(model.PermissionManageOthersOutgoingWebhooks)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -582,14 +582,14 @@ func deleteOutgoingHook(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
auditRec.AddMeta("team_id", hook.TeamId)
|
auditRec.AddMeta("team_id", hook.TeamId)
|
||||||
c.LogAudit("attempt")
|
c.LogAudit("attempt")
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), hook.TeamId, model.PERMISSION_MANAGE_OUTGOING_WEBHOOKS) {
|
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), hook.TeamId, model.PermissionManageOutgoingWebhooks) {
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_OUTGOING_WEBHOOKS)
|
c.SetPermissionError(model.PermissionManageOutgoingWebhooks)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.AppContext.Session().UserId != hook.CreatorId && !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), hook.TeamId, model.PERMISSION_MANAGE_OTHERS_OUTGOING_WEBHOOKS) {
|
if c.AppContext.Session().UserId != hook.CreatorId && !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), hook.TeamId, model.PermissionManageOthersOutgoingWebhooks) {
|
||||||
c.LogAudit("fail - inappropriate permissions")
|
c.LogAudit("fail - inappropriate permissions")
|
||||||
c.SetPermissionError(model.PERMISSION_MANAGE_OTHERS_OUTGOING_WEBHOOKS)
|
c.SetPermissionError(model.PermissionManageOthersOutgoingWebhooks)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -27,8 +27,8 @@ func TestCreateIncomingWebhook(t *testing.T) {
|
|||||||
defer func() {
|
defer func() {
|
||||||
th.RestoreDefaultRolePermissions(defaultRolePermissions)
|
th.RestoreDefaultRolePermissions(defaultRolePermissions)
|
||||||
}()
|
}()
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_INCOMING_WEBHOOKS.Id, model.TEAM_ADMIN_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageIncomingWebhooks.Id, model.TeamAdminRoleId)
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_MANAGE_INCOMING_WEBHOOKS.Id, model.TEAM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionManageIncomingWebhooks.Id, model.TeamUserRoleId)
|
||||||
|
|
||||||
hook := &model.IncomingWebhook{ChannelId: th.BasicChannel.Id}
|
hook := &model.IncomingWebhook{ChannelId: th.BasicChannel.Id}
|
||||||
|
|
||||||
@@ -52,7 +52,7 @@ func TestCreateIncomingWebhook(t *testing.T) {
|
|||||||
_, resp = Client.CreateIncomingWebhook(hook)
|
_, resp = Client.CreateIncomingWebhook(hook)
|
||||||
CheckForbiddenStatus(t, resp)
|
CheckForbiddenStatus(t, resp)
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_INCOMING_WEBHOOKS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageIncomingWebhooks.Id, model.TeamUserRoleId)
|
||||||
|
|
||||||
_, resp = Client.CreateIncomingWebhook(hook)
|
_, resp = Client.CreateIncomingWebhook(hook)
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
@@ -110,9 +110,9 @@ func TestCreateIncomingWebhook_BypassTeamPermissions(t *testing.T) {
|
|||||||
|
|
||||||
defaultRolePermissions := th.SaveDefaultRolePermissions()
|
defaultRolePermissions := th.SaveDefaultRolePermissions()
|
||||||
defer th.RestoreDefaultRolePermissions(defaultRolePermissions)
|
defer th.RestoreDefaultRolePermissions(defaultRolePermissions)
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_MANAGE_INCOMING_WEBHOOKS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionManageIncomingWebhooks.Id, model.SystemUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_INCOMING_WEBHOOKS.Id, model.TEAM_ADMIN_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageIncomingWebhooks.Id, model.TeamAdminRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_INCOMING_WEBHOOKS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageIncomingWebhooks.Id, model.TeamUserRoleId)
|
||||||
|
|
||||||
hook := &model.IncomingWebhook{ChannelId: th.BasicChannel.Id}
|
hook := &model.IncomingWebhook{ChannelId: th.BasicChannel.Id}
|
||||||
|
|
||||||
@@ -127,7 +127,7 @@ func TestCreateIncomingWebhook_BypassTeamPermissions(t *testing.T) {
|
|||||||
team.AllowOpenInvite = false
|
team.AllowOpenInvite = false
|
||||||
th.Client.UpdateTeam(team)
|
th.Client.UpdateTeam(team)
|
||||||
th.SystemAdminClient.RemoveTeamMember(team.Id, th.BasicUser.Id)
|
th.SystemAdminClient.RemoveTeamMember(team.Id, th.BasicUser.Id)
|
||||||
channel := th.CreateChannelWithClientAndTeam(th.SystemAdminClient, model.CHANNEL_OPEN, team.Id)
|
channel := th.CreateChannelWithClientAndTeam(th.SystemAdminClient, model.ChannelTypeOpen, team.Id)
|
||||||
|
|
||||||
hook = &model.IncomingWebhook{ChannelId: channel.Id}
|
hook = &model.IncomingWebhook{ChannelId: channel.Id}
|
||||||
rhook, resp = th.Client.CreateIncomingWebhook(hook)
|
rhook, resp = th.Client.CreateIncomingWebhook(hook)
|
||||||
@@ -145,8 +145,8 @@ func TestGetIncomingWebhooks(t *testing.T) {
|
|||||||
defer func() {
|
defer func() {
|
||||||
th.RestoreDefaultRolePermissions(defaultRolePermissions)
|
th.RestoreDefaultRolePermissions(defaultRolePermissions)
|
||||||
}()
|
}()
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_INCOMING_WEBHOOKS.Id, model.TEAM_ADMIN_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageIncomingWebhooks.Id, model.TeamAdminRoleId)
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_MANAGE_INCOMING_WEBHOOKS.Id, model.TEAM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionManageIncomingWebhooks.Id, model.TeamUserRoleId)
|
||||||
|
|
||||||
hook := &model.IncomingWebhook{ChannelId: th.BasicChannel.Id}
|
hook := &model.IncomingWebhook{ChannelId: th.BasicChannel.Id}
|
||||||
rhook, resp := th.SystemAdminClient.CreateIncomingWebhook(hook)
|
rhook, resp := th.SystemAdminClient.CreateIncomingWebhook(hook)
|
||||||
@@ -191,7 +191,7 @@ func TestGetIncomingWebhooks(t *testing.T) {
|
|||||||
_, resp = Client.GetIncomingWebhooks(0, 1000, "")
|
_, resp = Client.GetIncomingWebhooks(0, 1000, "")
|
||||||
CheckForbiddenStatus(t, resp)
|
CheckForbiddenStatus(t, resp)
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_INCOMING_WEBHOOKS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageIncomingWebhooks.Id, model.TeamUserRoleId)
|
||||||
|
|
||||||
_, resp = Client.GetIncomingWebhooksForTeam(th.BasicTeam.Id, 0, 1000, "")
|
_, resp = Client.GetIncomingWebhooksForTeam(th.BasicTeam.Id, 0, 1000, "")
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
@@ -219,8 +219,8 @@ func TestGetIncomingWebhooksListByUser(t *testing.T) {
|
|||||||
defer func() {
|
defer func() {
|
||||||
th.RestoreDefaultRolePermissions(defaultRolePermissions)
|
th.RestoreDefaultRolePermissions(defaultRolePermissions)
|
||||||
}()
|
}()
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_INCOMING_WEBHOOKS.Id, model.TEAM_ADMIN_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageIncomingWebhooks.Id, model.TeamAdminRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_INCOMING_WEBHOOKS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageIncomingWebhooks.Id, model.SystemUserRoleId)
|
||||||
|
|
||||||
// Basic user webhook
|
// Basic user webhook
|
||||||
bHook := &model.IncomingWebhook{ChannelId: th.BasicChannel.Id, TeamId: th.BasicTeam.Id, UserId: th.BasicUser.Id}
|
bHook := &model.IncomingWebhook{ChannelId: th.BasicChannel.Id, TeamId: th.BasicTeam.Id, UserId: th.BasicUser.Id}
|
||||||
@@ -261,8 +261,8 @@ func TestGetIncomingWebhooksByTeam(t *testing.T) {
|
|||||||
defer func() {
|
defer func() {
|
||||||
th.RestoreDefaultRolePermissions(defaultRolePermissions)
|
th.RestoreDefaultRolePermissions(defaultRolePermissions)
|
||||||
}()
|
}()
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_INCOMING_WEBHOOKS.Id, model.TEAM_ADMIN_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageIncomingWebhooks.Id, model.TeamAdminRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_INCOMING_WEBHOOKS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageIncomingWebhooks.Id, model.TeamUserRoleId)
|
||||||
|
|
||||||
// Basic user webhook
|
// Basic user webhook
|
||||||
bHook := &model.IncomingWebhook{ChannelId: th.BasicChannel.Id, TeamId: th.BasicTeam.Id, UserId: th.BasicUser.Id}
|
bHook := &model.IncomingWebhook{ChannelId: th.BasicChannel.Id, TeamId: th.BasicTeam.Id, UserId: th.BasicUser.Id}
|
||||||
@@ -385,8 +385,8 @@ func TestCreateOutgoingWebhook(t *testing.T) {
|
|||||||
defer func() {
|
defer func() {
|
||||||
th.RestoreDefaultRolePermissions(defaultRolePermissions)
|
th.RestoreDefaultRolePermissions(defaultRolePermissions)
|
||||||
}()
|
}()
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_OUTGOING_WEBHOOKS.Id, model.TEAM_ADMIN_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageOutgoingWebhooks.Id, model.TeamAdminRoleId)
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_MANAGE_OUTGOING_WEBHOOKS.Id, model.TEAM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionManageOutgoingWebhooks.Id, model.TeamUserRoleId)
|
||||||
|
|
||||||
hook := &model.OutgoingWebhook{ChannelId: th.BasicChannel.Id, TeamId: th.BasicChannel.TeamId, CallbackURLs: []string{"http://nowhere.com"}, Username: "some-user-name", IconURL: "http://some-icon-url/"}
|
hook := &model.OutgoingWebhook{ChannelId: th.BasicChannel.Id, TeamId: th.BasicChannel.TeamId, CallbackURLs: []string{"http://nowhere.com"}, Username: "some-user-name", IconURL: "http://some-icon-url/"}
|
||||||
|
|
||||||
@@ -410,7 +410,7 @@ func TestCreateOutgoingWebhook(t *testing.T) {
|
|||||||
_, resp = Client.CreateOutgoingWebhook(hook)
|
_, resp = Client.CreateOutgoingWebhook(hook)
|
||||||
CheckForbiddenStatus(t, resp)
|
CheckForbiddenStatus(t, resp)
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_OUTGOING_WEBHOOKS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageOutgoingWebhooks.Id, model.TeamUserRoleId)
|
||||||
|
|
||||||
_, resp = Client.CreateOutgoingWebhook(hook)
|
_, resp = Client.CreateOutgoingWebhook(hook)
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
@@ -461,8 +461,8 @@ func TestGetOutgoingWebhooks(t *testing.T) {
|
|||||||
defer func() {
|
defer func() {
|
||||||
th.RestoreDefaultRolePermissions(defaultRolePermissions)
|
th.RestoreDefaultRolePermissions(defaultRolePermissions)
|
||||||
}()
|
}()
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_OUTGOING_WEBHOOKS.Id, model.TEAM_ADMIN_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageOutgoingWebhooks.Id, model.TeamAdminRoleId)
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_MANAGE_OUTGOING_WEBHOOKS.Id, model.TEAM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionManageOutgoingWebhooks.Id, model.TeamUserRoleId)
|
||||||
|
|
||||||
hook := &model.OutgoingWebhook{ChannelId: th.BasicChannel.Id, TeamId: th.BasicChannel.TeamId, CallbackURLs: []string{"http://nowhere.com"}}
|
hook := &model.OutgoingWebhook{ChannelId: th.BasicChannel.Id, TeamId: th.BasicChannel.TeamId, CallbackURLs: []string{"http://nowhere.com"}}
|
||||||
rhook, resp := th.SystemAdminClient.CreateOutgoingWebhook(hook)
|
rhook, resp := th.SystemAdminClient.CreateOutgoingWebhook(hook)
|
||||||
@@ -522,7 +522,7 @@ func TestGetOutgoingWebhooks(t *testing.T) {
|
|||||||
_, resp = th.Client.GetOutgoingWebhooks(0, 1000, "")
|
_, resp = th.Client.GetOutgoingWebhooks(0, 1000, "")
|
||||||
CheckForbiddenStatus(t, resp)
|
CheckForbiddenStatus(t, resp)
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_OUTGOING_WEBHOOKS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageOutgoingWebhooks.Id, model.TeamUserRoleId)
|
||||||
|
|
||||||
_, resp = th.Client.GetOutgoingWebhooksForTeam(th.BasicTeam.Id, 0, 1000, "")
|
_, resp = th.Client.GetOutgoingWebhooksForTeam(th.BasicTeam.Id, 0, 1000, "")
|
||||||
CheckNoError(t, resp)
|
CheckNoError(t, resp)
|
||||||
@@ -554,8 +554,8 @@ func TestGetOutgoingWebhooksByTeam(t *testing.T) {
|
|||||||
defer func() {
|
defer func() {
|
||||||
th.RestoreDefaultRolePermissions(defaultRolePermissions)
|
th.RestoreDefaultRolePermissions(defaultRolePermissions)
|
||||||
}()
|
}()
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_OUTGOING_WEBHOOKS.Id, model.TEAM_ADMIN_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageOutgoingWebhooks.Id, model.TeamAdminRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_OUTGOING_WEBHOOKS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageOutgoingWebhooks.Id, model.TeamUserRoleId)
|
||||||
|
|
||||||
// Basic user webhook
|
// Basic user webhook
|
||||||
bHook := &model.OutgoingWebhook{ChannelId: th.BasicChannel.Id, TeamId: th.BasicChannel.TeamId, CallbackURLs: []string{"http://nowhere.com"}}
|
bHook := &model.OutgoingWebhook{ChannelId: th.BasicChannel.Id, TeamId: th.BasicChannel.TeamId, CallbackURLs: []string{"http://nowhere.com"}}
|
||||||
@@ -595,8 +595,8 @@ func TestGetOutgoingWebhooksByChannel(t *testing.T) {
|
|||||||
defer func() {
|
defer func() {
|
||||||
th.RestoreDefaultRolePermissions(defaultRolePermissions)
|
th.RestoreDefaultRolePermissions(defaultRolePermissions)
|
||||||
}()
|
}()
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_OUTGOING_WEBHOOKS.Id, model.TEAM_ADMIN_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageOutgoingWebhooks.Id, model.TeamAdminRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_OUTGOING_WEBHOOKS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageOutgoingWebhooks.Id, model.TeamUserRoleId)
|
||||||
|
|
||||||
// Basic user webhook
|
// Basic user webhook
|
||||||
bHook := &model.OutgoingWebhook{ChannelId: th.BasicChannel.Id, TeamId: th.BasicChannel.TeamId, CallbackURLs: []string{"http://nowhere.com"}}
|
bHook := &model.OutgoingWebhook{ChannelId: th.BasicChannel.Id, TeamId: th.BasicChannel.TeamId, CallbackURLs: []string{"http://nowhere.com"}}
|
||||||
@@ -637,8 +637,8 @@ func TestGetOutgoingWebhooksListByUser(t *testing.T) {
|
|||||||
defer func() {
|
defer func() {
|
||||||
th.RestoreDefaultRolePermissions(defaultRolePermissions)
|
th.RestoreDefaultRolePermissions(defaultRolePermissions)
|
||||||
}()
|
}()
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_OUTGOING_WEBHOOKS.Id, model.TEAM_ADMIN_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageOutgoingWebhooks.Id, model.TeamAdminRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_OUTGOING_WEBHOOKS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageOutgoingWebhooks.Id, model.SystemUserRoleId)
|
||||||
|
|
||||||
// Basic user webhook
|
// Basic user webhook
|
||||||
bHook := &model.OutgoingWebhook{ChannelId: th.BasicChannel.Id, TeamId: th.BasicChannel.TeamId, CallbackURLs: []string{"http://nowhere.com"}}
|
bHook := &model.OutgoingWebhook{ChannelId: th.BasicChannel.Id, TeamId: th.BasicChannel.TeamId, CallbackURLs: []string{"http://nowhere.com"}}
|
||||||
@@ -710,8 +710,8 @@ func TestUpdateIncomingHook(t *testing.T) {
|
|||||||
defer func() {
|
defer func() {
|
||||||
th.RestoreDefaultRolePermissions(defaultRolePermissions)
|
th.RestoreDefaultRolePermissions(defaultRolePermissions)
|
||||||
}()
|
}()
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_INCOMING_WEBHOOKS.Id, model.TEAM_ADMIN_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageIncomingWebhooks.Id, model.TeamAdminRoleId)
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_MANAGE_INCOMING_WEBHOOKS.Id, model.TEAM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionManageIncomingWebhooks.Id, model.TeamUserRoleId)
|
||||||
|
|
||||||
hook1 := &model.IncomingWebhook{ChannelId: th.BasicChannel.Id}
|
hook1 := &model.IncomingWebhook{ChannelId: th.BasicChannel.Id}
|
||||||
|
|
||||||
@@ -814,11 +814,11 @@ func TestUpdateIncomingHook(t *testing.T) {
|
|||||||
CheckForbiddenStatus(t, resp)
|
CheckForbiddenStatus(t, resp)
|
||||||
})
|
})
|
||||||
|
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_MANAGE_INCOMING_WEBHOOKS.Id, model.TEAM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionManageIncomingWebhooks.Id, model.TeamUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_INCOMING_WEBHOOKS.Id, model.TEAM_ADMIN_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageIncomingWebhooks.Id, model.TeamAdminRoleId)
|
||||||
|
|
||||||
t.Run("OnlyAdminIntegrationsDisabled", func(t *testing.T) {
|
t.Run("OnlyAdminIntegrationsDisabled", func(t *testing.T) {
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_INCOMING_WEBHOOKS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageIncomingWebhooks.Id, model.TeamUserRoleId)
|
||||||
|
|
||||||
t.Run("UpdateHookOfSameUser", func(t *testing.T) {
|
t.Run("UpdateHookOfSameUser", func(t *testing.T) {
|
||||||
sameUserHook := &model.IncomingWebhook{ChannelId: th.BasicChannel.Id}
|
sameUserHook := &model.IncomingWebhook{ChannelId: th.BasicChannel.Id}
|
||||||
@@ -837,8 +837,8 @@ func TestUpdateIncomingHook(t *testing.T) {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_MANAGE_INCOMING_WEBHOOKS.Id, model.TEAM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionManageIncomingWebhooks.Id, model.TeamUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_INCOMING_WEBHOOKS.Id, model.TEAM_ADMIN_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageIncomingWebhooks.Id, model.TeamAdminRoleId)
|
||||||
|
|
||||||
th.Client.Logout()
|
th.Client.Logout()
|
||||||
th.UpdateUserToTeamAdmin(th.BasicUser2, th.BasicTeam)
|
th.UpdateUserToTeamAdmin(th.BasicUser2, th.BasicTeam)
|
||||||
@@ -895,9 +895,9 @@ func TestUpdateIncomingWebhook_BypassTeamPermissions(t *testing.T) {
|
|||||||
|
|
||||||
defaultRolePermissions := th.SaveDefaultRolePermissions()
|
defaultRolePermissions := th.SaveDefaultRolePermissions()
|
||||||
defer th.RestoreDefaultRolePermissions(defaultRolePermissions)
|
defer th.RestoreDefaultRolePermissions(defaultRolePermissions)
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_MANAGE_INCOMING_WEBHOOKS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionManageIncomingWebhooks.Id, model.SystemUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_INCOMING_WEBHOOKS.Id, model.TEAM_ADMIN_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageIncomingWebhooks.Id, model.TeamAdminRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_INCOMING_WEBHOOKS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageIncomingWebhooks.Id, model.TeamUserRoleId)
|
||||||
|
|
||||||
hook := &model.IncomingWebhook{ChannelId: th.BasicChannel.Id}
|
hook := &model.IncomingWebhook{ChannelId: th.BasicChannel.Id}
|
||||||
|
|
||||||
@@ -912,7 +912,7 @@ func TestUpdateIncomingWebhook_BypassTeamPermissions(t *testing.T) {
|
|||||||
team.AllowOpenInvite = false
|
team.AllowOpenInvite = false
|
||||||
th.Client.UpdateTeam(team)
|
th.Client.UpdateTeam(team)
|
||||||
th.SystemAdminClient.RemoveTeamMember(team.Id, th.BasicUser.Id)
|
th.SystemAdminClient.RemoveTeamMember(team.Id, th.BasicUser.Id)
|
||||||
channel := th.CreateChannelWithClientAndTeam(th.SystemAdminClient, model.CHANNEL_OPEN, team.Id)
|
channel := th.CreateChannelWithClientAndTeam(th.SystemAdminClient, model.ChannelTypeOpen, team.Id)
|
||||||
|
|
||||||
hook2 := &model.IncomingWebhook{Id: rhook.Id, ChannelId: channel.Id}
|
hook2 := &model.IncomingWebhook{Id: rhook.Id, ChannelId: channel.Id}
|
||||||
rhook, resp = th.Client.UpdateIncomingWebhook(hook2)
|
rhook, resp = th.Client.UpdateIncomingWebhook(hook2)
|
||||||
@@ -958,8 +958,8 @@ func TestUpdateOutgoingHook(t *testing.T) {
|
|||||||
defer func() {
|
defer func() {
|
||||||
th.RestoreDefaultRolePermissions(defaultRolePermissions)
|
th.RestoreDefaultRolePermissions(defaultRolePermissions)
|
||||||
}()
|
}()
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_OUTGOING_WEBHOOKS.Id, model.TEAM_ADMIN_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageOutgoingWebhooks.Id, model.TeamAdminRoleId)
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_MANAGE_OUTGOING_WEBHOOKS.Id, model.TEAM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionManageOutgoingWebhooks.Id, model.TeamUserRoleId)
|
||||||
|
|
||||||
createdHook := &model.OutgoingWebhook{ChannelId: th.BasicChannel.Id, TeamId: th.BasicChannel.TeamId,
|
createdHook := &model.OutgoingWebhook{ChannelId: th.BasicChannel.Id, TeamId: th.BasicChannel.TeamId,
|
||||||
CallbackURLs: []string{"http://nowhere.com"}, TriggerWords: []string{"cats"}}
|
CallbackURLs: []string{"http://nowhere.com"}, TriggerWords: []string{"cats"}}
|
||||||
@@ -1050,7 +1050,7 @@ func TestUpdateOutgoingHook(t *testing.T) {
|
|||||||
CheckForbiddenStatus(t, rresp)
|
CheckForbiddenStatus(t, rresp)
|
||||||
})
|
})
|
||||||
|
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_OUTGOING_WEBHOOKS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageOutgoingWebhooks.Id, model.TeamUserRoleId)
|
||||||
hook2 := &model.OutgoingWebhook{ChannelId: th.BasicChannel.Id, TeamId: th.BasicChannel.TeamId,
|
hook2 := &model.OutgoingWebhook{ChannelId: th.BasicChannel.Id, TeamId: th.BasicChannel.TeamId,
|
||||||
CallbackURLs: []string{"http://nowhere.com"}, TriggerWords: []string{"rats2"}}
|
CallbackURLs: []string{"http://nowhere.com"}, TriggerWords: []string{"rats2"}}
|
||||||
|
|
||||||
@@ -1060,8 +1060,8 @@ func TestUpdateOutgoingHook(t *testing.T) {
|
|||||||
_, resp = th.Client.UpdateOutgoingWebhook(createdHook2)
|
_, resp = th.Client.UpdateOutgoingWebhook(createdHook2)
|
||||||
CheckForbiddenStatus(t, resp)
|
CheckForbiddenStatus(t, resp)
|
||||||
|
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_MANAGE_OUTGOING_WEBHOOKS.Id, model.TEAM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionManageOutgoingWebhooks.Id, model.TeamUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_OUTGOING_WEBHOOKS.Id, model.TEAM_ADMIN_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageOutgoingWebhooks.Id, model.TeamAdminRoleId)
|
||||||
|
|
||||||
th.Client.Logout()
|
th.Client.Logout()
|
||||||
th.UpdateUserToTeamAdmin(th.BasicUser2, th.BasicTeam)
|
th.UpdateUserToTeamAdmin(th.BasicUser2, th.BasicTeam)
|
||||||
@@ -1151,9 +1151,9 @@ func TestUpdateOutgoingWebhook_BypassTeamPermissions(t *testing.T) {
|
|||||||
|
|
||||||
defaultRolePermissions := th.SaveDefaultRolePermissions()
|
defaultRolePermissions := th.SaveDefaultRolePermissions()
|
||||||
defer th.RestoreDefaultRolePermissions(defaultRolePermissions)
|
defer th.RestoreDefaultRolePermissions(defaultRolePermissions)
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_MANAGE_OUTGOING_WEBHOOKS.Id, model.SYSTEM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionManageOutgoingWebhooks.Id, model.SystemUserRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_OUTGOING_WEBHOOKS.Id, model.TEAM_ADMIN_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageOutgoingWebhooks.Id, model.TeamAdminRoleId)
|
||||||
th.AddPermissionToRole(model.PERMISSION_MANAGE_OUTGOING_WEBHOOKS.Id, model.TEAM_USER_ROLE_ID)
|
th.AddPermissionToRole(model.PermissionManageOutgoingWebhooks.Id, model.TeamUserRoleId)
|
||||||
|
|
||||||
hook := &model.OutgoingWebhook{ChannelId: th.BasicChannel.Id, TeamId: th.BasicChannel.TeamId,
|
hook := &model.OutgoingWebhook{ChannelId: th.BasicChannel.Id, TeamId: th.BasicChannel.TeamId,
|
||||||
CallbackURLs: []string{"http://nowhere.com"}, TriggerWords: []string{"rats2"}}
|
CallbackURLs: []string{"http://nowhere.com"}, TriggerWords: []string{"rats2"}}
|
||||||
@@ -1168,7 +1168,7 @@ func TestUpdateOutgoingWebhook_BypassTeamPermissions(t *testing.T) {
|
|||||||
team.AllowOpenInvite = false
|
team.AllowOpenInvite = false
|
||||||
th.Client.UpdateTeam(team)
|
th.Client.UpdateTeam(team)
|
||||||
th.SystemAdminClient.RemoveTeamMember(team.Id, th.BasicUser.Id)
|
th.SystemAdminClient.RemoveTeamMember(team.Id, th.BasicUser.Id)
|
||||||
channel := th.CreateChannelWithClientAndTeam(th.SystemAdminClient, model.CHANNEL_OPEN, team.Id)
|
channel := th.CreateChannelWithClientAndTeam(th.SystemAdminClient, model.ChannelTypeOpen, team.Id)
|
||||||
|
|
||||||
hook2 := &model.OutgoingWebhook{Id: rhook.Id, ChannelId: channel.Id}
|
hook2 := &model.OutgoingWebhook{Id: rhook.Id, ChannelId: channel.Id}
|
||||||
rhook, resp = th.Client.UpdateOutgoingWebhook(hook2)
|
rhook, resp = th.Client.UpdateOutgoingWebhook(hook2)
|
||||||
|
|||||||
@@ -25,8 +25,8 @@ func (api *API) InitWebSocket() {
|
|||||||
|
|
||||||
func connectWebSocket(c *Context, w http.ResponseWriter, r *http.Request) {
|
func connectWebSocket(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||||
upgrader := websocket.Upgrader{
|
upgrader := websocket.Upgrader{
|
||||||
ReadBufferSize: model.SOCKET_MAX_MESSAGE_SIZE_KB,
|
ReadBufferSize: model.SocketMaxMessageSizeKb,
|
||||||
WriteBufferSize: model.SOCKET_MAX_MESSAGE_SIZE_KB,
|
WriteBufferSize: model.SocketMaxMessageSizeKb,
|
||||||
CheckOrigin: c.App.OriginChecker(),
|
CheckOrigin: c.App.OriginChecker(),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ func TestWebSocket(t *testing.T) {
|
|||||||
WebSocketClient.Listen()
|
WebSocketClient.Listen()
|
||||||
|
|
||||||
resp := <-WebSocketClient.ResponseChannel
|
resp := <-WebSocketClient.ResponseChannel
|
||||||
require.Equal(t, resp.Status, model.STATUS_OK, "should have responded OK to authentication challenge")
|
require.Equal(t, resp.Status, model.StatusOk, "should have responded OK to authentication challenge")
|
||||||
|
|
||||||
WebSocketClient.SendMessage("ping", nil)
|
WebSocketClient.SendMessage("ping", nil)
|
||||||
resp = <-WebSocketClient.ResponseChannel
|
resp = <-WebSocketClient.ResponseChannel
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ func TestWebSocketTrailingSlash(t *testing.T) {
|
|||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
|
|
||||||
url := fmt.Sprintf("ws://localhost:%v", th.App.Srv().ListenAddr.Port)
|
url := fmt.Sprintf("ws://localhost:%v", th.App.Srv().ListenAddr.Port)
|
||||||
_, _, err := websocket.DefaultDialer.Dial(url+model.API_URL_SUFFIX+"/websocket/", nil)
|
_, _, err := websocket.DefaultDialer.Dial(url+model.ApiUrlSuffix+"/websocket/", nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -36,11 +36,11 @@ func TestWebSocketEvent(t *testing.T) {
|
|||||||
WebSocketClient.Listen()
|
WebSocketClient.Listen()
|
||||||
|
|
||||||
resp := <-WebSocketClient.ResponseChannel
|
resp := <-WebSocketClient.ResponseChannel
|
||||||
require.Equal(t, resp.Status, model.STATUS_OK, "should have responded OK to authentication challenge")
|
require.Equal(t, resp.Status, model.StatusOk, "should have responded OK to authentication challenge")
|
||||||
|
|
||||||
omitUser := make(map[string]bool, 1)
|
omitUser := make(map[string]bool, 1)
|
||||||
omitUser["somerandomid"] = true
|
omitUser["somerandomid"] = true
|
||||||
evt1 := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_TYPING, "", th.BasicChannel.Id, "", omitUser)
|
evt1 := model.NewWebSocketEvent(model.WebsocketEventTyping, "", th.BasicChannel.Id, "", omitUser)
|
||||||
evt1.Add("user_id", "somerandomid")
|
evt1.Add("user_id", "somerandomid")
|
||||||
th.App.Publish(evt1)
|
th.App.Publish(evt1)
|
||||||
|
|
||||||
@@ -53,7 +53,7 @@ func TestWebSocketEvent(t *testing.T) {
|
|||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case resp := <-WebSocketClient.EventChannel:
|
case resp := <-WebSocketClient.EventChannel:
|
||||||
if resp.EventType() == model.WEBSOCKET_EVENT_TYPING && resp.GetData()["user_id"].(string) == "somerandomid" {
|
if resp.EventType() == model.WebsocketEventTyping && resp.GetData()["user_id"].(string) == "somerandomid" {
|
||||||
eventHit = true
|
eventHit = true
|
||||||
}
|
}
|
||||||
case <-stop:
|
case <-stop:
|
||||||
@@ -68,7 +68,7 @@ func TestWebSocketEvent(t *testing.T) {
|
|||||||
|
|
||||||
require.True(t, eventHit, "did not receive typing event")
|
require.True(t, eventHit, "did not receive typing event")
|
||||||
|
|
||||||
evt2 := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_TYPING, "", "somerandomid", "", nil)
|
evt2 := model.NewWebSocketEvent(model.WebsocketEventTyping, "", "somerandomid", "", nil)
|
||||||
th.App.Publish(evt2)
|
th.App.Publish(evt2)
|
||||||
time.Sleep(300 * time.Millisecond)
|
time.Sleep(300 * time.Millisecond)
|
||||||
|
|
||||||
@@ -78,7 +78,7 @@ func TestWebSocketEvent(t *testing.T) {
|
|||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case resp := <-WebSocketClient.EventChannel:
|
case resp := <-WebSocketClient.EventChannel:
|
||||||
if resp.EventType() == model.WEBSOCKET_EVENT_TYPING {
|
if resp.EventType() == model.WebsocketEventTyping {
|
||||||
eventHit = true
|
eventHit = true
|
||||||
}
|
}
|
||||||
case <-stop:
|
case <-stop:
|
||||||
@@ -114,10 +114,10 @@ func TestCreateDirectChannelWithSocket(t *testing.T) {
|
|||||||
WebSocketClient.Listen()
|
WebSocketClient.Listen()
|
||||||
|
|
||||||
resp := <-WebSocketClient.ResponseChannel
|
resp := <-WebSocketClient.ResponseChannel
|
||||||
require.Equal(t, resp.Status, model.STATUS_OK, "should have responded OK to authentication challenge")
|
require.Equal(t, resp.Status, model.StatusOk, "should have responded OK to authentication challenge")
|
||||||
|
|
||||||
wsr := <-WebSocketClient.EventChannel
|
wsr := <-WebSocketClient.EventChannel
|
||||||
require.Equal(t, wsr.EventType(), model.WEBSOCKET_EVENT_HELLO, "missing hello")
|
require.Equal(t, wsr.EventType(), model.WebsocketEventHello, "missing hello")
|
||||||
|
|
||||||
stop := make(chan bool)
|
stop := make(chan bool)
|
||||||
count := 0
|
count := 0
|
||||||
@@ -126,7 +126,7 @@ func TestCreateDirectChannelWithSocket(t *testing.T) {
|
|||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case wsr := <-WebSocketClient.EventChannel:
|
case wsr := <-WebSocketClient.EventChannel:
|
||||||
if wsr != nil && wsr.EventType() == model.WEBSOCKET_EVENT_DIRECT_ADDED {
|
if wsr != nil && wsr.EventType() == model.WebsocketEventDirectAdded {
|
||||||
count = count + 1
|
count = count + 1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -156,42 +156,42 @@ func TestWebsocketOriginSecurity(t *testing.T) {
|
|||||||
url := fmt.Sprintf("ws://localhost:%v", th.App.Srv().ListenAddr.Port)
|
url := fmt.Sprintf("ws://localhost:%v", th.App.Srv().ListenAddr.Port)
|
||||||
|
|
||||||
// Should fail because origin doesn't match
|
// Should fail because origin doesn't match
|
||||||
_, _, err := websocket.DefaultDialer.Dial(url+model.API_URL_SUFFIX+"/websocket", http.Header{
|
_, _, err := websocket.DefaultDialer.Dial(url+model.ApiUrlSuffix+"/websocket", http.Header{
|
||||||
"Origin": []string{"http://www.evil.com"},
|
"Origin": []string{"http://www.evil.com"},
|
||||||
})
|
})
|
||||||
|
|
||||||
require.Error(t, err, "Should have errored because Origin does not match host! SECURITY ISSUE!")
|
require.Error(t, err, "Should have errored because Origin does not match host! SECURITY ISSUE!")
|
||||||
|
|
||||||
// We are not a browser so we can spoof this just fine
|
// We are not a browser so we can spoof this just fine
|
||||||
_, _, err = websocket.DefaultDialer.Dial(url+model.API_URL_SUFFIX+"/websocket", http.Header{
|
_, _, err = websocket.DefaultDialer.Dial(url+model.ApiUrlSuffix+"/websocket", http.Header{
|
||||||
"Origin": []string{fmt.Sprintf("http://localhost:%v", th.App.Srv().ListenAddr.Port)},
|
"Origin": []string{fmt.Sprintf("http://localhost:%v", th.App.Srv().ListenAddr.Port)},
|
||||||
})
|
})
|
||||||
require.NoError(t, err, err)
|
require.NoError(t, err, err)
|
||||||
|
|
||||||
// Should succeed now because open CORS
|
// Should succeed now because open CORS
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.AllowCorsFrom = "*" })
|
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.AllowCorsFrom = "*" })
|
||||||
_, _, err = websocket.DefaultDialer.Dial(url+model.API_URL_SUFFIX+"/websocket", http.Header{
|
_, _, err = websocket.DefaultDialer.Dial(url+model.ApiUrlSuffix+"/websocket", http.Header{
|
||||||
"Origin": []string{"http://www.evil.com"},
|
"Origin": []string{"http://www.evil.com"},
|
||||||
})
|
})
|
||||||
require.NoError(t, err, err)
|
require.NoError(t, err, err)
|
||||||
|
|
||||||
// Should succeed now because matching CORS
|
// Should succeed now because matching CORS
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.AllowCorsFrom = "http://www.evil.com" })
|
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.AllowCorsFrom = "http://www.evil.com" })
|
||||||
_, _, err = websocket.DefaultDialer.Dial(url+model.API_URL_SUFFIX+"/websocket", http.Header{
|
_, _, err = websocket.DefaultDialer.Dial(url+model.ApiUrlSuffix+"/websocket", http.Header{
|
||||||
"Origin": []string{"http://www.evil.com"},
|
"Origin": []string{"http://www.evil.com"},
|
||||||
})
|
})
|
||||||
require.NoError(t, err, err)
|
require.NoError(t, err, err)
|
||||||
|
|
||||||
// Should fail because non-matching CORS
|
// Should fail because non-matching CORS
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.AllowCorsFrom = "http://www.good.com" })
|
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.AllowCorsFrom = "http://www.good.com" })
|
||||||
_, _, err = websocket.DefaultDialer.Dial(url+model.API_URL_SUFFIX+"/websocket", http.Header{
|
_, _, err = websocket.DefaultDialer.Dial(url+model.ApiUrlSuffix+"/websocket", http.Header{
|
||||||
"Origin": []string{"http://www.evil.com"},
|
"Origin": []string{"http://www.evil.com"},
|
||||||
})
|
})
|
||||||
require.Error(t, err, "Should have errored because Origin contain AllowCorsFrom")
|
require.Error(t, err, "Should have errored because Origin contain AllowCorsFrom")
|
||||||
|
|
||||||
// Should fail because non-matching CORS
|
// Should fail because non-matching CORS
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.AllowCorsFrom = "http://www.good.com" })
|
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.AllowCorsFrom = "http://www.good.com" })
|
||||||
_, _, err = websocket.DefaultDialer.Dial(url+model.API_URL_SUFFIX+"/websocket", http.Header{
|
_, _, err = websocket.DefaultDialer.Dial(url+model.ApiUrlSuffix+"/websocket", http.Header{
|
||||||
"Origin": []string{"http://www.good.co"},
|
"Origin": []string{"http://www.good.co"},
|
||||||
})
|
})
|
||||||
require.Error(t, err, "Should have errored because Origin does not match host! SECURITY ISSUE!")
|
require.Error(t, err, "Should have errored because Origin does not match host! SECURITY ISSUE!")
|
||||||
@@ -210,9 +210,9 @@ func TestWebSocketStatuses(t *testing.T) {
|
|||||||
WebSocketClient.Listen()
|
WebSocketClient.Listen()
|
||||||
|
|
||||||
resp := <-WebSocketClient.ResponseChannel
|
resp := <-WebSocketClient.ResponseChannel
|
||||||
require.Equal(t, resp.Status, model.STATUS_OK, "should have responded OK to authentication challenge")
|
require.Equal(t, resp.Status, model.StatusOk, "should have responded OK to authentication challenge")
|
||||||
|
|
||||||
team := model.Team{DisplayName: "Name", Name: "z-z-" + model.NewRandomTeamName() + "a", Email: "test@nowhere.com", Type: model.TEAM_OPEN}
|
team := model.Team{DisplayName: "Name", Name: "z-z-" + model.NewRandomTeamName() + "a", Email: "test@nowhere.com", Type: model.TeamOpen}
|
||||||
rteam, _ := Client.CreateTeam(&team)
|
rteam, _ := Client.CreateTeam(&team)
|
||||||
|
|
||||||
user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"}
|
user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"}
|
||||||
@@ -242,7 +242,7 @@ func TestWebSocketStatuses(t *testing.T) {
|
|||||||
|
|
||||||
require.Equal(t, resp.SeqReply, WebSocketClient.Sequence-1, "bad sequence number")
|
require.Equal(t, resp.SeqReply, WebSocketClient.Sequence-1, "bad sequence number")
|
||||||
|
|
||||||
allowedValues := [4]string{model.STATUS_OFFLINE, model.STATUS_AWAY, model.STATUS_ONLINE, model.STATUS_DND}
|
allowedValues := [4]string{model.StatusOffline, model.StatusAway, model.StatusOnline, model.StatusDnd}
|
||||||
for _, status := range resp.Data {
|
for _, status := range resp.Data {
|
||||||
require.Containsf(t, allowedValues, status, "one of the statuses had an invalid value status=%v", status)
|
require.Containsf(t, allowedValues, status, "one of the statuses had an invalid value status=%v", status)
|
||||||
}
|
}
|
||||||
@@ -250,7 +250,7 @@ func TestWebSocketStatuses(t *testing.T) {
|
|||||||
status, ok := resp.Data[th.BasicUser2.Id]
|
status, ok := resp.Data[th.BasicUser2.Id]
|
||||||
require.True(t, ok, "should have had user status")
|
require.True(t, ok, "should have had user status")
|
||||||
|
|
||||||
require.Equal(t, status, model.STATUS_ONLINE, "status should have been online status=%v", status)
|
require.Equal(t, status, model.StatusOnline, "status should have been online status=%v", status)
|
||||||
|
|
||||||
WebSocketClient.GetStatusesByIds([]string{th.BasicUser2.Id})
|
WebSocketClient.GetStatusesByIds([]string{th.BasicUser2.Id})
|
||||||
resp = <-WebSocketClient.ResponseChannel
|
resp = <-WebSocketClient.ResponseChannel
|
||||||
@@ -258,7 +258,7 @@ func TestWebSocketStatuses(t *testing.T) {
|
|||||||
|
|
||||||
require.Equal(t, resp.SeqReply, WebSocketClient.Sequence-1, "bad sequence number")
|
require.Equal(t, resp.SeqReply, WebSocketClient.Sequence-1, "bad sequence number")
|
||||||
|
|
||||||
allowedValues = [4]string{model.STATUS_OFFLINE, model.STATUS_AWAY, model.STATUS_ONLINE}
|
allowedValues = [4]string{model.StatusOffline, model.StatusAway, model.StatusOnline}
|
||||||
for _, status := range resp.Data {
|
for _, status := range resp.Data {
|
||||||
require.Containsf(t, allowedValues, status, "one of the statuses had an invalid value status")
|
require.Containsf(t, allowedValues, status, "one of the statuses had an invalid value status")
|
||||||
}
|
}
|
||||||
@@ -266,7 +266,7 @@ func TestWebSocketStatuses(t *testing.T) {
|
|||||||
status, ok = resp.Data[th.BasicUser2.Id]
|
status, ok = resp.Data[th.BasicUser2.Id]
|
||||||
require.True(t, ok, "should have had user status")
|
require.True(t, ok, "should have had user status")
|
||||||
|
|
||||||
require.Equal(t, status, model.STATUS_ONLINE, "status should have been online status=%v", status)
|
require.Equal(t, status, model.StatusOnline, "status should have been online status=%v", status)
|
||||||
require.Equal(t, len(resp.Data), 1, "only 1 status should be returned")
|
require.Equal(t, len(resp.Data), 1, "only 1 status should be returned")
|
||||||
|
|
||||||
WebSocketClient.GetStatusesByIds([]string{ruser2.Id, "junk"})
|
WebSocketClient.GetStatusesByIds([]string{ruser2.Id, "junk"})
|
||||||
@@ -314,11 +314,11 @@ func TestWebSocketStatuses(t *testing.T) {
|
|||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case resp := <-WebSocketClient.EventChannel:
|
case resp := <-WebSocketClient.EventChannel:
|
||||||
if resp.EventType() == model.WEBSOCKET_EVENT_STATUS_CHANGE && resp.GetData()["user_id"].(string) == th.BasicUser.Id {
|
if resp.EventType() == model.WebsocketEventStatusChange && resp.GetData()["user_id"].(string) == th.BasicUser.Id {
|
||||||
status := resp.GetData()["status"].(string)
|
status := resp.GetData()["status"].(string)
|
||||||
if status == model.STATUS_ONLINE {
|
if status == model.StatusOnline {
|
||||||
onlineHit = true
|
onlineHit = true
|
||||||
} else if status == model.STATUS_AWAY {
|
} else if status == model.StatusAway {
|
||||||
awayHit = true
|
awayHit = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -155,8 +155,8 @@ func (s *Server) InvalidateAllCaches() *model.AppError {
|
|||||||
if s.Cluster != nil {
|
if s.Cluster != nil {
|
||||||
|
|
||||||
msg := &model.ClusterMessage{
|
msg := &model.ClusterMessage{
|
||||||
Event: model.CLUSTER_EVENT_INVALIDATE_ALL_CACHES,
|
Event: model.ClusterEventInvalidateAllCaches,
|
||||||
SendType: model.CLUSTER_SEND_RELIABLE,
|
SendType: model.ClusterSendReliable,
|
||||||
WaitForAllToSend: true,
|
WaitForAllToSend: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -211,7 +211,7 @@ func (a *App) TestEmail(userID string, cfg *model.Config) *model.AppError {
|
|||||||
|
|
||||||
// if the user hasn't changed their email settings, fill in the actual SMTP password so that
|
// if the user hasn't changed their email settings, fill in the actual SMTP password so that
|
||||||
// the user can verify an existing SMTP connection
|
// the user can verify an existing SMTP connection
|
||||||
if *cfg.EmailSettings.SMTPPassword == model.FAKE_SETTING {
|
if *cfg.EmailSettings.SMTPPassword == model.FakeSetting {
|
||||||
if *cfg.EmailSettings.SMTPServer == *a.Config().EmailSettings.SMTPServer &&
|
if *cfg.EmailSettings.SMTPServer == *a.Config().EmailSettings.SMTPServer &&
|
||||||
*cfg.EmailSettings.SMTPPort == *a.Config().EmailSettings.SMTPPort &&
|
*cfg.EmailSettings.SMTPPort == *a.Config().EmailSettings.SMTPPort &&
|
||||||
*cfg.EmailSettings.SMTPUsername == *a.Config().EmailSettings.SMTPUsername {
|
*cfg.EmailSettings.SMTPUsername == *a.Config().EmailSettings.SMTPUsername {
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ func (a *App) GetAnalytics(name string, teamID string) (model.AnalyticsRows, *mo
|
|||||||
var openChannelsCount int64
|
var openChannelsCount int64
|
||||||
g.Go(func() error {
|
g.Go(func() error {
|
||||||
var err error
|
var err error
|
||||||
if openChannelsCount, err = a.Srv().Store.Channel().AnalyticsTypeCount(teamID, model.CHANNEL_OPEN); err != nil {
|
if openChannelsCount, err = a.Srv().Store.Channel().AnalyticsTypeCount(teamID, model.ChannelTypeOpen); err != nil {
|
||||||
return model.NewAppError("GetAnalytics", "app.channel.analytics_type_count.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return model.NewAppError("GetAnalytics", "app.channel.analytics_type_count.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -57,7 +57,7 @@ func (a *App) GetAnalytics(name string, teamID string) (model.AnalyticsRows, *mo
|
|||||||
var privateChannelsCount int64
|
var privateChannelsCount int64
|
||||||
g.Go(func() error {
|
g.Go(func() error {
|
||||||
var err error
|
var err error
|
||||||
if privateChannelsCount, err = a.Srv().Store.Channel().AnalyticsTypeCount(teamID, model.CHANNEL_PRIVATE); err != nil {
|
if privateChannelsCount, err = a.Srv().Store.Channel().AnalyticsTypeCount(teamID, model.ChannelTypePrivate); err != nil {
|
||||||
return model.NewAppError("GetAnalytics", "app.channel.analytics_type_count.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return model.NewAppError("GetAnalytics", "app.channel.analytics_type_count.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
46
app/app.go
46
app/app.go
@@ -64,7 +64,7 @@ func (a *App) Handle404(w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) getSystemInstallDate() (int64, *model.AppError) {
|
func (s *Server) getSystemInstallDate() (int64, *model.AppError) {
|
||||||
systemData, err := s.Store.System().GetByName(model.SYSTEM_INSTALLATION_DATE_KEY)
|
systemData, err := s.Store.System().GetByName(model.SystemInstallationDateKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, model.NewAppError("getSystemInstallDate", "app.system.get_by_name.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return 0, model.NewAppError("getSystemInstallDate", "app.system.get_by_name.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -76,7 +76,7 @@ func (s *Server) getSystemInstallDate() (int64, *model.AppError) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) getFirstServerRunTimestamp() (int64, *model.AppError) {
|
func (s *Server) getFirstServerRunTimestamp() (int64, *model.AppError) {
|
||||||
systemData, err := s.Store.System().GetByName(model.SYSTEM_FIRST_SERVER_RUN_TIMESTAMP_KEY)
|
systemData, err := s.Store.System().GetByName(model.SystemFirstServerRunTimestampKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, model.NewAppError("getFirstServerRunTimestamp", "app.system.get_by_name.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return 0, model.NewAppError("getFirstServerRunTimestamp", "app.system.get_by_name.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -89,7 +89,7 @@ func (s *Server) getFirstServerRunTimestamp() (int64, *model.AppError) {
|
|||||||
|
|
||||||
//nolint:golint,unused,deadcode
|
//nolint:golint,unused,deadcode
|
||||||
func (s *Server) getLastWarnMetricTimestamp() (int64, *model.AppError) {
|
func (s *Server) getLastWarnMetricTimestamp() (int64, *model.AppError) {
|
||||||
systemData, err := s.Store.System().GetByName(model.SYSTEM_WARN_METRIC_LAST_RUN_TIMESTAMP_KEY)
|
systemData, err := s.Store.System().GetByName(model.SystemWarnMetricLastRunTimestampKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, model.NewAppError("getLastWarnMetricTimestamp", "app.system.get_by_name.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return 0, model.NewAppError("getLastWarnMetricTimestamp", "app.system.get_by_name.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -110,9 +110,9 @@ func (a *App) GetWarnMetricsStatus() (map[string]*model.WarnMetricStatus, *model
|
|||||||
|
|
||||||
result := map[string]*model.WarnMetricStatus{}
|
result := map[string]*model.WarnMetricStatus{}
|
||||||
for key, value := range systemDataList {
|
for key, value := range systemDataList {
|
||||||
if strings.HasPrefix(key, model.WARN_METRIC_STATUS_STORE_PREFIX) {
|
if strings.HasPrefix(key, model.WarnMetricStatusStorePrefix) {
|
||||||
if warnMetric, ok := model.WarnMetricsTable[key]; ok {
|
if warnMetric, ok := model.WarnMetricsTable[key]; ok {
|
||||||
if !warnMetric.IsBotOnly && (value == model.WARN_METRIC_STATUS_RUNONCE || value == model.WARN_METRIC_STATUS_LIMIT_REACHED) {
|
if !warnMetric.IsBotOnly && (value == model.WarnMetricStatusRunonce || value == model.WarnMetricStatusLimitReached) {
|
||||||
result[key], _ = a.getWarnMetricStatusAndDisplayTextsForId(key, nil, isE0Edition)
|
result[key], _ = a.getWarnMetricStatusAndDisplayTextsForId(key, nil, isE0Edition)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -141,7 +141,7 @@ func (a *App) getWarnMetricStatusAndDisplayTextsForId(warnMetricId string, T i18
|
|||||||
warnMetricDisplayTexts.BotSuccessMessage = T("api.server.warn_metric.bot_response.notification_success.message")
|
warnMetricDisplayTexts.BotSuccessMessage = T("api.server.warn_metric.bot_response.notification_success.message")
|
||||||
|
|
||||||
switch warnMetricId {
|
switch warnMetricId {
|
||||||
case model.SYSTEM_WARN_METRIC_NUMBER_OF_TEAMS_5:
|
case model.SystemWarnMetricNumberOfTeams5:
|
||||||
warnMetricDisplayTexts.BotTitle = T("api.server.warn_metric.number_of_teams_5.notification_title")
|
warnMetricDisplayTexts.BotTitle = T("api.server.warn_metric.number_of_teams_5.notification_title")
|
||||||
if isE0Edition {
|
if isE0Edition {
|
||||||
warnMetricDisplayTexts.BotMessageBody = T("api.server.warn_metric.number_of_teams_5.start_trial.notification_body")
|
warnMetricDisplayTexts.BotMessageBody = T("api.server.warn_metric.number_of_teams_5.start_trial.notification_body")
|
||||||
@@ -150,7 +150,7 @@ func (a *App) getWarnMetricStatusAndDisplayTextsForId(warnMetricId string, T i18
|
|||||||
warnMetricDisplayTexts.EmailBody = T("api.server.warn_metric.number_of_teams_5.contact_us.email_body")
|
warnMetricDisplayTexts.EmailBody = T("api.server.warn_metric.number_of_teams_5.contact_us.email_body")
|
||||||
warnMetricDisplayTexts.BotMessageBody = T("api.server.warn_metric.number_of_teams_5.notification_body")
|
warnMetricDisplayTexts.BotMessageBody = T("api.server.warn_metric.number_of_teams_5.notification_body")
|
||||||
}
|
}
|
||||||
case model.SYSTEM_WARN_METRIC_MFA:
|
case model.SystemWarnMetricMfa:
|
||||||
warnMetricDisplayTexts.BotTitle = T("api.server.warn_metric.mfa.notification_title")
|
warnMetricDisplayTexts.BotTitle = T("api.server.warn_metric.mfa.notification_title")
|
||||||
if isE0Edition {
|
if isE0Edition {
|
||||||
warnMetricDisplayTexts.BotMessageBody = T("api.server.warn_metric.mfa.start_trial.notification_body")
|
warnMetricDisplayTexts.BotMessageBody = T("api.server.warn_metric.mfa.start_trial.notification_body")
|
||||||
@@ -159,7 +159,7 @@ func (a *App) getWarnMetricStatusAndDisplayTextsForId(warnMetricId string, T i18
|
|||||||
warnMetricDisplayTexts.EmailBody = T("api.server.warn_metric.mfa.contact_us.email_body")
|
warnMetricDisplayTexts.EmailBody = T("api.server.warn_metric.mfa.contact_us.email_body")
|
||||||
warnMetricDisplayTexts.BotMessageBody = T("api.server.warn_metric.mfa.notification_body")
|
warnMetricDisplayTexts.BotMessageBody = T("api.server.warn_metric.mfa.notification_body")
|
||||||
}
|
}
|
||||||
case model.SYSTEM_WARN_METRIC_EMAIL_DOMAIN:
|
case model.SystemWarnMetricEmailDomain:
|
||||||
warnMetricDisplayTexts.BotTitle = T("api.server.warn_metric.email_domain.notification_title")
|
warnMetricDisplayTexts.BotTitle = T("api.server.warn_metric.email_domain.notification_title")
|
||||||
if isE0Edition {
|
if isE0Edition {
|
||||||
warnMetricDisplayTexts.BotMessageBody = T("api.server.warn_metric.email_domain.start_trial.notification_body")
|
warnMetricDisplayTexts.BotMessageBody = T("api.server.warn_metric.email_domain.start_trial.notification_body")
|
||||||
@@ -168,7 +168,7 @@ func (a *App) getWarnMetricStatusAndDisplayTextsForId(warnMetricId string, T i18
|
|||||||
warnMetricDisplayTexts.EmailBody = T("api.server.warn_metric.email_domain.contact_us.email_body")
|
warnMetricDisplayTexts.EmailBody = T("api.server.warn_metric.email_domain.contact_us.email_body")
|
||||||
warnMetricDisplayTexts.BotMessageBody = T("api.server.warn_metric.email_domain.notification_body")
|
warnMetricDisplayTexts.BotMessageBody = T("api.server.warn_metric.email_domain.notification_body")
|
||||||
}
|
}
|
||||||
case model.SYSTEM_WARN_METRIC_NUMBER_OF_CHANNELS_50:
|
case model.SystemWarnMetricNumberOfChannels50:
|
||||||
warnMetricDisplayTexts.BotTitle = T("api.server.warn_metric.number_of_channels_50.notification_title")
|
warnMetricDisplayTexts.BotTitle = T("api.server.warn_metric.number_of_channels_50.notification_title")
|
||||||
if isE0Edition {
|
if isE0Edition {
|
||||||
warnMetricDisplayTexts.BotMessageBody = T("api.server.warn_metric.number_of_channels_50.start_trial.notification_body")
|
warnMetricDisplayTexts.BotMessageBody = T("api.server.warn_metric.number_of_channels_50.start_trial.notification_body")
|
||||||
@@ -177,7 +177,7 @@ func (a *App) getWarnMetricStatusAndDisplayTextsForId(warnMetricId string, T i18
|
|||||||
warnMetricDisplayTexts.EmailBody = T("api.server.warn_metric.number_of_channels_50.contact_us.email_body")
|
warnMetricDisplayTexts.EmailBody = T("api.server.warn_metric.number_of_channels_50.contact_us.email_body")
|
||||||
warnMetricDisplayTexts.BotMessageBody = T("api.server.warn_metric.number_of_channels_50.notification_body")
|
warnMetricDisplayTexts.BotMessageBody = T("api.server.warn_metric.number_of_channels_50.notification_body")
|
||||||
}
|
}
|
||||||
case model.SYSTEM_WARN_METRIC_NUMBER_OF_ACTIVE_USERS_100:
|
case model.SystemWarnMetricNumberOfActiveUsers100:
|
||||||
warnMetricDisplayTexts.BotTitle = T("api.server.warn_metric.number_of_active_users_100.notification_title")
|
warnMetricDisplayTexts.BotTitle = T("api.server.warn_metric.number_of_active_users_100.notification_title")
|
||||||
if isE0Edition {
|
if isE0Edition {
|
||||||
warnMetricDisplayTexts.BotMessageBody = T("api.server.warn_metric.number_of_active_users_100.start_trial.notification_body")
|
warnMetricDisplayTexts.BotMessageBody = T("api.server.warn_metric.number_of_active_users_100.start_trial.notification_body")
|
||||||
@@ -186,7 +186,7 @@ func (a *App) getWarnMetricStatusAndDisplayTextsForId(warnMetricId string, T i18
|
|||||||
warnMetricDisplayTexts.EmailBody = T("api.server.warn_metric.number_of_active_users_100.contact_us.email_body")
|
warnMetricDisplayTexts.EmailBody = T("api.server.warn_metric.number_of_active_users_100.contact_us.email_body")
|
||||||
warnMetricDisplayTexts.BotMessageBody = T("api.server.warn_metric.number_of_active_users_100.notification_body")
|
warnMetricDisplayTexts.BotMessageBody = T("api.server.warn_metric.number_of_active_users_100.notification_body")
|
||||||
}
|
}
|
||||||
case model.SYSTEM_WARN_METRIC_NUMBER_OF_ACTIVE_USERS_200:
|
case model.SystemWarnMetricNumberOfActiveUsers200:
|
||||||
warnMetricDisplayTexts.BotTitle = T("api.server.warn_metric.number_of_active_users_200.notification_title")
|
warnMetricDisplayTexts.BotTitle = T("api.server.warn_metric.number_of_active_users_200.notification_title")
|
||||||
if isE0Edition {
|
if isE0Edition {
|
||||||
warnMetricDisplayTexts.BotMessageBody = T("api.server.warn_metric.number_of_active_users_200.start_trial.notification_body")
|
warnMetricDisplayTexts.BotMessageBody = T("api.server.warn_metric.number_of_active_users_200.start_trial.notification_body")
|
||||||
@@ -195,7 +195,7 @@ func (a *App) getWarnMetricStatusAndDisplayTextsForId(warnMetricId string, T i18
|
|||||||
warnMetricDisplayTexts.EmailBody = T("api.server.warn_metric.number_of_active_users_200.contact_us.email_body")
|
warnMetricDisplayTexts.EmailBody = T("api.server.warn_metric.number_of_active_users_200.contact_us.email_body")
|
||||||
warnMetricDisplayTexts.BotMessageBody = T("api.server.warn_metric.number_of_active_users_200.notification_body")
|
warnMetricDisplayTexts.BotMessageBody = T("api.server.warn_metric.number_of_active_users_200.notification_body")
|
||||||
}
|
}
|
||||||
case model.SYSTEM_WARN_METRIC_NUMBER_OF_ACTIVE_USERS_300:
|
case model.SystemWarnMetricNumberOfActiveUsers300:
|
||||||
warnMetricDisplayTexts.BotTitle = T("api.server.warn_metric.number_of_active_users_300.start_trial.notification_title")
|
warnMetricDisplayTexts.BotTitle = T("api.server.warn_metric.number_of_active_users_300.start_trial.notification_title")
|
||||||
if isE0Edition {
|
if isE0Edition {
|
||||||
warnMetricDisplayTexts.BotMessageBody = T("api.server.warn_metric.number_of_active_users_300.start_trial.notification_body")
|
warnMetricDisplayTexts.BotMessageBody = T("api.server.warn_metric.number_of_active_users_300.start_trial.notification_body")
|
||||||
@@ -204,7 +204,7 @@ func (a *App) getWarnMetricStatusAndDisplayTextsForId(warnMetricId string, T i18
|
|||||||
warnMetricDisplayTexts.EmailBody = T("api.server.warn_metric.number_of_active_users_300.contact_us.email_body")
|
warnMetricDisplayTexts.EmailBody = T("api.server.warn_metric.number_of_active_users_300.contact_us.email_body")
|
||||||
warnMetricDisplayTexts.BotMessageBody = T("api.server.warn_metric.number_of_active_users_300.notification_body")
|
warnMetricDisplayTexts.BotMessageBody = T("api.server.warn_metric.number_of_active_users_300.notification_body")
|
||||||
}
|
}
|
||||||
case model.SYSTEM_WARN_METRIC_NUMBER_OF_ACTIVE_USERS_500:
|
case model.SystemWarnMetricNumberOfActiveUsers500:
|
||||||
warnMetricDisplayTexts.BotTitle = T("api.server.warn_metric.number_of_active_users_500.notification_title")
|
warnMetricDisplayTexts.BotTitle = T("api.server.warn_metric.number_of_active_users_500.notification_title")
|
||||||
if isE0Edition {
|
if isE0Edition {
|
||||||
warnMetricDisplayTexts.BotMessageBody = T("api.server.warn_metric.number_of_active_users_500.start_trial.notification_body")
|
warnMetricDisplayTexts.BotMessageBody = T("api.server.warn_metric.number_of_active_users_500.start_trial.notification_body")
|
||||||
@@ -213,7 +213,7 @@ func (a *App) getWarnMetricStatusAndDisplayTextsForId(warnMetricId string, T i18
|
|||||||
warnMetricDisplayTexts.EmailBody = T("api.server.warn_metric.number_of_active_users_500.contact_us.email_body")
|
warnMetricDisplayTexts.EmailBody = T("api.server.warn_metric.number_of_active_users_500.contact_us.email_body")
|
||||||
warnMetricDisplayTexts.BotMessageBody = T("api.server.warn_metric.number_of_active_users_500.notification_body")
|
warnMetricDisplayTexts.BotMessageBody = T("api.server.warn_metric.number_of_active_users_500.notification_body")
|
||||||
}
|
}
|
||||||
case model.SYSTEM_WARN_METRIC_NUMBER_OF_POSTS_2M:
|
case model.SystemWarnMetricNumberOfPosts2m:
|
||||||
warnMetricDisplayTexts.BotTitle = T("api.server.warn_metric.number_of_posts_2M.notification_title")
|
warnMetricDisplayTexts.BotTitle = T("api.server.warn_metric.number_of_posts_2M.notification_title")
|
||||||
if isE0Edition {
|
if isE0Edition {
|
||||||
warnMetricDisplayTexts.BotMessageBody = T("api.server.warn_metric.number_of_posts_2M.start_trial.notification_body")
|
warnMetricDisplayTexts.BotMessageBody = T("api.server.warn_metric.number_of_posts_2M.start_trial.notification_body")
|
||||||
@@ -222,7 +222,7 @@ func (a *App) getWarnMetricStatusAndDisplayTextsForId(warnMetricId string, T i18
|
|||||||
warnMetricDisplayTexts.EmailBody = T("api.server.warn_metric.number_of_posts_2M.contact_us.email_body")
|
warnMetricDisplayTexts.EmailBody = T("api.server.warn_metric.number_of_posts_2M.contact_us.email_body")
|
||||||
warnMetricDisplayTexts.BotMessageBody = T("api.server.warn_metric.number_of_posts_2M.notification_body")
|
warnMetricDisplayTexts.BotMessageBody = T("api.server.warn_metric.number_of_posts_2M.notification_body")
|
||||||
}
|
}
|
||||||
case model.SYSTEM_METRIC_SUPPORT_EMAIL_NOT_CONFIGURED:
|
case model.SystemMetricSupportEmailNotConfigured:
|
||||||
warnMetricDisplayTexts.BotTitle = T("api.server.warn_metric.support_email_not_configured.notification_title")
|
warnMetricDisplayTexts.BotTitle = T("api.server.warn_metric.support_email_not_configured.notification_title")
|
||||||
warnMetricDisplayTexts.BotMessageBody = T("api.server.warn_metric.support_email_not_configured.start_trial.notification_body")
|
warnMetricDisplayTexts.BotMessageBody = T("api.server.warn_metric.support_email_not_configured.start_trial.notification_body")
|
||||||
default:
|
default:
|
||||||
@@ -252,7 +252,7 @@ func (a *App) notifyAdminsOfWarnMetricStatus(c *request.Context, warnMetricId st
|
|||||||
userOptions := &model.UserGetOptions{
|
userOptions := &model.UserGetOptions{
|
||||||
Page: 0,
|
Page: 0,
|
||||||
PerPage: perPage,
|
PerPage: perPage,
|
||||||
Role: model.SYSTEM_ADMIN_ROLE_ID,
|
Role: model.SystemAdminRoleId,
|
||||||
Inactive: false,
|
Inactive: false,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -293,7 +293,7 @@ func (a *App) notifyAdminsOfWarnMetricStatus(c *request.Context, warnMetricId st
|
|||||||
botPost := &model.Post{
|
botPost := &model.Post{
|
||||||
UserId: warnMetricsBot.UserId,
|
UserId: warnMetricsBot.UserId,
|
||||||
ChannelId: channel.Id,
|
ChannelId: channel.Id,
|
||||||
Type: model.POST_SYSTEM_WARN_METRIC_STATUS,
|
Type: model.PostTypeSystemWarnMetricStatus,
|
||||||
Message: "",
|
Message: "",
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -314,7 +314,7 @@ func (a *App) notifyAdminsOfWarnMetricStatus(c *request.Context, warnMetricId st
|
|||||||
&model.PostAction{
|
&model.PostAction{
|
||||||
Id: actionId,
|
Id: actionId,
|
||||||
Name: actionName,
|
Name: actionName,
|
||||||
Type: model.POST_ACTION_TYPE_BUTTON,
|
Type: model.PostActionTypeButton,
|
||||||
Options: []*model.PostActionOptions{
|
Options: []*model.PostActionOptions{
|
||||||
{
|
{
|
||||||
Text: "TrackEventId",
|
Text: "TrackEventId",
|
||||||
@@ -359,7 +359,7 @@ func (a *App) notifyAdminsOfWarnMetricStatus(c *request.Context, warnMetricId st
|
|||||||
func (a *App) NotifyAndSetWarnMetricAck(warnMetricId string, sender *model.User, forceAck bool, isBot bool) *model.AppError {
|
func (a *App) NotifyAndSetWarnMetricAck(warnMetricId string, sender *model.User, forceAck bool, isBot bool) *model.AppError {
|
||||||
if warnMetric, ok := model.WarnMetricsTable[warnMetricId]; ok {
|
if warnMetric, ok := model.WarnMetricsTable[warnMetricId]; ok {
|
||||||
data, nErr := a.Srv().Store.System().GetByName(warnMetric.Id)
|
data, nErr := a.Srv().Store.System().GetByName(warnMetric.Id)
|
||||||
if nErr == nil && data != nil && data.Value == model.WARN_METRIC_STATUS_ACK {
|
if nErr == nil && data != nil && data.Value == model.WarnMetricStatusAck {
|
||||||
mlog.Debug("This metric warning has already been acknowledged", mlog.String("id", warnMetric.Id))
|
mlog.Debug("This metric warning has already been acknowledged", mlog.String("id", warnMetric.Id))
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -404,7 +404,7 @@ func (a *App) NotifyAndSetWarnMetricAck(warnMetricId string, sender *model.User,
|
|||||||
return model.NewAppError("NotifyAndSetWarnMetricAck", "api.email.send_warn_metric_ack.failure.app_error", map[string]interface{}{"Error": err.Error()}, "", http.StatusInternalServerError)
|
return model.NewAppError("NotifyAndSetWarnMetricAck", "api.email.send_warn_metric_ack.failure.app_error", map[string]interface{}{"Error": err.Error()}, "", http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := mail.SendMailUsingConfig(model.MM_SUPPORT_ADVISOR_ADDRESS, subject, body, mailConfig, false, sender.Email); err != nil {
|
if err := mail.SendMailUsingConfig(model.MmSupportAdvisorAddress, subject, body, mailConfig, false, sender.Email); err != nil {
|
||||||
return model.NewAppError("NotifyAndSetWarnMetricAck", "api.email.send_warn_metric_ack.failure.app_error", map[string]interface{}{"Error": err.Error()}, "", http.StatusInternalServerError)
|
return model.NewAppError("NotifyAndSetWarnMetricAck", "api.email.send_warn_metric_ack.failure.app_error", map[string]interface{}{"Error": err.Error()}, "", http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -418,12 +418,12 @@ func (a *App) NotifyAndSetWarnMetricAck(warnMetricId string, sender *model.User,
|
|||||||
|
|
||||||
func (a *App) setWarnMetricsStatusAndNotify(warnMetricId string) *model.AppError {
|
func (a *App) setWarnMetricsStatusAndNotify(warnMetricId string) *model.AppError {
|
||||||
// Ack all metric warnings on the server
|
// Ack all metric warnings on the server
|
||||||
if err := a.setWarnMetricsStatus(model.WARN_METRIC_STATUS_ACK); err != nil {
|
if err := a.setWarnMetricsStatus(model.WarnMetricStatusAck); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Inform client that this metric warning has been acked
|
// Inform client that this metric warning has been acked
|
||||||
message := model.NewWebSocketEvent(model.WEBSOCKET_WARN_METRIC_STATUS_REMOVED, "", "", "", nil)
|
message := model.NewWebSocketEvent(model.WebsocketWarnMetricStatusRemoved, "", "", "", nil)
|
||||||
message.Add("warnMetricId", warnMetricId)
|
message.Add("warnMetricId", warnMetricId)
|
||||||
a.Publish(message)
|
a.Publish(message)
|
||||||
|
|
||||||
@@ -468,7 +468,7 @@ func (a *App) RequestLicenseAndAckWarnMetric(c *request.Context, warnMetricId st
|
|||||||
|
|
||||||
trialLicenseRequest := &model.TrialLicenseRequest{
|
trialLicenseRequest := &model.TrialLicenseRequest{
|
||||||
ServerID: a.TelemetryId(),
|
ServerID: a.TelemetryId(),
|
||||||
Name: currentUser.GetDisplayName(model.SHOW_FULLNAME),
|
Name: currentUser.GetDisplayName(model.ShowFullName),
|
||||||
Email: currentUser.Email,
|
Email: currentUser.Email,
|
||||||
SiteName: *a.Config().TeamSettings.SiteName,
|
SiteName: *a.Config().TeamSettings.SiteName,
|
||||||
SiteURL: *a.Config().ServiceSettings.SiteURL,
|
SiteURL: *a.Config().ServiceSettings.SiteURL,
|
||||||
|
|||||||
@@ -1058,8 +1058,8 @@ type AppIface interface {
|
|||||||
UpdateLastActivityAtIfNeeded(session model.Session)
|
UpdateLastActivityAtIfNeeded(session model.Session)
|
||||||
UpdateMfa(activate bool, userID, token string) *model.AppError
|
UpdateMfa(activate bool, userID, token string) *model.AppError
|
||||||
UpdateMobileAppBadge(userID string)
|
UpdateMobileAppBadge(userID string)
|
||||||
UpdateOAuthUserAttrs(userData io.Reader, user *model.User, provider einterfaces.OauthProvider, service string, tokenUser *model.User) *model.AppError
|
UpdateOAuthApp(oldApp, updatedApp *model.OAuthApp) (*model.OAuthApp, *model.AppError)
|
||||||
UpdateOauthApp(oldApp, updatedApp *model.OAuthApp) (*model.OAuthApp, *model.AppError)
|
UpdateOAuthUserAttrs(userData io.Reader, user *model.User, provider einterfaces.OAuthProvider, service string, tokenUser *model.User) *model.AppError
|
||||||
UpdateOutgoingWebhook(oldHook, updatedHook *model.OutgoingWebhook) (*model.OutgoingWebhook, *model.AppError)
|
UpdateOutgoingWebhook(oldHook, updatedHook *model.OutgoingWebhook) (*model.OutgoingWebhook, *model.AppError)
|
||||||
UpdatePassword(user *model.User, newPassword string) *model.AppError
|
UpdatePassword(user *model.User, newPassword string) *model.AppError
|
||||||
UpdatePasswordAsUser(userID, currentPassword, newPassword string) *model.AppError
|
UpdatePasswordAsUser(userID, currentPassword, newPassword string) *model.AppError
|
||||||
|
|||||||
334
app/app_test.go
334
app/app_test.go
@@ -98,87 +98,87 @@ func TestDoAdvancedPermissionsMigration(t *testing.T) {
|
|||||||
|
|
||||||
expected1 := map[string][]string{
|
expected1 := map[string][]string{
|
||||||
"channel_user": {
|
"channel_user": {
|
||||||
model.PERMISSION_READ_CHANNEL.Id,
|
model.PermissionReadChannel.Id,
|
||||||
model.PERMISSION_ADD_REACTION.Id,
|
model.PermissionAddReaction.Id,
|
||||||
model.PERMISSION_REMOVE_REACTION.Id,
|
model.PermissionRemoveReaction.Id,
|
||||||
model.PERMISSION_MANAGE_PUBLIC_CHANNEL_MEMBERS.Id,
|
model.PermissionManagePublicChannelMembers.Id,
|
||||||
model.PERMISSION_UPLOAD_FILE.Id,
|
model.PermissionUploadFile.Id,
|
||||||
model.PERMISSION_GET_PUBLIC_LINK.Id,
|
model.PermissionGetPublicLink.Id,
|
||||||
model.PERMISSION_CREATE_POST.Id,
|
model.PermissionCreatePost.Id,
|
||||||
model.PERMISSION_USE_CHANNEL_MENTIONS.Id,
|
model.PermissionUseChannelMentions.Id,
|
||||||
model.PERMISSION_USE_SLASH_COMMANDS.Id,
|
model.PermissionUseSlashCommands.Id,
|
||||||
model.PERMISSION_MANAGE_PUBLIC_CHANNEL_PROPERTIES.Id,
|
model.PermissionManagePublicChannelProperties.Id,
|
||||||
model.PERMISSION_DELETE_PUBLIC_CHANNEL.Id,
|
model.PermissionDeletePublicChannel.Id,
|
||||||
model.PERMISSION_MANAGE_PRIVATE_CHANNEL_PROPERTIES.Id,
|
model.PermissionManagePrivateChannelProperties.Id,
|
||||||
model.PERMISSION_DELETE_PRIVATE_CHANNEL.Id,
|
model.PermissionDeletePrivateChannel.Id,
|
||||||
model.PERMISSION_MANAGE_PRIVATE_CHANNEL_MEMBERS.Id,
|
model.PermissionManagePrivateChannelMembers.Id,
|
||||||
model.PERMISSION_DELETE_POST.Id,
|
model.PermissionDeletePost.Id,
|
||||||
model.PERMISSION_EDIT_POST.Id,
|
model.PermissionEditPost.Id,
|
||||||
},
|
},
|
||||||
"channel_admin": {
|
"channel_admin": {
|
||||||
model.PERMISSION_MANAGE_CHANNEL_ROLES.Id,
|
model.PermissionManageChannelRoles.Id,
|
||||||
model.PERMISSION_USE_GROUP_MENTIONS.Id,
|
model.PermissionUseGroupMentions.Id,
|
||||||
},
|
},
|
||||||
"team_user": {
|
"team_user": {
|
||||||
model.PERMISSION_LIST_TEAM_CHANNELS.Id,
|
model.PermissionListTeamChannels.Id,
|
||||||
model.PERMISSION_JOIN_PUBLIC_CHANNELS.Id,
|
model.PermissionJoinPublicChannels.Id,
|
||||||
model.PERMISSION_READ_PUBLIC_CHANNEL.Id,
|
model.PermissionReadPublicChannel.Id,
|
||||||
model.PERMISSION_VIEW_TEAM.Id,
|
model.PermissionViewTeam.Id,
|
||||||
model.PERMISSION_CREATE_PUBLIC_CHANNEL.Id,
|
model.PermissionCreatePublicChannel.Id,
|
||||||
model.PERMISSION_CREATE_PRIVATE_CHANNEL.Id,
|
model.PermissionCreatePrivateChannel.Id,
|
||||||
model.PERMISSION_INVITE_USER.Id,
|
model.PermissionInviteUser.Id,
|
||||||
model.PERMISSION_ADD_USER_TO_TEAM.Id,
|
model.PermissionAddUserToTeam.Id,
|
||||||
},
|
},
|
||||||
"team_post_all": {
|
"team_post_all": {
|
||||||
model.PERMISSION_CREATE_POST.Id,
|
model.PermissionCreatePost.Id,
|
||||||
model.PERMISSION_USE_CHANNEL_MENTIONS.Id,
|
model.PermissionUseChannelMentions.Id,
|
||||||
},
|
},
|
||||||
"team_post_all_public": {
|
"team_post_all_public": {
|
||||||
model.PERMISSION_CREATE_POST_PUBLIC.Id,
|
model.PermissionCreatePostPublic.Id,
|
||||||
model.PERMISSION_USE_CHANNEL_MENTIONS.Id,
|
model.PermissionUseChannelMentions.Id,
|
||||||
},
|
},
|
||||||
"team_admin": {
|
"team_admin": {
|
||||||
model.PERMISSION_REMOVE_USER_FROM_TEAM.Id,
|
model.PermissionRemoveUserFromTeam.Id,
|
||||||
model.PERMISSION_MANAGE_TEAM.Id,
|
model.PermissionManageTeam.Id,
|
||||||
model.PERMISSION_IMPORT_TEAM.Id,
|
model.PermissionImportTeam.Id,
|
||||||
model.PERMISSION_MANAGE_TEAM_ROLES.Id,
|
model.PermissionManageTeamRoles.Id,
|
||||||
model.PERMISSION_MANAGE_CHANNEL_ROLES.Id,
|
model.PermissionManageChannelRoles.Id,
|
||||||
model.PERMISSION_MANAGE_OTHERS_INCOMING_WEBHOOKS.Id,
|
model.PermissionManageOthersIncomingWebhooks.Id,
|
||||||
model.PERMISSION_MANAGE_OTHERS_OUTGOING_WEBHOOKS.Id,
|
model.PermissionManageOthersOutgoingWebhooks.Id,
|
||||||
model.PERMISSION_MANAGE_SLASH_COMMANDS.Id,
|
model.PermissionManageSlashCommands.Id,
|
||||||
model.PERMISSION_MANAGE_OTHERS_SLASH_COMMANDS.Id,
|
model.PermissionManageOthersSlashCommands.Id,
|
||||||
model.PERMISSION_MANAGE_INCOMING_WEBHOOKS.Id,
|
model.PermissionManageIncomingWebhooks.Id,
|
||||||
model.PERMISSION_MANAGE_OUTGOING_WEBHOOKS.Id,
|
model.PermissionManageOutgoingWebhooks.Id,
|
||||||
model.PERMISSION_CONVERT_PUBLIC_CHANNEL_TO_PRIVATE.Id,
|
model.PermissionConvertPublicChannelToPrivate.Id,
|
||||||
model.PERMISSION_CONVERT_PRIVATE_CHANNEL_TO_PUBLIC.Id,
|
model.PermissionConvertPrivateChannelToPublic.Id,
|
||||||
model.PERMISSION_DELETE_POST.Id,
|
model.PermissionDeletePost.Id,
|
||||||
model.PERMISSION_DELETE_OTHERS_POSTS.Id,
|
model.PermissionDeleteOthersPosts.Id,
|
||||||
},
|
},
|
||||||
"system_user": {
|
"system_user": {
|
||||||
model.PERMISSION_LIST_PUBLIC_TEAMS.Id,
|
model.PermissionListPublicTeams.Id,
|
||||||
model.PERMISSION_JOIN_PUBLIC_TEAMS.Id,
|
model.PermissionJoinPublicTeams.Id,
|
||||||
model.PERMISSION_CREATE_DIRECT_CHANNEL.Id,
|
model.PermissionCreateDirectChannel.Id,
|
||||||
model.PERMISSION_CREATE_GROUP_CHANNEL.Id,
|
model.PermissionCreateGroupChannel.Id,
|
||||||
model.PERMISSION_VIEW_MEMBERS.Id,
|
model.PermissionViewMembers.Id,
|
||||||
model.PERMISSION_CREATE_TEAM.Id,
|
model.PermissionCreateTeam.Id,
|
||||||
},
|
},
|
||||||
"system_post_all": {
|
"system_post_all": {
|
||||||
model.PERMISSION_CREATE_POST.Id,
|
model.PermissionCreatePost.Id,
|
||||||
model.PERMISSION_USE_CHANNEL_MENTIONS.Id,
|
model.PermissionUseChannelMentions.Id,
|
||||||
},
|
},
|
||||||
"system_post_all_public": {
|
"system_post_all_public": {
|
||||||
model.PERMISSION_CREATE_POST_PUBLIC.Id,
|
model.PermissionCreatePostPublic.Id,
|
||||||
model.PERMISSION_USE_CHANNEL_MENTIONS.Id,
|
model.PermissionUseChannelMentions.Id,
|
||||||
},
|
},
|
||||||
"system_user_access_token": {
|
"system_user_access_token": {
|
||||||
model.PERMISSION_CREATE_USER_ACCESS_TOKEN.Id,
|
model.PermissionCreateUserAccessToken.Id,
|
||||||
model.PERMISSION_READ_USER_ACCESS_TOKEN.Id,
|
model.PermissionReadUserAccessToken.Id,
|
||||||
model.PERMISSION_REVOKE_USER_ACCESS_TOKEN.Id,
|
model.PermissionRevokeUserAccessToken.Id,
|
||||||
},
|
},
|
||||||
"system_admin": allPermissionIDs,
|
"system_admin": allPermissionIDs,
|
||||||
}
|
}
|
||||||
assert.Contains(t, allPermissionIDs, model.PERMISSION_MANAGE_SHARED_CHANNELS.Id, "manage_shared_channels permission not found")
|
assert.Contains(t, allPermissionIDs, model.PermissionManageSharedChannels.Id, "manage_shared_channels permission not found")
|
||||||
assert.Contains(t, allPermissionIDs, model.PERMISSION_MANAGE_SECURE_CONNECTIONS.Id, "manage_secure_connections permission not found")
|
assert.Contains(t, allPermissionIDs, model.PermissionManageSecureConnections.Id, "manage_secure_connections permission not found")
|
||||||
|
|
||||||
// Check the migration matches what's expected.
|
// Check the migration matches what's expected.
|
||||||
for name, permissions := range expected1 {
|
for name, permissions := range expected1 {
|
||||||
@@ -200,10 +200,10 @@ func TestDoAdvancedPermissionsMigration(t *testing.T) {
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) {
|
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||||
*cfg.TeamSettings.DEPRECATED_DO_NOT_USE_RestrictPublicChannelManagement = model.PERMISSIONS_TEAM_ADMIN
|
*cfg.TeamSettings.DEPRECATED_DO_NOT_USE_RestrictPublicChannelManagement = model.PermissionsTeamAdmin
|
||||||
})
|
})
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) {
|
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||||
*cfg.TeamSettings.DEPRECATED_DO_NOT_USE_RestrictPrivateChannelManagement = model.PERMISSIONS_TEAM_ADMIN
|
*cfg.TeamSettings.DEPRECATED_DO_NOT_USE_RestrictPrivateChannelManagement = model.PermissionsTeamAdmin
|
||||||
})
|
})
|
||||||
th.App.Srv().SetLicense(model.NewTestLicense())
|
th.App.Srv().SetLicense(model.NewTestLicense())
|
||||||
|
|
||||||
@@ -229,82 +229,82 @@ func TestDoAdvancedPermissionsMigration(t *testing.T) {
|
|||||||
// Check the role permissions.
|
// Check the role permissions.
|
||||||
expected2 := map[string][]string{
|
expected2 := map[string][]string{
|
||||||
"channel_user": {
|
"channel_user": {
|
||||||
model.PERMISSION_READ_CHANNEL.Id,
|
model.PermissionReadChannel.Id,
|
||||||
model.PERMISSION_ADD_REACTION.Id,
|
model.PermissionAddReaction.Id,
|
||||||
model.PERMISSION_REMOVE_REACTION.Id,
|
model.PermissionRemoveReaction.Id,
|
||||||
model.PERMISSION_MANAGE_PUBLIC_CHANNEL_MEMBERS.Id,
|
model.PermissionManagePublicChannelMembers.Id,
|
||||||
model.PERMISSION_UPLOAD_FILE.Id,
|
model.PermissionUploadFile.Id,
|
||||||
model.PERMISSION_GET_PUBLIC_LINK.Id,
|
model.PermissionGetPublicLink.Id,
|
||||||
model.PERMISSION_CREATE_POST.Id,
|
model.PermissionCreatePost.Id,
|
||||||
model.PERMISSION_USE_CHANNEL_MENTIONS.Id,
|
model.PermissionUseChannelMentions.Id,
|
||||||
model.PERMISSION_USE_SLASH_COMMANDS.Id,
|
model.PermissionUseSlashCommands.Id,
|
||||||
model.PERMISSION_DELETE_PUBLIC_CHANNEL.Id,
|
model.PermissionDeletePublicChannel.Id,
|
||||||
model.PERMISSION_DELETE_PRIVATE_CHANNEL.Id,
|
model.PermissionDeletePrivateChannel.Id,
|
||||||
model.PERMISSION_MANAGE_PRIVATE_CHANNEL_MEMBERS.Id,
|
model.PermissionManagePrivateChannelMembers.Id,
|
||||||
model.PERMISSION_DELETE_POST.Id,
|
model.PermissionDeletePost.Id,
|
||||||
model.PERMISSION_EDIT_POST.Id,
|
model.PermissionEditPost.Id,
|
||||||
},
|
},
|
||||||
"channel_admin": {
|
"channel_admin": {
|
||||||
model.PERMISSION_MANAGE_CHANNEL_ROLES.Id,
|
model.PermissionManageChannelRoles.Id,
|
||||||
model.PERMISSION_USE_GROUP_MENTIONS.Id,
|
model.PermissionUseGroupMentions.Id,
|
||||||
},
|
},
|
||||||
"team_user": {
|
"team_user": {
|
||||||
model.PERMISSION_LIST_TEAM_CHANNELS.Id,
|
model.PermissionListTeamChannels.Id,
|
||||||
model.PERMISSION_JOIN_PUBLIC_CHANNELS.Id,
|
model.PermissionJoinPublicChannels.Id,
|
||||||
model.PERMISSION_READ_PUBLIC_CHANNEL.Id,
|
model.PermissionReadPublicChannel.Id,
|
||||||
model.PERMISSION_VIEW_TEAM.Id,
|
model.PermissionViewTeam.Id,
|
||||||
model.PERMISSION_CREATE_PUBLIC_CHANNEL.Id,
|
model.PermissionCreatePublicChannel.Id,
|
||||||
model.PERMISSION_CREATE_PRIVATE_CHANNEL.Id,
|
model.PermissionCreatePrivateChannel.Id,
|
||||||
model.PERMISSION_INVITE_USER.Id,
|
model.PermissionInviteUser.Id,
|
||||||
model.PERMISSION_ADD_USER_TO_TEAM.Id,
|
model.PermissionAddUserToTeam.Id,
|
||||||
},
|
},
|
||||||
"team_post_all": {
|
"team_post_all": {
|
||||||
model.PERMISSION_CREATE_POST.Id,
|
model.PermissionCreatePost.Id,
|
||||||
model.PERMISSION_USE_CHANNEL_MENTIONS.Id,
|
model.PermissionUseChannelMentions.Id,
|
||||||
},
|
},
|
||||||
"team_post_all_public": {
|
"team_post_all_public": {
|
||||||
model.PERMISSION_CREATE_POST_PUBLIC.Id,
|
model.PermissionCreatePostPublic.Id,
|
||||||
model.PERMISSION_USE_CHANNEL_MENTIONS.Id,
|
model.PermissionUseChannelMentions.Id,
|
||||||
},
|
},
|
||||||
"team_admin": {
|
"team_admin": {
|
||||||
model.PERMISSION_REMOVE_USER_FROM_TEAM.Id,
|
model.PermissionRemoveUserFromTeam.Id,
|
||||||
model.PERMISSION_MANAGE_TEAM.Id,
|
model.PermissionManageTeam.Id,
|
||||||
model.PERMISSION_IMPORT_TEAM.Id,
|
model.PermissionImportTeam.Id,
|
||||||
model.PERMISSION_MANAGE_TEAM_ROLES.Id,
|
model.PermissionManageTeamRoles.Id,
|
||||||
model.PERMISSION_MANAGE_CHANNEL_ROLES.Id,
|
model.PermissionManageChannelRoles.Id,
|
||||||
model.PERMISSION_MANAGE_OTHERS_INCOMING_WEBHOOKS.Id,
|
model.PermissionManageOthersIncomingWebhooks.Id,
|
||||||
model.PERMISSION_MANAGE_OTHERS_OUTGOING_WEBHOOKS.Id,
|
model.PermissionManageOthersOutgoingWebhooks.Id,
|
||||||
model.PERMISSION_MANAGE_SLASH_COMMANDS.Id,
|
model.PermissionManageSlashCommands.Id,
|
||||||
model.PERMISSION_MANAGE_OTHERS_SLASH_COMMANDS.Id,
|
model.PermissionManageOthersSlashCommands.Id,
|
||||||
model.PERMISSION_MANAGE_INCOMING_WEBHOOKS.Id,
|
model.PermissionManageIncomingWebhooks.Id,
|
||||||
model.PERMISSION_MANAGE_OUTGOING_WEBHOOKS.Id,
|
model.PermissionManageOutgoingWebhooks.Id,
|
||||||
model.PERMISSION_CONVERT_PUBLIC_CHANNEL_TO_PRIVATE.Id,
|
model.PermissionConvertPublicChannelToPrivate.Id,
|
||||||
model.PERMISSION_CONVERT_PRIVATE_CHANNEL_TO_PUBLIC.Id,
|
model.PermissionConvertPrivateChannelToPublic.Id,
|
||||||
model.PERMISSION_MANAGE_PUBLIC_CHANNEL_PROPERTIES.Id,
|
model.PermissionManagePublicChannelProperties.Id,
|
||||||
model.PERMISSION_MANAGE_PRIVATE_CHANNEL_PROPERTIES.Id,
|
model.PermissionManagePrivateChannelProperties.Id,
|
||||||
model.PERMISSION_DELETE_POST.Id,
|
model.PermissionDeletePost.Id,
|
||||||
model.PERMISSION_DELETE_OTHERS_POSTS.Id,
|
model.PermissionDeleteOthersPosts.Id,
|
||||||
},
|
},
|
||||||
"system_user": {
|
"system_user": {
|
||||||
model.PERMISSION_LIST_PUBLIC_TEAMS.Id,
|
model.PermissionListPublicTeams.Id,
|
||||||
model.PERMISSION_JOIN_PUBLIC_TEAMS.Id,
|
model.PermissionJoinPublicTeams.Id,
|
||||||
model.PERMISSION_CREATE_DIRECT_CHANNEL.Id,
|
model.PermissionCreateDirectChannel.Id,
|
||||||
model.PERMISSION_CREATE_GROUP_CHANNEL.Id,
|
model.PermissionCreateGroupChannel.Id,
|
||||||
model.PERMISSION_VIEW_MEMBERS.Id,
|
model.PermissionViewMembers.Id,
|
||||||
model.PERMISSION_CREATE_TEAM.Id,
|
model.PermissionCreateTeam.Id,
|
||||||
},
|
},
|
||||||
"system_post_all": {
|
"system_post_all": {
|
||||||
model.PERMISSION_CREATE_POST.Id,
|
model.PermissionCreatePost.Id,
|
||||||
model.PERMISSION_USE_CHANNEL_MENTIONS.Id,
|
model.PermissionUseChannelMentions.Id,
|
||||||
},
|
},
|
||||||
"system_post_all_public": {
|
"system_post_all_public": {
|
||||||
model.PERMISSION_CREATE_POST_PUBLIC.Id,
|
model.PermissionCreatePostPublic.Id,
|
||||||
model.PERMISSION_USE_CHANNEL_MENTIONS.Id,
|
model.PermissionUseChannelMentions.Id,
|
||||||
},
|
},
|
||||||
"system_user_access_token": {
|
"system_user_access_token": {
|
||||||
model.PERMISSION_CREATE_USER_ACCESS_TOKEN.Id,
|
model.PermissionCreateUserAccessToken.Id,
|
||||||
model.PERMISSION_READ_USER_ACCESS_TOKEN.Id,
|
model.PermissionReadUserAccessToken.Id,
|
||||||
model.PERMISSION_REVOKE_USER_ACCESS_TOKEN.Id,
|
model.PermissionRevokeUserAccessToken.Id,
|
||||||
},
|
},
|
||||||
"system_admin": allPermissionIDs,
|
"system_admin": allPermissionIDs,
|
||||||
}
|
}
|
||||||
@@ -384,7 +384,7 @@ func TestDoEmojisPermissionsMigration(t *testing.T) {
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) {
|
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||||
*cfg.ServiceSettings.DEPRECATED_DO_NOT_USE_RestrictCustomEmojiCreation = model.RESTRICT_EMOJI_CREATION_SYSTEM_ADMIN
|
*cfg.ServiceSettings.DEPRECATED_DO_NOT_USE_RestrictCustomEmojiCreation = model.RestrictEmojiCreationSystemAdmin
|
||||||
})
|
})
|
||||||
|
|
||||||
th.ResetEmojisMigration()
|
th.ResetEmojisMigration()
|
||||||
@@ -393,84 +393,84 @@ func TestDoEmojisPermissionsMigration(t *testing.T) {
|
|||||||
expectedSystemAdmin := allPermissionIDs
|
expectedSystemAdmin := allPermissionIDs
|
||||||
sort.Strings(expectedSystemAdmin)
|
sort.Strings(expectedSystemAdmin)
|
||||||
|
|
||||||
role1, err1 := th.App.GetRoleByName(context.Background(), model.SYSTEM_ADMIN_ROLE_ID)
|
role1, err1 := th.App.GetRoleByName(context.Background(), model.SystemAdminRoleId)
|
||||||
assert.Nil(t, err1)
|
assert.Nil(t, err1)
|
||||||
sort.Strings(role1.Permissions)
|
sort.Strings(role1.Permissions)
|
||||||
assert.Equal(t, expectedSystemAdmin, role1.Permissions, fmt.Sprintf("'%v' did not have expected permissions", model.SYSTEM_ADMIN_ROLE_ID))
|
assert.Equal(t, expectedSystemAdmin, role1.Permissions, fmt.Sprintf("'%v' did not have expected permissions", model.SystemAdminRoleId))
|
||||||
|
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) {
|
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||||
*cfg.ServiceSettings.DEPRECATED_DO_NOT_USE_RestrictCustomEmojiCreation = model.RESTRICT_EMOJI_CREATION_ADMIN
|
*cfg.ServiceSettings.DEPRECATED_DO_NOT_USE_RestrictCustomEmojiCreation = model.RestrictEmojiCreationAdmin
|
||||||
})
|
})
|
||||||
|
|
||||||
th.ResetEmojisMigration()
|
th.ResetEmojisMigration()
|
||||||
th.App.DoEmojisPermissionsMigration()
|
th.App.DoEmojisPermissionsMigration()
|
||||||
|
|
||||||
role2, err2 := th.App.GetRoleByName(context.Background(), model.TEAM_ADMIN_ROLE_ID)
|
role2, err2 := th.App.GetRoleByName(context.Background(), model.TeamAdminRoleId)
|
||||||
assert.Nil(t, err2)
|
assert.Nil(t, err2)
|
||||||
expected2 := []string{
|
expected2 := []string{
|
||||||
model.PERMISSION_REMOVE_USER_FROM_TEAM.Id,
|
model.PermissionRemoveUserFromTeam.Id,
|
||||||
model.PERMISSION_MANAGE_TEAM.Id,
|
model.PermissionManageTeam.Id,
|
||||||
model.PERMISSION_IMPORT_TEAM.Id,
|
model.PermissionImportTeam.Id,
|
||||||
model.PERMISSION_MANAGE_TEAM_ROLES.Id,
|
model.PermissionManageTeamRoles.Id,
|
||||||
model.PERMISSION_READ_PUBLIC_CHANNEL_GROUPS.Id,
|
model.PermissionReadPublicChannelGroups.Id,
|
||||||
model.PERMISSION_READ_PRIVATE_CHANNEL_GROUPS.Id,
|
model.PermissionReadPrivateChannelGroups.Id,
|
||||||
model.PERMISSION_MANAGE_CHANNEL_ROLES.Id,
|
model.PermissionManageChannelRoles.Id,
|
||||||
model.PERMISSION_MANAGE_OTHERS_INCOMING_WEBHOOKS.Id,
|
model.PermissionManageOthersIncomingWebhooks.Id,
|
||||||
model.PERMISSION_MANAGE_OTHERS_OUTGOING_WEBHOOKS.Id,
|
model.PermissionManageOthersOutgoingWebhooks.Id,
|
||||||
model.PERMISSION_MANAGE_SLASH_COMMANDS.Id,
|
model.PermissionManageSlashCommands.Id,
|
||||||
model.PERMISSION_MANAGE_OTHERS_SLASH_COMMANDS.Id,
|
model.PermissionManageOthersSlashCommands.Id,
|
||||||
model.PERMISSION_MANAGE_INCOMING_WEBHOOKS.Id,
|
model.PermissionManageIncomingWebhooks.Id,
|
||||||
model.PERMISSION_MANAGE_OUTGOING_WEBHOOKS.Id,
|
model.PermissionManageOutgoingWebhooks.Id,
|
||||||
model.PERMISSION_DELETE_POST.Id,
|
model.PermissionDeletePost.Id,
|
||||||
model.PERMISSION_DELETE_OTHERS_POSTS.Id,
|
model.PermissionDeleteOthersPosts.Id,
|
||||||
model.PERMISSION_CREATE_EMOJIS.Id,
|
model.PermissionCreateEmojis.Id,
|
||||||
model.PERMISSION_DELETE_EMOJIS.Id,
|
model.PermissionDeleteEmojis.Id,
|
||||||
model.PERMISSION_ADD_REACTION.Id,
|
model.PermissionAddReaction.Id,
|
||||||
model.PERMISSION_CREATE_POST.Id,
|
model.PermissionCreatePost.Id,
|
||||||
model.PERMISSION_MANAGE_PUBLIC_CHANNEL_MEMBERS.Id,
|
model.PermissionManagePublicChannelMembers.Id,
|
||||||
model.PERMISSION_MANAGE_PRIVATE_CHANNEL_MEMBERS.Id,
|
model.PermissionManagePrivateChannelMembers.Id,
|
||||||
model.PERMISSION_REMOVE_REACTION.Id,
|
model.PermissionRemoveReaction.Id,
|
||||||
model.PERMISSION_USE_CHANNEL_MENTIONS.Id,
|
model.PermissionUseChannelMentions.Id,
|
||||||
model.PERMISSION_USE_GROUP_MENTIONS.Id,
|
model.PermissionUseGroupMentions.Id,
|
||||||
model.PERMISSION_CONVERT_PUBLIC_CHANNEL_TO_PRIVATE.Id,
|
model.PermissionConvertPublicChannelToPrivate.Id,
|
||||||
model.PERMISSION_CONVERT_PRIVATE_CHANNEL_TO_PUBLIC.Id,
|
model.PermissionConvertPrivateChannelToPublic.Id,
|
||||||
}
|
}
|
||||||
sort.Strings(expected2)
|
sort.Strings(expected2)
|
||||||
sort.Strings(role2.Permissions)
|
sort.Strings(role2.Permissions)
|
||||||
assert.Equal(t, expected2, role2.Permissions, fmt.Sprintf("'%v' did not have expected permissions", model.TEAM_ADMIN_ROLE_ID))
|
assert.Equal(t, expected2, role2.Permissions, fmt.Sprintf("'%v' did not have expected permissions", model.TeamAdminRoleId))
|
||||||
|
|
||||||
systemAdmin1, systemAdminErr1 := th.App.GetRoleByName(context.Background(), model.SYSTEM_ADMIN_ROLE_ID)
|
systemAdmin1, systemAdminErr1 := th.App.GetRoleByName(context.Background(), model.SystemAdminRoleId)
|
||||||
assert.Nil(t, systemAdminErr1)
|
assert.Nil(t, systemAdminErr1)
|
||||||
sort.Strings(systemAdmin1.Permissions)
|
sort.Strings(systemAdmin1.Permissions)
|
||||||
assert.Equal(t, expectedSystemAdmin, systemAdmin1.Permissions, fmt.Sprintf("'%v' did not have expected permissions", model.SYSTEM_ADMIN_ROLE_ID))
|
assert.Equal(t, expectedSystemAdmin, systemAdmin1.Permissions, fmt.Sprintf("'%v' did not have expected permissions", model.SystemAdminRoleId))
|
||||||
|
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) {
|
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||||
*cfg.ServiceSettings.DEPRECATED_DO_NOT_USE_RestrictCustomEmojiCreation = model.RESTRICT_EMOJI_CREATION_ALL
|
*cfg.ServiceSettings.DEPRECATED_DO_NOT_USE_RestrictCustomEmojiCreation = model.RestrictEmojiCreationAll
|
||||||
})
|
})
|
||||||
|
|
||||||
th.ResetEmojisMigration()
|
th.ResetEmojisMigration()
|
||||||
th.App.DoEmojisPermissionsMigration()
|
th.App.DoEmojisPermissionsMigration()
|
||||||
|
|
||||||
role3, err3 := th.App.GetRoleByName(context.Background(), model.SYSTEM_USER_ROLE_ID)
|
role3, err3 := th.App.GetRoleByName(context.Background(), model.SystemUserRoleId)
|
||||||
assert.Nil(t, err3)
|
assert.Nil(t, err3)
|
||||||
expected3 := []string{
|
expected3 := []string{
|
||||||
model.PERMISSION_LIST_PUBLIC_TEAMS.Id,
|
model.PermissionListPublicTeams.Id,
|
||||||
model.PERMISSION_JOIN_PUBLIC_TEAMS.Id,
|
model.PermissionJoinPublicTeams.Id,
|
||||||
model.PERMISSION_CREATE_DIRECT_CHANNEL.Id,
|
model.PermissionCreateDirectChannel.Id,
|
||||||
model.PERMISSION_CREATE_GROUP_CHANNEL.Id,
|
model.PermissionCreateGroupChannel.Id,
|
||||||
model.PERMISSION_CREATE_TEAM.Id,
|
model.PermissionCreateTeam.Id,
|
||||||
model.PERMISSION_CREATE_EMOJIS.Id,
|
model.PermissionCreateEmojis.Id,
|
||||||
model.PERMISSION_DELETE_EMOJIS.Id,
|
model.PermissionDeleteEmojis.Id,
|
||||||
model.PERMISSION_VIEW_MEMBERS.Id,
|
model.PermissionViewMembers.Id,
|
||||||
}
|
}
|
||||||
sort.Strings(expected3)
|
sort.Strings(expected3)
|
||||||
sort.Strings(role3.Permissions)
|
sort.Strings(role3.Permissions)
|
||||||
assert.Equal(t, expected3, role3.Permissions, fmt.Sprintf("'%v' did not have expected permissions", model.SYSTEM_USER_ROLE_ID))
|
assert.Equal(t, expected3, role3.Permissions, fmt.Sprintf("'%v' did not have expected permissions", model.SystemUserRoleId))
|
||||||
|
|
||||||
systemAdmin2, systemAdminErr2 := th.App.GetRoleByName(context.Background(), model.SYSTEM_ADMIN_ROLE_ID)
|
systemAdmin2, systemAdminErr2 := th.App.GetRoleByName(context.Background(), model.SystemAdminRoleId)
|
||||||
assert.Nil(t, systemAdminErr2)
|
assert.Nil(t, systemAdminErr2)
|
||||||
sort.Strings(systemAdmin2.Permissions)
|
sort.Strings(systemAdmin2.Permissions)
|
||||||
assert.Equal(t, expectedSystemAdmin, systemAdmin2.Permissions, fmt.Sprintf("'%v' did not have expected permissions", model.SYSTEM_ADMIN_ROLE_ID))
|
assert.Equal(t, expectedSystemAdmin, systemAdmin2.Permissions, fmt.Sprintf("'%v' did not have expected permissions", model.SystemAdminRoleId))
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestDBHealthCheckWriteAndDelete(t *testing.T) {
|
func TestDBHealthCheckWriteAndDelete(t *testing.T) {
|
||||||
|
|||||||
@@ -249,7 +249,7 @@ func (a *App) authenticateUser(c *request.Context, user *model.User, password, m
|
|||||||
license := a.Srv().License()
|
license := a.Srv().License()
|
||||||
ldapAvailable := *a.Config().LdapSettings.Enable && a.Ldap() != nil && license != nil && *license.Features.LDAP
|
ldapAvailable := *a.Config().LdapSettings.Enable && a.Ldap() != nil && license != nil && *license.Features.LDAP
|
||||||
|
|
||||||
if user.AuthService == model.USER_AUTH_SERVICE_LDAP {
|
if user.AuthService == model.UserAuthServiceLdap {
|
||||||
if !ldapAvailable {
|
if !ldapAvailable {
|
||||||
err := model.NewAppError("login", "api.user.login_ldap.not_available.app_error", nil, "", http.StatusNotImplemented)
|
err := model.NewAppError("login", "api.user.login_ldap.not_available.app_error", nil, "", http.StatusNotImplemented)
|
||||||
return user, err
|
return user, err
|
||||||
@@ -267,7 +267,7 @@ func (a *App) authenticateUser(c *request.Context, user *model.User, password, m
|
|||||||
|
|
||||||
if user.AuthService != "" {
|
if user.AuthService != "" {
|
||||||
authService := user.AuthService
|
authService := user.AuthService
|
||||||
if authService == model.USER_AUTH_SERVICE_SAML {
|
if authService == model.UserAuthServiceSaml {
|
||||||
authService = strings.ToUpper(authService)
|
authService = strings.ToUpper(authService)
|
||||||
}
|
}
|
||||||
err := model.NewAppError("login", "api.user.login.use_auth_service.app_error", map[string]interface{}{"AuthService": authService}, "", http.StatusBadRequest)
|
err := model.NewAppError("login", "api.user.login.use_auth_service.app_error", map[string]interface{}{"AuthService": authService}, "", http.StatusBadRequest)
|
||||||
@@ -283,20 +283,20 @@ func (a *App) authenticateUser(c *request.Context, user *model.User, password, m
|
|||||||
}
|
}
|
||||||
|
|
||||||
func ParseAuthTokenFromRequest(r *http.Request) (string, TokenLocation) {
|
func ParseAuthTokenFromRequest(r *http.Request) (string, TokenLocation) {
|
||||||
authHeader := r.Header.Get(model.HEADER_AUTH)
|
authHeader := r.Header.Get(model.HeaderAuth)
|
||||||
|
|
||||||
// Attempt to parse the token from the cookie
|
// Attempt to parse the token from the cookie
|
||||||
if cookie, err := r.Cookie(model.SESSION_COOKIE_TOKEN); err == nil {
|
if cookie, err := r.Cookie(model.SessionCookieToken); err == nil {
|
||||||
return cookie.Value, TokenLocationCookie
|
return cookie.Value, TokenLocationCookie
|
||||||
}
|
}
|
||||||
|
|
||||||
// Parse the token from the header
|
// Parse the token from the header
|
||||||
if len(authHeader) > 6 && strings.ToUpper(authHeader[0:6]) == model.HEADER_BEARER {
|
if len(authHeader) > 6 && strings.ToUpper(authHeader[0:6]) == model.HeaderBearer {
|
||||||
// Default session token
|
// Default session token
|
||||||
return authHeader[7:], TokenLocationHeader
|
return authHeader[7:], TokenLocationHeader
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(authHeader) > 5 && strings.ToLower(authHeader[0:5]) == model.HEADER_TOKEN {
|
if len(authHeader) > 5 && strings.ToLower(authHeader[0:5]) == model.HeaderToken {
|
||||||
// OAuth token
|
// OAuth token
|
||||||
return authHeader[6:], TokenLocationHeader
|
return authHeader[6:], TokenLocationHeader
|
||||||
}
|
}
|
||||||
@@ -306,11 +306,11 @@ func ParseAuthTokenFromRequest(r *http.Request) (string, TokenLocation) {
|
|||||||
return token, TokenLocationQueryString
|
return token, TokenLocationQueryString
|
||||||
}
|
}
|
||||||
|
|
||||||
if token := r.Header.Get(model.HEADER_CLOUD_TOKEN); token != "" {
|
if token := r.Header.Get(model.HeaderCloudToken); token != "" {
|
||||||
return token, TokenLocationCloudHeader
|
return token, TokenLocationCloudHeader
|
||||||
}
|
}
|
||||||
|
|
||||||
if token := r.Header.Get(model.HEADER_REMOTECLUSTER_TOKEN); token != "" {
|
if token := r.Header.Get(model.HeaderRemoteclusterToken); token != "" {
|
||||||
return token, TokenLocationRemoteClusterHeader
|
return token, TokenLocationRemoteClusterHeader
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -38,12 +38,12 @@ func TestParseAuthTokenFromRequest(t *testing.T) {
|
|||||||
req := httptest.NewRequest("GET", pathname, nil)
|
req := httptest.NewRequest("GET", pathname, nil)
|
||||||
switch tc.expectedLocation {
|
switch tc.expectedLocation {
|
||||||
case TokenLocationHeader:
|
case TokenLocationHeader:
|
||||||
req.Header.Add(model.HEADER_AUTH, tc.header)
|
req.Header.Add(model.HeaderAuth, tc.header)
|
||||||
case TokenLocationCloudHeader:
|
case TokenLocationCloudHeader:
|
||||||
req.Header.Add(model.HEADER_CLOUD_TOKEN, tc.header)
|
req.Header.Add(model.HeaderCloudToken, tc.header)
|
||||||
case TokenLocationCookie:
|
case TokenLocationCookie:
|
||||||
req.AddCookie(&http.Cookie{
|
req.AddCookie(&http.Cookie{
|
||||||
Name: model.SESSION_COOKIE_TOKEN,
|
Name: model.SessionCookieToken,
|
||||||
Value: tc.cookie,
|
Value: tc.cookie,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ func (a *App) SessionHasPermissionToChannelByPost(session model.Session, postID
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) SessionHasPermissionToCategory(session model.Session, userID, teamID, categoryId string) bool {
|
func (a *App) SessionHasPermissionToCategory(session model.Session, userID, teamID, categoryId string) bool {
|
||||||
if a.SessionHasPermissionTo(session, model.PERMISSION_EDIT_OTHER_USERS) {
|
if a.SessionHasPermissionTo(session, model.PermissionEditOtherUsers) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
category, err := a.GetSidebarCategory(categoryId)
|
category, err := a.GetSidebarCategory(categoryId)
|
||||||
@@ -125,7 +125,7 @@ func (a *App) SessionHasPermissionToUser(session model.Session, userID string) b
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
if a.SessionHasPermissionTo(session, model.PERMISSION_EDIT_OTHER_USERS) {
|
if a.SessionHasPermissionTo(session, model.PermissionEditOtherUsers) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -212,7 +212,7 @@ func (a *App) HasPermissionToUser(askingUserId string, userID string) bool {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
if a.HasPermissionTo(askingUserId, model.PERMISSION_EDIT_OTHER_USERS) {
|
if a.HasPermissionTo(askingUserId, model.PermissionEditOtherUsers) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -257,22 +257,22 @@ func (a *App) SessionHasPermissionToManageBot(session model.Session, botUserId s
|
|||||||
}
|
}
|
||||||
|
|
||||||
if existingBot.OwnerId == session.UserId {
|
if existingBot.OwnerId == session.UserId {
|
||||||
if !a.SessionHasPermissionTo(session, model.PERMISSION_MANAGE_BOTS) {
|
if !a.SessionHasPermissionTo(session, model.PermissionManageBots) {
|
||||||
if !a.SessionHasPermissionTo(session, model.PERMISSION_READ_BOTS) {
|
if !a.SessionHasPermissionTo(session, model.PermissionReadBots) {
|
||||||
// If the user doesn't have permission to read bots, pretend as if
|
// If the user doesn't have permission to read bots, pretend as if
|
||||||
// the bot doesn't exist at all.
|
// the bot doesn't exist at all.
|
||||||
return model.MakeBotNotFoundError(botUserId)
|
return model.MakeBotNotFoundError(botUserId)
|
||||||
}
|
}
|
||||||
return a.MakePermissionError(&session, []*model.Permission{model.PERMISSION_MANAGE_BOTS})
|
return a.MakePermissionError(&session, []*model.Permission{model.PermissionManageBots})
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if !a.SessionHasPermissionTo(session, model.PERMISSION_MANAGE_OTHERS_BOTS) {
|
if !a.SessionHasPermissionTo(session, model.PermissionManageOthersBots) {
|
||||||
if !a.SessionHasPermissionTo(session, model.PERMISSION_READ_OTHERS_BOTS) {
|
if !a.SessionHasPermissionTo(session, model.PermissionReadOthersBots) {
|
||||||
// If the user doesn't have permission to read others' bots,
|
// If the user doesn't have permission to read others' bots,
|
||||||
// pretend as if the bot doesn't exist at all.
|
// pretend as if the bot doesn't exist at all.
|
||||||
return model.MakeBotNotFoundError(botUserId)
|
return model.MakeBotNotFoundError(botUserId)
|
||||||
}
|
}
|
||||||
return a.MakePermissionError(&session, []*model.Permission{model.PERMISSION_MANAGE_OTHERS_BOTS})
|
return a.MakePermissionError(&session, []*model.Permission{model.PermissionManageOthersBots})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -24,14 +24,14 @@ func TestCheckIfRolesGrantPermission(t *testing.T) {
|
|||||||
permissionId string
|
permissionId string
|
||||||
shouldGrant bool
|
shouldGrant bool
|
||||||
}{
|
}{
|
||||||
{[]string{model.SYSTEM_ADMIN_ROLE_ID}, model.PERMISSION_MANAGE_SYSTEM.Id, true},
|
{[]string{model.SystemAdminRoleId}, model.PermissionManageSystem.Id, true},
|
||||||
{[]string{model.SYSTEM_ADMIN_ROLE_ID}, "non-existent-permission", false},
|
{[]string{model.SystemAdminRoleId}, "non-existent-permission", false},
|
||||||
{[]string{model.CHANNEL_USER_ROLE_ID}, model.PERMISSION_READ_CHANNEL.Id, true},
|
{[]string{model.ChannelUserRoleId}, model.PermissionReadChannel.Id, true},
|
||||||
{[]string{model.CHANNEL_USER_ROLE_ID}, model.PERMISSION_MANAGE_SYSTEM.Id, false},
|
{[]string{model.ChannelUserRoleId}, model.PermissionManageSystem.Id, false},
|
||||||
{[]string{model.SYSTEM_ADMIN_ROLE_ID, model.CHANNEL_USER_ROLE_ID}, model.PERMISSION_MANAGE_SYSTEM.Id, true},
|
{[]string{model.SystemAdminRoleId, model.ChannelUserRoleId}, model.PermissionManageSystem.Id, true},
|
||||||
{[]string{model.CHANNEL_USER_ROLE_ID, model.SYSTEM_ADMIN_ROLE_ID}, model.PERMISSION_MANAGE_SYSTEM.Id, true},
|
{[]string{model.ChannelUserRoleId, model.SystemAdminRoleId}, model.PermissionManageSystem.Id, true},
|
||||||
{[]string{model.TEAM_USER_ROLE_ID, model.TEAM_ADMIN_ROLE_ID}, model.PERMISSION_MANAGE_SLASH_COMMANDS.Id, true},
|
{[]string{model.TeamUserRoleId, model.TeamAdminRoleId}, model.PermissionManageSlashCommands.Id, true},
|
||||||
{[]string{model.TEAM_ADMIN_ROLE_ID, model.TEAM_USER_ROLE_ID}, model.PERMISSION_MANAGE_SLASH_COMMANDS.Id, true},
|
{[]string{model.TeamAdminRoleId, model.TeamUserRoleId}, model.PermissionManageSlashCommands.Id, true},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, testcase := range cases {
|
for _, testcase := range cases {
|
||||||
@@ -50,17 +50,17 @@ func TestHasPermissionToTeam(t *testing.T) {
|
|||||||
th := Setup(t).InitBasic()
|
th := Setup(t).InitBasic()
|
||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
|
|
||||||
assert.True(t, th.App.HasPermissionToTeam(th.BasicUser.Id, th.BasicTeam.Id, model.PERMISSION_LIST_TEAM_CHANNELS))
|
assert.True(t, th.App.HasPermissionToTeam(th.BasicUser.Id, th.BasicTeam.Id, model.PermissionListTeamChannels))
|
||||||
th.RemoveUserFromTeam(th.BasicUser, th.BasicTeam)
|
th.RemoveUserFromTeam(th.BasicUser, th.BasicTeam)
|
||||||
assert.False(t, th.App.HasPermissionToTeam(th.BasicUser.Id, th.BasicTeam.Id, model.PERMISSION_LIST_TEAM_CHANNELS))
|
assert.False(t, th.App.HasPermissionToTeam(th.BasicUser.Id, th.BasicTeam.Id, model.PermissionListTeamChannels))
|
||||||
|
|
||||||
assert.True(t, th.App.HasPermissionToTeam(th.SystemAdminUser.Id, th.BasicTeam.Id, model.PERMISSION_LIST_TEAM_CHANNELS))
|
assert.True(t, th.App.HasPermissionToTeam(th.SystemAdminUser.Id, th.BasicTeam.Id, model.PermissionListTeamChannels))
|
||||||
th.LinkUserToTeam(th.SystemAdminUser, th.BasicTeam)
|
th.LinkUserToTeam(th.SystemAdminUser, th.BasicTeam)
|
||||||
assert.True(t, th.App.HasPermissionToTeam(th.SystemAdminUser.Id, th.BasicTeam.Id, model.PERMISSION_LIST_TEAM_CHANNELS))
|
assert.True(t, th.App.HasPermissionToTeam(th.SystemAdminUser.Id, th.BasicTeam.Id, model.PermissionListTeamChannels))
|
||||||
th.RemovePermissionFromRole(model.PERMISSION_LIST_TEAM_CHANNELS.Id, model.TEAM_USER_ROLE_ID)
|
th.RemovePermissionFromRole(model.PermissionListTeamChannels.Id, model.TeamUserRoleId)
|
||||||
assert.True(t, th.App.HasPermissionToTeam(th.SystemAdminUser.Id, th.BasicTeam.Id, model.PERMISSION_LIST_TEAM_CHANNELS))
|
assert.True(t, th.App.HasPermissionToTeam(th.SystemAdminUser.Id, th.BasicTeam.Id, model.PermissionListTeamChannels))
|
||||||
th.RemoveUserFromTeam(th.SystemAdminUser, th.BasicTeam)
|
th.RemoveUserFromTeam(th.SystemAdminUser, th.BasicTeam)
|
||||||
assert.True(t, th.App.HasPermissionToTeam(th.SystemAdminUser.Id, th.BasicTeam.Id, model.PERMISSION_LIST_TEAM_CHANNELS))
|
assert.True(t, th.App.HasPermissionToTeam(th.SystemAdminUser.Id, th.BasicTeam.Id, model.PermissionListTeamChannels))
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSessionHasPermissionToChannel(t *testing.T) {
|
func TestSessionHasPermissionToChannel(t *testing.T) {
|
||||||
@@ -72,7 +72,7 @@ func TestSessionHasPermissionToChannel(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
t.Run("basic user can access basic channel", func(t *testing.T) {
|
t.Run("basic user can access basic channel", func(t *testing.T) {
|
||||||
assert.True(t, th.App.SessionHasPermissionToChannel(session, th.BasicChannel.Id, model.PERMISSION_ADD_REACTION))
|
assert.True(t, th.App.SessionHasPermissionToChannel(session, th.BasicChannel.Id, model.PermissionAddReaction))
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("does not panic if fetching channel causes an error", func(t *testing.T) {
|
t.Run("does not panic if fetching channel causes an error", func(t *testing.T) {
|
||||||
@@ -97,7 +97,7 @@ func TestSessionHasPermissionToChannel(t *testing.T) {
|
|||||||
|
|
||||||
// If there's an error returned from the GetChannel call the code should continue to cascade and since there
|
// If there's an error returned from the GetChannel call the code should continue to cascade and since there
|
||||||
// are no session level permissions in this test case, the permission should be denied.
|
// are no session level permissions in this test case, the permission should be denied.
|
||||||
assert.False(t, th.App.SessionHasPermissionToChannel(session, th.BasicUser.Id, model.PERMISSION_ADD_REACTION))
|
assert.False(t, th.App.SessionHasPermissionToChannel(session, th.BasicUser.Id, model.PermissionAddReaction))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ func (a *App) checkIfRespondedToday(createdAt int64, channelId, userId string) (
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) SendAutoResponseIfNecessary(c *request.Context, channel *model.Channel, sender *model.User, post *model.Post) (bool, *model.AppError) {
|
func (a *App) SendAutoResponseIfNecessary(c *request.Context, channel *model.Channel, sender *model.User, post *model.Post) (bool, *model.AppError) {
|
||||||
if channel.Type != model.CHANNEL_DIRECT {
|
if channel.Type != model.ChannelTypeDirect {
|
||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -57,8 +57,8 @@ func (a *App) SendAutoResponse(c *request.Context, channel *model.Channel, recei
|
|||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
active := receiver.NotifyProps[model.AUTO_RESPONDER_ACTIVE_NOTIFY_PROP] == "true"
|
active := receiver.NotifyProps[model.AutoResponderActiveNotifyProp] == "true"
|
||||||
message := receiver.NotifyProps[model.AUTO_RESPONDER_MESSAGE_NOTIFY_PROP]
|
message := receiver.NotifyProps[model.AutoResponderMessageNotifyProp]
|
||||||
|
|
||||||
if !active || message == "" {
|
if !active || message == "" {
|
||||||
return false, nil
|
return false, nil
|
||||||
@@ -73,7 +73,7 @@ func (a *App) SendAutoResponse(c *request.Context, channel *model.Channel, recei
|
|||||||
ChannelId: channel.Id,
|
ChannelId: channel.Id,
|
||||||
Message: message,
|
Message: message,
|
||||||
RootId: rootID,
|
RootId: rootID,
|
||||||
Type: model.POST_AUTO_RESPONDER,
|
Type: model.PostTypeAutoResponder,
|
||||||
UserId: receiver.Id,
|
UserId: receiver.Id,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -85,8 +85,8 @@ func (a *App) SendAutoResponse(c *request.Context, channel *model.Channel, recei
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) SetAutoResponderStatus(user *model.User, oldNotifyProps model.StringMap) {
|
func (a *App) SetAutoResponderStatus(user *model.User, oldNotifyProps model.StringMap) {
|
||||||
active := user.NotifyProps[model.AUTO_RESPONDER_ACTIVE_NOTIFY_PROP] == "true"
|
active := user.NotifyProps[model.AutoResponderActiveNotifyProp] == "true"
|
||||||
oldActive := oldNotifyProps[model.AUTO_RESPONDER_ACTIVE_NOTIFY_PROP] == "true"
|
oldActive := oldNotifyProps[model.AutoResponderActiveNotifyProp] == "true"
|
||||||
|
|
||||||
autoResponderEnabled := !oldActive && active
|
autoResponderEnabled := !oldActive && active
|
||||||
autoResponderDisabled := oldActive && !active
|
autoResponderDisabled := oldActive && !active
|
||||||
@@ -104,12 +104,12 @@ func (a *App) DisableAutoResponder(userID string, asAdmin bool) *model.AppError
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
active := user.NotifyProps[model.AUTO_RESPONDER_ACTIVE_NOTIFY_PROP] == "true"
|
active := user.NotifyProps[model.AutoResponderActiveNotifyProp] == "true"
|
||||||
|
|
||||||
if active {
|
if active {
|
||||||
patch := &model.UserPatch{}
|
patch := &model.UserPatch{}
|
||||||
patch.NotifyProps = user.NotifyProps
|
patch.NotifyProps = user.NotifyProps
|
||||||
patch.NotifyProps[model.AUTO_RESPONDER_ACTIVE_NOTIFY_PROP] = "false"
|
patch.NotifyProps[model.AutoResponderActiveNotifyProp] = "false"
|
||||||
|
|
||||||
_, err := a.PatchUser(userID, patch, asAdmin)
|
_, err := a.PatchUser(userID, patch, asAdmin)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ func TestSetAutoResponderStatus(t *testing.T) {
|
|||||||
|
|
||||||
status, err := th.App.GetStatus(userUpdated1.Id)
|
status, err := th.App.GetStatus(userUpdated1.Id)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
assert.Equal(t, model.STATUS_OUT_OF_OFFICE, status.Status)
|
assert.Equal(t, model.StatusOutOfOffice, status.Status)
|
||||||
|
|
||||||
patch2 := &model.UserPatch{}
|
patch2 := &model.UserPatch{}
|
||||||
patch2.NotifyProps = make(map[string]string)
|
patch2.NotifyProps = make(map[string]string)
|
||||||
@@ -47,7 +47,7 @@ func TestSetAutoResponderStatus(t *testing.T) {
|
|||||||
|
|
||||||
status, err = th.App.GetStatus(userUpdated2.Id)
|
status, err = th.App.GetStatus(userUpdated2.Id)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
assert.Equal(t, model.STATUS_ONLINE, status.Status)
|
assert.Equal(t, model.StatusOnline, status.Status)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -268,7 +268,7 @@ func TestSendAutoResponseSuccess(t *testing.T) {
|
|||||||
|
|
||||||
autoResponderPostFound := false
|
autoResponderPostFound := false
|
||||||
for _, post := range list.Posts {
|
for _, post := range list.Posts {
|
||||||
if post.Type == model.POST_AUTO_RESPONDER {
|
if post.Type == model.PostTypeAutoResponder {
|
||||||
autoResponderPostFound = true
|
autoResponderPostFound = true
|
||||||
assert.Equal(t, savedPost.Id, post.RootId)
|
assert.Equal(t, savedPost.Id, post.RootId)
|
||||||
assert.Equal(t, savedPost.Id, post.ParentId)
|
assert.Equal(t, savedPost.Id, post.ParentId)
|
||||||
@@ -318,7 +318,7 @@ func TestSendAutoResponseSuccessOnThread(t *testing.T) {
|
|||||||
|
|
||||||
autoResponderPostFound := false
|
autoResponderPostFound := false
|
||||||
for _, post := range list.Posts {
|
for _, post := range list.Posts {
|
||||||
if post.Type == model.POST_AUTO_RESPONDER {
|
if post.Type == model.PostTypeAutoResponder {
|
||||||
autoResponderPostFound = true
|
autoResponderPostFound = true
|
||||||
assert.Equal(t, savedPost.RootId, post.RootId)
|
assert.Equal(t, savedPost.RootId, post.RootId)
|
||||||
assert.Equal(t, savedPost.ParentId, post.ParentId)
|
assert.Equal(t, savedPost.ParentId, post.ParentId)
|
||||||
@@ -359,7 +359,7 @@ func TestSendAutoResponseFailure(t *testing.T) {
|
|||||||
} else {
|
} else {
|
||||||
autoResponderPostFound := false
|
autoResponderPostFound := false
|
||||||
for _, post := range list.Posts {
|
for _, post := range list.Posts {
|
||||||
if post.Type == model.POST_AUTO_RESPONDER {
|
if post.Type == model.PostTypeAutoResponder {
|
||||||
autoResponderPostFound = true
|
autoResponderPostFound = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
14
app/bot.go
14
app/bot.go
@@ -76,7 +76,7 @@ func (a *App) CreateBot(c *request.Context, bot *model.Bot) (*model.Bot, *model.
|
|||||||
|
|
||||||
T := i18n.GetUserTranslations(ownerUser.Locale)
|
T := i18n.GetUserTranslations(ownerUser.Locale)
|
||||||
botAddPost := &model.Post{
|
botAddPost := &model.Post{
|
||||||
Type: model.POST_ADD_BOT_TEAMS_CHANNELS,
|
Type: model.PostTypeAddBotTeamsChannels,
|
||||||
UserId: savedBot.UserId,
|
UserId: savedBot.UserId,
|
||||||
ChannelId: channel.Id,
|
ChannelId: channel.Id,
|
||||||
Message: T("api.bot.teams_channels.add_message_mobile"),
|
Message: T("api.bot.teams_channels.add_message_mobile"),
|
||||||
@@ -96,7 +96,7 @@ func (a *App) GetWarnMetricsBot() (*model.Bot, *model.AppError) {
|
|||||||
userOptions := &model.UserGetOptions{
|
userOptions := &model.UserGetOptions{
|
||||||
Page: 0,
|
Page: 0,
|
||||||
PerPage: perPage,
|
PerPage: perPage,
|
||||||
Role: model.SYSTEM_ADMIN_ROLE_ID,
|
Role: model.SystemAdminRoleId,
|
||||||
Inactive: false,
|
Inactive: false,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -111,7 +111,7 @@ func (a *App) GetWarnMetricsBot() (*model.Bot, *model.AppError) {
|
|||||||
|
|
||||||
T := i18n.GetUserTranslations(sysAdminList[0].Locale)
|
T := i18n.GetUserTranslations(sysAdminList[0].Locale)
|
||||||
warnMetricsBot := &model.Bot{
|
warnMetricsBot := &model.Bot{
|
||||||
Username: model.BOT_WARN_METRIC_BOT_USERNAME,
|
Username: model.BotWarnMetricBotUsername,
|
||||||
DisplayName: T("app.system.warn_metric.bot_displayname"),
|
DisplayName: T("app.system.warn_metric.bot_displayname"),
|
||||||
Description: "",
|
Description: "",
|
||||||
OwnerId: sysAdminList[0].Id,
|
OwnerId: sysAdminList[0].Id,
|
||||||
@@ -125,7 +125,7 @@ func (a *App) GetSystemBot() (*model.Bot, *model.AppError) {
|
|||||||
userOptions := &model.UserGetOptions{
|
userOptions := &model.UserGetOptions{
|
||||||
Page: 0,
|
Page: 0,
|
||||||
PerPage: perPage,
|
PerPage: perPage,
|
||||||
Role: model.SYSTEM_ADMIN_ROLE_ID,
|
Role: model.SystemAdminRoleId,
|
||||||
Inactive: false,
|
Inactive: false,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -140,7 +140,7 @@ func (a *App) GetSystemBot() (*model.Bot, *model.AppError) {
|
|||||||
|
|
||||||
T := i18n.GetUserTranslations(sysAdminList[0].Locale)
|
T := i18n.GetUserTranslations(sysAdminList[0].Locale)
|
||||||
systemBot := &model.Bot{
|
systemBot := &model.Bot{
|
||||||
Username: model.BOT_SYSTEM_BOT_USERNAME,
|
Username: model.BotSystemBotUsername,
|
||||||
DisplayName: T("app.system.system_bot.bot_displayname"),
|
DisplayName: T("app.system.system_bot.bot_displayname"),
|
||||||
Description: "",
|
Description: "",
|
||||||
OwnerId: sysAdminList[0].Id,
|
OwnerId: sysAdminList[0].Id,
|
||||||
@@ -478,7 +478,7 @@ func (a *App) notifySysadminsBotOwnerDeactivated(c *request.Context, userID stri
|
|||||||
userOptions := &model.UserGetOptions{
|
userOptions := &model.UserGetOptions{
|
||||||
Page: 0,
|
Page: 0,
|
||||||
PerPage: perPage,
|
PerPage: perPage,
|
||||||
Role: model.SYSTEM_ADMIN_ROLE_ID,
|
Role: model.SystemAdminRoleId,
|
||||||
Inactive: false,
|
Inactive: false,
|
||||||
}
|
}
|
||||||
// get sysadmins
|
// get sysadmins
|
||||||
@@ -515,7 +515,7 @@ func (a *App) notifySysadminsBotOwnerDeactivated(c *request.Context, userID stri
|
|||||||
UserId: sysAdmin.Id,
|
UserId: sysAdmin.Id,
|
||||||
ChannelId: channel.Id,
|
ChannelId: channel.Id,
|
||||||
Message: a.getDisableBotSysadminMessage(user, userBots),
|
Message: a.getDisableBotSysadminMessage(user, userBots),
|
||||||
Type: model.POST_SYSTEM_GENERIC,
|
Type: model.PostTypeSystemGeneric,
|
||||||
}
|
}
|
||||||
|
|
||||||
_, appErr = a.CreatePost(c, post, channel, false, true)
|
_, appErr = a.CreatePost(c, post, channel, false, true)
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ func TestCreateBot(t *testing.T) {
|
|||||||
|
|
||||||
postArray := posts.ToSlice()
|
postArray := posts.ToSlice()
|
||||||
assert.Len(t, postArray, 1)
|
assert.Len(t, postArray, 1)
|
||||||
assert.Equal(t, postArray[0].Type, model.POST_ADD_BOT_TEAMS_CHANNELS)
|
assert.Equal(t, postArray[0].Type, model.PostTypeAddBotTeamsChannels)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("create bot, username already used by a non-bot user", func(t *testing.T) {
|
t.Run("create bot, username already used by a non-bot user", func(t *testing.T) {
|
||||||
@@ -595,20 +595,20 @@ func TestNotifySysadminsBotOwnerDisabled(t *testing.T) {
|
|||||||
Nickname: "nn_sysadmin1",
|
Nickname: "nn_sysadmin1",
|
||||||
Password: "hello1",
|
Password: "hello1",
|
||||||
Username: "un_sysadmin1",
|
Username: "un_sysadmin1",
|
||||||
Roles: model.SYSTEM_ADMIN_ROLE_ID + " " + model.SYSTEM_USER_ROLE_ID}
|
Roles: model.SystemAdminRoleId + " " + model.SystemUserRoleId}
|
||||||
_, err := th.App.CreateUser(th.Context, &sysadmin1)
|
_, err := th.App.CreateUser(th.Context, &sysadmin1)
|
||||||
require.Nil(t, err, "failed to create user")
|
require.Nil(t, err, "failed to create user")
|
||||||
th.App.UpdateUserRoles(sysadmin1.Id, model.SYSTEM_USER_ROLE_ID+" "+model.SYSTEM_ADMIN_ROLE_ID, false)
|
th.App.UpdateUserRoles(sysadmin1.Id, model.SystemUserRoleId+" "+model.SystemAdminRoleId, false)
|
||||||
|
|
||||||
sysadmin2 := model.User{
|
sysadmin2 := model.User{
|
||||||
Email: "sys2@example.com",
|
Email: "sys2@example.com",
|
||||||
Nickname: "nn_sysadmin2",
|
Nickname: "nn_sysadmin2",
|
||||||
Password: "hello1",
|
Password: "hello1",
|
||||||
Username: "un_sysadmin2",
|
Username: "un_sysadmin2",
|
||||||
Roles: model.SYSTEM_ADMIN_ROLE_ID + " " + model.SYSTEM_USER_ROLE_ID}
|
Roles: model.SystemAdminRoleId + " " + model.SystemUserRoleId}
|
||||||
_, err = th.App.CreateUser(th.Context, &sysadmin2)
|
_, err = th.App.CreateUser(th.Context, &sysadmin2)
|
||||||
require.Nil(t, err, "failed to create user")
|
require.Nil(t, err, "failed to create user")
|
||||||
th.App.UpdateUserRoles(sysadmin2.Id, model.SYSTEM_USER_ROLE_ID+" "+model.SYSTEM_ADMIN_ROLE_ID, false)
|
th.App.UpdateUserRoles(sysadmin2.Id, model.SystemUserRoleId+" "+model.SystemAdminRoleId, false)
|
||||||
|
|
||||||
// create user to be disabled
|
// create user to be disabled
|
||||||
user1, err := th.App.CreateUser(th.Context, &model.User{
|
user1, err := th.App.CreateUser(th.Context, &model.User{
|
||||||
@@ -932,23 +932,23 @@ func TestGetSystemBot(t *testing.T) {
|
|||||||
|
|
||||||
t.Run("The bot should be created the first time it's retrieved", func(t *testing.T) {
|
t.Run("The bot should be created the first time it's retrieved", func(t *testing.T) {
|
||||||
// assert no bot with username exists
|
// assert no bot with username exists
|
||||||
_, err := th.App.GetUserByUsername(model.BOT_SYSTEM_BOT_USERNAME)
|
_, err := th.App.GetUserByUsername(model.BotSystemBotUsername)
|
||||||
require.NotNil(t, err)
|
require.NotNil(t, err)
|
||||||
|
|
||||||
bot, err := th.App.GetSystemBot()
|
bot, err := th.App.GetSystemBot()
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
require.Equal(t, bot.Username, model.BOT_SYSTEM_BOT_USERNAME)
|
require.Equal(t, bot.Username, model.BotSystemBotUsername)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("The bot should be correctly retrieved if it exists already", func(t *testing.T) {
|
t.Run("The bot should be correctly retrieved if it exists already", func(t *testing.T) {
|
||||||
// assert that the bot is now present
|
// assert that the bot is now present
|
||||||
botUser, err := th.App.GetUserByUsername(model.BOT_SYSTEM_BOT_USERNAME)
|
botUser, err := th.App.GetUserByUsername(model.BotSystemBotUsername)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
require.True(t, botUser.IsBot)
|
require.True(t, botUser.IsBot)
|
||||||
|
|
||||||
bot, err := th.App.GetSystemBot()
|
bot, err := th.App.GetSystemBot()
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
require.Equal(t, bot.Username, model.BOT_SYSTEM_BOT_USERNAME)
|
require.Equal(t, bot.Username, model.BotSystemBotUsername)
|
||||||
require.Equal(t, bot.UserId, botUser.Id)
|
require.Equal(t, bot.UserId, botUser.Id)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
10
app/busy.go
10
app/busy.go
@@ -55,7 +55,7 @@ func (b *Busy) Set(dur time.Duration) {
|
|||||||
b.setWithoutNotify(dur)
|
b.setWithoutNotify(dur)
|
||||||
|
|
||||||
if b.cluster != nil {
|
if b.cluster != nil {
|
||||||
sbs := &model.ServerBusyState{Busy: true, Expires: b.expires.Unix(), Expires_ts: b.expires.UTC().Format(TimestampFormat)}
|
sbs := &model.ServerBusyState{Busy: true, Expires: b.expires.Unix(), ExpiresTS: b.expires.UTC().Format(TimestampFormat)}
|
||||||
b.notifyServerBusyChange(sbs)
|
b.notifyServerBusyChange(sbs)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -80,7 +80,7 @@ func (b *Busy) Clear() {
|
|||||||
b.clearWithoutNotify()
|
b.clearWithoutNotify()
|
||||||
|
|
||||||
if b.cluster != nil {
|
if b.cluster != nil {
|
||||||
sbs := &model.ServerBusyState{Busy: false, Expires: time.Time{}.Unix(), Expires_ts: ""}
|
sbs := &model.ServerBusyState{Busy: false, Expires: time.Time{}.Unix(), ExpiresTS: ""}
|
||||||
b.notifyServerBusyChange(sbs)
|
b.notifyServerBusyChange(sbs)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -110,8 +110,8 @@ func (b *Busy) notifyServerBusyChange(sbs *model.ServerBusyState) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
msg := &model.ClusterMessage{
|
msg := &model.ClusterMessage{
|
||||||
Event: model.CLUSTER_EVENT_BUSY_STATE_CHANGED,
|
Event: model.ClusterEventBusyStateChanged,
|
||||||
SendType: model.CLUSTER_SEND_RELIABLE,
|
SendType: model.ClusterSendReliable,
|
||||||
WaitForAllToSend: true,
|
WaitForAllToSend: true,
|
||||||
Data: sbs.ToJson(),
|
Data: sbs.ToJson(),
|
||||||
}
|
}
|
||||||
@@ -141,7 +141,7 @@ func (b *Busy) ToJson() string {
|
|||||||
sbs := &model.ServerBusyState{
|
sbs := &model.ServerBusyState{
|
||||||
Busy: atomic.LoadInt32(&b.busy) != 0,
|
Busy: atomic.LoadInt32(&b.busy) != 0,
|
||||||
Expires: b.expires.Unix(),
|
Expires: b.expires.Unix(),
|
||||||
Expires_ts: b.expires.UTC().Format(TimestampFormat),
|
ExpiresTS: b.expires.UTC().Format(TimestampFormat),
|
||||||
}
|
}
|
||||||
return sbs.ToJson()
|
return sbs.ToJson()
|
||||||
}
|
}
|
||||||
|
|||||||
188
app/channel.go
188
app/channel.go
@@ -31,7 +31,7 @@ func (a *App) CreateDefaultChannels(c *request.Context, teamID string) ([]*model
|
|||||||
defaultChannelNames := a.DefaultChannelNames()
|
defaultChannelNames := a.DefaultChannelNames()
|
||||||
for _, name := range defaultChannelNames {
|
for _, name := range defaultChannelNames {
|
||||||
displayName := i18n.TDefault(displayNames[name], name)
|
displayName := i18n.TDefault(displayNames[name], name)
|
||||||
channel := &model.Channel{DisplayName: displayName, Name: name, Type: model.CHANNEL_OPEN, TeamId: teamID}
|
channel := &model.Channel{DisplayName: displayName, Name: name, Type: model.ChannelTypeOpen, TeamId: teamID}
|
||||||
if _, err := a.CreateChannel(c, channel, false); err != nil {
|
if _, err := a.CreateChannel(c, channel, false); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -96,7 +96,7 @@ func (a *App) JoinDefaultChannels(c *request.Context, teamID string, user *model
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if channel.Type != model.CHANNEL_OPEN {
|
if channel.Type != model.ChannelTypeOpen {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -122,7 +122,7 @@ func (a *App) JoinDefaultChannels(c *request.Context, teamID string, user *model
|
|||||||
|
|
||||||
a.invalidateCacheForChannelMembers(channel.Id)
|
a.invalidateCacheForChannelMembers(channel.Id)
|
||||||
|
|
||||||
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_USER_ADDED, "", channel.Id, "", nil)
|
message := model.NewWebSocketEvent(model.WebsocketEventUserAdded, "", channel.Id, "", nil)
|
||||||
message.Add("user_id", user.Id)
|
message.Add("user_id", user.Id)
|
||||||
message.Add("team_id", channel.TeamId)
|
message.Add("team_id", channel.TeamId)
|
||||||
a.Publish(message)
|
a.Publish(message)
|
||||||
@@ -147,7 +147,7 @@ func (a *App) JoinDefaultChannels(c *request.Context, teamID string, user *model
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) postJoinMessageForDefaultChannel(c *request.Context, user *model.User, requestor *model.User, channel *model.Channel) *model.AppError {
|
func (a *App) postJoinMessageForDefaultChannel(c *request.Context, user *model.User, requestor *model.User, channel *model.Channel) *model.AppError {
|
||||||
if channel.Name == model.DEFAULT_CHANNEL {
|
if channel.Name == model.DefaultChannelName {
|
||||||
if requestor == nil {
|
if requestor == nil {
|
||||||
if err := a.postJoinTeamMessage(c, user, channel); err != nil {
|
if err := a.postJoinTeamMessage(c, user, channel); err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -205,7 +205,7 @@ func (a *App) CreateChannelWithUser(c *request.Context, channel *model.Channel,
|
|||||||
|
|
||||||
a.postJoinChannelMessage(c, user, channel)
|
a.postJoinChannelMessage(c, user, channel)
|
||||||
|
|
||||||
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_CHANNEL_CREATED, "", "", userID, nil)
|
message := model.NewWebSocketEvent(model.WebsocketEventChannelCreated, "", "", userID, nil)
|
||||||
message.Add("channel_id", channel.Id)
|
message.Add("channel_id", channel.Id)
|
||||||
message.Add("team_id", channel.TeamId)
|
message.Add("team_id", channel.TeamId)
|
||||||
a.Publish(message)
|
a.Publish(message)
|
||||||
@@ -215,11 +215,11 @@ func (a *App) CreateChannelWithUser(c *request.Context, channel *model.Channel,
|
|||||||
|
|
||||||
// RenameChannel is used to rename the channel Name and the DisplayName fields
|
// RenameChannel is used to rename the channel Name and the DisplayName fields
|
||||||
func (a *App) RenameChannel(channel *model.Channel, newChannelName string, newDisplayName string) (*model.Channel, *model.AppError) {
|
func (a *App) RenameChannel(channel *model.Channel, newChannelName string, newDisplayName string) (*model.Channel, *model.AppError) {
|
||||||
if channel.Type == model.CHANNEL_DIRECT {
|
if channel.Type == model.ChannelTypeDirect {
|
||||||
return nil, model.NewAppError("RenameChannel", "api.channel.rename_channel.cant_rename_direct_messages.app_error", nil, "", http.StatusBadRequest)
|
return nil, model.NewAppError("RenameChannel", "api.channel.rename_channel.cant_rename_direct_messages.app_error", nil, "", http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
|
|
||||||
if channel.Type == model.CHANNEL_GROUP {
|
if channel.Type == model.ChannelTypeGroup {
|
||||||
return nil, model.NewAppError("RenameChannel", "api.channel.rename_channel.cant_rename_group_messages.app_error", nil, "", http.StatusBadRequest)
|
return nil, model.NewAppError("RenameChannel", "api.channel.rename_channel.cant_rename_group_messages.app_error", nil, "", http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -332,8 +332,8 @@ func (a *App) GetOrCreateDirectChannel(c *request.Context, userID, otherUserID s
|
|||||||
return channel, nil
|
return channel, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if *a.Config().TeamSettings.RestrictDirectMessage == model.DIRECT_MESSAGE_TEAM &&
|
if *a.Config().TeamSettings.RestrictDirectMessage == model.DirectMessageTeam &&
|
||||||
!a.SessionHasPermissionTo(*c.Session(), model.PERMISSION_MANAGE_SYSTEM) {
|
!a.SessionHasPermissionTo(*c.Session(), model.PermissionManageSystem) {
|
||||||
commonTeamIDs, err := a.GetCommonTeamIDsForTwoUsers(userID, otherUserID)
|
commonTeamIDs, err := a.GetCommonTeamIDsForTwoUsers(userID, otherUserID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -391,7 +391,7 @@ func (a *App) handleCreationEvent(c *request.Context, userID, otherUserID string
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_DIRECT_ADDED, "", channel.Id, "", nil)
|
message := model.NewWebSocketEvent(model.WebsocketEventDirectAdded, "", channel.Id, "", nil)
|
||||||
message.Add("creator_id", userID)
|
message.Add("creator_id", userID)
|
||||||
message.Add("teammate_id", otherUserID)
|
message.Add("teammate_id", otherUserID)
|
||||||
a.Publish(message)
|
a.Publish(message)
|
||||||
@@ -509,7 +509,7 @@ func (a *App) CreateGroupChannel(userIDs []string, creatorId string) (*model.Cha
|
|||||||
a.InvalidateCacheForUser(userID)
|
a.InvalidateCacheForUser(userID)
|
||||||
}
|
}
|
||||||
|
|
||||||
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_GROUP_ADDED, "", channel.Id, "", nil)
|
message := model.NewWebSocketEvent(model.WebsocketEventGroupAdded, "", channel.Id, "", nil)
|
||||||
message.Add("teammate_ids", model.ArrayToJson(userIDs))
|
message.Add("teammate_ids", model.ArrayToJson(userIDs))
|
||||||
a.Publish(message)
|
a.Publish(message)
|
||||||
|
|
||||||
@@ -517,7 +517,7 @@ func (a *App) CreateGroupChannel(userIDs []string, creatorId string) (*model.Cha
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) createGroupChannel(userIDs []string) (*model.Channel, *model.AppError) {
|
func (a *App) createGroupChannel(userIDs []string) (*model.Channel, *model.AppError) {
|
||||||
if len(userIDs) > model.CHANNEL_GROUP_MAX_USERS || len(userIDs) < model.CHANNEL_GROUP_MIN_USERS {
|
if len(userIDs) > model.ChannelGroupMaxUsers || len(userIDs) < model.ChannelGroupMinUsers {
|
||||||
return nil, model.NewAppError("CreateGroupChannel", "api.channel.create_group.bad_size.app_error", nil, "", http.StatusBadRequest)
|
return nil, model.NewAppError("CreateGroupChannel", "api.channel.create_group.bad_size.app_error", nil, "", http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -533,7 +533,7 @@ func (a *App) createGroupChannel(userIDs []string) (*model.Channel, *model.AppEr
|
|||||||
group := &model.Channel{
|
group := &model.Channel{
|
||||||
Name: model.GetGroupNameFromUserIds(userIDs),
|
Name: model.GetGroupNameFromUserIds(userIDs),
|
||||||
DisplayName: model.GetGroupDisplayNameFromUsers(users, true),
|
DisplayName: model.GetGroupDisplayNameFromUsers(users, true),
|
||||||
Type: model.CHANNEL_GROUP,
|
Type: model.ChannelTypeGroup,
|
||||||
}
|
}
|
||||||
|
|
||||||
channel, nErr := a.Srv().Store.Channel().Save(group, *a.Config().TeamSettings.MaxChannelsPerTeam)
|
channel, nErr := a.Srv().Store.Channel().Save(group, *a.Config().TeamSettings.MaxChannelsPerTeam)
|
||||||
@@ -596,7 +596,7 @@ func (a *App) createGroupChannel(userIDs []string) (*model.Channel, *model.AppEr
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetGroupChannel(userIDs []string) (*model.Channel, *model.AppError) {
|
func (a *App) GetGroupChannel(userIDs []string) (*model.Channel, *model.AppError) {
|
||||||
if len(userIDs) > model.CHANNEL_GROUP_MAX_USERS || len(userIDs) < model.CHANNEL_GROUP_MIN_USERS {
|
if len(userIDs) > model.ChannelGroupMaxUsers || len(userIDs) < model.ChannelGroupMinUsers {
|
||||||
return nil, model.NewAppError("GetGroupChannel", "api.channel.create_group.bad_size.app_error", nil, "", http.StatusBadRequest)
|
return nil, model.NewAppError("GetGroupChannel", "api.channel.create_group.bad_size.app_error", nil, "", http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -635,7 +635,7 @@ func (a *App) UpdateChannel(channel *model.Channel) (*model.Channel, *model.AppE
|
|||||||
|
|
||||||
a.invalidateCacheForChannel(channel)
|
a.invalidateCacheForChannel(channel)
|
||||||
|
|
||||||
messageWs := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_CHANNEL_UPDATED, "", channel.Id, "", nil)
|
messageWs := model.NewWebSocketEvent(model.WebsocketEventChannelUpdated, "", channel.Id, "", nil)
|
||||||
messageWs.Add("channel", channel.ToJson())
|
messageWs.Add("channel", channel.ToJson())
|
||||||
a.Publish(messageWs)
|
a.Publish(messageWs)
|
||||||
|
|
||||||
@@ -647,7 +647,7 @@ func (a *App) CreateChannelScheme(channel *model.Channel) (*model.Scheme, *model
|
|||||||
scheme, err := a.CreateScheme(&model.Scheme{
|
scheme, err := a.CreateScheme(&model.Scheme{
|
||||||
Name: model.NewId(),
|
Name: model.NewId(),
|
||||||
DisplayName: model.NewId(),
|
DisplayName: model.NewId(),
|
||||||
Scope: model.SCHEME_SCOPE_CHANNEL,
|
Scope: model.SchemeScopeChannel,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -690,10 +690,10 @@ func (a *App) UpdateChannelPrivacy(c *request.Context, oldChannel *model.Channel
|
|||||||
}
|
}
|
||||||
|
|
||||||
if err := a.postChannelPrivacyMessage(c, user, channel); err != nil {
|
if err := a.postChannelPrivacyMessage(c, user, channel); err != nil {
|
||||||
if channel.Type == model.CHANNEL_OPEN {
|
if channel.Type == model.ChannelTypeOpen {
|
||||||
channel.Type = model.CHANNEL_PRIVATE
|
channel.Type = model.ChannelTypePrivate
|
||||||
} else {
|
} else {
|
||||||
channel.Type = model.CHANNEL_OPEN
|
channel.Type = model.ChannelTypeOpen
|
||||||
}
|
}
|
||||||
// revert to previous channel privacy
|
// revert to previous channel privacy
|
||||||
a.UpdateChannel(channel)
|
a.UpdateChannel(channel)
|
||||||
@@ -702,7 +702,7 @@ func (a *App) UpdateChannelPrivacy(c *request.Context, oldChannel *model.Channel
|
|||||||
|
|
||||||
a.invalidateCacheForChannel(channel)
|
a.invalidateCacheForChannel(channel)
|
||||||
|
|
||||||
messageWs := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_CHANNEL_CONVERTED, channel.TeamId, "", "", nil)
|
messageWs := model.NewWebSocketEvent(model.WebsocketEventChannelConverted, channel.TeamId, "", "", nil)
|
||||||
messageWs.Add("channel_id", channel.Id)
|
messageWs.Add("channel_id", channel.Id)
|
||||||
a.Publish(messageWs)
|
a.Publish(messageWs)
|
||||||
|
|
||||||
@@ -726,13 +726,13 @@ func (a *App) postChannelPrivacyMessage(c *request.Context, user *model.User, ch
|
|||||||
}
|
}
|
||||||
|
|
||||||
message := (map[string]string{
|
message := (map[string]string{
|
||||||
model.CHANNEL_OPEN: i18n.T("api.channel.change_channel_privacy.private_to_public"),
|
model.ChannelTypeOpen: i18n.T("api.channel.change_channel_privacy.private_to_public"),
|
||||||
model.CHANNEL_PRIVATE: i18n.T("api.channel.change_channel_privacy.public_to_private"),
|
model.ChannelTypePrivate: i18n.T("api.channel.change_channel_privacy.public_to_private"),
|
||||||
})[channel.Type]
|
})[channel.Type]
|
||||||
post := &model.Post{
|
post := &model.Post{
|
||||||
ChannelId: channel.Id,
|
ChannelId: channel.Id,
|
||||||
Message: message,
|
Message: message,
|
||||||
Type: model.POST_CHANGE_CHANNEL_PRIVACY,
|
Type: model.PostTypeChangeChannelPrivacy,
|
||||||
UserId: authorId,
|
UserId: authorId,
|
||||||
Props: model.StringInterface{
|
Props: model.StringInterface{
|
||||||
"username": authorUsername,
|
"username": authorUsername,
|
||||||
@@ -757,7 +757,7 @@ func (a *App) RestoreChannel(c *request.Context, channel *model.Channel, userID
|
|||||||
channel.DeleteAt = 0
|
channel.DeleteAt = 0
|
||||||
a.invalidateCacheForChannel(channel)
|
a.invalidateCacheForChannel(channel)
|
||||||
|
|
||||||
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_CHANNEL_RESTORED, channel.TeamId, "", "", nil)
|
message := model.NewWebSocketEvent(model.WebsocketEventChannelRestored, channel.TeamId, "", "", nil)
|
||||||
message.Add("channel_id", channel.Id)
|
message.Add("channel_id", channel.Id)
|
||||||
a.Publish(message)
|
a.Publish(message)
|
||||||
|
|
||||||
@@ -782,7 +782,7 @@ func (a *App) RestoreChannel(c *request.Context, channel *model.Channel, userID
|
|||||||
post := &model.Post{
|
post := &model.Post{
|
||||||
ChannelId: channel.Id,
|
ChannelId: channel.Id,
|
||||||
Message: T("api.channel.restore_channel.unarchived", map[string]interface{}{"Username": user.Username}),
|
Message: T("api.channel.restore_channel.unarchived", map[string]interface{}{"Username": user.Username}),
|
||||||
Type: model.POST_CHANNEL_RESTORED,
|
Type: model.PostTypeChannelRestored,
|
||||||
UserId: userID,
|
UserId: userID,
|
||||||
Props: model.StringInterface{
|
Props: model.StringInterface{
|
||||||
"username": user.Username,
|
"username": user.Username,
|
||||||
@@ -803,7 +803,7 @@ func (a *App) RestoreChannel(c *request.Context, channel *model.Channel, userID
|
|||||||
post := &model.Post{
|
post := &model.Post{
|
||||||
ChannelId: channel.Id,
|
ChannelId: channel.Id,
|
||||||
Message: i18n.T("api.channel.restore_channel.unarchived", map[string]interface{}{"Username": systemBot.Username}),
|
Message: i18n.T("api.channel.restore_channel.unarchived", map[string]interface{}{"Username": systemBot.Username}),
|
||||||
Type: model.POST_CHANNEL_RESTORED,
|
Type: model.PostTypeChannelRestored,
|
||||||
UserId: systemBot.UserId,
|
UserId: systemBot.UserId,
|
||||||
Props: model.StringInterface{
|
Props: model.StringInterface{
|
||||||
"username": systemBot.Username,
|
"username": systemBot.Username,
|
||||||
@@ -893,9 +893,9 @@ func (a *App) GetTeamSchemeChannelRoles(teamID string) (guestRoleName, userRoleN
|
|||||||
userRoleName = scheme.DefaultChannelUserRole
|
userRoleName = scheme.DefaultChannelUserRole
|
||||||
adminRoleName = scheme.DefaultChannelAdminRole
|
adminRoleName = scheme.DefaultChannelAdminRole
|
||||||
} else {
|
} else {
|
||||||
guestRoleName = model.CHANNEL_GUEST_ROLE_ID
|
guestRoleName = model.ChannelGuestRoleId
|
||||||
userRoleName = model.CHANNEL_USER_ROLE_ID
|
userRoleName = model.ChannelUserRoleId
|
||||||
adminRoleName = model.CHANNEL_ADMIN_ROLE_ID
|
adminRoleName = model.ChannelAdminRoleId
|
||||||
}
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
@@ -994,7 +994,7 @@ func (a *App) PatchChannelModerationsForChannel(channel *model.Channel, channelM
|
|||||||
}
|
}
|
||||||
a.sendUpdatedRoleEvent(adminRole)
|
a.sendUpdatedRoleEvent(adminRole)
|
||||||
|
|
||||||
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_CHANNEL_SCHEME_UPDATED, "", channel.Id, "", nil)
|
message := model.NewWebSocketEvent(model.WebsocketEventChannelSchemeUpdated, "", channel.Id, "", nil)
|
||||||
a.Publish(message)
|
a.Publish(message)
|
||||||
mlog.Info("Permission scheme created.", mlog.String("channel_id", channel.Id), mlog.String("channel_name", channel.Name))
|
mlog.Info("Permission scheme created.", mlog.String("channel_id", channel.Id), mlog.String("channel_name", channel.Name))
|
||||||
} else {
|
} else {
|
||||||
@@ -1052,7 +1052,7 @@ func (a *App) PatchChannelModerationsForChannel(channel *model.Channel, channelM
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_CHANNEL_SCHEME_UPDATED, "", channel.Id, "", nil)
|
message := model.NewWebSocketEvent(model.WebsocketEventChannelSchemeUpdated, "", channel.Id, "", nil)
|
||||||
a.Publish(message)
|
a.Publish(message)
|
||||||
|
|
||||||
memberRole = higherScopedMemberRole
|
memberRole = higherScopedMemberRole
|
||||||
@@ -1199,7 +1199,7 @@ func (a *App) UpdateChannelMemberSchemeRoles(channelID string, userID string, is
|
|||||||
|
|
||||||
// If the migration is not completed, we also need to check the default channel_admin/channel_user roles are not present in the roles field.
|
// If the migration is not completed, we also need to check the default channel_admin/channel_user roles are not present in the roles field.
|
||||||
if err = a.IsPhase2MigrationCompleted(); err != nil {
|
if err = a.IsPhase2MigrationCompleted(); err != nil {
|
||||||
member.ExplicitRoles = RemoveRoles([]string{model.CHANNEL_GUEST_ROLE_ID, model.CHANNEL_USER_ROLE_ID, model.CHANNEL_ADMIN_ROLE_ID}, member.ExplicitRoles)
|
member.ExplicitRoles = RemoveRoles([]string{model.ChannelGuestRoleId, model.ChannelUserRoleId, model.ChannelAdminRoleId}, member.ExplicitRoles)
|
||||||
}
|
}
|
||||||
|
|
||||||
return a.updateChannelMember(member)
|
return a.updateChannelMember(member)
|
||||||
@@ -1213,24 +1213,24 @@ func (a *App) UpdateChannelMemberNotifyProps(data map[string]string, channelID s
|
|||||||
}
|
}
|
||||||
|
|
||||||
// update whichever notify properties have been provided, but don't change the others
|
// update whichever notify properties have been provided, but don't change the others
|
||||||
if markUnread, exists := data[model.MARK_UNREAD_NOTIFY_PROP]; exists {
|
if markUnread, exists := data[model.MarkUnreadNotifyProp]; exists {
|
||||||
member.NotifyProps[model.MARK_UNREAD_NOTIFY_PROP] = markUnread
|
member.NotifyProps[model.MarkUnreadNotifyProp] = markUnread
|
||||||
}
|
}
|
||||||
|
|
||||||
if desktop, exists := data[model.DESKTOP_NOTIFY_PROP]; exists {
|
if desktop, exists := data[model.DesktopNotifyProp]; exists {
|
||||||
member.NotifyProps[model.DESKTOP_NOTIFY_PROP] = desktop
|
member.NotifyProps[model.DesktopNotifyProp] = desktop
|
||||||
}
|
}
|
||||||
|
|
||||||
if email, exists := data[model.EMAIL_NOTIFY_PROP]; exists {
|
if email, exists := data[model.EmailNotifyProp]; exists {
|
||||||
member.NotifyProps[model.EMAIL_NOTIFY_PROP] = email
|
member.NotifyProps[model.EmailNotifyProp] = email
|
||||||
}
|
}
|
||||||
|
|
||||||
if push, exists := data[model.PUSH_NOTIFY_PROP]; exists {
|
if push, exists := data[model.PushNotifyProp]; exists {
|
||||||
member.NotifyProps[model.PUSH_NOTIFY_PROP] = push
|
member.NotifyProps[model.PushNotifyProp] = push
|
||||||
}
|
}
|
||||||
|
|
||||||
if ignoreChannelMentions, exists := data[model.IGNORE_CHANNEL_MENTIONS_NOTIFY_PROP]; exists {
|
if ignoreChannelMentions, exists := data[model.IgnoreChannelMentionsNotifyProp]; exists {
|
||||||
member.NotifyProps[model.IGNORE_CHANNEL_MENTIONS_NOTIFY_PROP] = ignoreChannelMentions
|
member.NotifyProps[model.IgnoreChannelMentionsNotifyProp] = ignoreChannelMentions
|
||||||
}
|
}
|
||||||
|
|
||||||
member, err = a.updateChannelMember(member)
|
member, err = a.updateChannelMember(member)
|
||||||
@@ -1261,7 +1261,7 @@ func (a *App) updateChannelMember(member *model.ChannelMember) (*model.ChannelMe
|
|||||||
a.InvalidateCacheForUser(member.UserId)
|
a.InvalidateCacheForUser(member.UserId)
|
||||||
|
|
||||||
// Notify the clients that the member notify props changed
|
// Notify the clients that the member notify props changed
|
||||||
evt := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_CHANNEL_MEMBER_UPDATED, "", "", member.UserId, nil)
|
evt := model.NewWebSocketEvent(model.WebsocketEventChannelMemberUpdated, "", "", member.UserId, nil)
|
||||||
evt.Add("channelMember", member.ToJson())
|
evt.Add("channelMember", member.ToJson())
|
||||||
a.Publish(evt)
|
a.Publish(evt)
|
||||||
|
|
||||||
@@ -1317,8 +1317,8 @@ func (a *App) DeleteChannel(c *request.Context, channel *model.Channel, userID s
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if channel.Name == model.DEFAULT_CHANNEL {
|
if channel.Name == model.DefaultChannelName {
|
||||||
err := model.NewAppError("deleteChannel", "api.channel.delete_channel.cannot.app_error", map[string]interface{}{"Channel": model.DEFAULT_CHANNEL}, "", http.StatusBadRequest)
|
err := model.NewAppError("deleteChannel", "api.channel.delete_channel.cannot.app_error", map[string]interface{}{"Channel": model.DefaultChannelName}, "", http.StatusBadRequest)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1328,7 +1328,7 @@ func (a *App) DeleteChannel(c *request.Context, channel *model.Channel, userID s
|
|||||||
post := &model.Post{
|
post := &model.Post{
|
||||||
ChannelId: channel.Id,
|
ChannelId: channel.Id,
|
||||||
Message: fmt.Sprintf(T("api.channel.delete_channel.archived"), user.Username),
|
Message: fmt.Sprintf(T("api.channel.delete_channel.archived"), user.Username),
|
||||||
Type: model.POST_CHANNEL_DELETED,
|
Type: model.PostTypeChannelDeleted,
|
||||||
UserId: userID,
|
UserId: userID,
|
||||||
Props: model.StringInterface{
|
Props: model.StringInterface{
|
||||||
"username": user.Username,
|
"username": user.Username,
|
||||||
@@ -1349,7 +1349,7 @@ func (a *App) DeleteChannel(c *request.Context, channel *model.Channel, userID s
|
|||||||
post := &model.Post{
|
post := &model.Post{
|
||||||
ChannelId: channel.Id,
|
ChannelId: channel.Id,
|
||||||
Message: fmt.Sprintf(i18n.T("api.channel.delete_channel.archived"), systemBot.Username),
|
Message: fmt.Sprintf(i18n.T("api.channel.delete_channel.archived"), systemBot.Username),
|
||||||
Type: model.POST_CHANNEL_DELETED,
|
Type: model.PostTypeChannelDeleted,
|
||||||
UserId: systemBot.UserId,
|
UserId: systemBot.UserId,
|
||||||
Props: model.StringInterface{
|
Props: model.StringInterface{
|
||||||
"username": systemBot.Username,
|
"username": systemBot.Username,
|
||||||
@@ -1383,7 +1383,7 @@ func (a *App) DeleteChannel(c *request.Context, channel *model.Channel, userID s
|
|||||||
}
|
}
|
||||||
a.invalidateCacheForChannel(channel)
|
a.invalidateCacheForChannel(channel)
|
||||||
|
|
||||||
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_CHANNEL_DELETED, channel.TeamId, "", "", nil)
|
message := model.NewWebSocketEvent(model.WebsocketEventChannelDeleted, channel.TeamId, "", "", nil)
|
||||||
message.Add("channel_id", channel.Id)
|
message.Add("channel_id", channel.Id)
|
||||||
message.Add("delete_at", deleteAt)
|
message.Add("delete_at", deleteAt)
|
||||||
a.Publish(message)
|
a.Publish(message)
|
||||||
@@ -1392,7 +1392,7 @@ func (a *App) DeleteChannel(c *request.Context, channel *model.Channel, userID s
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) addUserToChannel(user *model.User, channel *model.Channel) (*model.ChannelMember, *model.AppError) {
|
func (a *App) addUserToChannel(user *model.User, channel *model.Channel) (*model.ChannelMember, *model.AppError) {
|
||||||
if channel.Type != model.CHANNEL_OPEN && channel.Type != model.CHANNEL_PRIVATE {
|
if channel.Type != model.ChannelTypeOpen && channel.Type != model.ChannelTypePrivate {
|
||||||
return nil, model.NewAppError("AddUserToChannel", "api.channel.add_user_to_channel.type.app_error", nil, "", http.StatusBadRequest)
|
return nil, model.NewAppError("AddUserToChannel", "api.channel.add_user_to_channel.type.app_error", nil, "", http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1472,7 +1472,7 @@ func (a *App) AddUserToChannel(user *model.User, channel *model.Channel, skipTea
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_USER_ADDED, "", channel.Id, "", nil)
|
message := model.NewWebSocketEvent(model.WebsocketEventUserAdded, "", channel.Id, "", nil)
|
||||||
message.Add("user_id", user.Id)
|
message.Add("user_id", user.Id)
|
||||||
message.Add("team_id", channel.TeamId)
|
message.Add("team_id", channel.TeamId)
|
||||||
a.Publish(message)
|
a.Publish(message)
|
||||||
@@ -1560,7 +1560,7 @@ func (a *App) AddDirectChannels(teamID string, user *model.User) *model.AppError
|
|||||||
|
|
||||||
preference := model.Preference{
|
preference := model.Preference{
|
||||||
UserId: user.Id,
|
UserId: user.Id,
|
||||||
Category: model.PREFERENCE_CATEGORY_DIRECT_CHANNEL_SHOW,
|
Category: model.PreferenceCategoryDirectChannelShow,
|
||||||
Name: profile.Id,
|
Name: profile.Id,
|
||||||
Value: "true",
|
Value: "true",
|
||||||
}
|
}
|
||||||
@@ -1597,7 +1597,7 @@ func (a *App) PostUpdateChannelHeaderMessage(c *request.Context, userID string,
|
|||||||
post := &model.Post{
|
post := &model.Post{
|
||||||
ChannelId: channel.Id,
|
ChannelId: channel.Id,
|
||||||
Message: message,
|
Message: message,
|
||||||
Type: model.POST_HEADER_CHANGE,
|
Type: model.PostTypeHeaderChange,
|
||||||
UserId: userID,
|
UserId: userID,
|
||||||
Props: model.StringInterface{
|
Props: model.StringInterface{
|
||||||
"username": user.Username,
|
"username": user.Username,
|
||||||
@@ -1631,7 +1631,7 @@ func (a *App) PostUpdateChannelPurposeMessage(c *request.Context, userID string,
|
|||||||
post := &model.Post{
|
post := &model.Post{
|
||||||
ChannelId: channel.Id,
|
ChannelId: channel.Id,
|
||||||
Message: message,
|
Message: message,
|
||||||
Type: model.POST_PURPOSE_CHANGE,
|
Type: model.PostTypePurposeChange,
|
||||||
UserId: userID,
|
UserId: userID,
|
||||||
Props: model.StringInterface{
|
Props: model.StringInterface{
|
||||||
"username": user.Username,
|
"username": user.Username,
|
||||||
@@ -1657,7 +1657,7 @@ func (a *App) PostUpdateChannelDisplayNameMessage(c *request.Context, userID str
|
|||||||
post := &model.Post{
|
post := &model.Post{
|
||||||
ChannelId: channel.Id,
|
ChannelId: channel.Id,
|
||||||
Message: message,
|
Message: message,
|
||||||
Type: model.POST_DISPLAYNAME_CHANGE,
|
Type: model.PostTypeDisplaynameChange,
|
||||||
UserId: userID,
|
UserId: userID,
|
||||||
Props: model.StringInterface{
|
Props: model.StringInterface{
|
||||||
"username": user.Username,
|
"username": user.Username,
|
||||||
@@ -1984,7 +1984,7 @@ func (a *App) GetChannelUnread(channelID, userID string) (*model.ChannelUnread,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if channelUnread.NotifyProps[model.MARK_UNREAD_NOTIFY_PROP] == model.CHANNEL_MARK_UNREAD_MENTION {
|
if channelUnread.NotifyProps[model.MarkUnreadNotifyProp] == model.ChannelMarkUnreadMention {
|
||||||
channelUnread.MsgCount = 0
|
channelUnread.MsgCount = 0
|
||||||
channelUnread.MsgCountRoot = 0
|
channelUnread.MsgCountRoot = 0
|
||||||
}
|
}
|
||||||
@@ -2024,7 +2024,7 @@ func (a *App) JoinChannel(c *request.Context, channel *model.Channel, userID str
|
|||||||
|
|
||||||
user := uresult.Data.(*model.User)
|
user := uresult.Data.(*model.User)
|
||||||
|
|
||||||
if channel.Type != model.CHANNEL_OPEN {
|
if channel.Type != model.ChannelTypeOpen {
|
||||||
return model.NewAppError("JoinChannel", "api.channel.join_channel.permissions.app_error", nil, "", http.StatusBadRequest)
|
return model.NewAppError("JoinChannel", "api.channel.join_channel.permissions.app_error", nil, "", http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2052,11 +2052,11 @@ func (a *App) JoinChannel(c *request.Context, channel *model.Channel, userID str
|
|||||||
|
|
||||||
func (a *App) postJoinChannelMessage(c *request.Context, user *model.User, channel *model.Channel) *model.AppError {
|
func (a *App) postJoinChannelMessage(c *request.Context, user *model.User, channel *model.Channel) *model.AppError {
|
||||||
message := fmt.Sprintf(i18n.T("api.channel.join_channel.post_and_forget"), user.Username)
|
message := fmt.Sprintf(i18n.T("api.channel.join_channel.post_and_forget"), user.Username)
|
||||||
postType := model.POST_JOIN_CHANNEL
|
postType := model.PostTypeJoinChannel
|
||||||
|
|
||||||
if user.IsGuest() {
|
if user.IsGuest() {
|
||||||
message = fmt.Sprintf(i18n.T("api.channel.guest_join_channel.post_and_forget"), user.Username)
|
message = fmt.Sprintf(i18n.T("api.channel.guest_join_channel.post_and_forget"), user.Username)
|
||||||
postType = model.POST_GUEST_JOIN_CHANNEL
|
postType = model.PostTypeGuestJoinChannel
|
||||||
}
|
}
|
||||||
|
|
||||||
post := &model.Post{
|
post := &model.Post{
|
||||||
@@ -2080,7 +2080,7 @@ func (a *App) postJoinTeamMessage(c *request.Context, user *model.User, channel
|
|||||||
post := &model.Post{
|
post := &model.Post{
|
||||||
ChannelId: channel.Id,
|
ChannelId: channel.Id,
|
||||||
Message: fmt.Sprintf(i18n.T("api.team.join_team.post_and_forget"), user.Username),
|
Message: fmt.Sprintf(i18n.T("api.team.join_team.post_and_forget"), user.Username),
|
||||||
Type: model.POST_JOIN_TEAM,
|
Type: model.PostTypeJoinTeam,
|
||||||
UserId: user.Id,
|
UserId: user.Id,
|
||||||
Props: model.StringInterface{
|
Props: model.StringInterface{
|
||||||
"username": user.Username,
|
"username": user.Username,
|
||||||
@@ -2150,7 +2150,7 @@ func (a *App) LeaveChannel(c *request.Context, channelID string, userID string)
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if channel.Type == model.CHANNEL_PRIVATE && membersCount == 1 {
|
if channel.Type == model.ChannelTypePrivate && membersCount == 1 {
|
||||||
err := model.NewAppError("LeaveChannel", "api.channel.leave.last_member.app_error", nil, "userId="+user.Id, http.StatusBadRequest)
|
err := model.NewAppError("LeaveChannel", "api.channel.leave.last_member.app_error", nil, "userId="+user.Id, http.StatusBadRequest)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -2159,7 +2159,7 @@ func (a *App) LeaveChannel(c *request.Context, channelID string, userID string)
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if channel.Name == model.DEFAULT_CHANNEL && !*a.Config().ServiceSettings.ExperimentalEnableDefaultChannelLeaveJoinMessages {
|
if channel.Name == model.DefaultChannelName && !*a.Config().ServiceSettings.ExperimentalEnableDefaultChannelLeaveJoinMessages {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2177,7 +2177,7 @@ func (a *App) postLeaveChannelMessage(c *request.Context, user *model.User, chan
|
|||||||
// treat this as a username mention even though the user has now left the channel.
|
// treat this as a username mention even though the user has now left the channel.
|
||||||
// The client renders its own system message, ignoring this value altogether.
|
// The client renders its own system message, ignoring this value altogether.
|
||||||
Message: fmt.Sprintf(i18n.T("api.channel.leave.left"), fmt.Sprintf("@%s", user.Username)),
|
Message: fmt.Sprintf(i18n.T("api.channel.leave.left"), fmt.Sprintf("@%s", user.Username)),
|
||||||
Type: model.POST_LEAVE_CHANNEL,
|
Type: model.PostTypeLeaveChannel,
|
||||||
UserId: user.Id,
|
UserId: user.Id,
|
||||||
Props: model.StringInterface{
|
Props: model.StringInterface{
|
||||||
"username": user.Username,
|
"username": user.Username,
|
||||||
@@ -2193,11 +2193,11 @@ func (a *App) postLeaveChannelMessage(c *request.Context, user *model.User, chan
|
|||||||
|
|
||||||
func (a *App) PostAddToChannelMessage(c *request.Context, user *model.User, addedUser *model.User, channel *model.Channel, postRootId string) *model.AppError {
|
func (a *App) PostAddToChannelMessage(c *request.Context, user *model.User, addedUser *model.User, channel *model.Channel, postRootId string) *model.AppError {
|
||||||
message := fmt.Sprintf(i18n.T("api.channel.add_member.added"), addedUser.Username, user.Username)
|
message := fmt.Sprintf(i18n.T("api.channel.add_member.added"), addedUser.Username, user.Username)
|
||||||
postType := model.POST_ADD_TO_CHANNEL
|
postType := model.PostTypeAddToChannel
|
||||||
|
|
||||||
if addedUser.IsGuest() {
|
if addedUser.IsGuest() {
|
||||||
message = fmt.Sprintf(i18n.T("api.channel.add_guest.added"), addedUser.Username, user.Username)
|
message = fmt.Sprintf(i18n.T("api.channel.add_guest.added"), addedUser.Username, user.Username)
|
||||||
postType = model.POST_ADD_GUEST_TO_CHANNEL
|
postType = model.PostTypeAddGuestToChannel
|
||||||
}
|
}
|
||||||
|
|
||||||
post := &model.Post{
|
post := &model.Post{
|
||||||
@@ -2209,7 +2209,7 @@ func (a *App) PostAddToChannelMessage(c *request.Context, user *model.User, adde
|
|||||||
Props: model.StringInterface{
|
Props: model.StringInterface{
|
||||||
"userId": user.Id,
|
"userId": user.Id,
|
||||||
"username": user.Username,
|
"username": user.Username,
|
||||||
model.POST_PROPS_ADDED_USER_ID: addedUser.Id,
|
model.PostPropsAddedUserId: addedUser.Id,
|
||||||
"addedUsername": addedUser.Username,
|
"addedUsername": addedUser.Username,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@@ -2225,13 +2225,13 @@ func (a *App) postAddToTeamMessage(c *request.Context, user *model.User, addedUs
|
|||||||
post := &model.Post{
|
post := &model.Post{
|
||||||
ChannelId: channel.Id,
|
ChannelId: channel.Id,
|
||||||
Message: fmt.Sprintf(i18n.T("api.team.add_user_to_team.added"), addedUser.Username, user.Username),
|
Message: fmt.Sprintf(i18n.T("api.team.add_user_to_team.added"), addedUser.Username, user.Username),
|
||||||
Type: model.POST_ADD_TO_TEAM,
|
Type: model.PostTypeAddToTeam,
|
||||||
UserId: user.Id,
|
UserId: user.Id,
|
||||||
RootId: postRootId,
|
RootId: postRootId,
|
||||||
Props: model.StringInterface{
|
Props: model.StringInterface{
|
||||||
"userId": user.Id,
|
"userId": user.Id,
|
||||||
"username": user.Username,
|
"username": user.Username,
|
||||||
model.POST_PROPS_ADDED_USER_ID: addedUser.Id,
|
model.PostPropsAddedUserId: addedUser.Id,
|
||||||
"addedUsername": addedUser.Username,
|
"addedUsername": addedUser.Username,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@@ -2260,7 +2260,7 @@ func (a *App) postRemoveFromChannelMessage(c *request.Context, removerUserId str
|
|||||||
// treat this as a username mention even though the user has now left the channel.
|
// treat this as a username mention even though the user has now left the channel.
|
||||||
// The client renders its own system message, ignoring this value altogether.
|
// The client renders its own system message, ignoring this value altogether.
|
||||||
Message: fmt.Sprintf(i18n.T("api.channel.remove_member.removed"), fmt.Sprintf("@%s", removedUser.Username)),
|
Message: fmt.Sprintf(i18n.T("api.channel.remove_member.removed"), fmt.Sprintf("@%s", removedUser.Username)),
|
||||||
Type: model.POST_REMOVE_FROM_CHANNEL,
|
Type: model.PostTypeRemoveFromChannel,
|
||||||
UserId: messageUserId,
|
UserId: messageUserId,
|
||||||
Props: model.StringInterface{
|
Props: model.StringInterface{
|
||||||
"removedUserId": removedUser.Id,
|
"removedUserId": removedUser.Id,
|
||||||
@@ -2288,9 +2288,9 @@ func (a *App) removeUserFromChannel(c *request.Context, userIDToRemove string, r
|
|||||||
}
|
}
|
||||||
isGuest := user.IsGuest()
|
isGuest := user.IsGuest()
|
||||||
|
|
||||||
if channel.Name == model.DEFAULT_CHANNEL {
|
if channel.Name == model.DefaultChannelName {
|
||||||
if !isGuest {
|
if !isGuest {
|
||||||
return model.NewAppError("RemoveUserFromChannel", "api.channel.remove.default.app_error", map[string]interface{}{"Channel": model.DEFAULT_CHANNEL}, "", http.StatusBadRequest)
|
return model.NewAppError("RemoveUserFromChannel", "api.channel.remove.default.app_error", map[string]interface{}{"Channel": model.DefaultChannelName}, "", http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2351,13 +2351,13 @@ func (a *App) removeUserFromChannel(c *request.Context, userIDToRemove string, r
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_USER_REMOVED, "", channel.Id, "", nil)
|
message := model.NewWebSocketEvent(model.WebsocketEventUserRemoved, "", channel.Id, "", nil)
|
||||||
message.Add("user_id", userIDToRemove)
|
message.Add("user_id", userIDToRemove)
|
||||||
message.Add("remover_id", removerUserId)
|
message.Add("remover_id", removerUserId)
|
||||||
a.Publish(message)
|
a.Publish(message)
|
||||||
|
|
||||||
// because the removed user no longer belongs to the channel we need to send a separate websocket event
|
// because the removed user no longer belongs to the channel we need to send a separate websocket event
|
||||||
userMsg := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_USER_REMOVED, "", "", userIDToRemove, nil)
|
userMsg := model.NewWebSocketEvent(model.WebsocketEventUserRemoved, "", "", userIDToRemove, nil)
|
||||||
userMsg.Add("channel_id", channel.Id)
|
userMsg.Add("channel_id", channel.Id)
|
||||||
userMsg.Add("remover_id", removerUserId)
|
userMsg.Add("remover_id", removerUserId)
|
||||||
a.Publish(userMsg)
|
a.Publish(userMsg)
|
||||||
@@ -2410,15 +2410,15 @@ func (a *App) GetNumberOfChannelsOnTeam(teamID string) (int, *model.AppError) {
|
|||||||
func (a *App) SetActiveChannel(userID string, channelID string) *model.AppError {
|
func (a *App) SetActiveChannel(userID string, channelID string) *model.AppError {
|
||||||
status, err := a.GetStatus(userID)
|
status, err := a.GetStatus(userID)
|
||||||
|
|
||||||
oldStatus := model.STATUS_OFFLINE
|
oldStatus := model.StatusOffline
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
status = &model.Status{UserId: userID, Status: model.STATUS_ONLINE, Manual: false, LastActivityAt: model.GetMillis(), ActiveChannel: channelID}
|
status = &model.Status{UserId: userID, Status: model.StatusOnline, Manual: false, LastActivityAt: model.GetMillis(), ActiveChannel: channelID}
|
||||||
} else {
|
} else {
|
||||||
oldStatus = status.Status
|
oldStatus = status.Status
|
||||||
status.ActiveChannel = channelID
|
status.ActiveChannel = channelID
|
||||||
if !status.Manual && channelID != "" {
|
if !status.Manual && channelID != "" {
|
||||||
status.Status = model.STATUS_ONLINE
|
status.Status = model.StatusOnline
|
||||||
}
|
}
|
||||||
status.LastActivityAt = model.GetMillis()
|
status.LastActivityAt = model.GetMillis()
|
||||||
}
|
}
|
||||||
@@ -2445,7 +2445,7 @@ func (a *App) UpdateChannelLastViewedAt(channelIDs []string, userID string) *mod
|
|||||||
|
|
||||||
if *a.Config().ServiceSettings.EnableChannelViewedMessages {
|
if *a.Config().ServiceSettings.EnableChannelViewedMessages {
|
||||||
for _, channelID := range channelIDs {
|
for _, channelID := range channelIDs {
|
||||||
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_CHANNEL_VIEWED, "", "", userID, nil)
|
message := model.NewWebSocketEvent(model.WebsocketEventChannelViewed, "", "", userID, nil)
|
||||||
message.Add("channel_id", channelID)
|
message.Add("channel_id", channelID)
|
||||||
a.Publish(message)
|
a.Publish(message)
|
||||||
}
|
}
|
||||||
@@ -2455,12 +2455,12 @@ func (a *App) UpdateChannelLastViewedAt(channelIDs []string, userID string) *mod
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) isCRTEnabledForUser(userID string) bool {
|
func (a *App) isCRTEnabledForUser(userID string) bool {
|
||||||
if *a.Config().ServiceSettings.CollapsedThreads == model.COLLAPSED_THREADS_DISABLED {
|
if *a.Config().ServiceSettings.CollapsedThreads == model.CollapsedThreadsDisabled {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
threadsEnabled := *a.Config().ServiceSettings.CollapsedThreads == model.COLLAPSED_THREADS_DEFAULT_ON
|
threadsEnabled := *a.Config().ServiceSettings.CollapsedThreads == model.CollapsedThreadsDefaultOn
|
||||||
// check if a participant has overridden collapsed threads settings
|
// check if a participant has overridden collapsed threads settings
|
||||||
if preference, err := a.Srv().Store.Preference().Get(userID, model.PREFERENCE_CATEGORY_DISPLAY_SETTINGS, model.PREFERENCE_NAME_COLLAPSED_THREADS_ENABLED); err == nil {
|
if preference, err := a.Srv().Store.Preference().Get(userID, model.PreferenceCategoryDisplaySettings, model.PreferenceNameCollapsedThreadsEnabled); err == nil {
|
||||||
threadsEnabled = preference.Value == "on"
|
threadsEnabled = preference.Value == "on"
|
||||||
}
|
}
|
||||||
return threadsEnabled
|
return threadsEnabled
|
||||||
@@ -2537,7 +2537,7 @@ func (a *App) MarkChannelAsUnreadFromPost(postID string, userID string, collapse
|
|||||||
thread.Post.SanitizeProps()
|
thread.Post.SanitizeProps()
|
||||||
|
|
||||||
payload := thread.ToJson()
|
payload := thread.ToJson()
|
||||||
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_THREAD_UPDATED, channel.TeamId, "", userID, nil)
|
message := model.NewWebSocketEvent(model.WebsocketEventThreadUpdated, channel.TeamId, "", userID, nil)
|
||||||
message.Add("thread", payload)
|
message.Add("thread", payload)
|
||||||
a.Publish(message)
|
a.Publish(message)
|
||||||
}
|
}
|
||||||
@@ -2653,7 +2653,7 @@ func (a *App) markChannelAsUnreadFromPostCRTUnsupported(postID string, userID st
|
|||||||
|
|
||||||
payload := thread.ToJson()
|
payload := thread.ToJson()
|
||||||
if a.isCRTEnabledForUser(userID) {
|
if a.isCRTEnabledForUser(userID) {
|
||||||
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_THREAD_UPDATED, channel.TeamId, "", userID, nil)
|
message := model.NewWebSocketEvent(model.WebsocketEventThreadUpdated, channel.TeamId, "", userID, nil)
|
||||||
message.Add("thread", payload)
|
message.Add("thread", payload)
|
||||||
a.Publish(message)
|
a.Publish(message)
|
||||||
}
|
}
|
||||||
@@ -2665,7 +2665,7 @@ func (a *App) markChannelAsUnreadFromPostCRTUnsupported(postID string, userID st
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) sendWebSocketPostUnreadEvent(channelUnread *model.ChannelUnreadAt, postID string, withMsgCountRoot bool) {
|
func (a *App) sendWebSocketPostUnreadEvent(channelUnread *model.ChannelUnreadAt, postID string, withMsgCountRoot bool) {
|
||||||
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_POST_UNREAD, channelUnread.TeamId, channelUnread.ChannelId, channelUnread.UserId, nil)
|
message := model.NewWebSocketEvent(model.WebsocketEventPostUnread, channelUnread.TeamId, channelUnread.ChannelId, channelUnread.UserId, nil)
|
||||||
message.Add("msg_count", channelUnread.MsgCount)
|
message.Add("msg_count", channelUnread.MsgCount)
|
||||||
if withMsgCountRoot {
|
if withMsgCountRoot {
|
||||||
message.Add("msg_count_root", channelUnread.MsgCountRoot)
|
message.Add("msg_count_root", channelUnread.MsgCountRoot)
|
||||||
@@ -2810,22 +2810,22 @@ func (a *App) MarkChannelsAsViewed(channelIDs []string, userID string, currentSe
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
notify := member.NotifyProps[model.PUSH_NOTIFY_PROP]
|
notify := member.NotifyProps[model.PushNotifyProp]
|
||||||
if notify == model.CHANNEL_NOTIFY_DEFAULT {
|
if notify == model.ChannelNotifyDefault {
|
||||||
user, err := a.GetUser(userID)
|
user, err := a.GetUser(userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mlog.Warn("Failed to get user", mlog.String("user_id", userID), mlog.Err(err))
|
mlog.Warn("Failed to get user", mlog.String("user_id", userID), mlog.Err(err))
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
notify = user.NotifyProps[model.PUSH_NOTIFY_PROP]
|
notify = user.NotifyProps[model.PushNotifyProp]
|
||||||
}
|
}
|
||||||
if notify == model.USER_NOTIFY_ALL {
|
if notify == model.UserNotifyAll {
|
||||||
if count, err := a.Srv().Store.User().GetAnyUnreadPostCountForChannel(userID, channelID); err == nil {
|
if count, err := a.Srv().Store.User().GetAnyUnreadPostCountForChannel(userID, channelID); err == nil {
|
||||||
if count > 0 {
|
if count > 0 {
|
||||||
channelsToClearPushNotifications = append(channelsToClearPushNotifications, channelID)
|
channelsToClearPushNotifications = append(channelsToClearPushNotifications, channelID)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if notify == model.USER_NOTIFY_MENTION || channel.Type == model.CHANNEL_DIRECT {
|
} else if notify == model.UserNotifyMention || channel.Type == model.ChannelTypeDirect {
|
||||||
if count, err := a.Srv().Store.User().GetUnreadCountForChannel(userID, channelID); err == nil {
|
if count, err := a.Srv().Store.User().GetUnreadCountForChannel(userID, channelID); err == nil {
|
||||||
if count > 0 {
|
if count > 0 {
|
||||||
channelsToClearPushNotifications = append(channelsToClearPushNotifications, channelID)
|
channelsToClearPushNotifications = append(channelsToClearPushNotifications, channelID)
|
||||||
@@ -2847,7 +2847,7 @@ func (a *App) MarkChannelsAsViewed(channelIDs []string, userID string, currentSe
|
|||||||
|
|
||||||
if *a.Config().ServiceSettings.EnableChannelViewedMessages {
|
if *a.Config().ServiceSettings.EnableChannelViewedMessages {
|
||||||
for _, channelID := range channelIDs {
|
for _, channelID := range channelIDs {
|
||||||
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_CHANNEL_VIEWED, "", "", userID, nil)
|
message := model.NewWebSocketEvent(model.WebsocketEventChannelViewed, "", "", userID, nil)
|
||||||
message.Add("channel_id", channelID)
|
message.Add("channel_id", channelID)
|
||||||
a.Publish(message)
|
a.Publish(message)
|
||||||
}
|
}
|
||||||
@@ -2864,7 +2864,7 @@ func (a *App) MarkChannelsAsViewed(channelIDs []string, userID string, currentSe
|
|||||||
if a.isCRTEnabledForUser(userID) {
|
if a.isCRTEnabledForUser(userID) {
|
||||||
timestamp := model.GetMillis()
|
timestamp := model.GetMillis()
|
||||||
for _, channelID := range channelIDs {
|
for _, channelID := range channelIDs {
|
||||||
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_THREAD_READ_CHANGED, "", channelID, userID, nil)
|
message := model.NewWebSocketEvent(model.WebsocketEventThreadReadChanged, "", channelID, userID, nil)
|
||||||
message.Add("timestamp", timestamp)
|
message.Add("timestamp", timestamp)
|
||||||
a.Publish(message)
|
a.Publish(message)
|
||||||
}
|
}
|
||||||
@@ -2920,7 +2920,7 @@ func (a *App) PermanentDeleteChannel(channel *model.Channel) *model.AppError {
|
|||||||
}
|
}
|
||||||
|
|
||||||
a.invalidateCacheForChannel(channel)
|
a.invalidateCacheForChannel(channel)
|
||||||
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_CHANNEL_DELETED, channel.TeamId, "", "", nil)
|
message := model.NewWebSocketEvent(model.WebsocketEventChannelDeleted, channel.TeamId, "", "", nil)
|
||||||
message.Add("channel_id", channel.Id)
|
message.Add("channel_id", channel.Id)
|
||||||
message.Add("delete_at", deleteAt)
|
message.Add("delete_at", deleteAt)
|
||||||
a.Publish(message)
|
a.Publish(message)
|
||||||
@@ -3045,7 +3045,7 @@ func (a *App) postChannelMoveMessage(c *request.Context, user *model.User, chann
|
|||||||
post := &model.Post{
|
post := &model.Post{
|
||||||
ChannelId: channel.Id,
|
ChannelId: channel.Id,
|
||||||
Message: fmt.Sprintf(i18n.T("api.team.move_channel.success"), previousTeam.Name),
|
Message: fmt.Sprintf(i18n.T("api.team.move_channel.success"), previousTeam.Name),
|
||||||
Type: model.POST_MOVE_CHANNEL,
|
Type: model.PostTypeMoveChannel,
|
||||||
UserId: user.Id,
|
UserId: user.Id,
|
||||||
Props: model.StringInterface{
|
Props: model.StringInterface{
|
||||||
"username": user.Username,
|
"username": user.Username,
|
||||||
@@ -3179,7 +3179,7 @@ func (a *App) setChannelsMuted(channelIDs []string, userID string, muted bool) (
|
|||||||
for _, member := range updated {
|
for _, member := range updated {
|
||||||
a.invalidateCacheForChannelMembersNotifyProps(member.ChannelId)
|
a.invalidateCacheForChannelMembersNotifyProps(member.ChannelId)
|
||||||
|
|
||||||
evt := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_CHANNEL_MEMBER_UPDATED, "", "", member.UserId, nil)
|
evt := model.NewWebSocketEvent(model.WebsocketEventChannelMemberUpdated, "", "", member.UserId, nil)
|
||||||
evt.Add("channelMember", member.ToJson())
|
evt.Add("channelMember", member.ToJson())
|
||||||
a.Publish(evt)
|
a.Publish(evt)
|
||||||
}
|
}
|
||||||
@@ -3231,7 +3231,7 @@ func (a *App) FillInChannelsProps(channelList *model.ChannelList) *model.AppErro
|
|||||||
channelMentionsProp := make(map[string]interface{}, len(channelMentions[channel]))
|
channelMentionsProp := make(map[string]interface{}, len(channelMentions[channel]))
|
||||||
for _, channelMention := range channelMentions[channel] {
|
for _, channelMention := range channelMentions[channel] {
|
||||||
if mentioned, ok := mentionedChannelsByName[channelMention]; ok {
|
if mentioned, ok := mentionedChannelsByName[channelMention]; ok {
|
||||||
if mentioned.Type == model.CHANNEL_OPEN {
|
if mentioned.Type == model.ChannelTypeOpen {
|
||||||
channelMentionsProp[mentioned.Name] = map[string]interface{}{
|
channelMentionsProp[mentioned.Name] = map[string]interface{}{
|
||||||
"display_name": mentioned.DisplayName,
|
"display_name": mentioned.DisplayName,
|
||||||
}
|
}
|
||||||
@@ -3281,7 +3281,7 @@ func (a *App) forEachChannelMember(channelID string, f func(model.ChannelMember)
|
|||||||
func (a *App) ClearChannelMembersCache(channelID string) {
|
func (a *App) ClearChannelMembersCache(channelID string) {
|
||||||
clearSessionCache := func(channelMember model.ChannelMember) error {
|
clearSessionCache := func(channelMember model.ChannelMember) error {
|
||||||
a.ClearSessionCacheForUser(channelMember.UserId)
|
a.ClearSessionCacheForUser(channelMember.UserId)
|
||||||
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_CHANNEL_MEMBER_UPDATED, "", "", channelMember.UserId, nil)
|
message := model.NewWebSocketEvent(model.WebsocketEventChannelMemberUpdated, "", "", channelMember.UserId, nil)
|
||||||
message.Add("channelMember", channelMember.ToJson())
|
message.Add("channelMember", channelMember.ToJson())
|
||||||
a.Publish(message)
|
a.Publish(message)
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ func (a *App) CreateSidebarCategory(userID, teamID string, newCategory *model.Si
|
|||||||
return nil, model.NewAppError("CreateSidebarCategory", "app.channel.sidebar_categories.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("CreateSidebarCategory", "app.channel.sidebar_categories.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_SIDEBAR_CATEGORY_CREATED, teamID, "", userID, nil)
|
message := model.NewWebSocketEvent(model.WebsocketEventSidebarCategoryCreated, teamID, "", userID, nil)
|
||||||
message.Add("category_id", category.Id)
|
message.Add("category_id", category.Id)
|
||||||
a.Publish(message)
|
a.Publish(message)
|
||||||
return category, nil
|
return category, nil
|
||||||
@@ -106,7 +106,7 @@ func (a *App) UpdateSidebarCategoryOrder(userID, teamID string, categoryOrder []
|
|||||||
return model.NewAppError("UpdateSidebarCategoryOrder", "app.channel.sidebar_categories.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return model.NewAppError("UpdateSidebarCategoryOrder", "app.channel.sidebar_categories.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_SIDEBAR_CATEGORY_ORDER_UPDATED, teamID, "", userID, nil)
|
message := model.NewWebSocketEvent(model.WebsocketEventSidebarCategoryOrderUpdated, teamID, "", userID, nil)
|
||||||
message.Add("order", categoryOrder)
|
message.Add("order", categoryOrder)
|
||||||
a.Publish(message)
|
a.Publish(message)
|
||||||
return nil
|
return nil
|
||||||
@@ -118,7 +118,7 @@ func (a *App) UpdateSidebarCategories(userID, teamID string, categories []*model
|
|||||||
return nil, model.NewAppError("UpdateSidebarCategories", "app.channel.sidebar_categories.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("UpdateSidebarCategories", "app.channel.sidebar_categories.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
|
|
||||||
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_SIDEBAR_CATEGORY_UPDATED, teamID, "", userID, nil)
|
message := model.NewWebSocketEvent(model.WebsocketEventSidebarCategoryUpdated, teamID, "", userID, nil)
|
||||||
a.Publish(message)
|
a.Publish(message)
|
||||||
|
|
||||||
a.muteChannelsForUpdatedCategories(userID, updatedCategories, originalCategories)
|
a.muteChannelsForUpdatedCategories(userID, updatedCategories, originalCategories)
|
||||||
@@ -243,7 +243,7 @@ func (a *App) DeleteSidebarCategory(userID, teamID, categoryId string) *model.Ap
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_SIDEBAR_CATEGORY_DELETED, teamID, "", userID, nil)
|
message := model.NewWebSocketEvent(model.WebsocketEventSidebarCategoryDeleted, teamID, "", userID, nil)
|
||||||
message.Add("category_id", categoryId)
|
message.Add("category_id", categoryId)
|
||||||
a.Publish(message)
|
a.Publish(message)
|
||||||
|
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ func TestPermanentDeleteChannel(t *testing.T) {
|
|||||||
*cfg.ServiceSettings.EnableOutgoingWebhooks = true
|
*cfg.ServiceSettings.EnableOutgoingWebhooks = true
|
||||||
})
|
})
|
||||||
|
|
||||||
channel, err := th.App.CreateChannel(th.Context, &model.Channel{DisplayName: "deletion-test", Name: "deletion-test", Type: model.CHANNEL_OPEN, TeamId: th.BasicTeam.Id}, false)
|
channel, err := th.App.CreateChannel(th.Context, &model.Channel{DisplayName: "deletion-test", Name: "deletion-test", Type: model.ChannelTypeOpen, TeamId: th.BasicTeam.Id}, false)
|
||||||
require.NotNil(t, channel, "Channel shouldn't be nil")
|
require.NotNil(t, channel, "Channel shouldn't be nil")
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
defer func() {
|
defer func() {
|
||||||
@@ -169,7 +169,7 @@ func TestMoveChannel(t *testing.T) {
|
|||||||
channel3 := &model.Channel{
|
channel3 := &model.Channel{
|
||||||
DisplayName: "dn_" + model.NewId(),
|
DisplayName: "dn_" + model.NewId(),
|
||||||
Name: "name_" + model.NewId(),
|
Name: "name_" + model.NewId(),
|
||||||
Type: model.CHANNEL_OPEN,
|
Type: model.ChannelTypeOpen,
|
||||||
TeamId: sourceTeam.Id,
|
TeamId: sourceTeam.Id,
|
||||||
CreatorId: th.BasicUser.Id,
|
CreatorId: th.BasicUser.Id,
|
||||||
}
|
}
|
||||||
@@ -352,7 +352,7 @@ func TestCreateChannelPublicCreatesChannelMemberHistoryRecord(t *testing.T) {
|
|||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
|
|
||||||
// creates a public channel and adds basic user to it
|
// creates a public channel and adds basic user to it
|
||||||
publicChannel := th.createChannel(th.BasicTeam, model.CHANNEL_OPEN)
|
publicChannel := th.createChannel(th.BasicTeam, model.ChannelTypeOpen)
|
||||||
|
|
||||||
// there should be a ChannelMemberHistory record for the user
|
// there should be a ChannelMemberHistory record for the user
|
||||||
histories, err := th.App.Srv().Store.ChannelMemberHistory().GetUsersInChannelDuring(model.GetMillis()-100, model.GetMillis()+100, publicChannel.Id)
|
histories, err := th.App.Srv().Store.ChannelMemberHistory().GetUsersInChannelDuring(model.GetMillis()-100, model.GetMillis()+100, publicChannel.Id)
|
||||||
@@ -367,7 +367,7 @@ func TestCreateChannelPrivateCreatesChannelMemberHistoryRecord(t *testing.T) {
|
|||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
|
|
||||||
// creates a private channel and adds basic user to it
|
// creates a private channel and adds basic user to it
|
||||||
privateChannel := th.createChannel(th.BasicTeam, model.CHANNEL_PRIVATE)
|
privateChannel := th.createChannel(th.BasicTeam, model.ChannelTypePrivate)
|
||||||
|
|
||||||
// there should be a ChannelMemberHistory record for the user
|
// there should be a ChannelMemberHistory record for the user
|
||||||
histories, err := th.App.Srv().Store.ChannelMemberHistory().GetUsersInChannelDuring(model.GetMillis()-100, model.GetMillis()+100, privateChannel.Id)
|
histories, err := th.App.Srv().Store.ChannelMemberHistory().GetUsersInChannelDuring(model.GetMillis()-100, model.GetMillis()+100, privateChannel.Id)
|
||||||
@@ -380,7 +380,7 @@ func TestCreateChannelDisplayNameTrimsWhitespace(t *testing.T) {
|
|||||||
th := Setup(t).InitBasic()
|
th := Setup(t).InitBasic()
|
||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
|
|
||||||
channel, err := th.App.CreateChannel(th.Context, &model.Channel{DisplayName: " Public 1 ", Name: "public1", Type: model.CHANNEL_OPEN, TeamId: th.BasicTeam.Id}, false)
|
channel, err := th.App.CreateChannel(th.Context, &model.Channel{DisplayName: " Public 1 ", Name: "public1", Type: model.ChannelTypeOpen, TeamId: th.BasicTeam.Id}, false)
|
||||||
defer th.App.PermanentDeleteChannel(channel)
|
defer th.App.PermanentDeleteChannel(channel)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
require.Equal(t, channel.DisplayName, "Public 1")
|
require.Equal(t, channel.DisplayName, "Public 1")
|
||||||
@@ -390,13 +390,13 @@ func TestUpdateChannelPrivacy(t *testing.T) {
|
|||||||
th := Setup(t).InitBasic()
|
th := Setup(t).InitBasic()
|
||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
|
|
||||||
privateChannel := th.createChannel(th.BasicTeam, model.CHANNEL_PRIVATE)
|
privateChannel := th.createChannel(th.BasicTeam, model.ChannelTypePrivate)
|
||||||
privateChannel.Type = model.CHANNEL_OPEN
|
privateChannel.Type = model.ChannelTypeOpen
|
||||||
|
|
||||||
publicChannel, err := th.App.UpdateChannelPrivacy(th.Context, privateChannel, th.BasicUser)
|
publicChannel, err := th.App.UpdateChannelPrivacy(th.Context, privateChannel, th.BasicUser)
|
||||||
require.Nil(t, err, "Failed to update channel privacy.")
|
require.Nil(t, err, "Failed to update channel privacy.")
|
||||||
assert.Equal(t, publicChannel.Id, privateChannel.Id)
|
assert.Equal(t, publicChannel.Id, privateChannel.Id)
|
||||||
assert.Equal(t, publicChannel.Type, model.CHANNEL_OPEN)
|
assert.Equal(t, publicChannel.Type, model.ChannelTypeOpen)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestCreateGroupChannelCreatesChannelMemberHistoryRecord(t *testing.T) {
|
func TestCreateGroupChannelCreatesChannelMemberHistoryRecord(t *testing.T) {
|
||||||
@@ -496,7 +496,7 @@ func TestAddUserToChannelCreatesChannelMemberHistoryRecord(t *testing.T) {
|
|||||||
groupUserIds = append(groupUserIds, th.BasicUser.Id)
|
groupUserIds = append(groupUserIds, th.BasicUser.Id)
|
||||||
groupUserIds = append(groupUserIds, user.Id)
|
groupUserIds = append(groupUserIds, user.Id)
|
||||||
|
|
||||||
channel := th.createChannel(th.BasicTeam, model.CHANNEL_OPEN)
|
channel := th.createChannel(th.BasicTeam, model.ChannelTypeOpen)
|
||||||
|
|
||||||
_, err = th.App.AddUserToChannel(user, channel, false)
|
_, err = th.App.AddUserToChannel(user, channel, false)
|
||||||
require.Nil(t, err, "Failed to add user to channel.")
|
require.Nil(t, err, "Failed to add user to channel.")
|
||||||
@@ -583,7 +583,7 @@ func TestAddChannelMemberNoUserRequestor(t *testing.T) {
|
|||||||
groupUserIds = append(groupUserIds, th.BasicUser.Id)
|
groupUserIds = append(groupUserIds, th.BasicUser.Id)
|
||||||
groupUserIds = append(groupUserIds, user.Id)
|
groupUserIds = append(groupUserIds, user.Id)
|
||||||
|
|
||||||
channel := th.createChannel(th.BasicTeam, model.CHANNEL_OPEN)
|
channel := th.createChannel(th.BasicTeam, model.ChannelTypeOpen)
|
||||||
|
|
||||||
_, err = th.App.AddChannelMember(th.Context, user.Id, channel, ChannelMemberOpts{})
|
_, err = th.App.AddChannelMember(th.Context, user.Id, channel, ChannelMemberOpts{})
|
||||||
require.Nil(t, err, "Failed to add user to channel.")
|
require.Nil(t, err, "Failed to add user to channel.")
|
||||||
@@ -605,7 +605,7 @@ func TestAddChannelMemberNoUserRequestor(t *testing.T) {
|
|||||||
if assert.Len(t, postList.Order, 1) {
|
if assert.Len(t, postList.Order, 1) {
|
||||||
post := postList.Posts[postList.Order[0]]
|
post := postList.Posts[postList.Order[0]]
|
||||||
|
|
||||||
assert.Equal(t, model.POST_JOIN_CHANNEL, post.Type)
|
assert.Equal(t, model.PostTypeJoinChannel, post.Type)
|
||||||
assert.Equal(t, user.Id, post.UserId)
|
assert.Equal(t, user.Id, post.UserId)
|
||||||
assert.Equal(t, user.Username, post.GetProp("username"))
|
assert.Equal(t, user.Username, post.GetProp("username"))
|
||||||
}
|
}
|
||||||
@@ -682,15 +682,15 @@ func TestFillInChannelProps(t *testing.T) {
|
|||||||
th := Setup(t).InitBasic()
|
th := Setup(t).InitBasic()
|
||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
|
|
||||||
channelPublic1, err := th.App.CreateChannel(th.Context, &model.Channel{DisplayName: "Public 1", Name: "public1", Type: model.CHANNEL_OPEN, TeamId: th.BasicTeam.Id}, false)
|
channelPublic1, err := th.App.CreateChannel(th.Context, &model.Channel{DisplayName: "Public 1", Name: "public1", Type: model.ChannelTypeOpen, TeamId: th.BasicTeam.Id}, false)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
defer th.App.PermanentDeleteChannel(channelPublic1)
|
defer th.App.PermanentDeleteChannel(channelPublic1)
|
||||||
|
|
||||||
channelPublic2, err := th.App.CreateChannel(th.Context, &model.Channel{DisplayName: "Public 2", Name: "public2", Type: model.CHANNEL_OPEN, TeamId: th.BasicTeam.Id}, false)
|
channelPublic2, err := th.App.CreateChannel(th.Context, &model.Channel{DisplayName: "Public 2", Name: "public2", Type: model.ChannelTypeOpen, TeamId: th.BasicTeam.Id}, false)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
defer th.App.PermanentDeleteChannel(channelPublic2)
|
defer th.App.PermanentDeleteChannel(channelPublic2)
|
||||||
|
|
||||||
channelPrivate, err := th.App.CreateChannel(th.Context, &model.Channel{DisplayName: "Private", Name: "private", Type: model.CHANNEL_PRIVATE, TeamId: th.BasicTeam.Id}, false)
|
channelPrivate, err := th.App.CreateChannel(th.Context, &model.Channel{DisplayName: "Private", Name: "private", Type: model.ChannelTypePrivate, TeamId: th.BasicTeam.Id}, false)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
defer th.App.PermanentDeleteChannel(channelPrivate)
|
defer th.App.PermanentDeleteChannel(channelPrivate)
|
||||||
|
|
||||||
@@ -699,13 +699,13 @@ func TestFillInChannelProps(t *testing.T) {
|
|||||||
DisplayName: "dn_" + otherTeamId,
|
DisplayName: "dn_" + otherTeamId,
|
||||||
Name: "name" + otherTeamId,
|
Name: "name" + otherTeamId,
|
||||||
Email: "success+" + otherTeamId + "@simulator.amazonses.com",
|
Email: "success+" + otherTeamId + "@simulator.amazonses.com",
|
||||||
Type: model.TEAM_OPEN,
|
Type: model.TeamOpen,
|
||||||
}
|
}
|
||||||
otherTeam, err = th.App.CreateTeam(th.Context, otherTeam)
|
otherTeam, err = th.App.CreateTeam(th.Context, otherTeam)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
defer th.App.PermanentDeleteTeam(otherTeam)
|
defer th.App.PermanentDeleteTeam(otherTeam)
|
||||||
|
|
||||||
channelOtherTeam, err := th.App.CreateChannel(th.Context, &model.Channel{DisplayName: "Other Team Channel", Name: "other-team", Type: model.CHANNEL_OPEN, TeamId: otherTeam.Id}, false)
|
channelOtherTeam, err := th.App.CreateChannel(th.Context, &model.Channel{DisplayName: "Other Team Channel", Name: "other-team", Type: model.ChannelTypeOpen, TeamId: otherTeam.Id}, false)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
defer th.App.PermanentDeleteChannel(channelOtherTeam)
|
defer th.App.PermanentDeleteChannel(channelOtherTeam)
|
||||||
|
|
||||||
@@ -897,7 +897,7 @@ func TestRenameChannel(t *testing.T) {
|
|||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
"Rename open channel",
|
"Rename open channel",
|
||||||
th.createChannel(th.BasicTeam, model.CHANNEL_OPEN),
|
th.createChannel(th.BasicTeam, model.ChannelTypeOpen),
|
||||||
false,
|
false,
|
||||||
"newchannelname",
|
"newchannelname",
|
||||||
"newchannelname",
|
"newchannelname",
|
||||||
@@ -905,7 +905,7 @@ func TestRenameChannel(t *testing.T) {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Fail on rename open channel with bad name",
|
"Fail on rename open channel with bad name",
|
||||||
th.createChannel(th.BasicTeam, model.CHANNEL_OPEN),
|
th.createChannel(th.BasicTeam, model.ChannelTypeOpen),
|
||||||
true,
|
true,
|
||||||
"6zii9a9g6pruzj451x3esok54h__wr4j4g8zqtnhmkw771pfpynqwo",
|
"6zii9a9g6pruzj451x3esok54h__wr4j4g8zqtnhmkw771pfpynqwo",
|
||||||
"",
|
"",
|
||||||
@@ -913,7 +913,7 @@ func TestRenameChannel(t *testing.T) {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Success on rename open channel with consecutive underscores in name",
|
"Success on rename open channel with consecutive underscores in name",
|
||||||
th.createChannel(th.BasicTeam, model.CHANNEL_OPEN),
|
th.createChannel(th.BasicTeam, model.ChannelTypeOpen),
|
||||||
false,
|
false,
|
||||||
"foo__bar",
|
"foo__bar",
|
||||||
"foo__bar",
|
"foo__bar",
|
||||||
@@ -988,7 +988,7 @@ func TestGetChannelsForUser(t *testing.T) {
|
|||||||
channel := &model.Channel{
|
channel := &model.Channel{
|
||||||
DisplayName: "Public",
|
DisplayName: "Public",
|
||||||
Name: "public",
|
Name: "public",
|
||||||
Type: model.CHANNEL_OPEN,
|
Type: model.ChannelTypeOpen,
|
||||||
CreatorId: th.BasicUser.Id,
|
CreatorId: th.BasicUser.Id,
|
||||||
TeamId: th.BasicTeam.Id,
|
TeamId: th.BasicTeam.Id,
|
||||||
}
|
}
|
||||||
@@ -1034,7 +1034,7 @@ func TestGetPublicChannelsForTeam(t *testing.T) {
|
|||||||
channel := model.Channel{
|
channel := model.Channel{
|
||||||
DisplayName: fmt.Sprintf("Public %v", i),
|
DisplayName: fmt.Sprintf("Public %v", i),
|
||||||
Name: fmt.Sprintf("public_%v", i),
|
Name: fmt.Sprintf("public_%v", i),
|
||||||
Type: model.CHANNEL_OPEN,
|
Type: model.ChannelTypeOpen,
|
||||||
TeamId: team.Id,
|
TeamId: team.Id,
|
||||||
}
|
}
|
||||||
var rchannel *model.Channel
|
var rchannel *model.Channel
|
||||||
@@ -1067,7 +1067,7 @@ func TestGetPrivateChannelsForTeam(t *testing.T) {
|
|||||||
channel := model.Channel{
|
channel := model.Channel{
|
||||||
DisplayName: fmt.Sprintf("Private %v", i),
|
DisplayName: fmt.Sprintf("Private %v", i),
|
||||||
Name: fmt.Sprintf("private_%v", i),
|
Name: fmt.Sprintf("private_%v", i),
|
||||||
Type: model.CHANNEL_PRIVATE,
|
Type: model.ChannelTypePrivate,
|
||||||
TeamId: team.Id,
|
TeamId: team.Id,
|
||||||
}
|
}
|
||||||
var rchannel *model.Channel
|
var rchannel *model.Channel
|
||||||
@@ -1189,13 +1189,13 @@ func TestSearchChannelsForUser(t *testing.T) {
|
|||||||
th := Setup(t).InitBasic()
|
th := Setup(t).InitBasic()
|
||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
|
|
||||||
c1, err := th.App.CreateChannel(th.Context, &model.Channel{DisplayName: "test-dev-1", Name: "test-dev-1", Type: model.CHANNEL_OPEN, TeamId: th.BasicTeam.Id}, false)
|
c1, err := th.App.CreateChannel(th.Context, &model.Channel{DisplayName: "test-dev-1", Name: "test-dev-1", Type: model.ChannelTypeOpen, TeamId: th.BasicTeam.Id}, false)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
|
|
||||||
c2, err := th.App.CreateChannel(th.Context, &model.Channel{DisplayName: "test-dev-2", Name: "test-dev-2", Type: model.CHANNEL_OPEN, TeamId: th.BasicTeam.Id}, false)
|
c2, err := th.App.CreateChannel(th.Context, &model.Channel{DisplayName: "test-dev-2", Name: "test-dev-2", Type: model.ChannelTypeOpen, TeamId: th.BasicTeam.Id}, false)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
|
|
||||||
c3, err := th.App.CreateChannel(th.Context, &model.Channel{DisplayName: "dev-3", Name: "dev-3", Type: model.CHANNEL_OPEN, TeamId: th.BasicTeam.Id}, false)
|
c3, err := th.App.CreateChannel(th.Context, &model.Channel{DisplayName: "dev-3", Name: "dev-3", Type: model.ChannelTypeOpen, TeamId: th.BasicTeam.Id}, false)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
@@ -1539,7 +1539,7 @@ func TestPatchChannelModerationsForChannel(t *testing.T) {
|
|||||||
manageMembers := model.ChannelModeratedPermissions[2]
|
manageMembers := model.ChannelModeratedPermissions[2]
|
||||||
channelMentions := model.ChannelModeratedPermissions[3]
|
channelMentions := model.ChannelModeratedPermissions[3]
|
||||||
|
|
||||||
nonChannelModeratedPermission := model.PERMISSION_CREATE_BOT.Id
|
nonChannelModeratedPermission := model.PermissionCreateBot.Id
|
||||||
|
|
||||||
testCases := []struct {
|
testCases := []struct {
|
||||||
Name string
|
Name string
|
||||||
@@ -1942,11 +1942,11 @@ func TestPatchChannelModerationsForChannel(t *testing.T) {
|
|||||||
|
|
||||||
_, err := th.App.PatchChannelModerationsForChannel(channel.DeepCopy(), addCreatePosts)
|
_, err := th.App.PatchChannelModerationsForChannel(channel.DeepCopy(), addCreatePosts)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
require.True(t, th.App.SessionHasPermissionToChannel(mockSession, channel.Id, model.PERMISSION_CREATE_POST))
|
require.True(t, th.App.SessionHasPermissionToChannel(mockSession, channel.Id, model.PermissionCreatePost))
|
||||||
|
|
||||||
_, err = th.App.PatchChannelModerationsForChannel(channel.DeepCopy(), removeCreatePosts)
|
_, err = th.App.PatchChannelModerationsForChannel(channel.DeepCopy(), removeCreatePosts)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
require.False(t, th.App.SessionHasPermissionToChannel(mockSession, channel.Id, model.PERMISSION_CREATE_POST))
|
require.False(t, th.App.SessionHasPermissionToChannel(mockSession, channel.Id, model.PermissionCreatePost))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1963,7 +1963,7 @@ func TestMarkChannelsAsViewedPanic(t *testing.T) {
|
|||||||
mockChannelStore.On("Get", "channelID", true).Return(&model.Channel{}, nil)
|
mockChannelStore.On("Get", "channelID", true).Return(&model.Channel{}, nil)
|
||||||
mockChannelStore.On("GetMember", context.Background(), "channelID", "userID").Return(&model.ChannelMember{
|
mockChannelStore.On("GetMember", context.Background(), "channelID", "userID").Return(&model.ChannelMember{
|
||||||
NotifyProps: model.StringMap{
|
NotifyProps: model.StringMap{
|
||||||
model.PUSH_NOTIFY_PROP: model.CHANNEL_NOTIFY_DEFAULT,
|
model.PushNotifyProp: model.ChannelNotifyDefault,
|
||||||
}}, nil)
|
}}, nil)
|
||||||
times := map[string]int64{
|
times := map[string]int64{
|
||||||
"userID": 1,
|
"userID": 1,
|
||||||
@@ -2049,14 +2049,14 @@ func TestViewChannelCollapsedThreadsTurnedOff(t *testing.T) {
|
|||||||
defer os.Unsetenv("MM_FEATUREFLAGS_COLLAPSEDTHREADS")
|
defer os.Unsetenv("MM_FEATUREFLAGS_COLLAPSEDTHREADS")
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) {
|
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||||
*cfg.ServiceSettings.ThreadAutoFollow = true
|
*cfg.ServiceSettings.ThreadAutoFollow = true
|
||||||
*cfg.ServiceSettings.CollapsedThreads = model.COLLAPSED_THREADS_DEFAULT_ON
|
*cfg.ServiceSettings.CollapsedThreads = model.CollapsedThreadsDefaultOn
|
||||||
})
|
})
|
||||||
|
|
||||||
// Turn off CRT for user
|
// Turn off CRT for user
|
||||||
preference := model.Preference{
|
preference := model.Preference{
|
||||||
UserId: u1.Id,
|
UserId: u1.Id,
|
||||||
Category: model.PREFERENCE_CATEGORY_DISPLAY_SETTINGS,
|
Category: model.PreferenceCategoryDisplaySettings,
|
||||||
Name: model.PREFERENCE_NAME_COLLAPSED_THREADS_ENABLED,
|
Name: model.PreferenceNameCollapsedThreadsEnabled,
|
||||||
Value: "off",
|
Value: "off",
|
||||||
}
|
}
|
||||||
var preferences model.Preferences
|
var preferences model.Preferences
|
||||||
@@ -2123,7 +2123,7 @@ func TestMarkChannelAsUnreadFromPostCollapsedThreadsTurnedOff(t *testing.T) {
|
|||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) {
|
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||||
*cfg.ServiceSettings.ThreadAutoFollow = true
|
*cfg.ServiceSettings.ThreadAutoFollow = true
|
||||||
*cfg.ServiceSettings.CollapsedThreads = model.COLLAPSED_THREADS_DEFAULT_ON
|
*cfg.ServiceSettings.CollapsedThreads = model.CollapsedThreadsDefaultOn
|
||||||
})
|
})
|
||||||
|
|
||||||
th.AddUserToChannel(th.BasicUser2, th.BasicChannel)
|
th.AddUserToChannel(th.BasicUser2, th.BasicChannel)
|
||||||
@@ -2131,8 +2131,8 @@ func TestMarkChannelAsUnreadFromPostCollapsedThreadsTurnedOff(t *testing.T) {
|
|||||||
// Turn off CRT for user
|
// Turn off CRT for user
|
||||||
preference := model.Preference{
|
preference := model.Preference{
|
||||||
UserId: th.BasicUser.Id,
|
UserId: th.BasicUser.Id,
|
||||||
Category: model.PREFERENCE_CATEGORY_DISPLAY_SETTINGS,
|
Category: model.PreferenceCategoryDisplaySettings,
|
||||||
Name: model.PREFERENCE_NAME_COLLAPSED_THREADS_ENABLED,
|
Name: model.PreferenceNameCollapsedThreadsEnabled,
|
||||||
Value: "off",
|
Value: "off",
|
||||||
}
|
}
|
||||||
var preferences model.Preferences
|
var preferences model.Preferences
|
||||||
@@ -2210,7 +2210,7 @@ func TestMarkUnreadWithThreads(t *testing.T) {
|
|||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) {
|
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||||
*cfg.ServiceSettings.ThreadAutoFollow = true
|
*cfg.ServiceSettings.ThreadAutoFollow = true
|
||||||
*cfg.ServiceSettings.CollapsedThreads = model.COLLAPSED_THREADS_DEFAULT_ON
|
*cfg.ServiceSettings.CollapsedThreads = model.CollapsedThreadsDefaultOn
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("Follow threads only if specified", func(t *testing.T) {
|
t.Run("Follow threads only if specified", func(t *testing.T) {
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ func (a *App) getSysAdminsEmailRecipients() ([]*model.User, *model.AppError) {
|
|||||||
userOptions := &model.UserGetOptions{
|
userOptions := &model.UserGetOptions{
|
||||||
Page: 0,
|
Page: 0,
|
||||||
PerPage: 100,
|
PerPage: 100,
|
||||||
Role: model.SYSTEM_ADMIN_ROLE_ID,
|
Role: model.SystemAdminRoleId,
|
||||||
Inactive: false,
|
Inactive: false,
|
||||||
}
|
}
|
||||||
return a.GetUsers(userOptions)
|
return a.GetUsers(userOptions)
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ func TestClusterDiscoveryService(t *testing.T) {
|
|||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
|
|
||||||
ds := th.App.NewClusterDiscoveryService()
|
ds := th.App.NewClusterDiscoveryService()
|
||||||
ds.Type = model.CDS_TYPE_APP
|
ds.Type = model.CDSTypeApp
|
||||||
ds.ClusterName = "ClusterA"
|
ds.ClusterName = "ClusterA"
|
||||||
ds.AutoFillHostname()
|
ds.AutoFillHostname()
|
||||||
|
|
||||||
|
|||||||
@@ -53,19 +53,19 @@ func (s *Server) clusterPluginEventHandler(msg *model.ClusterMessage) {
|
|||||||
// The cluster event handlers are spread across this function and NewLocalCacheLayer.
|
// The cluster event handlers are spread across this function and NewLocalCacheLayer.
|
||||||
// Be careful to not have duplicated handlers here and there.
|
// Be careful to not have duplicated handlers here and there.
|
||||||
func (s *Server) registerClusterHandlers() {
|
func (s *Server) registerClusterHandlers() {
|
||||||
s.Cluster.RegisterClusterMessageHandler(model.CLUSTER_EVENT_PUBLISH, s.clusterPublishHandler)
|
s.Cluster.RegisterClusterMessageHandler(model.ClusterEventPublish, s.clusterPublishHandler)
|
||||||
s.Cluster.RegisterClusterMessageHandler(model.CLUSTER_EVENT_UPDATE_STATUS, s.clusterUpdateStatusHandler)
|
s.Cluster.RegisterClusterMessageHandler(model.ClusterEventUpdateStatus, s.clusterUpdateStatusHandler)
|
||||||
s.Cluster.RegisterClusterMessageHandler(model.CLUSTER_EVENT_INVALIDATE_ALL_CACHES, s.clusterInvalidateAllCachesHandler)
|
s.Cluster.RegisterClusterMessageHandler(model.ClusterEventInvalidateAllCaches, s.clusterInvalidateAllCachesHandler)
|
||||||
s.Cluster.RegisterClusterMessageHandler(model.CLUSTER_EVENT_INVALIDATE_CACHE_FOR_CHANNEL_MEMBERS_NOTIFY_PROPS, s.clusterInvalidateCacheForChannelMembersNotifyPropHandler)
|
s.Cluster.RegisterClusterMessageHandler(model.ClusterEventInvalidateCacheForChannelMembersNotifyProps, s.clusterInvalidateCacheForChannelMembersNotifyPropHandler)
|
||||||
s.Cluster.RegisterClusterMessageHandler(model.CLUSTER_EVENT_INVALIDATE_CACHE_FOR_CHANNEL_BY_NAME, s.clusterInvalidateCacheForChannelByNameHandler)
|
s.Cluster.RegisterClusterMessageHandler(model.ClusterEventInvalidateCacheForChannelByName, s.clusterInvalidateCacheForChannelByNameHandler)
|
||||||
s.Cluster.RegisterClusterMessageHandler(model.CLUSTER_EVENT_INVALIDATE_CACHE_FOR_USER, s.clusterInvalidateCacheForUserHandler)
|
s.Cluster.RegisterClusterMessageHandler(model.ClusterEventInvalidateCacheForUser, s.clusterInvalidateCacheForUserHandler)
|
||||||
s.Cluster.RegisterClusterMessageHandler(model.CLUSTER_EVENT_INVALIDATE_CACHE_FOR_USER_TEAMS, s.clusterInvalidateCacheForUserTeamsHandler)
|
s.Cluster.RegisterClusterMessageHandler(model.ClusterEventInvalidateCacheForUserTeams, s.clusterInvalidateCacheForUserTeamsHandler)
|
||||||
s.Cluster.RegisterClusterMessageHandler(model.CLUSTER_EVENT_BUSY_STATE_CHANGED, s.clusterBusyStateChgHandler)
|
s.Cluster.RegisterClusterMessageHandler(model.ClusterEventBusyStateChanged, s.clusterBusyStateChgHandler)
|
||||||
s.Cluster.RegisterClusterMessageHandler(model.CLUSTER_EVENT_CLEAR_SESSION_CACHE_FOR_USER, s.clusterClearSessionCacheForUserHandler)
|
s.Cluster.RegisterClusterMessageHandler(model.ClusterEventClearSessionCacheForUser, s.clusterClearSessionCacheForUserHandler)
|
||||||
s.Cluster.RegisterClusterMessageHandler(model.CLUSTER_EVENT_CLEAR_SESSION_CACHE_FOR_ALL_USERS, s.clusterClearSessionCacheForAllUsersHandler)
|
s.Cluster.RegisterClusterMessageHandler(model.ClusterEventClearSessionCacheForAllUsers, s.clusterClearSessionCacheForAllUsersHandler)
|
||||||
s.Cluster.RegisterClusterMessageHandler(model.CLUSTER_EVENT_INSTALL_PLUGIN, s.clusterInstallPluginHandler)
|
s.Cluster.RegisterClusterMessageHandler(model.ClusterEventInstallPlugin, s.clusterInstallPluginHandler)
|
||||||
s.Cluster.RegisterClusterMessageHandler(model.CLUSTER_EVENT_REMOVE_PLUGIN, s.clusterRemovePluginHandler)
|
s.Cluster.RegisterClusterMessageHandler(model.ClusterEventRemovePlugin, s.clusterRemovePluginHandler)
|
||||||
s.Cluster.RegisterClusterMessageHandler(model.CLUSTER_EVENT_PLUGIN_EVENT, s.clusterPluginEventHandler)
|
s.Cluster.RegisterClusterMessageHandler(model.ClusterEventPluginEvent, s.clusterPluginEventHandler)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) clusterPublishHandler(msg *model.ClusterMessage) {
|
func (s *Server) clusterPublishHandler(msg *model.ClusterMessage) {
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ func (a *App) CreateCommandPost(c *request.Context, post *model.Post, teamID str
|
|||||||
|
|
||||||
post.CreateAt = model.GetMillis()
|
post.CreateAt = model.GetMillis()
|
||||||
|
|
||||||
if strings.HasPrefix(post.Type, model.POST_SYSTEM_MESSAGE_PREFIX) {
|
if strings.HasPrefix(post.Type, model.PostSystemMessagePrefix) {
|
||||||
err := model.NewAppError("CreateCommandPost", "api.context.invalid_param.app_error", map[string]interface{}{"Name": "post.type"}, "", http.StatusBadRequest)
|
err := model.NewAppError("CreateCommandPost", "api.context.invalid_param.app_error", map[string]interface{}{"Name": "post.type"}, "", http.StatusBadRequest)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -65,11 +65,11 @@ func (a *App) CreateCommandPost(c *request.Context, post *model.Post, teamID str
|
|||||||
model.ParseSlackAttachment(post, response.Attachments)
|
model.ParseSlackAttachment(post, response.Attachments)
|
||||||
}
|
}
|
||||||
|
|
||||||
if response.ResponseType == model.COMMAND_RESPONSE_TYPE_IN_CHANNEL {
|
if response.ResponseType == model.CommandResponseTypeInChannel {
|
||||||
return a.CreatePostMissingChannel(c, post, true)
|
return a.CreatePostMissingChannel(c, post, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (response.ResponseType == "" || response.ResponseType == model.COMMAND_RESPONSE_TYPE_EPHEMERAL) && (response.Text != "" || response.Attachments != nil) {
|
if (response.ResponseType == "" || response.ResponseType == model.CommandResponseTypeEphemeral) && (response.Text != "" || response.Attachments != nil) {
|
||||||
post.ParentId = ""
|
post.ParentId = ""
|
||||||
a.SendEphemeralPost(post.UserId, post)
|
a.SendEphemeralPost(post.UserId, post)
|
||||||
}
|
}
|
||||||
@@ -477,7 +477,7 @@ func (a *App) DoCommandRequest(cmd *model.Command, p url.Values) (*model.Command
|
|||||||
// Prepare the request
|
// Prepare the request
|
||||||
var req *http.Request
|
var req *http.Request
|
||||||
var err error
|
var err error
|
||||||
if cmd.Method == model.COMMAND_METHOD_GET {
|
if cmd.Method == model.CommandMethodGet {
|
||||||
req, err = http.NewRequest(http.MethodGet, cmd.URL, nil)
|
req, err = http.NewRequest(http.MethodGet, cmd.URL, nil)
|
||||||
} else {
|
} else {
|
||||||
req, err = http.NewRequest(http.MethodPost, cmd.URL, strings.NewReader(p.Encode()))
|
req, err = http.NewRequest(http.MethodPost, cmd.URL, strings.NewReader(p.Encode()))
|
||||||
@@ -487,7 +487,7 @@ func (a *App) DoCommandRequest(cmd *model.Command, p url.Values) (*model.Command
|
|||||||
return cmd, nil, model.NewAppError("command", "api.command.execute_command.failed.app_error", map[string]interface{}{"Trigger": cmd.Trigger}, err.Error(), http.StatusInternalServerError)
|
return cmd, nil, model.NewAppError("command", "api.command.execute_command.failed.app_error", map[string]interface{}{"Trigger": cmd.Trigger}, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
|
|
||||||
if cmd.Method == model.COMMAND_METHOD_GET {
|
if cmd.Method == model.CommandMethodGet {
|
||||||
if req.URL.RawQuery != "" {
|
if req.URL.RawQuery != "" {
|
||||||
req.URL.RawQuery += "&"
|
req.URL.RawQuery += "&"
|
||||||
}
|
}
|
||||||
@@ -496,7 +496,7 @@ func (a *App) DoCommandRequest(cmd *model.Command, p url.Values) (*model.Command
|
|||||||
|
|
||||||
req.Header.Set("Accept", "application/json")
|
req.Header.Set("Accept", "application/json")
|
||||||
req.Header.Set("Authorization", "Token "+cmd.Token)
|
req.Header.Set("Authorization", "Token "+cmd.Token)
|
||||||
if cmd.Method == model.COMMAND_METHOD_POST {
|
if cmd.Method == model.CommandMethodPost {
|
||||||
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
|
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ func (a *App) getSuggestions(c *request.Context, commandArgs *model.CommandArgs,
|
|||||||
|
|
||||||
if index == -1 { // no space in input
|
if index == -1 { // no space in input
|
||||||
for _, command := range commands {
|
for _, command := range commands {
|
||||||
if strings.HasPrefix(command.Trigger, strings.ToLower(inputToBeParsed)) && (command.RoleID == roleID || roleID == model.SYSTEM_ADMIN_ROLE_ID || roleID == "") {
|
if strings.HasPrefix(command.Trigger, strings.ToLower(inputToBeParsed)) && (command.RoleID == roleID || roleID == model.SystemAdminRoleId || roleID == "") {
|
||||||
s := model.AutocompleteSuggestion{
|
s := model.AutocompleteSuggestion{
|
||||||
Complete: inputParsed + command.Trigger,
|
Complete: inputParsed + command.Trigger,
|
||||||
Suggestion: command.Trigger,
|
Suggestion: command.Trigger,
|
||||||
@@ -71,7 +71,7 @@ func (a *App) getSuggestions(c *request.Context, commandArgs *model.CommandArgs,
|
|||||||
if command.Trigger != strings.ToLower(inputToBeParsed[:index]) {
|
if command.Trigger != strings.ToLower(inputToBeParsed[:index]) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if roleID != "" && roleID != model.SYSTEM_ADMIN_ROLE_ID && roleID != command.RoleID {
|
if roleID != "" && roleID != model.SystemAdminRoleId && roleID != command.RoleID {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
toBeParsed := inputToBeParsed[index+1:]
|
toBeParsed := inputToBeParsed[index+1:]
|
||||||
|
|||||||
@@ -208,21 +208,21 @@ func TestSuggestions(t *testing.T) {
|
|||||||
jira := createJiraAutocompleteData()
|
jira := createJiraAutocompleteData()
|
||||||
emptyCmdArgs := &model.CommandArgs{}
|
emptyCmdArgs := &model.CommandArgs{}
|
||||||
|
|
||||||
suggestions := th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{jira}, "", "ji", model.SYSTEM_ADMIN_ROLE_ID)
|
suggestions := th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{jira}, "", "ji", model.SystemAdminRoleId)
|
||||||
assert.Len(t, suggestions, 1)
|
assert.Len(t, suggestions, 1)
|
||||||
assert.Equal(t, jira.Trigger, suggestions[0].Complete)
|
assert.Equal(t, jira.Trigger, suggestions[0].Complete)
|
||||||
assert.Equal(t, jira.Trigger, suggestions[0].Suggestion)
|
assert.Equal(t, jira.Trigger, suggestions[0].Suggestion)
|
||||||
assert.Equal(t, "[command]", suggestions[0].Hint)
|
assert.Equal(t, "[command]", suggestions[0].Hint)
|
||||||
assert.Equal(t, jira.HelpText, suggestions[0].Description)
|
assert.Equal(t, jira.HelpText, suggestions[0].Description)
|
||||||
|
|
||||||
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{jira}, "", "jira crea", model.SYSTEM_ADMIN_ROLE_ID)
|
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{jira}, "", "jira crea", model.SystemAdminRoleId)
|
||||||
assert.Len(t, suggestions, 1)
|
assert.Len(t, suggestions, 1)
|
||||||
assert.Equal(t, "jira create", suggestions[0].Complete)
|
assert.Equal(t, "jira create", suggestions[0].Complete)
|
||||||
assert.Equal(t, "create", suggestions[0].Suggestion)
|
assert.Equal(t, "create", suggestions[0].Suggestion)
|
||||||
assert.Equal(t, "[issue text]", suggestions[0].Hint)
|
assert.Equal(t, "[issue text]", suggestions[0].Hint)
|
||||||
assert.Equal(t, "Create a new Issue", suggestions[0].Description)
|
assert.Equal(t, "Create a new Issue", suggestions[0].Description)
|
||||||
|
|
||||||
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{jira}, "", "jira c", model.SYSTEM_ADMIN_ROLE_ID)
|
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{jira}, "", "jira c", model.SystemAdminRoleId)
|
||||||
assert.Len(t, suggestions, 2)
|
assert.Len(t, suggestions, 2)
|
||||||
assert.Equal(t, "jira create", suggestions[1].Complete)
|
assert.Equal(t, "jira create", suggestions[1].Complete)
|
||||||
assert.Equal(t, "create", suggestions[1].Suggestion)
|
assert.Equal(t, "create", suggestions[1].Suggestion)
|
||||||
@@ -233,27 +233,27 @@ func TestSuggestions(t *testing.T) {
|
|||||||
assert.Equal(t, "[url]", suggestions[0].Hint)
|
assert.Equal(t, "[url]", suggestions[0].Hint)
|
||||||
assert.Equal(t, "Connect your Mattermost account to your Jira account", suggestions[0].Description)
|
assert.Equal(t, "Connect your Mattermost account to your Jira account", suggestions[0].Description)
|
||||||
|
|
||||||
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{jira}, "", "jira create ", model.SYSTEM_ADMIN_ROLE_ID)
|
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{jira}, "", "jira create ", model.SystemAdminRoleId)
|
||||||
assert.Len(t, suggestions, 1)
|
assert.Len(t, suggestions, 1)
|
||||||
assert.Equal(t, "jira create ", suggestions[0].Complete)
|
assert.Equal(t, "jira create ", suggestions[0].Complete)
|
||||||
assert.Equal(t, "", suggestions[0].Suggestion)
|
assert.Equal(t, "", suggestions[0].Suggestion)
|
||||||
assert.Equal(t, "[text]", suggestions[0].Hint)
|
assert.Equal(t, "[text]", suggestions[0].Hint)
|
||||||
assert.Equal(t, "This text is optional, will be inserted into the description field", suggestions[0].Description)
|
assert.Equal(t, "This text is optional, will be inserted into the description field", suggestions[0].Description)
|
||||||
|
|
||||||
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{jira}, "", "jira create some", model.SYSTEM_ADMIN_ROLE_ID)
|
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{jira}, "", "jira create some", model.SystemAdminRoleId)
|
||||||
assert.Len(t, suggestions, 1)
|
assert.Len(t, suggestions, 1)
|
||||||
assert.Equal(t, "jira create some", suggestions[0].Complete)
|
assert.Equal(t, "jira create some", suggestions[0].Complete)
|
||||||
assert.Equal(t, "", suggestions[0].Suggestion)
|
assert.Equal(t, "", suggestions[0].Suggestion)
|
||||||
assert.Equal(t, "[text]", suggestions[0].Hint)
|
assert.Equal(t, "[text]", suggestions[0].Hint)
|
||||||
assert.Equal(t, "This text is optional, will be inserted into the description field", suggestions[0].Description)
|
assert.Equal(t, "This text is optional, will be inserted into the description field", suggestions[0].Description)
|
||||||
|
|
||||||
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{jira}, "", "jira create some text ", model.SYSTEM_ADMIN_ROLE_ID)
|
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{jira}, "", "jira create some text ", model.SystemAdminRoleId)
|
||||||
assert.Len(t, suggestions, 0)
|
assert.Len(t, suggestions, 0)
|
||||||
|
|
||||||
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{jira}, "", "invalid command", model.SYSTEM_ADMIN_ROLE_ID)
|
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{jira}, "", "invalid command", model.SystemAdminRoleId)
|
||||||
assert.Len(t, suggestions, 0)
|
assert.Len(t, suggestions, 0)
|
||||||
|
|
||||||
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{jira}, "", "jira settings notifications o", model.SYSTEM_ADMIN_ROLE_ID)
|
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{jira}, "", "jira settings notifications o", model.SystemAdminRoleId)
|
||||||
assert.Len(t, suggestions, 2)
|
assert.Len(t, suggestions, 2)
|
||||||
assert.Equal(t, "jira settings notifications On", suggestions[0].Complete)
|
assert.Equal(t, "jira settings notifications On", suggestions[0].Complete)
|
||||||
assert.Equal(t, "On", suggestions[0].Suggestion)
|
assert.Equal(t, "On", suggestions[0].Suggestion)
|
||||||
@@ -264,48 +264,48 @@ func TestSuggestions(t *testing.T) {
|
|||||||
assert.Equal(t, "Turn notifications off", suggestions[1].Hint)
|
assert.Equal(t, "Turn notifications off", suggestions[1].Hint)
|
||||||
assert.Equal(t, "", suggestions[1].Description)
|
assert.Equal(t, "", suggestions[1].Description)
|
||||||
|
|
||||||
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{jira}, "", "jira ", model.SYSTEM_ADMIN_ROLE_ID)
|
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{jira}, "", "jira ", model.SystemAdminRoleId)
|
||||||
assert.Len(t, suggestions, 11)
|
assert.Len(t, suggestions, 11)
|
||||||
|
|
||||||
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{jira}, "", "jira ", model.SYSTEM_USER_ROLE_ID)
|
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{jira}, "", "jira ", model.SystemUserRoleId)
|
||||||
assert.Len(t, suggestions, 9)
|
assert.Len(t, suggestions, 9)
|
||||||
|
|
||||||
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{jira}, "", "jira create \"some issue text", model.SYSTEM_ADMIN_ROLE_ID)
|
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{jira}, "", "jira create \"some issue text", model.SystemAdminRoleId)
|
||||||
assert.Len(t, suggestions, 1)
|
assert.Len(t, suggestions, 1)
|
||||||
assert.Equal(t, "jira create \"some issue text", suggestions[0].Complete)
|
assert.Equal(t, "jira create \"some issue text", suggestions[0].Complete)
|
||||||
assert.Equal(t, "", suggestions[0].Suggestion)
|
assert.Equal(t, "", suggestions[0].Suggestion)
|
||||||
assert.Equal(t, "[text]", suggestions[0].Hint)
|
assert.Equal(t, "[text]", suggestions[0].Hint)
|
||||||
assert.Equal(t, "This text is optional, will be inserted into the description field", suggestions[0].Description)
|
assert.Equal(t, "This text is optional, will be inserted into the description field", suggestions[0].Description)
|
||||||
|
|
||||||
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{jira}, "", "jira timezone ", model.SYSTEM_ADMIN_ROLE_ID)
|
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{jira}, "", "jira timezone ", model.SystemAdminRoleId)
|
||||||
assert.Len(t, suggestions, 1)
|
assert.Len(t, suggestions, 1)
|
||||||
assert.Equal(t, "jira timezone --zone ", suggestions[0].Complete)
|
assert.Equal(t, "jira timezone --zone ", suggestions[0].Complete)
|
||||||
assert.Equal(t, "--zone", suggestions[0].Suggestion)
|
assert.Equal(t, "--zone", suggestions[0].Suggestion)
|
||||||
assert.Equal(t, "", suggestions[0].Hint)
|
assert.Equal(t, "", suggestions[0].Hint)
|
||||||
assert.Equal(t, "Set timezone", suggestions[0].Description)
|
assert.Equal(t, "Set timezone", suggestions[0].Description)
|
||||||
|
|
||||||
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{jira}, "", "jira timezone --", model.SYSTEM_ADMIN_ROLE_ID)
|
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{jira}, "", "jira timezone --", model.SystemAdminRoleId)
|
||||||
assert.Len(t, suggestions, 1)
|
assert.Len(t, suggestions, 1)
|
||||||
assert.Equal(t, "jira timezone --zone ", suggestions[0].Complete)
|
assert.Equal(t, "jira timezone --zone ", suggestions[0].Complete)
|
||||||
assert.Equal(t, "--zone", suggestions[0].Suggestion)
|
assert.Equal(t, "--zone", suggestions[0].Suggestion)
|
||||||
assert.Equal(t, "", suggestions[0].Hint)
|
assert.Equal(t, "", suggestions[0].Hint)
|
||||||
assert.Equal(t, "Set timezone", suggestions[0].Description)
|
assert.Equal(t, "Set timezone", suggestions[0].Description)
|
||||||
|
|
||||||
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{jira}, "", "jira timezone --zone ", model.SYSTEM_ADMIN_ROLE_ID)
|
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{jira}, "", "jira timezone --zone ", model.SystemAdminRoleId)
|
||||||
assert.Len(t, suggestions, 1)
|
assert.Len(t, suggestions, 1)
|
||||||
assert.Equal(t, "jira timezone --zone ", suggestions[0].Complete)
|
assert.Equal(t, "jira timezone --zone ", suggestions[0].Complete)
|
||||||
assert.Equal(t, "", suggestions[0].Suggestion)
|
assert.Equal(t, "", suggestions[0].Suggestion)
|
||||||
assert.Equal(t, "[UTC+07:00]", suggestions[0].Hint)
|
assert.Equal(t, "[UTC+07:00]", suggestions[0].Hint)
|
||||||
assert.Equal(t, "Set timezone", suggestions[0].Description)
|
assert.Equal(t, "Set timezone", suggestions[0].Description)
|
||||||
|
|
||||||
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{jira}, "", "jira timezone --zone bla", model.SYSTEM_ADMIN_ROLE_ID)
|
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{jira}, "", "jira timezone --zone bla", model.SystemAdminRoleId)
|
||||||
assert.Len(t, suggestions, 1)
|
assert.Len(t, suggestions, 1)
|
||||||
assert.Equal(t, "jira timezone --zone bla", suggestions[0].Complete)
|
assert.Equal(t, "jira timezone --zone bla", suggestions[0].Complete)
|
||||||
assert.Equal(t, "", suggestions[0].Suggestion)
|
assert.Equal(t, "", suggestions[0].Suggestion)
|
||||||
assert.Equal(t, "[UTC+07:00]", suggestions[0].Hint)
|
assert.Equal(t, "[UTC+07:00]", suggestions[0].Hint)
|
||||||
assert.Equal(t, "Set timezone", suggestions[0].Description)
|
assert.Equal(t, "Set timezone", suggestions[0].Description)
|
||||||
|
|
||||||
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{jira}, "", "jira timezone bla", model.SYSTEM_ADMIN_ROLE_ID)
|
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{jira}, "", "jira timezone bla", model.SystemAdminRoleId)
|
||||||
assert.Len(t, suggestions, 0)
|
assert.Len(t, suggestions, 0)
|
||||||
|
|
||||||
commandA := &model.Command{
|
commandA := &model.Command{
|
||||||
@@ -320,7 +320,7 @@ func TestSuggestions(t *testing.T) {
|
|||||||
Trigger: "charles",
|
Trigger: "charles",
|
||||||
AutocompleteData: model.NewAutocompleteData("charles", "", ""),
|
AutocompleteData: model.NewAutocompleteData("charles", "", ""),
|
||||||
}
|
}
|
||||||
suggestions = th.App.GetSuggestions(th.Context, emptyCmdArgs, []*model.Command{commandB, commandC, commandA}, model.SYSTEM_ADMIN_ROLE_ID)
|
suggestions = th.App.GetSuggestions(th.Context, emptyCmdArgs, []*model.Command{commandB, commandC, commandA}, model.SystemAdminRoleId)
|
||||||
assert.Len(t, suggestions, 3)
|
assert.Len(t, suggestions, 3)
|
||||||
assert.Equal(t, "alice", suggestions[0].Complete)
|
assert.Equal(t, "alice", suggestions[0].Complete)
|
||||||
assert.Equal(t, "bob", suggestions[1].Complete)
|
assert.Equal(t, "bob", suggestions[1].Complete)
|
||||||
@@ -334,14 +334,14 @@ func TestCommandWithOptionalArgs(t *testing.T) {
|
|||||||
command := createCommandWithOptionalArgs()
|
command := createCommandWithOptionalArgs()
|
||||||
emptyCmdArgs := &model.CommandArgs{}
|
emptyCmdArgs := &model.CommandArgs{}
|
||||||
|
|
||||||
suggestions := th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{command}, "", "comm", model.SYSTEM_ADMIN_ROLE_ID)
|
suggestions := th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{command}, "", "comm", model.SystemAdminRoleId)
|
||||||
assert.Len(t, suggestions, 1)
|
assert.Len(t, suggestions, 1)
|
||||||
assert.Equal(t, command.Trigger, suggestions[0].Complete)
|
assert.Equal(t, command.Trigger, suggestions[0].Complete)
|
||||||
assert.Equal(t, command.Trigger, suggestions[0].Suggestion)
|
assert.Equal(t, command.Trigger, suggestions[0].Suggestion)
|
||||||
assert.Equal(t, "", suggestions[0].Hint)
|
assert.Equal(t, "", suggestions[0].Hint)
|
||||||
assert.Equal(t, command.HelpText, suggestions[0].Description)
|
assert.Equal(t, command.HelpText, suggestions[0].Description)
|
||||||
|
|
||||||
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{command}, "", "command ", model.SYSTEM_ADMIN_ROLE_ID)
|
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{command}, "", "command ", model.SystemAdminRoleId)
|
||||||
assert.Len(t, suggestions, 4)
|
assert.Len(t, suggestions, 4)
|
||||||
assert.Equal(t, "command subcommand1", suggestions[0].Complete)
|
assert.Equal(t, "command subcommand1", suggestions[0].Complete)
|
||||||
assert.Equal(t, "subcommand1", suggestions[0].Suggestion)
|
assert.Equal(t, "subcommand1", suggestions[0].Suggestion)
|
||||||
@@ -356,7 +356,7 @@ func TestCommandWithOptionalArgs(t *testing.T) {
|
|||||||
assert.Equal(t, "", suggestions[2].Hint)
|
assert.Equal(t, "", suggestions[2].Hint)
|
||||||
assert.Equal(t, "", suggestions[2].Description)
|
assert.Equal(t, "", suggestions[2].Description)
|
||||||
|
|
||||||
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{command}, "", "command subcommand1 ", model.SYSTEM_ADMIN_ROLE_ID)
|
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{command}, "", "command subcommand1 ", model.SystemAdminRoleId)
|
||||||
assert.Len(t, suggestions, 2)
|
assert.Len(t, suggestions, 2)
|
||||||
assert.Equal(t, "command subcommand1 item1", suggestions[0].Complete)
|
assert.Equal(t, "command subcommand1 item1", suggestions[0].Complete)
|
||||||
assert.Equal(t, "item1", suggestions[0].Suggestion)
|
assert.Equal(t, "item1", suggestions[0].Suggestion)
|
||||||
@@ -367,21 +367,21 @@ func TestCommandWithOptionalArgs(t *testing.T) {
|
|||||||
assert.Equal(t, "", suggestions[1].Hint)
|
assert.Equal(t, "", suggestions[1].Hint)
|
||||||
assert.Equal(t, "", suggestions[1].Description)
|
assert.Equal(t, "", suggestions[1].Description)
|
||||||
|
|
||||||
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{command}, "", "command subcommand1 item1 ", model.SYSTEM_ADMIN_ROLE_ID)
|
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{command}, "", "command subcommand1 item1 ", model.SystemAdminRoleId)
|
||||||
assert.Len(t, suggestions, 1)
|
assert.Len(t, suggestions, 1)
|
||||||
assert.Equal(t, "command subcommand1 item1 --name2 ", suggestions[0].Complete)
|
assert.Equal(t, "command subcommand1 item1 --name2 ", suggestions[0].Complete)
|
||||||
assert.Equal(t, "--name2", suggestions[0].Suggestion)
|
assert.Equal(t, "--name2", suggestions[0].Suggestion)
|
||||||
assert.Equal(t, "", suggestions[0].Hint)
|
assert.Equal(t, "", suggestions[0].Hint)
|
||||||
assert.Equal(t, "arg2", suggestions[0].Description)
|
assert.Equal(t, "arg2", suggestions[0].Description)
|
||||||
|
|
||||||
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{command}, "", "command subcommand1 item1 --name2 bla", model.SYSTEM_ADMIN_ROLE_ID)
|
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{command}, "", "command subcommand1 item1 --name2 bla", model.SystemAdminRoleId)
|
||||||
assert.Len(t, suggestions, 1)
|
assert.Len(t, suggestions, 1)
|
||||||
assert.Equal(t, "command subcommand1 item1 --name2 bla", suggestions[0].Complete)
|
assert.Equal(t, "command subcommand1 item1 --name2 bla", suggestions[0].Complete)
|
||||||
assert.Equal(t, "", suggestions[0].Suggestion)
|
assert.Equal(t, "", suggestions[0].Suggestion)
|
||||||
assert.Equal(t, "", suggestions[0].Hint)
|
assert.Equal(t, "", suggestions[0].Hint)
|
||||||
assert.Equal(t, "arg2", suggestions[0].Description)
|
assert.Equal(t, "arg2", suggestions[0].Description)
|
||||||
|
|
||||||
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{command}, "", "command subcommand2 ", model.SYSTEM_ADMIN_ROLE_ID)
|
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{command}, "", "command subcommand2 ", model.SystemAdminRoleId)
|
||||||
assert.Len(t, suggestions, 2)
|
assert.Len(t, suggestions, 2)
|
||||||
assert.Equal(t, "command subcommand2 --name1 ", suggestions[0].Complete)
|
assert.Equal(t, "command subcommand2 --name1 ", suggestions[0].Complete)
|
||||||
assert.Equal(t, "--name1", suggestions[0].Suggestion)
|
assert.Equal(t, "--name1", suggestions[0].Suggestion)
|
||||||
@@ -392,7 +392,7 @@ func TestCommandWithOptionalArgs(t *testing.T) {
|
|||||||
assert.Equal(t, "", suggestions[1].Hint)
|
assert.Equal(t, "", suggestions[1].Hint)
|
||||||
assert.Equal(t, "arg2", suggestions[1].Description)
|
assert.Equal(t, "arg2", suggestions[1].Description)
|
||||||
|
|
||||||
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{command}, "", "command subcommand2 -", model.SYSTEM_ADMIN_ROLE_ID)
|
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{command}, "", "command subcommand2 -", model.SystemAdminRoleId)
|
||||||
assert.Len(t, suggestions, 2)
|
assert.Len(t, suggestions, 2)
|
||||||
assert.Equal(t, "command subcommand2 --name1 ", suggestions[0].Complete)
|
assert.Equal(t, "command subcommand2 --name1 ", suggestions[0].Complete)
|
||||||
assert.Equal(t, "--name1", suggestions[0].Suggestion)
|
assert.Equal(t, "--name1", suggestions[0].Suggestion)
|
||||||
@@ -403,7 +403,7 @@ func TestCommandWithOptionalArgs(t *testing.T) {
|
|||||||
assert.Equal(t, "", suggestions[1].Hint)
|
assert.Equal(t, "", suggestions[1].Hint)
|
||||||
assert.Equal(t, "arg2", suggestions[1].Description)
|
assert.Equal(t, "arg2", suggestions[1].Description)
|
||||||
|
|
||||||
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{command}, "", "command subcommand2 --name1 ", model.SYSTEM_ADMIN_ROLE_ID)
|
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{command}, "", "command subcommand2 --name1 ", model.SystemAdminRoleId)
|
||||||
assert.Len(t, suggestions, 3)
|
assert.Len(t, suggestions, 3)
|
||||||
assert.Equal(t, "command subcommand2 --name1 item1", suggestions[0].Complete)
|
assert.Equal(t, "command subcommand2 --name1 item1", suggestions[0].Complete)
|
||||||
assert.Equal(t, "item1", suggestions[0].Suggestion)
|
assert.Equal(t, "item1", suggestions[0].Suggestion)
|
||||||
@@ -418,7 +418,7 @@ func TestCommandWithOptionalArgs(t *testing.T) {
|
|||||||
assert.Equal(t, "", suggestions[2].Hint)
|
assert.Equal(t, "", suggestions[2].Hint)
|
||||||
assert.Equal(t, "arg3", suggestions[2].Description)
|
assert.Equal(t, "arg3", suggestions[2].Description)
|
||||||
|
|
||||||
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{command}, "", "command subcommand2 --name1 item", model.SYSTEM_ADMIN_ROLE_ID)
|
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{command}, "", "command subcommand2 --name1 item", model.SystemAdminRoleId)
|
||||||
assert.Len(t, suggestions, 3)
|
assert.Len(t, suggestions, 3)
|
||||||
assert.Equal(t, "command subcommand2 --name1 item1", suggestions[0].Complete)
|
assert.Equal(t, "command subcommand2 --name1 item1", suggestions[0].Complete)
|
||||||
assert.Equal(t, "item1", suggestions[0].Suggestion)
|
assert.Equal(t, "item1", suggestions[0].Suggestion)
|
||||||
@@ -433,24 +433,24 @@ func TestCommandWithOptionalArgs(t *testing.T) {
|
|||||||
assert.Equal(t, "", suggestions[2].Hint)
|
assert.Equal(t, "", suggestions[2].Hint)
|
||||||
assert.Equal(t, "arg3", suggestions[2].Description)
|
assert.Equal(t, "arg3", suggestions[2].Description)
|
||||||
|
|
||||||
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{command}, "", "command subcommand2 --name1 item1 ", model.SYSTEM_ADMIN_ROLE_ID)
|
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{command}, "", "command subcommand2 --name1 item1 ", model.SystemAdminRoleId)
|
||||||
assert.Len(t, suggestions, 1)
|
assert.Len(t, suggestions, 1)
|
||||||
assert.Equal(t, "command subcommand2 --name1 item1 ", suggestions[0].Complete)
|
assert.Equal(t, "command subcommand2 --name1 item1 ", suggestions[0].Complete)
|
||||||
assert.Equal(t, "", suggestions[0].Suggestion)
|
assert.Equal(t, "", suggestions[0].Suggestion)
|
||||||
assert.Equal(t, "", suggestions[0].Hint)
|
assert.Equal(t, "", suggestions[0].Hint)
|
||||||
assert.Equal(t, "arg2", suggestions[0].Description)
|
assert.Equal(t, "arg2", suggestions[0].Description)
|
||||||
|
|
||||||
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{command}, "", "command subcommand2 --name1 item1 bla ", model.SYSTEM_ADMIN_ROLE_ID)
|
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{command}, "", "command subcommand2 --name1 item1 bla ", model.SystemAdminRoleId)
|
||||||
assert.Len(t, suggestions, 1)
|
assert.Len(t, suggestions, 1)
|
||||||
assert.Equal(t, "command subcommand2 --name1 item1 bla ", suggestions[0].Complete)
|
assert.Equal(t, "command subcommand2 --name1 item1 bla ", suggestions[0].Complete)
|
||||||
assert.Equal(t, "", suggestions[0].Suggestion)
|
assert.Equal(t, "", suggestions[0].Suggestion)
|
||||||
assert.Equal(t, "", suggestions[0].Hint)
|
assert.Equal(t, "", suggestions[0].Hint)
|
||||||
assert.Equal(t, "arg3", suggestions[0].Description)
|
assert.Equal(t, "arg3", suggestions[0].Description)
|
||||||
|
|
||||||
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{command}, "", "command subcommand2 --name1 item1 bla bla ", model.SYSTEM_ADMIN_ROLE_ID)
|
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{command}, "", "command subcommand2 --name1 item1 bla bla ", model.SystemAdminRoleId)
|
||||||
assert.Len(t, suggestions, 0)
|
assert.Len(t, suggestions, 0)
|
||||||
|
|
||||||
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{command}, "", "command subcommand3 ", model.SYSTEM_ADMIN_ROLE_ID)
|
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{command}, "", "command subcommand3 ", model.SystemAdminRoleId)
|
||||||
assert.Len(t, suggestions, 3)
|
assert.Len(t, suggestions, 3)
|
||||||
assert.Equal(t, "command subcommand3 --name1 ", suggestions[0].Complete)
|
assert.Equal(t, "command subcommand3 --name1 ", suggestions[0].Complete)
|
||||||
assert.Equal(t, "--name1", suggestions[0].Suggestion)
|
assert.Equal(t, "--name1", suggestions[0].Suggestion)
|
||||||
@@ -465,7 +465,7 @@ func TestCommandWithOptionalArgs(t *testing.T) {
|
|||||||
assert.Equal(t, "", suggestions[2].Hint)
|
assert.Equal(t, "", suggestions[2].Hint)
|
||||||
assert.Equal(t, "arg3", suggestions[2].Description)
|
assert.Equal(t, "arg3", suggestions[2].Description)
|
||||||
|
|
||||||
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{command}, "", "command subcommand3 --name", model.SYSTEM_ADMIN_ROLE_ID)
|
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{command}, "", "command subcommand3 --name", model.SystemAdminRoleId)
|
||||||
assert.Len(t, suggestions, 3)
|
assert.Len(t, suggestions, 3)
|
||||||
assert.Equal(t, "command subcommand3 --name1 ", suggestions[0].Complete)
|
assert.Equal(t, "command subcommand3 --name1 ", suggestions[0].Complete)
|
||||||
assert.Equal(t, "--name1", suggestions[0].Suggestion)
|
assert.Equal(t, "--name1", suggestions[0].Suggestion)
|
||||||
@@ -480,7 +480,7 @@ func TestCommandWithOptionalArgs(t *testing.T) {
|
|||||||
assert.Equal(t, "", suggestions[2].Hint)
|
assert.Equal(t, "", suggestions[2].Hint)
|
||||||
assert.Equal(t, "arg3", suggestions[2].Description)
|
assert.Equal(t, "arg3", suggestions[2].Description)
|
||||||
|
|
||||||
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{command}, "", "command subcommand3 --name1 ", model.SYSTEM_ADMIN_ROLE_ID)
|
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{command}, "", "command subcommand3 --name1 ", model.SystemAdminRoleId)
|
||||||
assert.Len(t, suggestions, 2)
|
assert.Len(t, suggestions, 2)
|
||||||
assert.Equal(t, "command subcommand3 --name1 item1", suggestions[0].Complete)
|
assert.Equal(t, "command subcommand3 --name1 item1", suggestions[0].Complete)
|
||||||
assert.Equal(t, "item1", suggestions[0].Suggestion)
|
assert.Equal(t, "item1", suggestions[0].Suggestion)
|
||||||
@@ -491,7 +491,7 @@ func TestCommandWithOptionalArgs(t *testing.T) {
|
|||||||
assert.Equal(t, "", suggestions[1].Hint)
|
assert.Equal(t, "", suggestions[1].Hint)
|
||||||
assert.Equal(t, "", suggestions[1].Description)
|
assert.Equal(t, "", suggestions[1].Description)
|
||||||
|
|
||||||
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{command}, "", "command subcommand4 ", model.SYSTEM_ADMIN_ROLE_ID)
|
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{command}, "", "command subcommand4 ", model.SystemAdminRoleId)
|
||||||
assert.Len(t, suggestions, 2)
|
assert.Len(t, suggestions, 2)
|
||||||
assert.Equal(t, "command subcommand4 item1", suggestions[0].Complete)
|
assert.Equal(t, "command subcommand4 item1", suggestions[0].Complete)
|
||||||
assert.Equal(t, "item1", suggestions[0].Suggestion)
|
assert.Equal(t, "item1", suggestions[0].Suggestion)
|
||||||
@@ -502,7 +502,7 @@ func TestCommandWithOptionalArgs(t *testing.T) {
|
|||||||
assert.Equal(t, "message", suggestions[1].Hint)
|
assert.Equal(t, "message", suggestions[1].Hint)
|
||||||
assert.Equal(t, "help4", suggestions[1].Description)
|
assert.Equal(t, "help4", suggestions[1].Description)
|
||||||
|
|
||||||
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{command}, "", "command subcommand4 item1 ", model.SYSTEM_ADMIN_ROLE_ID)
|
suggestions = th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{command}, "", "command subcommand4 item1 ", model.SystemAdminRoleId)
|
||||||
assert.Len(t, suggestions, 1)
|
assert.Len(t, suggestions, 1)
|
||||||
assert.Equal(t, "command subcommand4 item1 ", suggestions[0].Complete)
|
assert.Equal(t, "command subcommand4 item1 ", suggestions[0].Complete)
|
||||||
assert.Equal(t, "", suggestions[0].Suggestion)
|
assert.Equal(t, "", suggestions[0].Suggestion)
|
||||||
@@ -591,7 +591,7 @@ func createJiraAutocompleteData() *model.AutocompleteData {
|
|||||||
jira.AddCommand(timezone)
|
jira.AddCommand(timezone)
|
||||||
|
|
||||||
install := model.NewAutocompleteData("install", "", "Connect Mattermost to a Jira instance")
|
install := model.NewAutocompleteData("install", "", "Connect Mattermost to a Jira instance")
|
||||||
install.RoleID = model.SYSTEM_ADMIN_ROLE_ID
|
install.RoleID = model.SystemAdminRoleId
|
||||||
cloud := model.NewAutocompleteData("cloud", "", "Connect to a Jira Cloud instance")
|
cloud := model.NewAutocompleteData("cloud", "", "Connect to a Jira Cloud instance")
|
||||||
urlPattern := "https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\\+.~#?&//=]*)"
|
urlPattern := "https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\\+.~#?&//=]*)"
|
||||||
cloud.AddTextArgument("input URL of the Jira Cloud instance", "[URL]", urlPattern)
|
cloud.AddTextArgument("input URL of the Jira Cloud instance", "[URL]", urlPattern)
|
||||||
@@ -602,7 +602,7 @@ func createJiraAutocompleteData() *model.AutocompleteData {
|
|||||||
jira.AddCommand(install)
|
jira.AddCommand(install)
|
||||||
|
|
||||||
uninstall := model.NewAutocompleteData("uninstall", "", "Disconnect Mattermost from a Jira instance")
|
uninstall := model.NewAutocompleteData("uninstall", "", "Disconnect Mattermost from a Jira instance")
|
||||||
uninstall.RoleID = model.SYSTEM_ADMIN_ROLE_ID
|
uninstall.RoleID = model.SystemAdminRoleId
|
||||||
cloud = model.NewAutocompleteData("cloud", "", "Disconnect from a Jira Cloud instance")
|
cloud = model.NewAutocompleteData("cloud", "", "Disconnect from a Jira Cloud instance")
|
||||||
cloud.AddTextArgument("input URL of the Jira Cloud instance", "[URL]", urlPattern)
|
cloud.AddTextArgument("input URL of the Jira Cloud instance", "[URL]", urlPattern)
|
||||||
uninstall.AddCommand(cloud)
|
uninstall.AddCommand(cloud)
|
||||||
@@ -625,7 +625,7 @@ func TestDynamicListArgsForBuiltin(t *testing.T) {
|
|||||||
emptyCmdArgs := &model.CommandArgs{}
|
emptyCmdArgs := &model.CommandArgs{}
|
||||||
|
|
||||||
t.Run("GetAutoCompleteListItems", func(t *testing.T) {
|
t.Run("GetAutoCompleteListItems", func(t *testing.T) {
|
||||||
suggestions := th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{command.AutocompleteData}, "", "bogus --dynaArg ", model.SYSTEM_ADMIN_ROLE_ID)
|
suggestions := th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{command.AutocompleteData}, "", "bogus --dynaArg ", model.SystemAdminRoleId)
|
||||||
assert.Len(t, suggestions, 3)
|
assert.Len(t, suggestions, 3)
|
||||||
assert.Equal(t, "this is hint 1", suggestions[0].Hint)
|
assert.Equal(t, "this is hint 1", suggestions[0].Hint)
|
||||||
assert.Equal(t, "this is hint 2", suggestions[1].Hint)
|
assert.Equal(t, "this is hint 2", suggestions[1].Hint)
|
||||||
@@ -633,7 +633,7 @@ func TestDynamicListArgsForBuiltin(t *testing.T) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
t.Run("GetAutoCompleteListItems bad arg", func(t *testing.T) {
|
t.Run("GetAutoCompleteListItems bad arg", func(t *testing.T) {
|
||||||
suggestions := th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{command.AutocompleteData}, "", "bogus --badArg ", model.SYSTEM_ADMIN_ROLE_ID)
|
suggestions := th.App.getSuggestions(th.Context, emptyCmdArgs, []*model.AutocompleteData{command.AutocompleteData}, "", "bogus --badArg ", model.SystemAdminRoleId)
|
||||||
assert.Empty(t, suggestions)
|
assert.Empty(t, suggestions)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -662,7 +662,7 @@ func (p *testCommandProvider) GetCommand(a *App, T i18n.TranslateFunc) *model.Co
|
|||||||
func (p *testCommandProvider) DoCommand(a *App, c *request.Context, args *model.CommandArgs, message string) *model.CommandResponse {
|
func (p *testCommandProvider) DoCommand(a *App, c *request.Context, args *model.CommandArgs, message string) *model.CommandResponse {
|
||||||
return &model.CommandResponse{
|
return &model.CommandResponse{
|
||||||
Text: "I do nothing!",
|
Text: "I do nothing!",
|
||||||
ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL,
|
ResponseType: model.CommandResponseTypeEphemeral,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ func (a *App) SaveComplianceReport(job *model.Compliance) (*model.Compliance, *m
|
|||||||
return nil, model.NewAppError("saveComplianceReport", "ent.compliance.licence_disable.app_error", nil, "", http.StatusNotImplemented)
|
return nil, model.NewAppError("saveComplianceReport", "ent.compliance.licence_disable.app_error", nil, "", http.StatusNotImplemented)
|
||||||
}
|
}
|
||||||
|
|
||||||
job.Type = model.COMPLIANCE_TYPE_ADHOC
|
job.Type = model.ComplianceTypeAdhoc
|
||||||
|
|
||||||
job, err := a.Srv().Store.Compliance().Save(job)
|
job, err := a.Srv().Store.Compliance().Save(job)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Ссылка в новой задаче
Block a user