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  }