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
77
app/user.go
77
app/user.go
@@ -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))
|
||||
}
|
||||
}
|
||||
|
||||
Ссылка в новой задаче
Block a user