Revert "[MM-37984] Allow Desktop App to authenticate via external providers outside of the app on supported servers (#23795)" (#24039)
This reverts commit abdf4e58c3.
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
38fd8cd6aa
Коммит
823ef27d6c
@@ -27,7 +27,6 @@ type OpenTracingLayer struct {
|
||||
CommandStore store.CommandStore
|
||||
CommandWebhookStore store.CommandWebhookStore
|
||||
ComplianceStore store.ComplianceStore
|
||||
DesktopTokensStore store.DesktopTokensStore
|
||||
DraftStore store.DraftStore
|
||||
EmojiStore store.EmojiStore
|
||||
FileInfoStore store.FileInfoStore
|
||||
@@ -97,10 +96,6 @@ func (s *OpenTracingLayer) Compliance() store.ComplianceStore {
|
||||
return s.ComplianceStore
|
||||
}
|
||||
|
||||
func (s *OpenTracingLayer) DesktopTokens() store.DesktopTokensStore {
|
||||
return s.DesktopTokensStore
|
||||
}
|
||||
|
||||
func (s *OpenTracingLayer) Draft() store.DraftStore {
|
||||
return s.DraftStore
|
||||
}
|
||||
@@ -281,11 +276,6 @@ type OpenTracingLayerComplianceStore struct {
|
||||
Root *OpenTracingLayer
|
||||
}
|
||||
|
||||
type OpenTracingLayerDesktopTokensStore struct {
|
||||
store.DesktopTokensStore
|
||||
Root *OpenTracingLayer
|
||||
}
|
||||
|
||||
type OpenTracingLayerDraftStore struct {
|
||||
store.DraftStore
|
||||
Root *OpenTracingLayer
|
||||
@@ -3281,114 +3271,6 @@ func (s *OpenTracingLayerComplianceStore) Update(compliance *model.Compliance) (
|
||||
return result, err
|
||||
}
|
||||
|
||||
func (s *OpenTracingLayerDesktopTokensStore) Delete(desktopToken string) error {
|
||||
origCtx := s.Root.Store.Context()
|
||||
span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "DesktopTokensStore.Delete")
|
||||
s.Root.Store.SetContext(newCtx)
|
||||
defer func() {
|
||||
s.Root.Store.SetContext(origCtx)
|
||||
}()
|
||||
|
||||
defer span.Finish()
|
||||
err := s.DesktopTokensStore.Delete(desktopToken)
|
||||
if err != nil {
|
||||
span.LogFields(spanlog.Error(err))
|
||||
ext.Error.Set(span, true)
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
func (s *OpenTracingLayerDesktopTokensStore) DeleteByUserId(userId string) error {
|
||||
origCtx := s.Root.Store.Context()
|
||||
span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "DesktopTokensStore.DeleteByUserId")
|
||||
s.Root.Store.SetContext(newCtx)
|
||||
defer func() {
|
||||
s.Root.Store.SetContext(origCtx)
|
||||
}()
|
||||
|
||||
defer span.Finish()
|
||||
err := s.DesktopTokensStore.DeleteByUserId(userId)
|
||||
if err != nil {
|
||||
span.LogFields(spanlog.Error(err))
|
||||
ext.Error.Set(span, true)
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
func (s *OpenTracingLayerDesktopTokensStore) DeleteOlderThan(minCreatedAt int64) error {
|
||||
origCtx := s.Root.Store.Context()
|
||||
span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "DesktopTokensStore.DeleteOlderThan")
|
||||
s.Root.Store.SetContext(newCtx)
|
||||
defer func() {
|
||||
s.Root.Store.SetContext(origCtx)
|
||||
}()
|
||||
|
||||
defer span.Finish()
|
||||
err := s.DesktopTokensStore.DeleteOlderThan(minCreatedAt)
|
||||
if err != nil {
|
||||
span.LogFields(spanlog.Error(err))
|
||||
ext.Error.Set(span, true)
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
func (s *OpenTracingLayerDesktopTokensStore) GetUserId(desktopToken string, minCreatedAt int64) (string, error) {
|
||||
origCtx := s.Root.Store.Context()
|
||||
span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "DesktopTokensStore.GetUserId")
|
||||
s.Root.Store.SetContext(newCtx)
|
||||
defer func() {
|
||||
s.Root.Store.SetContext(origCtx)
|
||||
}()
|
||||
|
||||
defer span.Finish()
|
||||
result, err := s.DesktopTokensStore.GetUserId(desktopToken, minCreatedAt)
|
||||
if err != nil {
|
||||
span.LogFields(spanlog.Error(err))
|
||||
ext.Error.Set(span, true)
|
||||
}
|
||||
|
||||
return result, err
|
||||
}
|
||||
|
||||
func (s *OpenTracingLayerDesktopTokensStore) Insert(desktopToken string, createdAt int64, userId *string) error {
|
||||
origCtx := s.Root.Store.Context()
|
||||
span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "DesktopTokensStore.Insert")
|
||||
s.Root.Store.SetContext(newCtx)
|
||||
defer func() {
|
||||
s.Root.Store.SetContext(origCtx)
|
||||
}()
|
||||
|
||||
defer span.Finish()
|
||||
err := s.DesktopTokensStore.Insert(desktopToken, createdAt, userId)
|
||||
if err != nil {
|
||||
span.LogFields(spanlog.Error(err))
|
||||
ext.Error.Set(span, true)
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
func (s *OpenTracingLayerDesktopTokensStore) SetUserId(desktopToken string, minCreatedAt int64, userId string) error {
|
||||
origCtx := s.Root.Store.Context()
|
||||
span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "DesktopTokensStore.SetUserId")
|
||||
s.Root.Store.SetContext(newCtx)
|
||||
defer func() {
|
||||
s.Root.Store.SetContext(origCtx)
|
||||
}()
|
||||
|
||||
defer span.Finish()
|
||||
err := s.DesktopTokensStore.SetUserId(desktopToken, minCreatedAt, userId)
|
||||
if err != nil {
|
||||
span.LogFields(spanlog.Error(err))
|
||||
ext.Error.Set(span, true)
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
func (s *OpenTracingLayerDraftStore) Delete(userID string, channelID string, rootID string) error {
|
||||
origCtx := s.Root.Store.Context()
|
||||
span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "DraftStore.Delete")
|
||||
@@ -13148,7 +13030,6 @@ func New(childStore store.Store, ctx context.Context) *OpenTracingLayer {
|
||||
newStore.CommandStore = &OpenTracingLayerCommandStore{CommandStore: childStore.Command(), Root: &newStore}
|
||||
newStore.CommandWebhookStore = &OpenTracingLayerCommandWebhookStore{CommandWebhookStore: childStore.CommandWebhook(), Root: &newStore}
|
||||
newStore.ComplianceStore = &OpenTracingLayerComplianceStore{ComplianceStore: childStore.Compliance(), Root: &newStore}
|
||||
newStore.DesktopTokensStore = &OpenTracingLayerDesktopTokensStore{DesktopTokensStore: childStore.DesktopTokens(), Root: &newStore}
|
||||
newStore.DraftStore = &OpenTracingLayerDraftStore{DraftStore: childStore.Draft(), Root: &newStore}
|
||||
newStore.EmojiStore = &OpenTracingLayerEmojiStore{EmojiStore: childStore.Emoji(), Root: &newStore}
|
||||
newStore.FileInfoStore = &OpenTracingLayerFileInfoStore{FileInfoStore: childStore.FileInfo(), Root: &newStore}
|
||||
|
||||
@@ -30,7 +30,6 @@ type RetryLayer struct {
|
||||
CommandStore store.CommandStore
|
||||
CommandWebhookStore store.CommandWebhookStore
|
||||
ComplianceStore store.ComplianceStore
|
||||
DesktopTokensStore store.DesktopTokensStore
|
||||
DraftStore store.DraftStore
|
||||
EmojiStore store.EmojiStore
|
||||
FileInfoStore store.FileInfoStore
|
||||
@@ -100,10 +99,6 @@ func (s *RetryLayer) Compliance() store.ComplianceStore {
|
||||
return s.ComplianceStore
|
||||
}
|
||||
|
||||
func (s *RetryLayer) DesktopTokens() store.DesktopTokensStore {
|
||||
return s.DesktopTokensStore
|
||||
}
|
||||
|
||||
func (s *RetryLayer) Draft() store.DraftStore {
|
||||
return s.DraftStore
|
||||
}
|
||||
@@ -284,11 +279,6 @@ type RetryLayerComplianceStore struct {
|
||||
Root *RetryLayer
|
||||
}
|
||||
|
||||
type RetryLayerDesktopTokensStore struct {
|
||||
store.DesktopTokensStore
|
||||
Root *RetryLayer
|
||||
}
|
||||
|
||||
type RetryLayerDraftStore struct {
|
||||
store.DraftStore
|
||||
Root *RetryLayer
|
||||
@@ -3660,132 +3650,6 @@ func (s *RetryLayerComplianceStore) Update(compliance *model.Compliance) (*model
|
||||
|
||||
}
|
||||
|
||||
func (s *RetryLayerDesktopTokensStore) Delete(desktopToken string) error {
|
||||
|
||||
tries := 0
|
||||
for {
|
||||
err := s.DesktopTokensStore.Delete(desktopToken)
|
||||
if err == nil {
|
||||
return nil
|
||||
}
|
||||
if !isRepeatableError(err) {
|
||||
return err
|
||||
}
|
||||
tries++
|
||||
if tries >= 3 {
|
||||
err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
|
||||
return err
|
||||
}
|
||||
timepkg.Sleep(100 * timepkg.Millisecond)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func (s *RetryLayerDesktopTokensStore) DeleteByUserId(userId string) error {
|
||||
|
||||
tries := 0
|
||||
for {
|
||||
err := s.DesktopTokensStore.DeleteByUserId(userId)
|
||||
if err == nil {
|
||||
return nil
|
||||
}
|
||||
if !isRepeatableError(err) {
|
||||
return err
|
||||
}
|
||||
tries++
|
||||
if tries >= 3 {
|
||||
err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
|
||||
return err
|
||||
}
|
||||
timepkg.Sleep(100 * timepkg.Millisecond)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func (s *RetryLayerDesktopTokensStore) DeleteOlderThan(minCreatedAt int64) error {
|
||||
|
||||
tries := 0
|
||||
for {
|
||||
err := s.DesktopTokensStore.DeleteOlderThan(minCreatedAt)
|
||||
if err == nil {
|
||||
return nil
|
||||
}
|
||||
if !isRepeatableError(err) {
|
||||
return err
|
||||
}
|
||||
tries++
|
||||
if tries >= 3 {
|
||||
err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
|
||||
return err
|
||||
}
|
||||
timepkg.Sleep(100 * timepkg.Millisecond)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func (s *RetryLayerDesktopTokensStore) GetUserId(desktopToken string, minCreatedAt int64) (string, error) {
|
||||
|
||||
tries := 0
|
||||
for {
|
||||
result, err := s.DesktopTokensStore.GetUserId(desktopToken, minCreatedAt)
|
||||
if err == nil {
|
||||
return result, nil
|
||||
}
|
||||
if !isRepeatableError(err) {
|
||||
return result, err
|
||||
}
|
||||
tries++
|
||||
if tries >= 3 {
|
||||
err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
|
||||
return result, err
|
||||
}
|
||||
timepkg.Sleep(100 * timepkg.Millisecond)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func (s *RetryLayerDesktopTokensStore) Insert(desktopToken string, createdAt int64, userId *string) error {
|
||||
|
||||
tries := 0
|
||||
for {
|
||||
err := s.DesktopTokensStore.Insert(desktopToken, createdAt, userId)
|
||||
if err == nil {
|
||||
return nil
|
||||
}
|
||||
if !isRepeatableError(err) {
|
||||
return err
|
||||
}
|
||||
tries++
|
||||
if tries >= 3 {
|
||||
err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
|
||||
return err
|
||||
}
|
||||
timepkg.Sleep(100 * timepkg.Millisecond)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func (s *RetryLayerDesktopTokensStore) SetUserId(desktopToken string, minCreatedAt int64, userId string) error {
|
||||
|
||||
tries := 0
|
||||
for {
|
||||
err := s.DesktopTokensStore.SetUserId(desktopToken, minCreatedAt, userId)
|
||||
if err == nil {
|
||||
return nil
|
||||
}
|
||||
if !isRepeatableError(err) {
|
||||
return err
|
||||
}
|
||||
tries++
|
||||
if tries >= 3 {
|
||||
err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
|
||||
return err
|
||||
}
|
||||
timepkg.Sleep(100 * timepkg.Millisecond)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func (s *RetryLayerDraftStore) Delete(userID string, channelID string, rootID string) error {
|
||||
|
||||
tries := 0
|
||||
@@ -14989,7 +14853,6 @@ func New(childStore store.Store) *RetryLayer {
|
||||
newStore.CommandStore = &RetryLayerCommandStore{CommandStore: childStore.Command(), Root: &newStore}
|
||||
newStore.CommandWebhookStore = &RetryLayerCommandWebhookStore{CommandWebhookStore: childStore.CommandWebhook(), Root: &newStore}
|
||||
newStore.ComplianceStore = &RetryLayerComplianceStore{ComplianceStore: childStore.Compliance(), Root: &newStore}
|
||||
newStore.DesktopTokensStore = &RetryLayerDesktopTokensStore{DesktopTokensStore: childStore.DesktopTokens(), Root: &newStore}
|
||||
newStore.DraftStore = &RetryLayerDraftStore{DraftStore: childStore.Draft(), Root: &newStore}
|
||||
newStore.EmojiStore = &RetryLayerEmojiStore{EmojiStore: childStore.Emoji(), Root: &newStore}
|
||||
newStore.FileInfoStore = &RetryLayerFileInfoStore{FileInfoStore: childStore.FileInfo(), Root: &newStore}
|
||||
|
||||
@@ -59,7 +59,6 @@ func genStore() *mocks.Store {
|
||||
mock.On("PostAcknowledgement").Return(&mocks.PostAcknowledgementStore{})
|
||||
mock.On("PostPersistentNotification").Return(&mocks.PostPersistentNotificationStore{})
|
||||
mock.On("TrueUpReview").Return(&mocks.TrueUpReviewStore{})
|
||||
mock.On("DesktopTokens").Return(&mocks.DesktopTokensStore{})
|
||||
return mock
|
||||
}
|
||||
|
||||
|
||||
@@ -1,163 +0,0 @@
|
||||
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
||||
// See LICENSE.txt for license information.
|
||||
|
||||
package sqlstore
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
|
||||
"github.com/mattermost/mattermost/server/v8/channels/store"
|
||||
"github.com/mattermost/mattermost/server/v8/einterfaces"
|
||||
sq "github.com/mattermost/squirrel"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
type SqlDesktopTokensStore struct {
|
||||
*SqlStore
|
||||
metrics einterfaces.MetricsInterface
|
||||
}
|
||||
|
||||
func newSqlDesktopTokensStore(sqlStore *SqlStore, metrics einterfaces.MetricsInterface) store.DesktopTokensStore {
|
||||
return &SqlDesktopTokensStore{
|
||||
SqlStore: sqlStore,
|
||||
metrics: metrics,
|
||||
}
|
||||
}
|
||||
|
||||
func (s *SqlDesktopTokensStore) GetUserId(desktopToken string, minCreateAt int64) (string, error) {
|
||||
query := s.getQueryBuilder().
|
||||
Select("UserId").
|
||||
From("DesktopTokens").
|
||||
Where(sq.Eq{
|
||||
"DesktopToken": desktopToken,
|
||||
}).
|
||||
Where(sq.GtOrEq{
|
||||
"CreateAt": minCreateAt,
|
||||
})
|
||||
|
||||
dt := struct{ UserId sql.NullString }{}
|
||||
err := s.GetReplicaX().GetBuilder(&dt, query)
|
||||
|
||||
if err != nil {
|
||||
if err == sql.ErrNoRows {
|
||||
return "", store.NewErrNotFound("DesktopTokens", desktopToken)
|
||||
}
|
||||
return "", errors.Wrapf(err, "No token for %s", desktopToken)
|
||||
}
|
||||
|
||||
// Check if the string is NULL, if so just return a blank string
|
||||
if dt.UserId.Valid {
|
||||
return dt.UserId.String, nil
|
||||
}
|
||||
|
||||
return "", nil
|
||||
}
|
||||
|
||||
func (s *SqlDesktopTokensStore) Insert(desktopToken string, createAt int64, userId *string) error {
|
||||
builder := s.getQueryBuilder().
|
||||
Insert("DesktopTokens").
|
||||
Columns("DesktopToken", "CreateAt", "UserId").
|
||||
Values(desktopToken, createAt, userId)
|
||||
|
||||
query, args, err := builder.ToSql()
|
||||
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "insert_desktoptokens_tosql")
|
||||
}
|
||||
|
||||
if _, err = s.GetMasterX().Exec(query, args...); err != nil {
|
||||
return errors.Wrap(err, "failed to insert token row")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *SqlDesktopTokensStore) SetUserId(desktopToken string, minCreateAt int64, userId string) error {
|
||||
builder := s.getQueryBuilder().
|
||||
Update("DesktopTokens").
|
||||
Set("UserId", userId).
|
||||
Where(sq.Eq{
|
||||
"DesktopToken": desktopToken,
|
||||
}).
|
||||
Where(sq.GtOrEq{
|
||||
"CreateAt": minCreateAt,
|
||||
})
|
||||
|
||||
query, args, err := builder.ToSql()
|
||||
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "set_userid_desktoptokens_tosql")
|
||||
}
|
||||
|
||||
result, err := s.GetMasterX().Exec(query, args...)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "failed to update token row")
|
||||
}
|
||||
|
||||
num, err := result.RowsAffected()
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "nothing updated")
|
||||
}
|
||||
if num == 0 {
|
||||
return errors.New("no rows updated")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *SqlDesktopTokensStore) Delete(desktopToken string) error {
|
||||
builder := s.getQueryBuilder().
|
||||
Delete("DesktopTokens").
|
||||
Where(sq.Eq{
|
||||
"DesktopToken": desktopToken,
|
||||
})
|
||||
|
||||
query, args, err := builder.ToSql()
|
||||
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "delete_desktoptokens_tosql")
|
||||
}
|
||||
|
||||
if _, err = s.GetMasterX().Exec(query, args...); err != nil {
|
||||
return errors.Wrap(err, "failed to delete token row")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *SqlDesktopTokensStore) DeleteByUserId(userId string) error {
|
||||
builder := s.getQueryBuilder().
|
||||
Delete("DesktopTokens").
|
||||
Where(sq.Eq{
|
||||
"UserId": userId,
|
||||
})
|
||||
|
||||
query, args, err := builder.ToSql()
|
||||
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "delete_by_userid_desktoptokens_tosql")
|
||||
}
|
||||
|
||||
if _, err = s.GetMasterX().Exec(query, args...); err != nil {
|
||||
return errors.Wrap(err, "failed to delete token row")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *SqlDesktopTokensStore) DeleteOlderThan(minCreateAt int64) error {
|
||||
builder := s.getQueryBuilder().
|
||||
Delete("DesktopTokens").
|
||||
Where(sq.Lt{
|
||||
"CreateAt": minCreateAt,
|
||||
})
|
||||
|
||||
query, args, err := builder.ToSql()
|
||||
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "delete_old_desktoptokens_tosql")
|
||||
}
|
||||
|
||||
if _, err = s.GetMasterX().Exec(query, args...); err != nil {
|
||||
return errors.Wrap(err, "failed to delete token row")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
||||
// See LICENSE.txt for license information.
|
||||
|
||||
package sqlstore
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/mattermost/mattermost/server/v8/channels/store/storetest"
|
||||
)
|
||||
|
||||
func TestDesktopTokensStore(t *testing.T) {
|
||||
StoreTestWithSqlStore(t, storetest.TestDesktopTokensStore)
|
||||
}
|
||||
@@ -105,7 +105,6 @@ type SqlStoreStores struct {
|
||||
postAcknowledgement store.PostAcknowledgementStore
|
||||
postPersistentNotification store.PostPersistentNotificationStore
|
||||
trueUpReview store.TrueUpReviewStore
|
||||
desktopTokens store.DesktopTokensStore
|
||||
}
|
||||
|
||||
type SqlStore struct {
|
||||
@@ -227,7 +226,6 @@ func New(settings model.SqlSettings, metrics einterfaces.MetricsInterface) *SqlS
|
||||
store.stores.postAcknowledgement = newSqlPostAcknowledgementStore(store)
|
||||
store.stores.postPersistentNotification = newSqlPostPersistentNotificationStore(store)
|
||||
store.stores.trueUpReview = newSqlTrueUpReviewStore(store)
|
||||
store.stores.desktopTokens = newSqlDesktopTokensStore(store, metrics)
|
||||
|
||||
store.stores.preference.(*SqlPreferenceStore).deleteUnusedFeatures()
|
||||
|
||||
@@ -1079,10 +1077,6 @@ func (ss *SqlStore) TrueUpReview() store.TrueUpReviewStore {
|
||||
return ss.stores.trueUpReview
|
||||
}
|
||||
|
||||
func (ss *SqlStore) DesktopTokens() store.DesktopTokensStore {
|
||||
return ss.stores.desktopTokens
|
||||
}
|
||||
|
||||
func (ss *SqlStore) DropAllTables() {
|
||||
var tableSchemaFn string
|
||||
if ss.DriverName() == model.DatabaseDriverPostgres {
|
||||
|
||||
@@ -86,7 +86,6 @@ type Store interface {
|
||||
PostAcknowledgement() PostAcknowledgementStore
|
||||
PostPersistentNotification() PostPersistentNotificationStore
|
||||
TrueUpReview() TrueUpReviewStore
|
||||
DesktopTokens() DesktopTokensStore
|
||||
}
|
||||
|
||||
type RetentionPolicyStore interface {
|
||||
@@ -666,15 +665,6 @@ type TokenStore interface {
|
||||
RemoveAllTokensByType(tokenType string) error
|
||||
}
|
||||
|
||||
type DesktopTokensStore interface {
|
||||
GetUserId(desktopToken string, minCreatedAt int64) (string, error)
|
||||
Insert(desktopToken string, createdAt int64, userId *string) error
|
||||
SetUserId(desktopToken string, minCreatedAt int64, userId string) error
|
||||
Delete(desktopToken string) error
|
||||
DeleteByUserId(userId string) error
|
||||
DeleteOlderThan(minCreatedAt int64) error
|
||||
}
|
||||
|
||||
type EmojiStore interface {
|
||||
Save(emoji *model.Emoji) (*model.Emoji, error)
|
||||
Get(ctx context.Context, id string, allowFromCache bool) (*model.Emoji, error)
|
||||
|
||||
@@ -1,173 +0,0 @@
|
||||
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
||||
// See LICENSE.txt for license information.
|
||||
|
||||
package storetest
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/mattermost/mattermost/server/public/model"
|
||||
"github.com/mattermost/mattermost/server/v8/channels/store"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestDesktopTokensStore(t *testing.T, ss store.Store, s SqlStore) {
|
||||
t.Run("GetUserId", func(t *testing.T) { testGetUserId(t, ss) })
|
||||
t.Run("Insert", func(t *testing.T) { testInsert(t, ss) })
|
||||
t.Run("SetUserId", func(t *testing.T) { testSetUserId(t, ss) })
|
||||
t.Run("Delete", func(t *testing.T) { testDeleteToken(t, ss) })
|
||||
t.Run("DeleteByUserId", func(t *testing.T) { testDeleteByUserId(t, ss) })
|
||||
t.Run("DeleteOlderThan", func(t *testing.T) { testDeleteOlderThan(t, ss) })
|
||||
}
|
||||
|
||||
func testGetUserId(t *testing.T, ss store.Store) {
|
||||
err := ss.DesktopTokens().Insert("token_with_id", 1000, nil)
|
||||
require.NoError(t, err)
|
||||
err = ss.DesktopTokens().SetUserId("token_with_id", 1000, "user_id")
|
||||
require.NoError(t, err)
|
||||
|
||||
err = ss.DesktopTokens().Insert("token_without_id", 2000, nil)
|
||||
require.NoError(t, err)
|
||||
|
||||
t.Run("get user id", func(t *testing.T) {
|
||||
userId, err := ss.DesktopTokens().GetUserId("token_with_id", 1000)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, "user_id", userId)
|
||||
})
|
||||
|
||||
t.Run("get user id - expired", func(t *testing.T) {
|
||||
userId, err := ss.DesktopTokens().GetUserId("token_with_id", 10000)
|
||||
assert.Error(t, err)
|
||||
assert.IsType(t, &store.ErrNotFound{}, err)
|
||||
assert.Equal(t, "", userId)
|
||||
})
|
||||
|
||||
t.Run("get user id - no id set", func(t *testing.T) {
|
||||
userId, err := ss.DesktopTokens().GetUserId("token_without_id", 2000)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, "", userId)
|
||||
})
|
||||
}
|
||||
|
||||
func testInsert(t *testing.T, ss store.Store) {
|
||||
t.Run("insert", func(t *testing.T) {
|
||||
err := ss.DesktopTokens().Insert("token", 1000, nil)
|
||||
assert.NoError(t, err)
|
||||
})
|
||||
|
||||
t.Run("insert with user id", func(t *testing.T) {
|
||||
err := ss.DesktopTokens().Insert("token_2", 1000, model.NewString("user_id"))
|
||||
assert.NoError(t, err)
|
||||
})
|
||||
|
||||
t.Run("insert - token too long", func(t *testing.T) {
|
||||
err := ss.DesktopTokens().Insert(
|
||||
"this token is way way way WAAAAAAAAAAAAAY WAAAAAAAAAAAAAY WAAAAAAAAAAAAAY TOO LONG",
|
||||
1000,
|
||||
nil,
|
||||
)
|
||||
assert.Error(t, err)
|
||||
})
|
||||
}
|
||||
|
||||
func testSetUserId(t *testing.T, ss store.Store) {
|
||||
err := ss.DesktopTokens().Insert("new_token", 1000, nil)
|
||||
require.NoError(t, err)
|
||||
err = ss.DesktopTokens().Insert("new_token_2", 1000, nil)
|
||||
require.NoError(t, err)
|
||||
|
||||
t.Run("set user id", func(t *testing.T) {
|
||||
err := ss.DesktopTokens().SetUserId("new_token", 1000, "user_id")
|
||||
assert.NoError(t, err)
|
||||
userId, err := ss.DesktopTokens().GetUserId("new_token", 1000)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, "user_id", userId)
|
||||
})
|
||||
|
||||
t.Run("set user id - doesn't exist", func(t *testing.T) {
|
||||
err := ss.DesktopTokens().SetUserId("different_token", 1000, "user_id")
|
||||
assert.Error(t, err)
|
||||
_, err = ss.DesktopTokens().GetUserId("different_token", 1000)
|
||||
assert.Error(t, err)
|
||||
})
|
||||
|
||||
t.Run("set user id - expired", func(t *testing.T) {
|
||||
err := ss.DesktopTokens().SetUserId("new_token", 2000, "user_id")
|
||||
assert.Error(t, err)
|
||||
_, err = ss.DesktopTokens().GetUserId("new_token", 2000)
|
||||
assert.Error(t, err)
|
||||
})
|
||||
|
||||
t.Run("set user id - user id too long", func(t *testing.T) {
|
||||
err := ss.DesktopTokens().SetUserId(
|
||||
"new_token_2",
|
||||
1000,
|
||||
"user_id that is WAAAAAAAAAAAAAY WAAAAAAAAAAAAAY WAAAAAAAAAAAAAY TOO LONG",
|
||||
)
|
||||
assert.Error(t, err)
|
||||
userId, err := ss.DesktopTokens().GetUserId("new_token_2", 1000)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, "", userId)
|
||||
})
|
||||
}
|
||||
|
||||
func testDeleteToken(t *testing.T, ss store.Store) {
|
||||
err := ss.DesktopTokens().Insert("deleteable_token", 3000, nil)
|
||||
require.NoError(t, err)
|
||||
err = ss.DesktopTokens().SetUserId("deleteable_token", 3000, "user_id")
|
||||
require.NoError(t, err)
|
||||
|
||||
t.Run("delete", func(t *testing.T) {
|
||||
userId, err := ss.DesktopTokens().GetUserId("deleteable_token", 3000)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, "user_id", userId)
|
||||
|
||||
err = ss.DesktopTokens().Delete("deleteable_token")
|
||||
assert.NoError(t, err)
|
||||
|
||||
_, err = ss.DesktopTokens().GetUserId("deleteable_token", 3000)
|
||||
assert.Error(t, err)
|
||||
})
|
||||
}
|
||||
|
||||
func testDeleteByUserId(t *testing.T, ss store.Store) {
|
||||
err := ss.DesktopTokens().Insert("deleteable_token_2", 4000, nil)
|
||||
require.NoError(t, err)
|
||||
err = ss.DesktopTokens().SetUserId("deleteable_token_2", 4000, "deleteable_user_id")
|
||||
require.NoError(t, err)
|
||||
|
||||
t.Run("delete by user id", func(t *testing.T) {
|
||||
userId, err := ss.DesktopTokens().GetUserId("deleteable_token_2", 3000)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, "deleteable_user_id", userId)
|
||||
|
||||
err = ss.DesktopTokens().DeleteByUserId("deleteable_user_id")
|
||||
assert.NoError(t, err)
|
||||
|
||||
_, err = ss.DesktopTokens().GetUserId("deleteable_token_2", 3000)
|
||||
assert.Error(t, err)
|
||||
})
|
||||
}
|
||||
|
||||
func testDeleteOlderThan(t *testing.T, ss store.Store) {
|
||||
err := ss.DesktopTokens().Insert("deleteable_token_old", 1000, nil)
|
||||
require.NoError(t, err)
|
||||
err = ss.DesktopTokens().Insert("deleteable_token_new", 5000, nil)
|
||||
require.NoError(t, err)
|
||||
|
||||
t.Run("delete older than", func(t *testing.T) {
|
||||
_, err := ss.DesktopTokens().GetUserId("deleteable_token_old", 1000)
|
||||
assert.NoError(t, err)
|
||||
_, err = ss.DesktopTokens().GetUserId("deleteable_token_new", 5000)
|
||||
assert.NoError(t, err)
|
||||
|
||||
err = ss.DesktopTokens().DeleteOlderThan(2000)
|
||||
assert.NoError(t, err)
|
||||
|
||||
_, err = ss.DesktopTokens().GetUserId("deleteable_token_old", 1000)
|
||||
assert.Error(t, err)
|
||||
_, err = ss.DesktopTokens().GetUserId("deleteable_token_new", 5000)
|
||||
assert.NoError(t, err)
|
||||
})
|
||||
}
|
||||
@@ -1,121 +0,0 @@
|
||||
// Code generated by mockery v2.23.2. DO NOT EDIT.
|
||||
|
||||
// Regenerate this file using `make store-mocks`.
|
||||
|
||||
package mocks
|
||||
|
||||
import mock "github.com/stretchr/testify/mock"
|
||||
|
||||
// DesktopTokensStore is an autogenerated mock type for the DesktopTokensStore type
|
||||
type DesktopTokensStore struct {
|
||||
mock.Mock
|
||||
}
|
||||
|
||||
// Delete provides a mock function with given fields: desktopToken
|
||||
func (_m *DesktopTokensStore) Delete(desktopToken string) error {
|
||||
ret := _m.Called(desktopToken)
|
||||
|
||||
var r0 error
|
||||
if rf, ok := ret.Get(0).(func(string) error); ok {
|
||||
r0 = rf(desktopToken)
|
||||
} else {
|
||||
r0 = ret.Error(0)
|
||||
}
|
||||
|
||||
return r0
|
||||
}
|
||||
|
||||
// DeleteByUserId provides a mock function with given fields: userId
|
||||
func (_m *DesktopTokensStore) DeleteByUserId(userId string) error {
|
||||
ret := _m.Called(userId)
|
||||
|
||||
var r0 error
|
||||
if rf, ok := ret.Get(0).(func(string) error); ok {
|
||||
r0 = rf(userId)
|
||||
} else {
|
||||
r0 = ret.Error(0)
|
||||
}
|
||||
|
||||
return r0
|
||||
}
|
||||
|
||||
// DeleteOlderThan provides a mock function with given fields: minCreatedAt
|
||||
func (_m *DesktopTokensStore) DeleteOlderThan(minCreatedAt int64) error {
|
||||
ret := _m.Called(minCreatedAt)
|
||||
|
||||
var r0 error
|
||||
if rf, ok := ret.Get(0).(func(int64) error); ok {
|
||||
r0 = rf(minCreatedAt)
|
||||
} else {
|
||||
r0 = ret.Error(0)
|
||||
}
|
||||
|
||||
return r0
|
||||
}
|
||||
|
||||
// GetUserId provides a mock function with given fields: desktopToken, minCreatedAt
|
||||
func (_m *DesktopTokensStore) GetUserId(desktopToken string, minCreatedAt int64) (string, error) {
|
||||
ret := _m.Called(desktopToken, minCreatedAt)
|
||||
|
||||
var r0 string
|
||||
var r1 error
|
||||
if rf, ok := ret.Get(0).(func(string, int64) (string, error)); ok {
|
||||
return rf(desktopToken, minCreatedAt)
|
||||
}
|
||||
if rf, ok := ret.Get(0).(func(string, int64) string); ok {
|
||||
r0 = rf(desktopToken, minCreatedAt)
|
||||
} else {
|
||||
r0 = ret.Get(0).(string)
|
||||
}
|
||||
|
||||
if rf, ok := ret.Get(1).(func(string, int64) error); ok {
|
||||
r1 = rf(desktopToken, minCreatedAt)
|
||||
} else {
|
||||
r1 = ret.Error(1)
|
||||
}
|
||||
|
||||
return r0, r1
|
||||
}
|
||||
|
||||
// Insert provides a mock function with given fields: desktopToken, createdAt, userId
|
||||
func (_m *DesktopTokensStore) Insert(desktopToken string, createdAt int64, userId *string) error {
|
||||
ret := _m.Called(desktopToken, createdAt, userId)
|
||||
|
||||
var r0 error
|
||||
if rf, ok := ret.Get(0).(func(string, int64, *string) error); ok {
|
||||
r0 = rf(desktopToken, createdAt, userId)
|
||||
} else {
|
||||
r0 = ret.Error(0)
|
||||
}
|
||||
|
||||
return r0
|
||||
}
|
||||
|
||||
// SetUserId provides a mock function with given fields: desktopToken, minCreatedAt, userId
|
||||
func (_m *DesktopTokensStore) SetUserId(desktopToken string, minCreatedAt int64, userId string) error {
|
||||
ret := _m.Called(desktopToken, minCreatedAt, userId)
|
||||
|
||||
var r0 error
|
||||
if rf, ok := ret.Get(0).(func(string, int64, string) error); ok {
|
||||
r0 = rf(desktopToken, minCreatedAt, userId)
|
||||
} else {
|
||||
r0 = ret.Error(0)
|
||||
}
|
||||
|
||||
return r0
|
||||
}
|
||||
|
||||
type mockConstructorTestingTNewDesktopTokensStore interface {
|
||||
mock.TestingT
|
||||
Cleanup(func())
|
||||
}
|
||||
|
||||
// NewDesktopTokensStore creates a new instance of DesktopTokensStore. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
|
||||
func NewDesktopTokensStore(t mockConstructorTestingTNewDesktopTokensStore) *DesktopTokensStore {
|
||||
mock := &DesktopTokensStore{}
|
||||
mock.Mock.Test(t)
|
||||
|
||||
t.Cleanup(func() { mock.AssertExpectations(t) })
|
||||
|
||||
return mock
|
||||
}
|
||||
@@ -187,22 +187,6 @@ func (_m *Store) Context() context.Context {
|
||||
return r0
|
||||
}
|
||||
|
||||
// DesktopTokens provides a mock function with given fields:
|
||||
func (_m *Store) DesktopTokens() store.DesktopTokensStore {
|
||||
ret := _m.Called()
|
||||
|
||||
var r0 store.DesktopTokensStore
|
||||
if rf, ok := ret.Get(0).(func() store.DesktopTokensStore); ok {
|
||||
r0 = rf()
|
||||
} else {
|
||||
if ret.Get(0) != nil {
|
||||
r0 = ret.Get(0).(store.DesktopTokensStore)
|
||||
}
|
||||
}
|
||||
|
||||
return r0
|
||||
}
|
||||
|
||||
// Draft provides a mock function with given fields:
|
||||
func (_m *Store) Draft() store.DraftStore {
|
||||
ret := _m.Called()
|
||||
|
||||
@@ -61,7 +61,6 @@ type Store struct {
|
||||
PostAcknowledgementStore mocks.PostAcknowledgementStore
|
||||
PostPersistentNotificationStore mocks.PostPersistentNotificationStore
|
||||
TrueUpReviewStore mocks.TrueUpReviewStore
|
||||
DesktopTokensStore mocks.DesktopTokensStore
|
||||
}
|
||||
|
||||
func (s *Store) SetContext(context context.Context) { s.context = context }
|
||||
@@ -104,7 +103,6 @@ func (s *Store) ChannelMemberHistory() store.ChannelMemberHistoryStore {
|
||||
return &s.ChannelMemberHistoryStore
|
||||
}
|
||||
func (s *Store) TrueUpReview() store.TrueUpReviewStore { return &s.TrueUpReviewStore }
|
||||
func (s *Store) DesktopTokens() store.DesktopTokensStore { return &s.DesktopTokensStore }
|
||||
func (s *Store) NotifyAdmin() store.NotifyAdminStore { return &s.NotifyAdminStore }
|
||||
func (s *Store) Group() store.GroupStore { return &s.GroupStore }
|
||||
func (s *Store) LinkMetadata() store.LinkMetadataStore { return &s.LinkMetadataStore }
|
||||
@@ -178,6 +176,5 @@ func (s *Store) AssertExpectations(t mock.TestingT) bool {
|
||||
&s.PostPriorityStore,
|
||||
&s.PostAcknowledgementStore,
|
||||
&s.PostPersistentNotificationStore,
|
||||
&s.DesktopTokensStore,
|
||||
)
|
||||
}
|
||||
|
||||
@@ -26,7 +26,6 @@ type TimerLayer struct {
|
||||
CommandStore store.CommandStore
|
||||
CommandWebhookStore store.CommandWebhookStore
|
||||
ComplianceStore store.ComplianceStore
|
||||
DesktopTokensStore store.DesktopTokensStore
|
||||
DraftStore store.DraftStore
|
||||
EmojiStore store.EmojiStore
|
||||
FileInfoStore store.FileInfoStore
|
||||
@@ -96,10 +95,6 @@ func (s *TimerLayer) Compliance() store.ComplianceStore {
|
||||
return s.ComplianceStore
|
||||
}
|
||||
|
||||
func (s *TimerLayer) DesktopTokens() store.DesktopTokensStore {
|
||||
return s.DesktopTokensStore
|
||||
}
|
||||
|
||||
func (s *TimerLayer) Draft() store.DraftStore {
|
||||
return s.DraftStore
|
||||
}
|
||||
@@ -280,11 +275,6 @@ type TimerLayerComplianceStore struct {
|
||||
Root *TimerLayer
|
||||
}
|
||||
|
||||
type TimerLayerDesktopTokensStore struct {
|
||||
store.DesktopTokensStore
|
||||
Root *TimerLayer
|
||||
}
|
||||
|
||||
type TimerLayerDraftStore struct {
|
||||
store.DraftStore
|
||||
Root *TimerLayer
|
||||
@@ -3010,102 +3000,6 @@ func (s *TimerLayerComplianceStore) Update(compliance *model.Compliance) (*model
|
||||
return result, err
|
||||
}
|
||||
|
||||
func (s *TimerLayerDesktopTokensStore) Delete(desktopToken string) error {
|
||||
start := time.Now()
|
||||
|
||||
err := s.DesktopTokensStore.Delete(desktopToken)
|
||||
|
||||
elapsed := float64(time.Since(start)) / float64(time.Second)
|
||||
if s.Root.Metrics != nil {
|
||||
success := "false"
|
||||
if err == nil {
|
||||
success = "true"
|
||||
}
|
||||
s.Root.Metrics.ObserveStoreMethodDuration("DesktopTokensStore.Delete", success, elapsed)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func (s *TimerLayerDesktopTokensStore) DeleteByUserId(userId string) error {
|
||||
start := time.Now()
|
||||
|
||||
err := s.DesktopTokensStore.DeleteByUserId(userId)
|
||||
|
||||
elapsed := float64(time.Since(start)) / float64(time.Second)
|
||||
if s.Root.Metrics != nil {
|
||||
success := "false"
|
||||
if err == nil {
|
||||
success = "true"
|
||||
}
|
||||
s.Root.Metrics.ObserveStoreMethodDuration("DesktopTokensStore.DeleteByUserId", success, elapsed)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func (s *TimerLayerDesktopTokensStore) DeleteOlderThan(minCreatedAt int64) error {
|
||||
start := time.Now()
|
||||
|
||||
err := s.DesktopTokensStore.DeleteOlderThan(minCreatedAt)
|
||||
|
||||
elapsed := float64(time.Since(start)) / float64(time.Second)
|
||||
if s.Root.Metrics != nil {
|
||||
success := "false"
|
||||
if err == nil {
|
||||
success = "true"
|
||||
}
|
||||
s.Root.Metrics.ObserveStoreMethodDuration("DesktopTokensStore.DeleteOlderThan", success, elapsed)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func (s *TimerLayerDesktopTokensStore) GetUserId(desktopToken string, minCreatedAt int64) (string, error) {
|
||||
start := time.Now()
|
||||
|
||||
result, err := s.DesktopTokensStore.GetUserId(desktopToken, minCreatedAt)
|
||||
|
||||
elapsed := float64(time.Since(start)) / float64(time.Second)
|
||||
if s.Root.Metrics != nil {
|
||||
success := "false"
|
||||
if err == nil {
|
||||
success = "true"
|
||||
}
|
||||
s.Root.Metrics.ObserveStoreMethodDuration("DesktopTokensStore.GetUserId", success, elapsed)
|
||||
}
|
||||
return result, err
|
||||
}
|
||||
|
||||
func (s *TimerLayerDesktopTokensStore) Insert(desktopToken string, createdAt int64, userId *string) error {
|
||||
start := time.Now()
|
||||
|
||||
err := s.DesktopTokensStore.Insert(desktopToken, createdAt, userId)
|
||||
|
||||
elapsed := float64(time.Since(start)) / float64(time.Second)
|
||||
if s.Root.Metrics != nil {
|
||||
success := "false"
|
||||
if err == nil {
|
||||
success = "true"
|
||||
}
|
||||
s.Root.Metrics.ObserveStoreMethodDuration("DesktopTokensStore.Insert", success, elapsed)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func (s *TimerLayerDesktopTokensStore) SetUserId(desktopToken string, minCreatedAt int64, userId string) error {
|
||||
start := time.Now()
|
||||
|
||||
err := s.DesktopTokensStore.SetUserId(desktopToken, minCreatedAt, userId)
|
||||
|
||||
elapsed := float64(time.Since(start)) / float64(time.Second)
|
||||
if s.Root.Metrics != nil {
|
||||
success := "false"
|
||||
if err == nil {
|
||||
success = "true"
|
||||
}
|
||||
s.Root.Metrics.ObserveStoreMethodDuration("DesktopTokensStore.SetUserId", success, elapsed)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func (s *TimerLayerDraftStore) Delete(userID string, channelID string, rootID string) error {
|
||||
start := time.Now()
|
||||
|
||||
@@ -11847,7 +11741,6 @@ func New(childStore store.Store, metrics einterfaces.MetricsInterface) *TimerLay
|
||||
newStore.CommandStore = &TimerLayerCommandStore{CommandStore: childStore.Command(), Root: &newStore}
|
||||
newStore.CommandWebhookStore = &TimerLayerCommandWebhookStore{CommandWebhookStore: childStore.CommandWebhook(), Root: &newStore}
|
||||
newStore.ComplianceStore = &TimerLayerComplianceStore{ComplianceStore: childStore.Compliance(), Root: &newStore}
|
||||
newStore.DesktopTokensStore = &TimerLayerDesktopTokensStore{DesktopTokensStore: childStore.DesktopTokens(), Root: &newStore}
|
||||
newStore.DraftStore = &TimerLayerDraftStore{DraftStore: childStore.Draft(), Root: &newStore}
|
||||
newStore.EmojiStore = &TimerLayerEmojiStore{EmojiStore: childStore.Emoji(), Root: &newStore}
|
||||
newStore.FileInfoStore = &TimerLayerFileInfoStore{FileInfoStore: childStore.FileInfo(), Root: &newStore}
|
||||
|
||||
Ссылка в новой задаче
Block a user