Avoid resetting device id when removed from push proxy (#28269)

* Avoid resetting device id when removed from push proxy

* Fix test and minor improvements

* Add MySQL support
Этот коммит содержится в:
Daniel Espino García
2024-10-03 10:09:25 +02:00
коммит произвёл GitHub
родитель c15c924c49
Коммит da6b40665a
5 изменённых файлов: 27 добавлений и 5 удалений

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

@@ -146,6 +146,10 @@ func (me SqlSessionStore) GetLRUSessions(c request.CTX, userId string, limit uin
}
func (me SqlSessionStore) GetSessionsWithActiveDeviceIds(userId string) ([]*model.Session, error) {
lastRemovedQuery := `DeviceId != COALESCE(Props->>'last_removed_device_id', '')`
if me.DriverName() == model.DatabaseDriverMysql {
lastRemovedQuery = `DeviceId != COALESCE(Props->>'$.last_removed_device_id', '')`
}
query :=
`SELECT *
FROM
@@ -154,7 +158,8 @@ func (me SqlSessionStore) GetSessionsWithActiveDeviceIds(userId string) ([]*mode
UserId = ? AND
ExpiresAt != 0 AND
? <= ExpiresAt AND
DeviceId != ''`
DeviceId != '' AND
` + lastRemovedQuery
sessions := []*model.Session{}

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

@@ -91,6 +91,7 @@ func testSessionGetWithDeviceId(t *testing.T, rctx request.CTX, ss store.Store)
s1 := &model.Session{}
s1.UserId = model.NewId()
s1.ExpiresAt = model.GetMillis() + 10000
s1.Props = model.StringMap{}
s1, err := ss.Session().Save(rctx, s1)
require.NoError(t, err)
@@ -99,6 +100,7 @@ func testSessionGetWithDeviceId(t *testing.T, rctx request.CTX, ss store.Store)
s2.UserId = s1.UserId
s2.DeviceId = model.NewId()
s2.ExpiresAt = model.GetMillis() + 10000
s2.Props = model.StringMap{}
_, err = ss.Session().Save(rctx, s2)
require.NoError(t, err)
@@ -107,10 +109,22 @@ func testSessionGetWithDeviceId(t *testing.T, rctx request.CTX, ss store.Store)
s3.UserId = s1.UserId
s3.ExpiresAt = 1
s3.DeviceId = model.NewId()
s3.Props = model.StringMap{}
_, err = ss.Session().Save(rctx, s3)
require.NoError(t, err)
s4 := &model.Session{}
s4.UserId = s1.UserId
s4.DeviceId = model.NewId()
s4.ExpiresAt = model.GetMillis() + 10000
s4.Props = model.StringMap{
model.SessionPropLastRemovedDeviceId: s4.DeviceId,
}
_, err = ss.Session().Save(rctx, s4)
require.NoError(t, err)
data, err := ss.Session().GetSessionsWithActiveDeviceIds(s1.UserId)
require.NoError(t, err)
require.Len(t, data, 1, "should match len")