mirror of
https://github.com/0rangebananaspy/authelia.git
synced 2024-09-14 22:47:21 +07:00
ea1fae6491
* [MISC] Storage Schema Versioning Model * fixup go.sum * remove pq * fix int to text issue * fix incorrect SQL text * use key_name vs key * use transactions for all queries during upgrades * fix missing parenthesis * move upgrades to their own file * add provider name for future usage in upgrades * fix missing create config table values * fix using the const instead of the provider SQL * import logging once and reuse * update docs * remove db at suite teardown * apply suggestions from code review * fix mysql * make errors more uniform * style changes * remove commented code sections * remove commented code sections * add schema version type * add sql mock unit tests * go mod tidy * test blank row situations
40 lines
2.0 KiB
Go
40 lines
2.0 KiB
Go
package storage
|
|
|
|
import (
|
|
"fmt"
|
|
)
|
|
|
|
const storageSchemaCurrentVersion = SchemaVersion(1)
|
|
const storageSchemaUpgradeMessage = "Storage schema upgraded to v"
|
|
const storageSchemaUpgradeErrorText = "storage schema upgrade failed at v"
|
|
|
|
// Keep table names in lower case because some DB does not support upper case.
|
|
const userPreferencesTableName = "user_preferences"
|
|
const identityVerificationTokensTableName = "identity_verification_tokens"
|
|
const totpSecretsTableName = "totp_secrets"
|
|
const u2fDeviceHandlesTableName = "u2f_devices"
|
|
const authenticationLogsTableName = "authentication_logs"
|
|
const configTableName = "config"
|
|
|
|
// sqlUpgradeCreateTableStatements is a map of the schema version number, plus a map of the table name and the statement used to create it.
|
|
// The statement is fmt.Sprintf'd with the table name as the first argument.
|
|
var sqlUpgradeCreateTableStatements = map[SchemaVersion]map[string]string{
|
|
SchemaVersion(1): {
|
|
userPreferencesTableName: "CREATE TABLE %s (username VARCHAR(100) PRIMARY KEY, second_factor_method VARCHAR(11))",
|
|
identityVerificationTokensTableName: "CREATE TABLE %s (token VARCHAR(512))",
|
|
totpSecretsTableName: "CREATE TABLE %s (username VARCHAR(100) PRIMARY KEY, secret VARCHAR(64))",
|
|
u2fDeviceHandlesTableName: "CREATE TABLE %s (username VARCHAR(100) PRIMARY KEY, keyHandle TEXT, publicKey TEXT)",
|
|
authenticationLogsTableName: "CREATE TABLE %s (username VARCHAR(100), successful BOOL, time INTEGER)",
|
|
configTableName: "CREATE TABLE %s (category VARCHAR(32) NOT NULL, key_name VARCHAR(32) NOT NULL, value TEXT, PRIMARY KEY (category, key_name))",
|
|
},
|
|
}
|
|
|
|
// sqlUpgradesCreateTableIndexesStatements is a map of t he schema version number, plus a slice of statements to create all of the indexes.
|
|
var sqlUpgradesCreateTableIndexesStatements = map[SchemaVersion][]string{
|
|
SchemaVersion(1): {
|
|
fmt.Sprintf("CREATE INDEX IF NOT EXISTS usr_time_idx ON %s (username, time)", authenticationLogsTableName),
|
|
},
|
|
}
|
|
|
|
const unitTestUser = "john"
|