github.com/haalcala/mattermost-server-change-repo/v5@v5.33.2/store/sqlstore/tokens_store.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package sqlstore 5 6 import ( 7 "database/sql" 8 "fmt" 9 10 "github.com/pkg/errors" 11 12 "github.com/mattermost/mattermost-server/v5/mlog" 13 "github.com/mattermost/mattermost-server/v5/model" 14 "github.com/mattermost/mattermost-server/v5/store" 15 ) 16 17 type SqlTokenStore struct { 18 *SqlStore 19 } 20 21 func newSqlTokenStore(sqlStore *SqlStore) store.TokenStore { 22 s := &SqlTokenStore{sqlStore} 23 24 for _, db := range sqlStore.GetAllConns() { 25 table := db.AddTableWithName(model.Token{}, "Tokens").SetKeys(false, "Token") 26 table.ColMap("Token").SetMaxSize(64) 27 table.ColMap("Type").SetMaxSize(64) 28 table.ColMap("Extra").SetMaxSize(2048) 29 } 30 31 return s 32 } 33 34 func (s SqlTokenStore) createIndexesIfNotExists() { 35 } 36 37 func (s SqlTokenStore) Save(token *model.Token) error { 38 if err := token.IsValid(); err != nil { 39 return err 40 } 41 42 if err := s.GetMaster().Insert(token); err != nil { 43 return errors.Wrap(err, "failed to save Token") 44 } 45 return nil 46 } 47 48 func (s SqlTokenStore) Delete(token string) error { 49 if _, err := s.GetMaster().Exec("DELETE FROM Tokens WHERE Token = :Token", map[string]interface{}{"Token": token}); err != nil { 50 return errors.Wrapf(err, "failed to delete Token with value %s", token) 51 } 52 return nil 53 } 54 55 func (s SqlTokenStore) GetByToken(tokenString string) (*model.Token, error) { 56 token := &model.Token{} 57 58 if err := s.GetReplica().SelectOne(token, "SELECT * FROM Tokens WHERE Token = :Token", map[string]interface{}{"Token": tokenString}); err != nil { 59 if err == sql.ErrNoRows { 60 return nil, store.NewErrNotFound("Token", fmt.Sprintf("Token=%s", tokenString)) 61 } 62 63 return nil, errors.Wrapf(err, "failed to get Token with value %s", tokenString) 64 } 65 66 return token, nil 67 } 68 69 func (s SqlTokenStore) Cleanup() { 70 mlog.Debug("Cleaning up token store.") 71 deltime := model.GetMillis() - model.MAX_TOKEN_EXIPRY_TIME 72 if _, err := s.GetMaster().Exec("DELETE FROM Tokens WHERE CreateAt < :DelTime", map[string]interface{}{"DelTime": deltime}); err != nil { 73 mlog.Error("Unable to cleanup token store.") 74 } 75 } 76 77 func (s SqlTokenStore) RemoveAllTokensByType(tokenType string) error { 78 if _, err := s.GetMaster().Exec("DELETE FROM Tokens WHERE Type = :TokenType", map[string]interface{}{"TokenType": tokenType}); err != nil { 79 return errors.Wrapf(err, "failed to remove all Tokens with Type=%s", tokenType) 80 } 81 return nil 82 }