github.com/vnforks/kid/v5@v5.22.1-0.20200408055009-b89d99c65676/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 "net/http" 9 10 "github.com/vnforks/kid/v5/mlog" 11 "github.com/vnforks/kid/v5/model" 12 "github.com/vnforks/kid/v5/store" 13 ) 14 15 type SqlTokenStore struct { 16 SqlStore 17 } 18 19 func newSqlTokenStore(sqlStore SqlStore) store.TokenStore { 20 s := &SqlTokenStore{sqlStore} 21 22 for _, db := range sqlStore.GetAllConns() { 23 table := db.AddTableWithName(model.Token{}, "Tokens").SetKeys(false, "Token") 24 table.ColMap("Token").SetMaxSize(64) 25 table.ColMap("Type").SetMaxSize(64) 26 table.ColMap("Extra").SetMaxSize(2048) 27 } 28 29 return s 30 } 31 32 func (s SqlTokenStore) createIndexesIfNotExists() { 33 } 34 35 func (s SqlTokenStore) Save(token *model.Token) *model.AppError { 36 if err := token.IsValid(); err != nil { 37 return err 38 } 39 40 if err := s.GetMaster().Insert(token); err != nil { 41 return model.NewAppError("SqlTokenStore.Save", "store.sql_recover.save.app_error", nil, "", http.StatusInternalServerError) 42 } 43 return nil 44 } 45 46 func (s SqlTokenStore) Delete(token string) *model.AppError { 47 if _, err := s.GetMaster().Exec("DELETE FROM Tokens WHERE Token = :Token", map[string]interface{}{"Token": token}); err != nil { 48 return model.NewAppError("SqlTokenStore.Delete", "store.sql_recover.delete.app_error", nil, "", http.StatusInternalServerError) 49 } 50 return nil 51 } 52 53 func (s SqlTokenStore) GetByToken(tokenString string) (*model.Token, *model.AppError) { 54 token := &model.Token{} 55 56 if err := s.GetReplica().SelectOne(token, "SELECT * FROM Tokens WHERE Token = :Token", map[string]interface{}{"Token": tokenString}); err != nil { 57 if err == sql.ErrNoRows { 58 return nil, model.NewAppError("SqlTokenStore.GetByToken", "store.sql_recover.get_by_code.app_error", nil, err.Error(), http.StatusBadRequest) 59 } 60 61 return nil, model.NewAppError("SqlTokenStore.GetByToken", "store.sql_recover.get_by_code.app_error", nil, err.Error(), http.StatusInternalServerError) 62 } 63 64 return token, nil 65 } 66 67 func (s SqlTokenStore) Cleanup() { 68 mlog.Debug("Cleaning up token store.") 69 deltime := model.GetMillis() - model.MAX_TOKEN_EXIPRY_TIME 70 if _, err := s.GetMaster().Exec("DELETE FROM Tokens WHERE CreateAt < :DelTime", map[string]interface{}{"DelTime": deltime}); err != nil { 71 mlog.Error("Unable to cleanup token store.") 72 } 73 } 74 75 func (s SqlTokenStore) RemoveAllTokensByType(tokenType string) *model.AppError { 76 if _, err := s.GetMaster().Exec("DELETE FROM Tokens WHERE Type = :TokenType", map[string]interface{}{"TokenType": tokenType}); err != nil { 77 return model.NewAppError("SqlTokenStore.RemoveAllTokensByType", "store.sql_recover.remove_all_tokens_by_type.app_error", nil, err.Error(), http.StatusInternalServerError) 78 } 79 return nil 80 }