Add user_ips, users, access_tokens tables

Done in the same style as `roomserver`. We should probably think about
how we will do upgrades to the schema.
This commit is contained in:
Kegan Dougal 2017-02-24 16:24:21 +00:00
parent 4137b6185d
commit 3d575aca37
4 changed files with 131 additions and 0 deletions

View file

@ -0,0 +1,30 @@
package storage
import (
"database/sql"
)
const accessTokensSchema = `
CREATE TABLE IF NOT EXISTS access_tokens (
id BIGINT PRIMARY KEY,
user_id TEXT NOT NULL,
device_id TEXT,
token TEXT NOT NULL,
-- Timestamp (ms) when this access token was last used.
last_used BIGINT,
UNIQUE(token)
);
CREATE INDEX access_tokens_device_id ON access_tokens (user_id, device_id) ;
`
type accessTokenStatements struct {
}
func (s *accessTokenStatements) prepare(db *sql.DB) (err error) {
_, err = db.Exec(accessTokensSchema)
if err != nil {
return
}
return
}

View file

@ -0,0 +1,37 @@
package storage
import (
"database/sql"
)
type statements struct {
userIPStatements
accessTokenStatements
usersStatements
}
func (s *statements) prepare(db *sql.DB) error {
var err error
if err = s.prepareUserStatements(db); err != nil {
return err
}
return nil
}
func (s *statements) prepareUserStatements(db *sql.DB) error {
var err error
if err = s.accessTokenStatements.prepare(db); err != nil {
return err
}
if err = s.userIPStatements.prepare(db); err != nil {
return err
}
if err = s.usersStatements.prepare(db); err != nil {
return err
}
return nil
}

View file

@ -0,0 +1,30 @@
package storage
import (
"database/sql"
)
const userIPsSchema = `
CREATE TABLE IF NOT EXISTS user_ips (
user_id TEXT NOT NULL,
access_token TEXT NOT NULL,
device_id TEXT,
ip TEXT NOT NULL,
user_agent TEXT NOT NULL,
last_seen BIGINT NOT NULL
);
CREATE INDEX user_ips_user_ip ON user_ips(user_id, access_token, ip);
CREATE INDEX user_ips_device_id ON user_ips (user_id, device_id, last_seen);
`
type userIPStatements struct {
}
func (s *userIPStatements) prepare(db *sql.DB) (err error) {
_, err = db.Exec(userIPsSchema)
if err != nil {
return
}
return
}

View file

@ -0,0 +1,34 @@
package storage
import (
"database/sql"
)
const usersSchema = `
CREATE TABLE IF NOT EXISTS users (
user_id TEXT NOT NULL,
-- bcrypt hash of the users password. Can be null for passwordless users like
-- application service users.
password_hash TEXT,
-- Timestamp (ms) when this user was registered on the server.
created_at BIGINT,
-- The ID of the application service which created this user, if applicable.
appservice_id TEXT,
-- Flag which if set indicates this user is a server administrator.
is_admin SMALLINT DEFAULT 0 NOT NULL,
-- Flag which if set indicates this user is a guest.
is_guest SMALLINT DEFAULT 0 NOT NULL,
UNIQUE(user_id)
);
`
type usersStatements struct {
}
func (s *usersStatements) prepare(db *sql.DB) (err error) {
_, err = db.Exec(usersSchema)
if err != nil {
return
}
return
}