add client session ID tokens
This commit is contained in:
4 files changed
+203
-32
No files matched your search
+13
-11
@@ -40,11 +40,6 @@ func AddAccountSession(username string, token []byte) error {
|
||||
return err
|
||||
}
|
||||
|
||||
_, err = handle.Exec("UPDATE sessions s JOIN accounts a ON a.uuid = s.uuid SET s.active = 1 WHERE a.username = ? AND a.lastLoggedIn IS NULL", username)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
_, err = handle.Exec("UPDATE accounts SET lastLoggedIn = UTC_TIMESTAMP() WHERE username = ?", username)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -213,18 +208,25 @@ func UpdateTrainerIds(trainerId, secretId int, uuid []byte) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func IsActiveSession(token []byte) (bool, error) {
|
||||
var active int
|
||||
err := handle.QueryRow("SELECT `active` FROM sessions WHERE token = ?", token).Scan(&active)
|
||||
func IsActiveSession(token []byte, clientSessionId string) (bool, error) {
|
||||
var storedId string
|
||||
err := handle.QueryRow("SELECT `clientSessionId` FROM sessions WHERE token = ?", token).Scan(&storedId)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
if storedId == "" {
|
||||
err = UpdateActiveSession(token, clientSessionId)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
return true, nil
|
||||
}
|
||||
|
||||
return active == 1, nil
|
||||
return storedId == clientSessionId, nil
|
||||
}
|
||||
|
||||
func UpdateActiveSession(uuid []byte, token []byte) error {
|
||||
_, err := handle.Exec("UPDATE sessions SET `active` = CASE WHEN token = ? THEN 1 ELSE 0 END WHERE uuid = ?", token, uuid)
|
||||
func UpdateActiveSession(token []byte, clientSessionId string) error {
|
||||
_, err := handle.Exec("UPDATE sessions SET clientSessionId = ? WHERE token = ?", clientSessionId, token)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -145,6 +145,8 @@ func Init(username, password, protocol, address, database string) error {
|
||||
|
||||
func setupDb(tx *sql.Tx) error {
|
||||
queries := []string{
|
||||
// MIGRATION 000
|
||||
|
||||
`CREATE TABLE IF NOT EXISTS accounts (uuid BINARY(16) NOT NULL PRIMARY KEY, username VARCHAR(16) UNIQUE NOT NULL, hash BINARY(32) NOT NULL, salt BINARY(16) NOT NULL, registered TIMESTAMP NOT NULL, lastLoggedIn TIMESTAMP DEFAULT NULL, lastActivity TIMESTAMP DEFAULT NULL, banned TINYINT(1) NOT NULL DEFAULT 0, trainerId SMALLINT(5) UNSIGNED DEFAULT 0, secretId SMALLINT(5) UNSIGNED DEFAULT 0)`,
|
||||
`CREATE INDEX IF NOT EXISTS accountsByActivity ON accounts (lastActivity)`,
|
||||
|
||||
@@ -168,6 +170,12 @@ func setupDb(tx *sql.Tx) error {
|
||||
`CREATE TABLE IF NOT EXISTS systemSaveData (uuid BINARY(16) PRIMARY KEY, data LONGBLOB, timestamp TIMESTAMP)`,
|
||||
|
||||
`CREATE TABLE IF NOT EXISTS sessionSaveData (uuid BINARY(16), slot TINYINT, data LONGBLOB, timestamp TIMESTAMP, PRIMARY KEY (uuid, slot))`,
|
||||
|
||||
// ----------------------------------
|
||||
// MIGRATION 001
|
||||
|
||||
`ALTER TABLE sessions DROP COLUMN IF EXISTS active`,
|
||||
`ALTER TABLE sessions ADD COLUMN IF NOT EXISTS clientSessionId VARCHAR(32)`,
|
||||
}
|
||||
|
||||
for _, q := range queries {
|
||||
|
||||
Reference in new issue
Block a user