Migrate to stateless app.App (#17542)
* 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>
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
c09369f14a
Коммит
5ea06e51d0
73
app/team.go
73
app/team.go
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
Ссылка в новой задаче
Block a user