package database import ( "maps" ) const TOKENTABLECREATE string = ` CREATE TABLE IF NOT EXISTS tokens ( name varchar(32) PRIMARY KEY NOT NULL, token varchar(32) NOT NULL );` const INSERTTOKENSQL string = "INSERT INTO tokens VALUES (?, ?);" const DELETETOKENSQL string = "DELETE FROM tokens WHERE name = ?;" 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) return err } func DeleteToken(name string) error { _, err := database.Exec(DELETETOKENSQL, name) 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 { return false, err } defer result.Close() var name, foundToken string for result.Next() { result.Scan(&name, &foundToken) tokenCache[name] = foundToken if token == foundToken { return true, nil } } err = result.Err() return false, err }