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 ( |
CREATE TABLE twofactor ( |
||||
uuid VARCHAR(40) NOT NULL PRIMARY KEY, |
uuid VARCHAR(40) NOT NULL PRIMARY KEY, |
||||
user_uuid VARCHAR(40) NOT NULL REFERENCES users (uuid), |
user_uuid VARCHAR(40) NOT NULL REFERENCES users (uuid), |
||||
atype INTEGER NOT NULL, |
type INTEGER NOT NULL, |
||||
enabled BOOLEAN NOT NULL, |
enabled BOOLEAN NOT NULL, |
||||
data TEXT 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; |
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 |
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 |
ALTER TABLE attachments |
||||
ADD COLUMN |
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