коммит произвёл
GitHub
родитель
b15c0484c6
Коммит
87dfbc13c0
@@ -4,6 +4,8 @@
|
||||
package app
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/mattermost/mattermost-server/v5/mlog"
|
||||
"github.com/mattermost/mattermost-server/v5/model"
|
||||
"github.com/mattermost/mattermost-server/v5/store"
|
||||
@@ -251,7 +253,7 @@ func (a *App) GetAnalytics(name string, teamId string) (model.AnalyticsRows, *mo
|
||||
sessionChan := make(chan store.StoreResult, 1)
|
||||
go func() {
|
||||
count, err := a.Srv().Store.Session().AnalyticsSessionCount()
|
||||
sessionChan <- store.StoreResult{Data: count, Err: err}
|
||||
sessionChan <- store.StoreResult{Data: count, NErr: err}
|
||||
close(sessionChan)
|
||||
}()
|
||||
|
||||
@@ -313,8 +315,8 @@ func (a *App) GetAnalytics(name string, teamId string) (model.AnalyticsRows, *mo
|
||||
rows[4].Value = float64(r.Data.(int64))
|
||||
|
||||
r = <-sessionChan
|
||||
if r.Err != nil {
|
||||
return nil, r.Err
|
||||
if r.NErr != nil {
|
||||
return nil, model.NewAppError("GetAnalytics", "app.session.analytics_session_count.app_error", nil, r.NErr.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
rows[5].Value = float64(r.Data.(int64))
|
||||
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
package app
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/mattermost/mattermost-server/v5/mlog"
|
||||
"github.com/mattermost/mattermost-server/v5/model"
|
||||
"github.com/mattermost/mattermost-server/v5/utils"
|
||||
@@ -26,7 +28,7 @@ func (a *App) NotifySessionsExpired() *model.AppError {
|
||||
// Get all mobile sessions that expired within the last hour.
|
||||
sessions, err := a.srv.Store.Session().GetSessionsExpired(OneHourMillis, true, true)
|
||||
if err != nil {
|
||||
return err
|
||||
return model.NewAppError("NotifySessionsExpired", "app.session.analytics_session_count.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
msg := &model.PushNotification{
|
||||
|
||||
@@ -386,7 +386,12 @@ func (a *App) SendAckToPushProxy(ack *model.PushNotificationAck) error {
|
||||
}
|
||||
|
||||
func (a *App) getMobileAppSessions(userId string) ([]*model.Session, *model.AppError) {
|
||||
return a.Srv().Store.Session().GetSessionsWithActiveDeviceIds(userId)
|
||||
sessions, err := a.Srv().Store.Session().GetSessionsWithActiveDeviceIds(userId)
|
||||
if err != nil {
|
||||
return nil, model.NewAppError("getMobileAppSessions", "app.session.get_sessions.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
return sessions, nil
|
||||
}
|
||||
|
||||
func ShouldSendPushNotification(user *model.User, channelNotifyProps model.StringMap, wasMentioned bool, status *model.Status, post *model.Post) bool {
|
||||
|
||||
@@ -450,7 +450,7 @@ func (a *App) RegenerateOAuthAppSecret(app *model.OAuthApp) (*model.OAuthApp, *m
|
||||
func (a *App) RevokeAccessToken(token string) *model.AppError {
|
||||
session, _ := a.GetSession(token)
|
||||
|
||||
schan := make(chan *model.AppError, 1)
|
||||
schan := make(chan error, 1)
|
||||
go func() {
|
||||
schan <- a.Srv().Store.Session().Remove(token)
|
||||
close(schan)
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
package app
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"math"
|
||||
"net/http"
|
||||
"time"
|
||||
@@ -11,6 +12,7 @@ import (
|
||||
"github.com/mattermost/mattermost-server/v5/audit"
|
||||
"github.com/mattermost/mattermost-server/v5/mlog"
|
||||
"github.com/mattermost/mattermost-server/v5/model"
|
||||
"github.com/mattermost/mattermost-server/v5/store"
|
||||
)
|
||||
|
||||
func (a *App) CreateSession(session *model.Session) (*model.Session, *model.AppError) {
|
||||
@@ -18,7 +20,13 @@ func (a *App) CreateSession(session *model.Session) (*model.Session, *model.AppE
|
||||
|
||||
session, err := a.Srv().Store.Session().Save(session)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
var invErr *store.ErrInvalidInput
|
||||
switch {
|
||||
case errors.As(err, &invErr):
|
||||
return nil, model.NewAppError("CreateSession", "app.session.save.existing.app_error", nil, invErr.Error(), http.StatusBadRequest)
|
||||
default:
|
||||
return nil, model.NewAppError("CreateSession", "app.session.save.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
}
|
||||
|
||||
a.AddSessionToCache(session)
|
||||
@@ -42,7 +50,8 @@ func (a *App) GetSession(token string) (*model.Session, *model.AppError) {
|
||||
}
|
||||
|
||||
if session == nil {
|
||||
if session, err = a.Srv().Store.Session().Get(token); err == nil {
|
||||
var nErr error
|
||||
if session, nErr = a.Srv().Store.Session().Get(token); nErr == nil {
|
||||
if session != nil {
|
||||
if session.Token != token {
|
||||
return nil, model.NewAppError("GetSession", "api.context.invalid_token.error", map[string]interface{}{"Token": token, "Error": ""}, "", http.StatusUnauthorized)
|
||||
@@ -52,8 +61,8 @@ func (a *App) GetSession(token string) (*model.Session, *model.AppError) {
|
||||
a.AddSessionToCache(session)
|
||||
}
|
||||
}
|
||||
} else if err.StatusCode == http.StatusInternalServerError {
|
||||
return nil, err
|
||||
} else if nfErr := new(store.ErrNotFound); !errors.As(nErr, &nfErr) {
|
||||
return nil, model.NewAppError("GetSession", "app.session.get.app_error", nil, nErr.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -91,7 +100,12 @@ func (a *App) GetSession(token string) (*model.Session, *model.AppError) {
|
||||
|
||||
func (a *App) GetSessions(userId string) ([]*model.Session, *model.AppError) {
|
||||
|
||||
return a.Srv().Store.Session().GetSessions(userId)
|
||||
sessions, err := a.Srv().Store.Session().GetSessions(userId)
|
||||
if err != nil {
|
||||
return nil, model.NewAppError("GetSessions", "app.session.get_sessions.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
return sessions, nil
|
||||
}
|
||||
|
||||
func (a *App) UpdateSessionsIsGuest(userId string, isGuest bool) {
|
||||
@@ -118,14 +132,14 @@ func (a *App) UpdateSessionsIsGuest(userId string, isGuest bool) {
|
||||
func (a *App) RevokeAllSessions(userId string) *model.AppError {
|
||||
sessions, err := a.Srv().Store.Session().GetSessions(userId)
|
||||
if err != nil {
|
||||
return err
|
||||
return model.NewAppError("RevokeAllSessions", "app.session.get_sessions.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
for _, session := range sessions {
|
||||
if session.IsOAuth {
|
||||
a.RevokeAccessToken(session.Token)
|
||||
} else {
|
||||
if err := a.Srv().Store.Session().Remove(session.Id); err != nil {
|
||||
return err
|
||||
return model.NewAppError("RevokeAllSessions", "app.session.remove.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -145,7 +159,7 @@ func (a *App) RevokeSessionsFromAllUsers() *model.AppError {
|
||||
}
|
||||
err := a.Srv().Store.Session().RemoveAllSessions()
|
||||
if err != nil {
|
||||
return err
|
||||
return model.NewAppError("RevokeSessionsFromAllUsers", "app.session.remove_all_sessions_for_team.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
a.ClearSessionCacheForAllUsers()
|
||||
|
||||
@@ -214,7 +228,7 @@ func (a *App) SessionCacheLength() int {
|
||||
func (a *App) RevokeSessionsForDeviceId(userId string, deviceId string, currentSessionId string) *model.AppError {
|
||||
sessions, err := a.Srv().Store.Session().GetSessions(userId)
|
||||
if err != nil {
|
||||
return err
|
||||
return model.NewAppError("RevokeSessionsForDeviceId", "app.session.get_sessions.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
for _, session := range sessions {
|
||||
if session.DeviceId == deviceId && session.Id != currentSessionId {
|
||||
@@ -232,17 +246,16 @@ func (a *App) RevokeSessionsForDeviceId(userId string, deviceId string, currentS
|
||||
func (a *App) GetSessionById(sessionId string) (*model.Session, *model.AppError) {
|
||||
session, err := a.Srv().Store.Session().Get(sessionId)
|
||||
if err != nil {
|
||||
err.StatusCode = http.StatusBadRequest
|
||||
return nil, err
|
||||
return nil, model.NewAppError("GetSessionById", "app.session.get.app_error", nil, err.Error(), http.StatusBadRequest)
|
||||
}
|
||||
|
||||
return session, nil
|
||||
}
|
||||
|
||||
func (a *App) RevokeSessionById(sessionId string) *model.AppError {
|
||||
session, err := a.Srv().Store.Session().Get(sessionId)
|
||||
if err != nil {
|
||||
err.StatusCode = http.StatusBadRequest
|
||||
return err
|
||||
return model.NewAppError("RevokeSessionById", "app.session.get.app_error", nil, err.Error(), http.StatusBadRequest)
|
||||
}
|
||||
return a.RevokeSession(session)
|
||||
|
||||
@@ -255,7 +268,7 @@ func (a *App) RevokeSession(session *model.Session) *model.AppError {
|
||||
}
|
||||
} else {
|
||||
if err := a.Srv().Store.Session().Remove(session.Id); err != nil {
|
||||
return err
|
||||
return model.NewAppError("RevokeSession", "app.session.remove.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -267,7 +280,7 @@ func (a *App) RevokeSession(session *model.Session) *model.AppError {
|
||||
func (a *App) AttachDeviceId(sessionId string, deviceId string, expiresAt int64) *model.AppError {
|
||||
_, err := a.Srv().Store.Session().UpdateDeviceId(sessionId, deviceId, expiresAt)
|
||||
if err != nil {
|
||||
return err
|
||||
return model.NewAppError("AttachDeviceId", "app.session.update_device_id.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
return nil
|
||||
@@ -427,9 +440,15 @@ func (a *App) createSessionForUserAccessToken(tokenString string) (*model.Sessio
|
||||
}
|
||||
session.SetExpireInDays(model.SESSION_USER_ACCESS_TOKEN_EXPIRY)
|
||||
|
||||
session, err = a.Srv().Store.Session().Save(session)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
session, nErr := a.Srv().Store.Session().Save(session)
|
||||
if nErr != nil {
|
||||
var invErr *store.ErrInvalidInput
|
||||
switch {
|
||||
case errors.As(nErr, &invErr):
|
||||
return nil, model.NewAppError("CreateSession", "app.session.save.existing.app_error", nil, invErr.Error(), http.StatusBadRequest)
|
||||
default:
|
||||
return nil, model.NewAppError("CreateSession", "app.session.save.app_error", nil, nErr.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
}
|
||||
|
||||
a.AddSessionToCache(session)
|
||||
|
||||
@@ -70,8 +70,8 @@ func TestGetSessionIdleTimeoutInMinutes(t *testing.T) {
|
||||
|
||||
// Test regular session, should timeout
|
||||
time := session.LastActivityAt - (1000 * 60 * 6)
|
||||
err = th.App.Srv().Store.Session().UpdateLastActivityAt(session.Id, time)
|
||||
require.Nil(t, err)
|
||||
nErr := th.App.Srv().Store.Session().UpdateLastActivityAt(session.Id, time)
|
||||
require.Nil(t, nErr)
|
||||
th.App.ClearSessionCacheForUserSkipClusterSend(session.UserId)
|
||||
|
||||
rsession, err = th.App.GetSession(session.Token)
|
||||
@@ -88,8 +88,8 @@ func TestGetSessionIdleTimeoutInMinutes(t *testing.T) {
|
||||
|
||||
session, _ = th.App.CreateSession(session)
|
||||
time = session.LastActivityAt - (1000 * 60 * 6)
|
||||
err = th.App.Srv().Store.Session().UpdateLastActivityAt(session.Id, time)
|
||||
require.Nil(t, err)
|
||||
nErr = th.App.Srv().Store.Session().UpdateLastActivityAt(session.Id, time)
|
||||
require.Nil(t, nErr)
|
||||
th.App.ClearSessionCacheForUserSkipClusterSend(session.UserId)
|
||||
|
||||
_, err = th.App.GetSession(session.Token)
|
||||
@@ -103,8 +103,8 @@ func TestGetSessionIdleTimeoutInMinutes(t *testing.T) {
|
||||
|
||||
session, _ = th.App.CreateSession(session)
|
||||
time = session.LastActivityAt - (1000 * 60 * 6)
|
||||
err = th.App.Srv().Store.Session().UpdateLastActivityAt(session.Id, time)
|
||||
require.Nil(t, err)
|
||||
nErr = th.App.Srv().Store.Session().UpdateLastActivityAt(session.Id, time)
|
||||
require.Nil(t, nErr)
|
||||
th.App.ClearSessionCacheForUserSkipClusterSend(session.UserId)
|
||||
|
||||
_, err = th.App.GetSession(session.Token)
|
||||
@@ -121,8 +121,8 @@ func TestGetSessionIdleTimeoutInMinutes(t *testing.T) {
|
||||
|
||||
session, _ = th.App.CreateSession(session)
|
||||
time = session.LastActivityAt - (1000 * 60 * 6)
|
||||
err = th.App.Srv().Store.Session().UpdateLastActivityAt(session.Id, time)
|
||||
require.Nil(t, err)
|
||||
nErr = th.App.Srv().Store.Session().UpdateLastActivityAt(session.Id, time)
|
||||
require.Nil(t, nErr)
|
||||
th.App.ClearSessionCacheForUserSkipClusterSend(session.UserId)
|
||||
|
||||
_, err = th.App.GetSession(session.Token)
|
||||
@@ -343,8 +343,8 @@ func TestApp_ExtendExpiryIfNeeded(t *testing.T) {
|
||||
require.Equal(t, session.ExpiresAt, cachedSession.ExpiresAt)
|
||||
|
||||
// check database was updated.
|
||||
storedSession, err := th.App.Srv().Store.Session().Get(session.Token)
|
||||
require.Nil(t, err)
|
||||
storedSession, nErr := th.App.Srv().Store.Session().Get(session.Token)
|
||||
require.Nil(t, nErr)
|
||||
require.Equal(t, session.ExpiresAt, storedSession.ExpiresAt)
|
||||
})
|
||||
}
|
||||
|
||||
@@ -1414,7 +1414,7 @@ func (a *App) UpdateUserRoles(userId string, newRoles string, sendWebSocketEvent
|
||||
schan := make(chan store.StoreResult, 1)
|
||||
go func() {
|
||||
id, err := a.Srv().Store.Session().UpdateRoles(user.Id, newRoles)
|
||||
schan <- store.StoreResult{Data: id, Err: err}
|
||||
schan <- store.StoreResult{Data: id, NErr: err}
|
||||
close(schan)
|
||||
}()
|
||||
|
||||
@@ -1424,9 +1424,9 @@ func (a *App) UpdateUserRoles(userId string, newRoles string, sendWebSocketEvent
|
||||
}
|
||||
ruser := result.Data.(*model.UserUpdate).New
|
||||
|
||||
if result := <-schan; result.Err != nil {
|
||||
if result := <-schan; result.NErr != nil {
|
||||
// soft error since the user roles were still updated
|
||||
mlog.Error("Failed during updating user roles", mlog.Err(result.Err))
|
||||
mlog.Error("Failed during updating user roles", mlog.Err(result.NErr))
|
||||
}
|
||||
|
||||
a.InvalidateCacheForUser(userId)
|
||||
@@ -1453,7 +1453,7 @@ func (a *App) PermanentDeleteUser(user *model.User) *model.AppError {
|
||||
}
|
||||
|
||||
if err := a.Srv().Store.Session().PermanentDeleteSessionsByUser(user.Id); err != nil {
|
||||
return err
|
||||
return model.NewAppError("PermanentDeleteUser", "app.session.permanent_delete_sessions_by_user.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
if err := a.Srv().Store.UserAccessToken().DeleteAllForUser(user.Id); err != nil {
|
||||
|
||||
Ссылка в новой задаче
Block a user