56 lines
1.2 KiB
Go
56 lines
1.2 KiB
Go
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
|
|
}
|