* 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 удалений

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

@@ -29,6 +29,7 @@ import (
"github.com/golang/freetype"
"github.com/golang/freetype/truetype"
"github.com/mattermost/mattermost-server/v5/app/request"
"github.com/mattermost/mattermost-server/v5/einterfaces"
"github.com/mattermost/mattermost-server/v5/model"
"github.com/mattermost/mattermost-server/v5/plugin"
@@ -50,7 +51,7 @@ const (
ImageProfilePixelDimension = 128
)
func (a *App) CreateUserWithToken(user *model.User, token *model.Token) (*model.User, *model.AppError) {
func (a *App) CreateUserWithToken(c *request.Context, user *model.User, token *model.Token) (*model.User, *model.AppError) {
if err := a.IsUserSignUpAllowed(); err != nil {
return nil, err
}
@@ -88,15 +89,15 @@ func (a *App) CreateUserWithToken(user *model.User, token *model.Token) (*model.
var ruser *model.User
var err *model.AppError
if token.Type == TokenTypeTeamInvitation {
ruser, err = a.CreateUser(user)
ruser, err = a.CreateUser(c, user)
} else {
ruser, err = a.CreateGuest(user)
ruser, err = a.CreateGuest(c, user)
}
if err != nil {
return nil, err
}
if _, err := a.JoinUserToTeam(team, ruser, ""); err != nil {
if _, err := a.JoinUserToTeam(c, team, ruser, ""); err != nil {
return nil, err
}
@@ -104,7 +105,7 @@ func (a *App) CreateUserWithToken(user *model.User, token *model.Token) (*model.
if token.Type == TokenTypeGuestInvitation {
for _, channel := range channels {
_, err := a.AddChannelMember(ruser.Id, channel, ChannelMemberOpts{})
_, err := a.AddChannelMember(c, ruser.Id, channel, ChannelMemberOpts{})
if err != nil {
mlog.Warn("Failed to add channel member", mlog.Err(err))
}
@@ -118,7 +119,7 @@ func (a *App) CreateUserWithToken(user *model.User, token *model.Token) (*model.
return ruser, nil
}
func (a *App) CreateUserWithInviteId(user *model.User, inviteId, redirect string) (*model.User, *model.AppError) {
func (a *App) CreateUserWithInviteId(c *request.Context, user *model.User, inviteId, redirect string) (*model.User, *model.AppError) {
if err := a.IsUserSignUpAllowed(); err != nil {
return nil, err
}
@@ -144,12 +145,12 @@ func (a *App) CreateUserWithInviteId(user *model.User, inviteId, redirect string
user.EmailVerified = false
ruser, err := a.CreateUser(user)
ruser, err := a.CreateUser(c, user)
if err != nil {
return nil, err
}
if _, err := a.JoinUserToTeam(team, ruser, ""); err != nil {
if _, err := a.JoinUserToTeam(c, team, ruser, ""); err != nil {
return nil, err
}
@@ -162,8 +163,8 @@ func (a *App) CreateUserWithInviteId(user *model.User, inviteId, redirect string
return ruser, nil
}
func (a *App) CreateUserAsAdmin(user *model.User, redirect string) (*model.User, *model.AppError) {
ruser, err := a.CreateUser(user)
func (a *App) CreateUserAsAdmin(c *request.Context, user *model.User, redirect string) (*model.User, *model.AppError) {
ruser, err := a.CreateUser(c, user)
if err != nil {
return nil, err
}
@@ -175,7 +176,7 @@ func (a *App) CreateUserAsAdmin(user *model.User, redirect string) (*model.User,
return ruser, nil
}
func (a *App) CreateUserFromSignup(user *model.User, redirect string) (*model.User, *model.AppError) {
func (a *App) CreateUserFromSignup(c *request.Context, user *model.User, redirect string) (*model.User, *model.AppError) {
if err := a.IsUserSignUpAllowed(); err != nil {
return nil, err
}
@@ -187,7 +188,7 @@ func (a *App) CreateUserFromSignup(user *model.User, redirect string) (*model.Us
user.EmailVerified = false
ruser, err := a.CreateUser(user)
ruser, err := a.CreateUser(c, user)
if err != nil {
return nil, err
}
@@ -232,17 +233,17 @@ func (a *App) IsFirstUserAccount() bool {
// CreateUser creates a user and sets several fields of the returned User struct to
// their zero values.
func (a *App) CreateUser(user *model.User) (*model.User, *model.AppError) {
return a.createUserOrGuest(user, false)
func (a *App) CreateUser(c *request.Context, user *model.User) (*model.User, *model.AppError) {
return a.createUserOrGuest(c, user, false)
}
// CreateGuest creates a guest and sets several fields of the returned User struct to
// their zero values.
func (a *App) CreateGuest(user *model.User) (*model.User, *model.AppError) {
return a.createUserOrGuest(user, true)
func (a *App) CreateGuest(c *request.Context, user *model.User) (*model.User, *model.AppError) {
return a.createUserOrGuest(c, user, true)
}
func (a *App) createUserOrGuest(user *model.User, guest bool) (*model.User, *model.AppError) {
func (a *App) createUserOrGuest(c *request.Context, user *model.User, guest bool) (*model.User, *model.AppError) {
user.Roles = model.SYSTEM_USER_ROLE_ID
if guest {
user.Roles = model.SYSTEM_GUEST_ROLE_ID
@@ -281,7 +282,7 @@ func (a *App) createUserOrGuest(user *model.User, guest bool) (*model.User, *mod
if pluginsEnvironment := a.GetPluginsEnvironment(); pluginsEnvironment != nil {
a.Srv().Go(func() {
pluginContext := a.PluginContext()
pluginContext := pluginContext(c)
pluginsEnvironment.RunMultiPluginHook(func(hooks plugin.Hooks) bool {
hooks.UserHasBeenCreated(pluginContext, user)
return true
@@ -339,7 +340,7 @@ func (a *App) createUser(user *model.User) (*model.User, *model.AppError) {
return ruser, nil
}
func (a *App) CreateOAuthUser(service string, userData io.Reader, teamID string, tokenUser *model.User) (*model.User, *model.AppError) {
func (a *App) CreateOAuthUser(c *request.Context, service string, userData io.Reader, teamID string, tokenUser *model.User) (*model.User, *model.AppError) {
if !*a.Config().TeamSettings.EnableUserCreation {
return nil, model.NewAppError("CreateOAuthUser", "api.user.create_user.disabled.app_error", nil, "", http.StatusNotImplemented)
}
@@ -380,13 +381,13 @@ func (a *App) CreateOAuthUser(service string, userData io.Reader, teamID string,
user.EmailVerified = true
ruser, err := a.CreateUser(user)
ruser, err := a.CreateUser(c, user)
if err != nil {
return nil, err
}
if teamID != "" {
err = a.AddUserToTeamByTeamId(teamID, user)
err = a.AddUserToTeamByTeamId(c, teamID, user)
if err != nil {
return nil, err
}
@@ -695,8 +696,8 @@ func (a *App) GetUsersByIds(userIDs []string, options *store.UserGetByIdsOpts) (
return a.sanitizeProfiles(users, options.IsAdmin), nil
}
func (a *App) GetUsersByGroupChannelIds(channelIDs []string, asAdmin bool) (map[string][]*model.User, *model.AppError) {
usersByChannelId, err := a.Srv().Store.User().GetProfileByGroupChannelIdsForUser(a.Session().UserId, channelIDs)
func (a *App) GetUsersByGroupChannelIds(c *request.Context, channelIDs []string, asAdmin bool) (map[string][]*model.User, *model.AppError) {
usersByChannelId, err := a.Srv().Store.User().GetProfileByGroupChannelIdsForUser(c.Session().UserId, channelIDs)
if err != nil {
return nil, model.NewAppError("GetUsersByGroupChannelIds", "app.user.get_profile_by_group_channel_ids_for_user.app_error", nil, err.Error(), http.StatusInternalServerError)
}
@@ -1012,7 +1013,7 @@ func (a *App) UpdatePasswordAsUser(userID, currentPassword, newPassword string)
return a.UpdatePasswordSendEmail(user, newPassword, T("api.user.update_password.menu"))
}
func (a *App) userDeactivated(userID string) *model.AppError {
func (a *App) userDeactivated(c *request.Context, userID string) *model.AppError {
if err := a.RevokeAllSessions(userID); err != nil {
return err
}
@@ -1028,11 +1029,11 @@ func (a *App) userDeactivated(userID string) *model.AppError {
// bots the user owns. Only notify once, when the user is the owner, not the
// owners bots
if !user.IsBot {
a.notifySysadminsBotOwnerDeactivated(userID)
a.notifySysadminsBotOwnerDeactivated(c, userID)
}
if *a.Config().ServiceSettings.DisableBotsWhenOwnerIsDeactivated {
a.disableUserBots(userID)
a.disableUserBots(c, userID)
}
return nil
@@ -1058,7 +1059,7 @@ func (a *App) invalidateUserChannelMembersCaches(userID string) *model.AppError
return nil
}
func (a *App) UpdateActive(user *model.User, active bool) (*model.User, *model.AppError) {
func (a *App) UpdateActive(c *request.Context, user *model.User, active bool) (*model.User, *model.AppError) {
user.UpdateAt = model.GetMillis()
if active {
user.DeleteAt = 0
@@ -1082,7 +1083,7 @@ func (a *App) UpdateActive(user *model.User, active bool) (*model.User, *model.A
ruser := userUpdate.New
if !active {
if err := a.userDeactivated(ruser.Id); err != nil {
if err := a.userDeactivated(c, ruser.Id); err != nil {
return nil, err
}
}
@@ -1095,14 +1096,14 @@ func (a *App) UpdateActive(user *model.User, active bool) (*model.User, *model.A
return ruser, nil
}
func (a *App) DeactivateGuests() *model.AppError {
func (a *App) DeactivateGuests(c *request.Context) *model.AppError {
userIDs, err := a.Srv().Store.User().DeactivateGuests()
if err != nil {
return model.NewAppError("DeactivateGuests", "app.user.update_active_for_multiple_users.updating.app_error", nil, err.Error(), http.StatusInternalServerError)
}
for _, userID := range userIDs {
if err := a.userDeactivated(userID); err != nil {
if err := a.userDeactivated(c, userID); err != nil {
return err
}
}
@@ -1314,13 +1315,13 @@ func (a *App) UpdateUser(user *model.User, sendNotifications bool) (*model.User,
return userUpdate.New, nil
}
func (a *App) UpdateUserActive(userID string, active bool) *model.AppError {
func (a *App) UpdateUserActive(c *request.Context, userID string, active bool) *model.AppError {
user, err := a.GetUser(userID)
if err != nil {
return err
}
if _, err = a.UpdateActive(user, active); err != nil {
if _, err = a.UpdateActive(c, user, active); err != nil {
return err
}
@@ -1603,13 +1604,13 @@ func (a *App) UpdateUserRolesWithUser(user *model.User, newRoles string, sendWeb
return ruser, nil
}
func (a *App) PermanentDeleteUser(user *model.User) *model.AppError {
func (a *App) PermanentDeleteUser(c *request.Context, user *model.User) *model.AppError {
mlog.Warn("Attempting to permanently delete account", mlog.String("user_id", user.Id), mlog.String("user_email", user.Email))
if user.IsInRole(model.SYSTEM_ADMIN_ROLE_ID) {
mlog.Warn("You are deleting a user that is a system administrator. You may need to set another account as the system administrator using the command line tools.", mlog.String("user_email", user.Email))
}
if _, err := a.UpdateActive(user, false); err != nil {
if _, err := a.UpdateActive(c, user, false); err != nil {
return err
}
@@ -1716,13 +1717,13 @@ func (a *App) PermanentDeleteUser(user *model.User) *model.AppError {
return nil
}
func (a *App) PermanentDeleteAllUsers() *model.AppError {
func (a *App) PermanentDeleteAllUsers(c *request.Context) *model.AppError {
users, err := a.Srv().Store.User().GetAll()
if err != nil {
return model.NewAppError("PermanentDeleteAllUsers", "app.user.get.app_error", nil, err.Error(), http.StatusInternalServerError)
}
for _, user := range users {
a.PermanentDeleteUser(user)
a.PermanentDeleteUser(c, user)
}
return nil
@@ -2179,7 +2180,7 @@ func (a *App) GetViewUsersRestrictions(userID string) (*model.ViewUsersRestricti
// PromoteGuestToUser Convert user's roles and all his mermbership's roles from
// guest roles to regular user roles.
func (a *App) PromoteGuestToUser(user *model.User, requestorId string) *model.AppError {
func (a *App) PromoteGuestToUser(c *request.Context, user *model.User, requestorId string) *model.AppError {
nErr := a.Srv().Store.User().PromoteGuestToUser(user.Id)
a.InvalidateCacheForUser(user.Id)
if nErr != nil {
@@ -2192,7 +2193,7 @@ func (a *App) PromoteGuestToUser(user *model.User, requestorId string) *model.Ap
for _, team := range userTeams {
// Soft error if there is an issue joining the default channels
if err := a.JoinDefaultChannels(team.Id, user, false, requestorId); err != nil {
if err := a.JoinDefaultChannels(c, team.Id, user, false, requestorId); err != nil {
mlog.Warn("Failed to join default channels", mlog.String("user_id", user.Id), mlog.String("team_id", team.Id), mlog.String("requestor_id", requestorId), mlog.Err(err))
}
}