2019-05-16 17:14:32 +00:00
|
|
|
package upgrades
|
|
|
|
|
|
|
|
import (
|
2021-02-13 05:53:35 +00:00
|
|
|
"gorm.io/gorm"
|
2019-05-16 17:14:32 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
func init() {
|
2021-02-13 05:53:35 +00:00
|
|
|
upgrades[0] = upgrade{"Initial schema", func(tx *gorm.DB, ctx context) error {
|
2021-09-17 14:50:30 +00:00
|
|
|
tx.Exec(`CREATE TABLE IF NOT EXISTS portal (
|
2021-09-17 14:46:09 +00:00
|
|
|
jid VARCHAR(255),
|
|
|
|
receiver VARCHAR(255),
|
|
|
|
mxid VARCHAR(255) UNIQUE,
|
|
|
|
|
|
|
|
name VARCHAR(255) NOT NULL,
|
|
|
|
topic VARCHAR(512) NOT NULL,
|
|
|
|
avatar VARCHAR(255) NOT NULL,
|
|
|
|
avatar_url VARCHAR(255),
|
|
|
|
encrypted BOOLEAN NOT NULL DEFAULT false
|
|
|
|
|
|
|
|
PRIMARY KEY (jid, receiver)
|
|
|
|
)`)
|
|
|
|
|
2021-09-17 14:50:30 +00:00
|
|
|
tx.Exec(`CREATE TABLE IF NOT EXISTS puppet (
|
2021-09-17 14:46:09 +00:00
|
|
|
jid VARCHAR(255) PRIMARY KEY,
|
|
|
|
avatar VARCHAR(255),
|
|
|
|
displayname VARCHAR(255),
|
|
|
|
name_quality SMALLINT,
|
|
|
|
custom_mxid VARCHAR(255),
|
|
|
|
access_token VARCHAR(1023),
|
|
|
|
next_batch VARCHAR(255),
|
|
|
|
avatar_url VARCHAR(255),
|
|
|
|
enable_presence BOOLEAN NOT NULL DEFAULT true,
|
|
|
|
enable_receipts BOOLEAN NOT NULL DEFAULT true
|
|
|
|
)`)
|
|
|
|
|
2021-09-17 14:50:30 +00:00
|
|
|
tx.Exec(`CREATE TABLE IF NOT EXISTS "user" (
|
2021-09-17 14:46:09 +00:00
|
|
|
mxid VARCHAR(255) PRIMARY KEY,
|
|
|
|
jid VARCHAR(255) UNIQUE,
|
|
|
|
|
|
|
|
management_room VARCHAR(255),
|
|
|
|
|
|
|
|
client_id VARCHAR(255),
|
|
|
|
client_token VARCHAR(255),
|
|
|
|
server_token VARCHAR(255),
|
|
|
|
enc_key bytea,
|
|
|
|
mac_key bytea,
|
|
|
|
last_connection BIGINT NOT NULL DEFAULT 0
|
|
|
|
)`)
|
|
|
|
|
2021-09-17 14:50:30 +00:00
|
|
|
tx.Exec(`CREATE TABLE IF NOT EXISTS "user_portal" (
|
2021-09-17 14:46:09 +00:00
|
|
|
user_jid VARCHAR(255),
|
|
|
|
portal_jid VARCHAR(255),
|
|
|
|
portal_receiver VARCHAR(255),
|
|
|
|
in_community BOOLEAN NOT NULL DEFAULT FALSE,
|
|
|
|
|
|
|
|
PRIMARY KEY (user_jid, portal_jid, portal_receiver),
|
|
|
|
|
|
|
|
FOREIGN KEY (user_jid) REFERENCES "user"(jid) ON DELETE CASCADE,
|
|
|
|
FOREIGN KEY (portal_jid, portal_receiver) REFERENCES portal(jid, receiver) ON DELETE CASCADE
|
|
|
|
)`)
|
|
|
|
|
2021-09-17 14:50:30 +00:00
|
|
|
tx.Exec(`CREATE TABLE IF NOT EXISTS message (
|
2021-09-17 14:46:09 +00:00
|
|
|
chat_jid VARCHAR(255),
|
|
|
|
chat_receiver VARCHAR(255),
|
|
|
|
jid VARCHAR(255),
|
|
|
|
mxid VARCHAR(255) NOT NULL UNIQUE,
|
|
|
|
sender VARCHAR(255) NOT NULL,
|
|
|
|
content bytea NOT NULL,
|
|
|
|
timestamp BIGINT NOT NULL DEFAULT 0,
|
|
|
|
|
|
|
|
PRIMARY KEY (chat_jid, chat_receiver, jid),
|
|
|
|
FOREIGN KEY (chat_jid, chat_receiver) REFERENCES portal(jid, receiver) ON DELETE CASCADE
|
|
|
|
)`)
|
|
|
|
|
2021-09-17 14:50:30 +00:00
|
|
|
tx.Exec(`CREATE TABLE IF NOT EXISTS mx_registrations (
|
2021-09-17 14:46:09 +00:00
|
|
|
user_id VARCHAR(255) PRIMARY KEY
|
|
|
|
)`)
|
|
|
|
|
2021-09-17 14:50:30 +00:00
|
|
|
tx.Exec(`CREATE TABLE IF NOT EXISTS mx_room_state (
|
2021-09-17 14:46:09 +00:00
|
|
|
room_id VARCHAR(255) PRIMARY KEY,
|
|
|
|
power_levels TEXT
|
|
|
|
)`)
|
|
|
|
|
2021-09-17 14:50:30 +00:00
|
|
|
tx.Exec(`CREATE TABLE IF NOT EXISTS mx_user_profile (
|
2021-09-17 14:46:09 +00:00
|
|
|
room_id VARCHAR(255),
|
|
|
|
user_id VARCHAR(255),
|
|
|
|
membership VARCHAR(15) NOT NULL,
|
|
|
|
PRIMARY KEY (room_id, user_id),
|
|
|
|
displayname TEXT,
|
|
|
|
avatar_url VARCHAR(255)
|
|
|
|
)`)
|
|
|
|
|
2021-09-17 14:50:30 +00:00
|
|
|
tx.Exec(`CREATE TABLE IF NOT EXISTS crypto_olm_session (
|
2021-09-17 14:46:09 +00:00
|
|
|
session_id CHAR(43) PRIMARY KEY,
|
|
|
|
sender_key CHAR(43) NOT NULL,
|
|
|
|
session bytea NOT NULL,
|
|
|
|
created_at timestamp NOT NULL,
|
|
|
|
last_used timestamp NOT NULL
|
|
|
|
)`)
|
|
|
|
|
2021-09-17 14:50:30 +00:00
|
|
|
tx.Exec(`CREATE TABLE crypto_megolm_inbound_session (
|
2021-09-17 14:46:09 +00:00
|
|
|
session_id CHAR(43) PRIMARY KEY,
|
|
|
|
sender_key CHAR(43) NOT NULL,
|
|
|
|
signing_key CHAR(43) NOT NULL,
|
|
|
|
room_id VARCHAR(255) NOT NULL,
|
|
|
|
session bytea NOT NULL,
|
|
|
|
forwarding_chains bytea NOT NULL
|
|
|
|
)`)
|
|
|
|
|
2021-09-17 14:50:30 +00:00
|
|
|
tx.Exec(`CREATE TABLE crypto_device (
|
2021-09-17 14:46:09 +00:00
|
|
|
user_id VARCHAR(255),
|
|
|
|
device_id VARCHAR(255),
|
|
|
|
identity_key CHAR(43) NOT NULL,
|
|
|
|
signing_key CHAR(43) NOT NULL,
|
|
|
|
trust SMALLINT NOT NULL,
|
|
|
|
deleted BOOLEAN NOT NULL,
|
|
|
|
name VARCHAR(255) NOT NULL,
|
|
|
|
|
|
|
|
PRIMARY KEY (user_id, device_id)
|
|
|
|
)`)
|
|
|
|
|
2021-09-17 14:50:30 +00:00
|
|
|
tx.Exec(`CREATE TABLE crypto_tracked_user (
|
2021-09-17 14:46:09 +00:00
|
|
|
user_id VARCHAR(255) PRIMARY KEY
|
|
|
|
)`)
|
|
|
|
|
2021-09-17 14:50:30 +00:00
|
|
|
tx.Exec(`CREATE TABLE crypto_message_index (
|
2021-09-17 14:46:09 +00:00
|
|
|
sender_key CHAR(43),
|
|
|
|
session_id CHAR(43),
|
|
|
|
"index" INTEGER,
|
|
|
|
event_id VARCHAR(255) NOT NULL,
|
|
|
|
timestamp BIGINT NOT NULL,
|
|
|
|
|
|
|
|
PRIMARY KEY (sender_key, session_id, "index")
|
|
|
|
)`)
|
|
|
|
|
2021-09-17 14:50:30 +00:00
|
|
|
tx.Exec(`CREATE TABLE crypto_account (
|
2021-09-17 14:46:09 +00:00
|
|
|
device_id VARCHAR(255) PRIMARY KEY,
|
|
|
|
shared BOOLEAN NOT NULL,
|
|
|
|
sync_token TEXT NOT NULL,
|
|
|
|
account bytea NOT NULL
|
|
|
|
)`)
|
|
|
|
|
2021-09-17 14:50:30 +00:00
|
|
|
tx.Exec(`CREATE TABLE crypto_megolm_outbound_session (
|
2021-09-17 14:46:09 +00:00
|
|
|
room_id VARCHAR(255) PRIMARY KEY,
|
|
|
|
session_id CHAR(43) NOT NULL UNIQUE,
|
|
|
|
session bytea NOT NULL,
|
|
|
|
shared BOOLEAN NOT NULL,
|
|
|
|
max_messages INTEGER NOT NULL,
|
|
|
|
message_count INTEGER NOT NULL,
|
|
|
|
max_age BIGINT NOT NULL,
|
|
|
|
created_at timestamp NOT NULL,
|
|
|
|
last_used timestamp NOT NULL
|
|
|
|
)`)
|
2019-05-16 17:14:32 +00:00
|
|
|
|
|
|
|
return nil
|
|
|
|
}}
|
|
|
|
}
|