* add request context

* move initialialization to server

* use app interface instead of global app functions

* remove app context from webconn

* cleanup

* remove duplicated services

* move context to separate package

* remove finalize init method and move content to NewServer function

* restart workers and schedulers after adding license for tests

* reflect review comments

Co-authored-by: Mattermod <mattermod@users.noreply.github.com>
Этот коммит содержится в:
Ibrahim Serdar Acikgoz
2021-05-11 13:00:44 +03:00
коммит произвёл GitHub
родитель c09369f14a
Коммит 5ea06e51d0
235 изменённых файлов: 4048 добавлений и 3819 удалений

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

@@ -18,6 +18,7 @@ import (
"github.com/disintegration/imaging"
"github.com/mattermost/mattermost-server/v5/app/request"
"github.com/mattermost/mattermost-server/v5/model"
"github.com/mattermost/mattermost-server/v5/plugin"
"github.com/mattermost/mattermost-server/v5/shared/i18n"
@@ -26,7 +27,7 @@ import (
"github.com/mattermost/mattermost-server/v5/store/sqlstore"
)
func (a *App) CreateTeam(team *model.Team) (*model.Team, *model.AppError) {
func (a *App) CreateTeam(c *request.Context, team *model.Team) (*model.Team, *model.AppError) {
team.InviteId = ""
rteam, err := a.Srv().Store.Team().Save(team)
if err != nil {
@@ -42,14 +43,14 @@ func (a *App) CreateTeam(team *model.Team) (*model.Team, *model.AppError) {
}
}
if _, err := a.CreateDefaultChannels(rteam.Id); err != nil {
if _, err := a.CreateDefaultChannels(c, rteam.Id); err != nil {
return nil, err
}
return rteam, nil
}
func (a *App) CreateTeamWithUser(team *model.Team, userID string) (*model.Team, *model.AppError) {
func (a *App) CreateTeamWithUser(c *request.Context, team *model.Team, userID string) (*model.Team, *model.AppError) {
user, err := a.GetUser(userID)
if err != nil {
return nil, err
@@ -60,12 +61,12 @@ func (a *App) CreateTeamWithUser(team *model.Team, userID string) (*model.Team,
return nil, model.NewAppError("isTeamEmailAllowed", "api.team.is_team_creation_allowed.domain.app_error", nil, "", http.StatusBadRequest)
}
rteam, err := a.CreateTeam(team)
rteam, err := a.CreateTeam(c, team)
if err != nil {
return nil, err
}
if _, err := a.JoinUserToTeam(rteam, user, ""); err != nil {
if _, err := a.JoinUserToTeam(c, rteam, user, ""); err != nil {
return nil, err
}
@@ -482,7 +483,7 @@ func (a *App) sendUpdatedMemberRoleEvent(userID string, member *model.TeamMember
a.Publish(message)
}
func (a *App) AddUserToTeam(teamID string, userID string, userRequestorId string) (*model.Team, *model.TeamMember, *model.AppError) {
func (a *App) AddUserToTeam(c *request.Context, teamID string, userID string, userRequestorId string) (*model.Team, *model.TeamMember, *model.AppError) {
tchan := make(chan store.StoreResult, 1)
go func() {
team, err := a.Srv().Store.Team().Get(teamID)
@@ -521,7 +522,7 @@ func (a *App) AddUserToTeam(teamID string, userID string, userRequestorId string
}
user := result.Data.(*model.User)
teamMember, err := a.JoinUserToTeam(team, user, userRequestorId)
teamMember, err := a.JoinUserToTeam(c, team, user, userRequestorId)
if err != nil {
return nil, nil, err
}
@@ -529,7 +530,7 @@ func (a *App) AddUserToTeam(teamID string, userID string, userRequestorId string
return team, teamMember, nil
}
func (a *App) AddUserToTeamByTeamId(teamID string, user *model.User) *model.AppError {
func (a *App) AddUserToTeamByTeamId(c *request.Context, teamID string, user *model.User) *model.AppError {
team, err := a.Srv().Store.Team().Get(teamID)
if err != nil {
var nfErr *store.ErrNotFound
@@ -541,13 +542,13 @@ func (a *App) AddUserToTeamByTeamId(teamID string, user *model.User) *model.AppE
}
}
if _, err := a.JoinUserToTeam(team, user, ""); err != nil {
if _, err := a.JoinUserToTeam(c, team, user, ""); err != nil {
return err
}
return nil
}
func (a *App) AddUserToTeamByToken(userID string, tokenID string) (*model.Team, *model.TeamMember, *model.AppError) {
func (a *App) AddUserToTeamByToken(c *request.Context, userID string, tokenID string) (*model.Team, *model.TeamMember, *model.AppError) {
token, err := a.Srv().Store.Token().GetByToken(tokenID)
if err != nil {
return nil, nil, model.NewAppError("AddUserToTeamByToken", "api.user.create_user.signup_link_invalid.app_error", nil, err.Error(), http.StatusBadRequest)
@@ -613,7 +614,7 @@ func (a *App) AddUserToTeamByToken(userID string, tokenID string) (*model.Team,
return nil, nil, model.NewAppError("AddUserToTeamByToken", "api.user.create_user.invalid_invitation_type.app_error", nil, "", http.StatusBadRequest)
}
teamMember, appErr := a.JoinUserToTeam(team, user, "")
teamMember, appErr := a.JoinUserToTeam(c, team, user, "")
if appErr != nil {
return nil, nil, appErr
}
@@ -639,7 +640,7 @@ func (a *App) AddUserToTeamByToken(userID string, tokenID string) (*model.Team,
return team, teamMember, nil
}
func (a *App) AddUserToTeamByInviteId(inviteId string, userID string) (*model.Team, *model.TeamMember, *model.AppError) {
func (a *App) AddUserToTeamByInviteId(c *request.Context, inviteId string, userID string) (*model.Team, *model.TeamMember, *model.AppError) {
tchan := make(chan store.StoreResult, 1)
go func() {
team, err := a.Srv().Store.Team().GetByInviteId(inviteId)
@@ -678,7 +679,7 @@ func (a *App) AddUserToTeamByInviteId(inviteId string, userID string) (*model.Te
}
user := result.Data.(*model.User)
teamMember, err := a.JoinUserToTeam(team, user, "")
teamMember, err := a.JoinUserToTeam(c, team, user, "")
if err != nil {
return nil, nil, err
}
@@ -761,7 +762,7 @@ func (a *App) joinUserToTeam(team *model.Team, user *model.User) (*model.TeamMem
return member, false, nil
}
func (a *App) JoinUserToTeam(team *model.Team, user *model.User, userRequestorId string) (*model.TeamMember, *model.AppError) {
func (a *App) JoinUserToTeam(c *request.Context, team *model.Team, user *model.User, userRequestorId string) (*model.TeamMember, *model.AppError) {
if !a.isTeamEmailAllowed(user, team) {
return nil, model.NewAppError("JoinUserToTeam", "api.team.join_user_to_team.allowed_domains.app_error", nil, "", http.StatusBadRequest)
}
@@ -780,7 +781,7 @@ func (a *App) JoinUserToTeam(team *model.Team, user *model.User, userRequestorId
}
a.Srv().Go(func() {
pluginContext := a.PluginContext()
pluginContext := pluginContext(c)
pluginsEnvironment.RunMultiPluginHook(func(hooks plugin.Hooks) bool {
hooks.UserHasJoinedTeam(pluginContext, teamMember, actor)
return true
@@ -805,7 +806,7 @@ func (a *App) JoinUserToTeam(team *model.Team, user *model.User, userRequestorId
if !user.IsGuest() {
// Soft error if there is an issue joining the default channels
if err := a.JoinDefaultChannels(team.Id, user, shouldBeAdmin, userRequestorId); err != nil {
if err := a.JoinDefaultChannels(c, team.Id, user, shouldBeAdmin, userRequestorId); err != nil {
mlog.Warn(
"Encountered an issue joining default channels.",
mlog.String("user_id", user.Id),
@@ -1015,8 +1016,8 @@ func (a *App) GetTeamMembersByIds(teamID string, userIDs []string, restrictions
return teamMembers, nil
}
func (a *App) AddTeamMember(teamID, userID string) (*model.TeamMember, *model.AppError) {
_, teamMember, err := a.AddUserToTeam(teamID, userID, "")
func (a *App) AddTeamMember(c *request.Context, teamID, userID string) (*model.TeamMember, *model.AppError) {
_, teamMember, err := a.AddUserToTeam(c, teamID, userID, "")
if err != nil {
return nil, err
}
@@ -1029,11 +1030,11 @@ func (a *App) AddTeamMember(teamID, userID string) (*model.TeamMember, *model.Ap
return teamMember, nil
}
func (a *App) AddTeamMembers(teamID string, userIDs []string, userRequestorId string, graceful bool) ([]*model.TeamMemberWithError, *model.AppError) {
func (a *App) AddTeamMembers(c *request.Context, teamID string, userIDs []string, userRequestorId string, graceful bool) ([]*model.TeamMemberWithError, *model.AppError) {
var membersWithErrors []*model.TeamMemberWithError
for _, userID := range userIDs {
_, teamMember, err := a.AddUserToTeam(teamID, userID, userRequestorId)
_, teamMember, err := a.AddUserToTeam(c, teamID, userID, userRequestorId)
if err != nil {
if graceful {
membersWithErrors = append(membersWithErrors, &model.TeamMemberWithError{
@@ -1059,8 +1060,8 @@ func (a *App) AddTeamMembers(teamID string, userIDs []string, userRequestorId st
return membersWithErrors, nil
}
func (a *App) AddTeamMemberByToken(userID, tokenID string) (*model.TeamMember, *model.AppError) {
_, teamMember, err := a.AddUserToTeamByToken(userID, tokenID)
func (a *App) AddTeamMemberByToken(c *request.Context, userID, tokenID string) (*model.TeamMember, *model.AppError) {
_, teamMember, err := a.AddUserToTeamByToken(c, userID, tokenID)
if err != nil {
return nil, err
}
@@ -1068,8 +1069,8 @@ func (a *App) AddTeamMemberByToken(userID, tokenID string) (*model.TeamMember, *
return teamMember, nil
}
func (a *App) AddTeamMemberByInviteId(inviteId, userID string) (*model.TeamMember, *model.AppError) {
team, teamMember, err := a.AddUserToTeamByInviteId(inviteId, userID)
func (a *App) AddTeamMemberByInviteId(c *request.Context, inviteId, userID string) (*model.TeamMember, *model.AppError) {
team, teamMember, err := a.AddUserToTeamByInviteId(c, inviteId, userID)
if err != nil {
return nil, err
}
@@ -1108,7 +1109,7 @@ func (a *App) GetTeamUnread(teamID, userID string) (*model.TeamUnread, *model.Ap
return teamUnread, nil
}
func (a *App) RemoveUserFromTeam(teamID string, userID string, requestorId string) *model.AppError {
func (a *App) RemoveUserFromTeam(c *request.Context, teamID string, userID string, requestorId string) *model.AppError {
tchan := make(chan store.StoreResult, 1)
go func() {
team, err := a.Srv().Store.Team().Get(teamID)
@@ -1147,14 +1148,14 @@ func (a *App) RemoveUserFromTeam(teamID string, userID string, requestorId strin
}
user := result.Data.(*model.User)
if err := a.LeaveTeam(team, user, requestorId); err != nil {
if err := a.LeaveTeam(c, team, user, requestorId); err != nil {
return err
}
return nil
}
func (a *App) RemoveTeamMemberFromTeam(teamMember *model.TeamMember, requestorId string) *model.AppError {
func (a *App) RemoveTeamMemberFromTeam(c *request.Context, teamMember *model.TeamMember, requestorId string) *model.AppError {
// Send the websocket message before we actually do the remove so the user being removed gets it.
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_LEAVE_TEAM, teamMember.TeamId, "", "", nil)
message.Add("user_id", teamMember.UserId)
@@ -1192,7 +1193,7 @@ func (a *App) RemoveTeamMemberFromTeam(teamMember *model.TeamMember, requestorId
}
a.Srv().Go(func() {
pluginContext := a.PluginContext()
pluginContext := pluginContext(c)
pluginsEnvironment.RunMultiPluginHook(func(hooks plugin.Hooks) bool {
hooks.UserHasLeftTeam(pluginContext, teamMember, actor)
return true
@@ -1220,7 +1221,7 @@ func (a *App) RemoveTeamMemberFromTeam(teamMember *model.TeamMember, requestorId
return nil
}
func (a *App) LeaveTeam(team *model.Team, user *model.User, requestorId string) *model.AppError {
func (a *App) LeaveTeam(c *request.Context, team *model.Team, user *model.User, requestorId string) *model.AppError {
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)
@@ -1260,24 +1261,24 @@ func (a *App) LeaveTeam(team *model.Team, user *model.User, requestorId string)
if *a.Config().ServiceSettings.ExperimentalEnableDefaultChannelLeaveJoinMessages {
if requestorId == user.Id {
if err = a.postLeaveTeamMessage(user, channel); err != nil {
if err = a.postLeaveTeamMessage(c, user, channel); err != nil {
mlog.Warn("Failed to post join/leave message", mlog.Err(err))
}
} else {
if err = a.postRemoveFromTeamMessage(user, channel); err != nil {
if err = a.postRemoveFromTeamMessage(c, user, channel); err != nil {
mlog.Warn("Failed to post join/leave message", mlog.Err(err))
}
}
}
if err := a.RemoveTeamMemberFromTeam(teamMember, requestorId); err != nil {
if err := a.RemoveTeamMemberFromTeam(c, teamMember, requestorId); err != nil {
return err
}
return nil
}
func (a *App) postLeaveTeamMessage(user *model.User, channel *model.Channel) *model.AppError {
func (a *App) postLeaveTeamMessage(c *request.Context, user *model.User, channel *model.Channel) *model.AppError {
post := &model.Post{
ChannelId: channel.Id,
Message: fmt.Sprintf(i18n.T("api.team.leave.left"), user.Username),
@@ -1288,14 +1289,14 @@ func (a *App) postLeaveTeamMessage(user *model.User, channel *model.Channel) *mo
},
}
if _, err := a.CreatePost(post, channel, false, true); err != nil {
if _, err := a.CreatePost(c, post, channel, false, true); err != nil {
return model.NewAppError("postRemoveFromChannelMessage", "api.channel.post_user_add_remove_message_and_forget.error", nil, err.Error(), http.StatusInternalServerError)
}
return nil
}
func (a *App) postRemoveFromTeamMessage(user *model.User, channel *model.Channel) *model.AppError {
func (a *App) postRemoveFromTeamMessage(c *request.Context, user *model.User, channel *model.Channel) *model.AppError {
post := &model.Post{
ChannelId: channel.Id,
Message: fmt.Sprintf(i18n.T("api.team.remove_user_from_team.removed"), user.Username),
@@ -1306,7 +1307,7 @@ func (a *App) postRemoveFromTeamMessage(user *model.User, channel *model.Channel
},
}
if _, err := a.CreatePost(post, channel, false, true); err != nil {
if _, err := a.CreatePost(c, post, channel, false, true); err != nil {
return model.NewAppError("postRemoveFromTeamMessage", "api.channel.post_user_add_remove_message_and_forget.error", nil, err.Error(), http.StatusInternalServerError)
}