Nils Domrose
6 years ago
committed by
Nils Domrose
55 changed files with 454 additions and 21 deletions
@ -1,15 +1,15 @@ |
|||
CREATE TABLE twofactor ( |
|||
uuid VARCHAR(40) NOT NULL PRIMARY KEY, |
|||
user_uuid VARCHAR(40) NOT NULL REFERENCES users (uuid), |
|||
atype INTEGER NOT NULL, |
|||
type INTEGER NOT NULL, |
|||
enabled BOOLEAN NOT NULL, |
|||
data TEXT NOT NULL, |
|||
|
|||
UNIQUE (user_uuid, atype) |
|||
UNIQUE (user_uuid, type) |
|||
); |
|||
|
|||
|
|||
INSERT INTO twofactor (uuid, user_uuid, atype, enabled, data) |
|||
INSERT INTO twofactor (uuid, user_uuid, type, enabled, data) |
|||
SELECT UUID(), uuid, 0, 1, u.totp_secret FROM users u where u.totp_secret IS NOT NULL; |
|||
|
|||
UPDATE users SET totp_secret = NULL; -- Instead of recreating the table, just leave the columns empty |
@ -0,0 +1,3 @@ |
|||
ALTER TABLE attachments |
|||
ADD COLUMN |
|||
`key` TEXT; |
@ -0,0 +1,7 @@ |
|||
ALTER TABLE attachments CHANGE COLUMN akey `key` TEXT; |
|||
ALTER TABLE ciphers CHANGE COLUMN atype type INTEGER NOT NULL; |
|||
ALTER TABLE devices CHANGE COLUMN atype type INTEGER NOT NULL; |
|||
ALTER TABLE twofactor CHANGE COLUMN atype type INTEGER NOT NULL; |
|||
ALTER TABLE users CHANGE COLUMN akey `key` TEXT; |
|||
ALTER TABLE users_organizations CHANGE COLUMN akey `key` TEXT; |
|||
ALTER TABLE users_organizations CHANGE COLUMN atype type INTEGER NOT NULL; |
@ -0,0 +1,7 @@ |
|||
ALTER TABLE attachments CHANGE COLUMN `key` akey TEXT; |
|||
ALTER TABLE ciphers CHANGE COLUMN type atype INTEGER NOT NULL; |
|||
ALTER TABLE devices CHANGE COLUMN type atype INTEGER NOT NULL; |
|||
ALTER TABLE twofactor CHANGE COLUMN type atype INTEGER NOT NULL; |
|||
ALTER TABLE users CHANGE COLUMN `key` akey TEXT; |
|||
ALTER TABLE users_organizations CHANGE COLUMN `key` akey TEXT; |
|||
ALTER TABLE users_organizations CHANGE COLUMN type atype INTEGER NOT NULL; |
@ -0,0 +1,9 @@ |
|||
DROP TABLE users; |
|||
|
|||
DROP TABLE devices; |
|||
|
|||
DROP TABLE ciphers; |
|||
|
|||
DROP TABLE attachments; |
|||
|
|||
DROP TABLE folders; |
@ -0,0 +1,62 @@ |
|||
CREATE TABLE users ( |
|||
uuid TEXT NOT NULL PRIMARY KEY, |
|||
created_at DATETIME NOT NULL, |
|||
updated_at DATETIME NOT NULL, |
|||
email TEXT NOT NULL UNIQUE, |
|||
name TEXT NOT NULL, |
|||
password_hash BLOB NOT NULL, |
|||
salt BLOB NOT NULL, |
|||
password_iterations INTEGER NOT NULL, |
|||
password_hint TEXT, |
|||
key TEXT NOT NULL, |
|||
private_key TEXT, |
|||
public_key TEXT, |
|||
totp_secret TEXT, |
|||
totp_recover TEXT, |
|||
security_stamp TEXT NOT NULL, |
|||
equivalent_domains TEXT NOT NULL, |
|||
excluded_globals TEXT NOT NULL |
|||
); |
|||
|
|||
CREATE TABLE devices ( |
|||
uuid TEXT NOT NULL PRIMARY KEY, |
|||
created_at DATETIME NOT NULL, |
|||
updated_at DATETIME NOT NULL, |
|||
user_uuid TEXT NOT NULL REFERENCES users (uuid), |
|||
name TEXT NOT NULL, |
|||
type INTEGER NOT NULL, |
|||
push_token TEXT, |
|||
refresh_token TEXT NOT NULL |
|||
); |
|||
|
|||
CREATE TABLE ciphers ( |
|||
uuid TEXT NOT NULL PRIMARY KEY, |
|||
created_at DATETIME NOT NULL, |
|||
updated_at DATETIME NOT NULL, |
|||
user_uuid TEXT NOT NULL REFERENCES users (uuid), |
|||
folder_uuid TEXT REFERENCES folders (uuid), |
|||
organization_uuid TEXT, |
|||
type INTEGER NOT NULL, |
|||
name TEXT NOT NULL, |
|||
notes TEXT, |
|||
fields TEXT, |
|||
data TEXT NOT NULL, |
|||
favorite BOOLEAN NOT NULL |
|||
); |
|||
|
|||
CREATE TABLE attachments ( |
|||
id TEXT NOT NULL PRIMARY KEY, |
|||
cipher_uuid TEXT NOT NULL REFERENCES ciphers (uuid), |
|||
file_name TEXT NOT NULL, |
|||
file_size INTEGER NOT NULL |
|||
|
|||
); |
|||
|
|||
CREATE TABLE folders ( |
|||
uuid TEXT NOT NULL PRIMARY KEY, |
|||
created_at DATETIME NOT NULL, |
|||
updated_at DATETIME NOT NULL, |
|||
user_uuid TEXT NOT NULL REFERENCES users (uuid), |
|||
name TEXT NOT NULL |
|||
); |
|||
|
@ -0,0 +1,8 @@ |
|||
DROP TABLE collections; |
|||
|
|||
DROP TABLE organizations; |
|||
|
|||
|
|||
DROP TABLE users_collections; |
|||
|
|||
DROP TABLE users_organizations; |
@ -0,0 +1,31 @@ |
|||
CREATE TABLE collections ( |
|||
uuid TEXT NOT NULL PRIMARY KEY, |
|||
org_uuid TEXT NOT NULL REFERENCES organizations (uuid), |
|||
name TEXT NOT NULL |
|||
); |
|||
|
|||
CREATE TABLE organizations ( |
|||
uuid TEXT NOT NULL PRIMARY KEY, |
|||
name TEXT NOT NULL, |
|||
billing_email TEXT NOT NULL |
|||
); |
|||
|
|||
|
|||
CREATE TABLE users_collections ( |
|||
user_uuid TEXT NOT NULL REFERENCES users (uuid), |
|||
collection_uuid TEXT NOT NULL REFERENCES collections (uuid), |
|||
PRIMARY KEY (user_uuid, collection_uuid) |
|||
); |
|||
|
|||
CREATE TABLE users_organizations ( |
|||
uuid TEXT NOT NULL PRIMARY KEY, |
|||
user_uuid TEXT NOT NULL REFERENCES users (uuid), |
|||
org_uuid TEXT NOT NULL REFERENCES organizations (uuid), |
|||
|
|||
access_all BOOLEAN NOT NULL, |
|||
key TEXT NOT NULL, |
|||
status INTEGER NOT NULL, |
|||
type INTEGER NOT NULL, |
|||
|
|||
UNIQUE (user_uuid, org_uuid) |
|||
); |
@ -0,0 +1,34 @@ |
|||
ALTER TABLE ciphers RENAME TO oldCiphers; |
|||
|
|||
CREATE TABLE ciphers ( |
|||
uuid TEXT NOT NULL PRIMARY KEY, |
|||
created_at DATETIME NOT NULL, |
|||
updated_at DATETIME NOT NULL, |
|||
user_uuid TEXT REFERENCES users (uuid), -- Make this optional |
|||
organization_uuid TEXT REFERENCES organizations (uuid), -- Add reference to orgs table |
|||
-- Remove folder_uuid |
|||
type INTEGER NOT NULL, |
|||
name TEXT NOT NULL, |
|||
notes TEXT, |
|||
fields TEXT, |
|||
data TEXT NOT NULL, |
|||
favorite BOOLEAN NOT NULL |
|||
); |
|||
|
|||
CREATE TABLE folders_ciphers ( |
|||
cipher_uuid TEXT NOT NULL REFERENCES ciphers (uuid), |
|||
folder_uuid TEXT NOT NULL REFERENCES folders (uuid), |
|||
|
|||
PRIMARY KEY (cipher_uuid, folder_uuid) |
|||
); |
|||
|
|||
INSERT INTO ciphers (uuid, created_at, updated_at, user_uuid, organization_uuid, type, name, notes, fields, data, favorite) |
|||
SELECT uuid, created_at, updated_at, user_uuid, organization_uuid, type, name, notes, fields, data, favorite FROM oldCiphers; |
|||
|
|||
INSERT INTO folders_ciphers (cipher_uuid, folder_uuid) |
|||
SELECT uuid, folder_uuid FROM oldCiphers WHERE folder_uuid IS NOT NULL; |
|||
|
|||
|
|||
DROP TABLE oldCiphers; |
|||
|
|||
ALTER TABLE users_collections ADD COLUMN read_only BOOLEAN NOT NULL DEFAULT 0; -- False |
@ -0,0 +1 @@ |
|||
DROP TABLE ciphers_collections; |
@ -0,0 +1,5 @@ |
|||
CREATE TABLE ciphers_collections ( |
|||
cipher_uuid TEXT NOT NULL REFERENCES ciphers (uuid), |
|||
collection_uuid TEXT NOT NULL REFERENCES collections (uuid), |
|||
PRIMARY KEY (cipher_uuid, collection_uuid) |
|||
); |
@ -0,0 +1,14 @@ |
|||
ALTER TABLE attachments RENAME TO oldAttachments; |
|||
|
|||
CREATE TABLE attachments ( |
|||
id TEXT NOT NULL PRIMARY KEY, |
|||
cipher_uuid TEXT NOT NULL REFERENCES ciphers (uuid), |
|||
file_name TEXT NOT NULL, |
|||
file_size INTEGER NOT NULL |
|||
|
|||
); |
|||
|
|||
INSERT INTO attachments (id, cipher_uuid, file_name, file_size) |
|||
SELECT id, cipher_uuid, file_name, file_size FROM oldAttachments; |
|||
|
|||
DROP TABLE oldAttachments; |
@ -0,0 +1 @@ |
|||
-- This file should undo anything in `up.sql` |
@ -0,0 +1,3 @@ |
|||
ALTER TABLE devices |
|||
ADD COLUMN |
|||
twofactor_remember TEXT; |
@ -0,0 +1,8 @@ |
|||
UPDATE users |
|||
SET totp_secret = ( |
|||
SELECT twofactor.data FROM twofactor |
|||
WHERE twofactor.type = 0 |
|||
AND twofactor.user_uuid = users.uuid |
|||
); |
|||
|
|||
DROP TABLE twofactor; |
@ -0,0 +1,15 @@ |
|||
CREATE TABLE twofactor ( |
|||
uuid TEXT NOT NULL PRIMARY KEY, |
|||
user_uuid TEXT NOT NULL REFERENCES users (uuid), |
|||
type INTEGER NOT NULL, |
|||
enabled BOOLEAN NOT NULL, |
|||
data TEXT NOT NULL, |
|||
|
|||
UNIQUE (user_uuid, type) |
|||
); |
|||
|
|||
|
|||
INSERT INTO twofactor (uuid, user_uuid, type, enabled, data) |
|||
SELECT lower(hex(randomblob(16))) , uuid, 0, 1, u.totp_secret FROM users u where u.totp_secret IS NOT NULL; |
|||
|
|||
UPDATE users SET totp_secret = NULL; -- Instead of recreating the table, just leave the columns empty |
@ -0,0 +1,3 @@ |
|||
ALTER TABLE ciphers |
|||
ADD COLUMN |
|||
password_history TEXT; |
@ -0,0 +1 @@ |
|||
DROP TABLE invitations; |
@ -0,0 +1,3 @@ |
|||
CREATE TABLE invitations ( |
|||
email TEXT NOT NULL PRIMARY KEY |
|||
); |
@ -0,0 +1,7 @@ |
|||
ALTER TABLE users |
|||
ADD COLUMN |
|||
client_kdf_type INTEGER NOT NULL DEFAULT 0; -- PBKDF2 |
|||
|
|||
ALTER TABLE users |
|||
ADD COLUMN |
|||
client_kdf_iter INTEGER NOT NULL DEFAULT 5000; |
@ -1,3 +1,3 @@ |
|||
ALTER TABLE attachments |
|||
ADD COLUMN |
|||
akey TEXT; |
|||
key TEXT; |
@ -0,0 +1,7 @@ |
|||
ALTER TABLE attachments RENAME COLUMN akey TO key; |
|||
ALTER TABLE ciphers RENAME COLUMN atype TO type; |
|||
ALTER TABLE devices RENAME COLUMN atype TO type; |
|||
ALTER TABLE twofactor RENAME COLUMN atype TO type; |
|||
ALTER TABLE users RENAME COLUMN akey TO key; |
|||
ALTER TABLE users_organizations RENAME COLUMN akey TO key; |
|||
ALTER TABLE users_organizations RENAME COLUMN atype TO type; |
@ -0,0 +1,7 @@ |
|||
ALTER TABLE attachments RENAME COLUMN key TO akey; |
|||
ALTER TABLE ciphers RENAME COLUMN type TO atype; |
|||
ALTER TABLE devices RENAME COLUMN type TO atype; |
|||
ALTER TABLE twofactor RENAME COLUMN type TO atype; |
|||
ALTER TABLE users RENAME COLUMN key TO akey; |
|||
ALTER TABLE users_organizations RENAME COLUMN key TO akey; |
|||
ALTER TABLE users_organizations RENAME COLUMN type TO atype; |
@ -0,0 +1,172 @@ |
|||
table! { |
|||
attachments (id) { |
|||
id -> Text, |
|||
cipher_uuid -> Text, |
|||
file_name -> Text, |
|||
file_size -> Integer, |
|||
akey -> Nullable<Text>, |
|||
} |
|||
} |
|||
|
|||
table! { |
|||
ciphers (uuid) { |
|||
uuid -> Text, |
|||
created_at -> Timestamp, |
|||
updated_at -> Timestamp, |
|||
user_uuid -> Nullable<Text>, |
|||
organization_uuid -> Nullable<Text>, |
|||
atype -> Integer, |
|||
name -> Text, |
|||
notes -> Nullable<Text>, |
|||
fields -> Nullable<Text>, |
|||
data -> Text, |
|||
favorite -> Bool, |
|||
password_history -> Nullable<Text>, |
|||
} |
|||
} |
|||
|
|||
table! { |
|||
ciphers_collections (cipher_uuid, collection_uuid) { |
|||
cipher_uuid -> Text, |
|||
collection_uuid -> Text, |
|||
} |
|||
} |
|||
|
|||
table! { |
|||
collections (uuid) { |
|||
uuid -> Text, |
|||
org_uuid -> Text, |
|||
name -> Text, |
|||
} |
|||
} |
|||
|
|||
table! { |
|||
devices (uuid) { |
|||
uuid -> Text, |
|||
created_at -> Timestamp, |
|||
updated_at -> Timestamp, |
|||
user_uuid -> Text, |
|||
name -> Text, |
|||
atype -> Integer, |
|||
push_token -> Nullable<Text>, |
|||
refresh_token -> Text, |
|||
twofactor_remember -> Nullable<Text>, |
|||
} |
|||
} |
|||
|
|||
table! { |
|||
folders (uuid) { |
|||
uuid -> Text, |
|||
created_at -> Timestamp, |
|||
updated_at -> Timestamp, |
|||
user_uuid -> Text, |
|||
name -> Text, |
|||
} |
|||
} |
|||
|
|||
table! { |
|||
folders_ciphers (cipher_uuid, folder_uuid) { |
|||
cipher_uuid -> Text, |
|||
folder_uuid -> Text, |
|||
} |
|||
} |
|||
|
|||
table! { |
|||
invitations (email) { |
|||
email -> Text, |
|||
} |
|||
} |
|||
|
|||
table! { |
|||
organizations (uuid) { |
|||
uuid -> Text, |
|||
name -> Text, |
|||
billing_email -> Text, |
|||
} |
|||
} |
|||
|
|||
table! { |
|||
twofactor (uuid) { |
|||
uuid -> Text, |
|||
user_uuid -> Text, |
|||
atype -> Integer, |
|||
enabled -> Bool, |
|||
data -> Text, |
|||
} |
|||
} |
|||
|
|||
table! { |
|||
users (uuid) { |
|||
uuid -> Text, |
|||
created_at -> Timestamp, |
|||
updated_at -> Timestamp, |
|||
email -> Text, |
|||
name -> Text, |
|||
password_hash -> Binary, |
|||
salt -> Binary, |
|||
password_iterations -> Integer, |
|||
password_hint -> Nullable<Text>, |
|||
akey -> Text, |
|||
private_key -> Nullable<Text>, |
|||
public_key -> Nullable<Text>, |
|||
totp_secret -> Nullable<Text>, |
|||
totp_recover -> Nullable<Text>, |
|||
security_stamp -> Text, |
|||
equivalent_domains -> Text, |
|||
excluded_globals -> Text, |
|||
client_kdf_type -> Integer, |
|||
client_kdf_iter -> Integer, |
|||
} |
|||
} |
|||
|
|||
table! { |
|||
users_collections (user_uuid, collection_uuid) { |
|||
user_uuid -> Text, |
|||
collection_uuid -> Text, |
|||
read_only -> Bool, |
|||
} |
|||
} |
|||
|
|||
table! { |
|||
users_organizations (uuid) { |
|||
uuid -> Text, |
|||
user_uuid -> Text, |
|||
org_uuid -> Text, |
|||
access_all -> Bool, |
|||
akey -> Text, |
|||
status -> Integer, |
|||
atype -> Integer, |
|||
} |
|||
} |
|||
|
|||
joinable!(attachments -> ciphers (cipher_uuid)); |
|||
joinable!(ciphers -> organizations (organization_uuid)); |
|||
joinable!(ciphers -> users (user_uuid)); |
|||
joinable!(ciphers_collections -> ciphers (cipher_uuid)); |
|||
joinable!(ciphers_collections -> collections (collection_uuid)); |
|||
joinable!(collections -> organizations (org_uuid)); |
|||
joinable!(devices -> users (user_uuid)); |
|||
joinable!(folders -> users (user_uuid)); |
|||
joinable!(folders_ciphers -> ciphers (cipher_uuid)); |
|||
joinable!(folders_ciphers -> folders (folder_uuid)); |
|||
joinable!(twofactor -> users (user_uuid)); |
|||
joinable!(users_collections -> collections (collection_uuid)); |
|||
joinable!(users_collections -> users (user_uuid)); |
|||
joinable!(users_organizations -> organizations (org_uuid)); |
|||
joinable!(users_organizations -> users (user_uuid)); |
|||
|
|||
allow_tables_to_appear_in_same_query!( |
|||
attachments, |
|||
ciphers, |
|||
ciphers_collections, |
|||
collections, |
|||
devices, |
|||
folders, |
|||
folders_ciphers, |
|||
invitations, |
|||
organizations, |
|||
twofactor, |
|||
users, |
|||
users_collections, |
|||
users_organizations, |
|||
); |
Loading…
Reference in new issue