diff options
Diffstat (limited to 'app')
-rw-r--r-- | app/channel.go | 71 | ||||
-rw-r--r-- | app/plugin_api.go | 44 | ||||
-rw-r--r-- | app/team.go | 45 |
3 files changed, 151 insertions, 9 deletions
diff --git a/app/channel.go b/app/channel.go index eee27a6de..b6ccd9f91 100644 --- a/app/channel.go +++ b/app/channel.go @@ -11,6 +11,7 @@ import ( "github.com/mattermost/mattermost-server/mlog" "github.com/mattermost/mattermost-server/model" + "github.com/mattermost/mattermost-server/plugin" "github.com/mattermost/mattermost-server/store" "github.com/mattermost/mattermost-server/utils" ) @@ -183,6 +184,16 @@ func (a *App) CreateChannel(channel *model.Channel, addMember bool) (*model.Chan a.InvalidateCacheForUser(channel.CreatorId) } + if a.PluginsReady() { + a.Go(func() { + pluginContext := &plugin.Context{} + a.Plugins.RunMultiPluginHook(func(hooks plugin.Hooks) bool { + hooks.ChannelHasBeenCreated(pluginContext, sc) + return true + }, plugin.ChannelHasBeenCreatedId) + }) + } + return sc, nil } } @@ -200,6 +211,16 @@ func (a *App) CreateDirectChannel(userId string, otherUserId string) (*model.Cha a.InvalidateCacheForUser(userId) a.InvalidateCacheForUser(otherUserId) + if a.PluginsReady() { + a.Go(func() { + pluginContext := &plugin.Context{} + a.Plugins.RunMultiPluginHook(func(hooks plugin.Hooks) bool { + hooks.ChannelHasBeenCreated(pluginContext, channel) + return true + }, plugin.ChannelHasBeenCreatedId) + }) + } + message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_DIRECT_ADDED, "", channel.Id, "", nil) message.Add("teammate_id", otherUserId) a.Publish(message) @@ -774,6 +795,16 @@ func (a *App) AddChannelMember(userId string, channel *model.Channel, userReques return nil, err } + if a.PluginsReady() { + a.Go(func() { + pluginContext := &plugin.Context{} + a.Plugins.RunMultiPluginHook(func(hooks plugin.Hooks) bool { + hooks.UserHasJoinedChannel(pluginContext, cm, userRequestor) + return true + }, plugin.UserHasJoinedChannelId) + }) + } + if userRequestorId == "" || userId == userRequestorId { a.postJoinChannelMessage(user, channel) } else { @@ -1104,10 +1135,21 @@ func (a *App) JoinChannel(channel *model.Channel, userId string) *model.AppError user := uresult.Data.(*model.User) if channel.Type == model.CHANNEL_OPEN { - if _, err := a.AddUserToChannel(user, channel); err != nil { + cm, err := a.AddUserToChannel(user, channel) + if err != nil { return err } + if a.PluginsReady() { + a.Go(func() { + pluginContext := &plugin.Context{} + a.Plugins.RunMultiPluginHook(func(hooks plugin.Hooks) bool { + hooks.UserHasJoinedChannel(pluginContext, cm, nil) + return true + }, plugin.UserHasJoinedChannelId) + }) + } + if err := a.postJoinChannelMessage(user, channel); err != nil { return err } @@ -1288,6 +1330,11 @@ func (a *App) removeUserFromChannel(userIdToRemove string, removerUserId string, return model.NewAppError("RemoveUserFromChannel", "api.channel.remove.default.app_error", map[string]interface{}{"Channel": model.DEFAULT_CHANNEL}, "", http.StatusBadRequest) } + cm, err := a.GetChannelMember(channel.Id, userIdToRemove) + if err != nil { + return err + } + if cmresult := <-a.Srv.Store.Channel().RemoveMember(channel.Id, userIdToRemove); cmresult.Err != nil { return cmresult.Err } @@ -1298,6 +1345,22 @@ func (a *App) removeUserFromChannel(userIdToRemove string, removerUserId string, a.InvalidateCacheForUser(userIdToRemove) a.InvalidateCacheForChannelMembers(channel.Id) + if a.PluginsReady() { + + var actorUser *model.User + if removerUserId != "" { + actorUser, err = a.GetUser(removerUserId) + } + + a.Go(func() { + pluginContext := &plugin.Context{} + a.Plugins.RunMultiPluginHook(func(hooks plugin.Hooks) bool { + hooks.UserHasLeftChannel(pluginContext, cm, actorUser) + return true + }, plugin.UserHasLeftChannelId) + }) + } + message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_USER_REMOVED, "", channel.Id, "", nil) message.Add("user_id", userIdToRemove) message.Add("remover_id", removerUserId) @@ -1314,6 +1377,7 @@ func (a *App) removeUserFromChannel(userIdToRemove string, removerUserId string, func (a *App) RemoveUserFromChannel(userIdToRemove string, removerUserId string, channel *model.Channel) *model.AppError { var err *model.AppError + if err = a.removeUserFromChannel(userIdToRemove, removerUserId, channel); err != nil { return err } @@ -1326,6 +1390,11 @@ func (a *App) RemoveUserFromChannel(userIdToRemove string, removerUserId string, if userIdToRemove == removerUserId { a.postLeaveChannelMessage(user, channel) } else { + + if err != nil { + return err + } + a.Go(func() { a.postRemoveFromChannelMessage(removerUserId, user, channel) }) diff --git a/app/plugin_api.go b/app/plugin_api.go index 714ffa700..d76cb83e3 100644 --- a/app/plugin_api.go +++ b/app/plugin_api.go @@ -42,6 +42,14 @@ func (api *PluginAPI) UnregisterCommand(teamId, trigger string) error { return nil } +func (api *PluginAPI) GetConfig() *model.Config { + return api.app.GetConfig() +} + +func (api *PluginAPI) SaveConfig(config *model.Config) *model.AppError { + return api.app.SaveConfig(config, true) +} + func (api *PluginAPI) CreateTeam(team *model.Team) (*model.Team, *model.AppError) { return api.app.CreateTeam(team) } @@ -50,6 +58,10 @@ func (api *PluginAPI) DeleteTeam(teamId string) *model.AppError { return api.app.SoftDeleteTeam(teamId) } +func (api *PluginAPI) GetTeams() ([]*model.Team, *model.AppError) { + return api.app.GetAllTeams() +} + func (api *PluginAPI) GetTeam(teamId string) (*model.Team, *model.AppError) { return api.app.GetTeam(teamId) } @@ -62,6 +74,30 @@ func (api *PluginAPI) UpdateTeam(team *model.Team) (*model.Team, *model.AppError return api.app.UpdateTeam(team) } +func (api *PluginAPI) CreateTeamMember(teamId, userId string) (*model.TeamMember, *model.AppError) { + return api.app.AddTeamMember(teamId, userId) +} + +func (api *PluginAPI) CreateTeamMembers(teamId string, userIds []string, requestorId string) ([]*model.TeamMember, *model.AppError) { + return api.app.AddTeamMembers(teamId, userIds, requestorId) +} + +func (api *PluginAPI) DeleteTeamMember(teamId, userId, requestorId string) *model.AppError { + return api.app.RemoveUserFromTeam(teamId, userId, requestorId) +} + +func (api *PluginAPI) GetTeamMembers(teamId string, offset, limit int) ([]*model.TeamMember, *model.AppError) { + return api.app.GetTeamMembers(teamId, offset, limit) +} + +func (api *PluginAPI) GetTeamMember(teamId, userId string) (*model.TeamMember, *model.AppError) { + return api.app.GetTeamMember(teamId, userId) +} + +func (api *PluginAPI) UpdateTeamMemberRoles(teamId, userId, newRoles string) (*model.TeamMember, *model.AppError) { + return api.app.UpdateTeamMemberRoles(teamId, userId, newRoles) +} + func (api *PluginAPI) CreateUser(user *model.User) (*model.User, *model.AppError) { return api.app.CreateUser(user) } @@ -103,6 +139,10 @@ func (api *PluginAPI) DeleteChannel(channelId string) *model.AppError { return api.app.DeleteChannel(channel, "") } +func (api *PluginAPI) GetPublicChannelsForTeam(teamId string, offset, limit int) (*model.ChannelList, *model.AppError) { + return api.app.GetPublicChannelsForTeam(teamId, offset, limit) +} + func (api *PluginAPI) GetChannel(channelId string) (*model.Channel, *model.AppError) { return api.app.GetChannel(channelId) } @@ -156,6 +196,10 @@ func (api *PluginAPI) CreatePost(post *model.Post) (*model.Post, *model.AppError return api.app.CreatePostMissingChannel(post, true) } +func (api *PluginAPI) SendEphemeralPost(userId string, post *model.Post) *model.Post { + return api.app.SendEphemeralPost(userId, post) +} + func (api *PluginAPI) DeletePost(postId string) *model.AppError { _, err := api.app.DeletePost(postId, api.id) return err diff --git a/app/team.go b/app/team.go index beb4b1449..db85b6788 100644 --- a/app/team.go +++ b/app/team.go @@ -17,6 +17,7 @@ import ( "github.com/mattermost/mattermost-server/mlog" "github.com/mattermost/mattermost-server/model" + "github.com/mattermost/mattermost-server/plugin" "github.com/mattermost/mattermost-server/utils" ) @@ -429,12 +430,28 @@ func (a *App) joinUserToTeam(team *model.Team, user *model.User) (*model.TeamMem } func (a *App) JoinUserToTeam(team *model.Team, user *model.User, userRequestorId string) *model.AppError { - if _, alreadyAdded, err := a.joinUserToTeam(team, user); err != nil { + tm, alreadyAdded, err := a.joinUserToTeam(team, user) + if err != nil { return err } else if alreadyAdded { return nil } + if a.PluginsReady() { + var actor *model.User + if userRequestorId != "" { + actor, err = a.GetUser(userRequestorId) + } + + a.Go(func() { + pluginContext := &plugin.Context{} + a.Plugins.RunMultiPluginHook(func(hooks plugin.Hooks) bool { + hooks.UserHasJoinedTeam(pluginContext, tm, actor) + return true + }, plugin.UserHasJoinedTeamId) + }) + } + if uua := <-a.Srv.Store.User().UpdateUpdateAt(user.Id); uua.Err != nil { return uua.Err } @@ -575,9 +592,8 @@ func (a *App) AddTeamMember(teamId, userId string) (*model.TeamMember, *model.Ap return nil, err } - var teamMember *model.TeamMember - var err *model.AppError - if teamMember, err = a.GetTeamMember(teamId, userId); err != nil { + teamMember, err := a.GetTeamMember(teamId, userId) + if err != nil { return nil, err } @@ -692,10 +708,8 @@ func (a *App) RemoveUserFromTeam(teamId string, userId string, requestorId strin } func (a *App) LeaveTeam(team *model.Team, user *model.User, requestorId string) *model.AppError { - var teamMember *model.TeamMember - var err *model.AppError - - if teamMember, err = a.GetTeamMember(team.Id, user.Id); err != nil { + teamMember, err := a.GetTeamMember(team.Id, user.Id) + if err != nil { return model.NewAppError("LeaveTeam", "api.team.remove_user_from_team.missing.app_error", nil, err.Error(), http.StatusBadRequest) } @@ -753,6 +767,21 @@ func (a *App) LeaveTeam(team *model.Team, user *model.User, requestorId string) return result.Err } + if a.PluginsReady() { + var actor *model.User + if requestorId != "" { + actor, err = a.GetUser(requestorId) + } + + a.Go(func() { + pluginContext := &plugin.Context{} + a.Plugins.RunMultiPluginHook(func(hooks plugin.Hooks) bool { + hooks.UserHasLeftTeam(pluginContext, teamMember, actor) + return true + }, plugin.UserHasLeftTeamId) + }) + } + if uua := <-a.Srv.Store.User().UpdateUpdateAt(user.Id); uua.Err != nil { return uua.Err } |