diff --git a/internal/database/tokendb.go b/internal/database/tokendb.go index cccdc16..40687e5 100644 --- a/internal/database/tokendb.go +++ b/internal/database/tokendb.go @@ -1,5 +1,9 @@ package database +import ( + "maps" +) + const TOKENTABLECREATE string = ` CREATE TABLE IF NOT EXISTS tokens ( name varchar(32) PRIMARY KEY NOT NULL, @@ -8,7 +12,9 @@ const TOKENTABLECREATE string = ` const INSERTTOKENSQL string = "INSERT INTO tokens VALUES (?, ?);" const DELETETOKENSQL string = "DELETE FROM tokens WHERE name = ?;" -const QUERYTOKENSQL string = "SELECT token FROM tokens;" +const QUERYTOKENSQL string = "SELECT * FROM tokens;" + +var tokenCache map[string]string = make(map[string]string) func InsertToken(name string, token string) error { _, err := database.Exec(INSERTTOKENSQL, name, token) @@ -20,6 +26,15 @@ func DeleteToken(name string) error { return err } +func ValidateTokenCache(token string) (bool, error) { + for v := range maps.Values(tokenCache) { + if token == v { + return true, nil + } + } + return ValidateToken(token) +} + func ValidateToken(token string) (bool, error) { result, err := database.Query(QUERYTOKENSQL) if err != nil { @@ -27,12 +42,14 @@ func ValidateToken(token string) (bool, error) { } defer result.Close() - var foundToken string + var name, foundToken string for result.Next() { - result.Scan(&token) + result.Scan(&name, &foundToken) + tokenCache[name] = foundToken if token == foundToken { return true, nil } } - return false, nil + err = result.Err() + return false, err }