From 5d8398c8b8b51ee7363e7d45acc560f489783e34 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Tue, 2 Jun 2020 19:24:53 +0200 Subject: Add E2EE API (#13820) --- db/migrate/20170129000348_create_devices.rb | 13 ------ db/migrate/20170205175257_remove_devices.rb | 2 +- db/migrate/20200516180352_create_devices.rb | 14 ++++++ db/migrate/20200516183822_create_one_time_keys.rb | 12 +++++ .../20200518083523_create_encrypted_messages.rb | 15 +++++++ ...80606_encrypted_message_ids_to_timestamp_ids.rb | 13 ++++++ .../20200529214050_add_devices_url_to_accounts.rb | 5 +++ db/migrate/20200601222558_create_system_keys.rb | 9 ++++ db/schema.rb | 52 +++++++++++++++++++++- 9 files changed, 120 insertions(+), 15 deletions(-) delete mode 100644 db/migrate/20170129000348_create_devices.rb create mode 100644 db/migrate/20200516180352_create_devices.rb create mode 100644 db/migrate/20200516183822_create_one_time_keys.rb create mode 100644 db/migrate/20200518083523_create_encrypted_messages.rb create mode 100644 db/migrate/20200521180606_encrypted_message_ids_to_timestamp_ids.rb create mode 100644 db/migrate/20200529214050_add_devices_url_to_accounts.rb create mode 100644 db/migrate/20200601222558_create_system_keys.rb (limited to 'db') diff --git a/db/migrate/20170129000348_create_devices.rb b/db/migrate/20170129000348_create_devices.rb deleted file mode 100644 index bf8f5fc6e..000000000 --- a/db/migrate/20170129000348_create_devices.rb +++ /dev/null @@ -1,13 +0,0 @@ -class CreateDevices < ActiveRecord::Migration[5.0] - def change - create_table :devices do |t| - t.integer :account_id, null: false - t.string :registration_id, null: false, default: '' - - t.timestamps - end - - add_index :devices, :registration_id - add_index :devices, :account_id - end -end diff --git a/db/migrate/20170205175257_remove_devices.rb b/db/migrate/20170205175257_remove_devices.rb index e96ffed4d..9ef5c440e 100644 --- a/db/migrate/20170205175257_remove_devices.rb +++ b/db/migrate/20170205175257_remove_devices.rb @@ -1,5 +1,5 @@ class RemoveDevices < ActiveRecord::Migration[5.0] def change - drop_table :devices + drop_table :devices if table_exists?(:devices) end end diff --git a/db/migrate/20200516180352_create_devices.rb b/db/migrate/20200516180352_create_devices.rb new file mode 100644 index 000000000..04a628a89 --- /dev/null +++ b/db/migrate/20200516180352_create_devices.rb @@ -0,0 +1,14 @@ +class CreateDevices < ActiveRecord::Migration[5.2] + def change + create_table :devices do |t| + t.references :access_token, foreign_key: { to_table: :oauth_access_tokens, on_delete: :cascade, index: :unique } + t.references :account, foreign_key: { on_delete: :cascade } + t.string :device_id, default: '', null: false + t.string :name, default: '', null: false + t.text :fingerprint_key, default: '', null: false + t.text :identity_key, default: '', null: false + + t.timestamps + end + end +end diff --git a/db/migrate/20200516183822_create_one_time_keys.rb b/db/migrate/20200516183822_create_one_time_keys.rb new file mode 100644 index 000000000..642b9e632 --- /dev/null +++ b/db/migrate/20200516183822_create_one_time_keys.rb @@ -0,0 +1,12 @@ +class CreateOneTimeKeys < ActiveRecord::Migration[5.2] + def change + create_table :one_time_keys do |t| + t.references :device, foreign_key: { on_delete: :cascade } + t.string :key_id, default: '', null: false, index: :unique + t.text :key, default: '', null: false + t.text :signature, default: '', null: false + + t.timestamps + end + end +end diff --git a/db/migrate/20200518083523_create_encrypted_messages.rb b/db/migrate/20200518083523_create_encrypted_messages.rb new file mode 100644 index 000000000..486726303 --- /dev/null +++ b/db/migrate/20200518083523_create_encrypted_messages.rb @@ -0,0 +1,15 @@ +class CreateEncryptedMessages < ActiveRecord::Migration[5.2] + def change + create_table :encrypted_messages do |t| + t.references :device, foreign_key: { on_delete: :cascade } + t.references :from_account, foreign_key: { to_table: :accounts, on_delete: :cascade } + t.string :from_device_id, default: '', null: false + t.integer :type, default: 0, null: false + t.text :body, default: '', null: false + t.text :digest, default: '', null: false + t.text :message_franking, default: '', null: false + + t.timestamps + end + end +end diff --git a/db/migrate/20200521180606_encrypted_message_ids_to_timestamp_ids.rb b/db/migrate/20200521180606_encrypted_message_ids_to_timestamp_ids.rb new file mode 100644 index 000000000..24d43a0bf --- /dev/null +++ b/db/migrate/20200521180606_encrypted_message_ids_to_timestamp_ids.rb @@ -0,0 +1,13 @@ +class EncryptedMessageIdsToTimestampIds < ActiveRecord::Migration[5.2] + def up + safety_assured do + execute("ALTER TABLE encrypted_messages ALTER COLUMN id SET DEFAULT timestamp_id('encrypted_messages')") + end + end + + def down + execute("LOCK encrypted_messages") + execute("SELECT setval('encrypted_messages_id_seq', (SELECT MAX(id) FROM encrypted_messages))") + execute("ALTER TABLE encrypted_messages ALTER COLUMN id SET DEFAULT nextval('encrypted_messages_id_seq')") + end +end diff --git a/db/migrate/20200529214050_add_devices_url_to_accounts.rb b/db/migrate/20200529214050_add_devices_url_to_accounts.rb new file mode 100644 index 000000000..564877e5d --- /dev/null +++ b/db/migrate/20200529214050_add_devices_url_to_accounts.rb @@ -0,0 +1,5 @@ +class AddDevicesUrlToAccounts < ActiveRecord::Migration[5.2] + def change + add_column :accounts, :devices_url, :string + end +end diff --git a/db/migrate/20200601222558_create_system_keys.rb b/db/migrate/20200601222558_create_system_keys.rb new file mode 100644 index 000000000..fd9d221aa --- /dev/null +++ b/db/migrate/20200601222558_create_system_keys.rb @@ -0,0 +1,9 @@ +class CreateSystemKeys < ActiveRecord::Migration[5.2] + def change + create_table :system_keys do |t| + t.binary :key + + t.timestamps + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 31f0c96bc..e220e13fe 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2020_05_10_110808) do +ActiveRecord::Schema.define(version: 2020_06_01_222558) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -174,6 +174,7 @@ ActiveRecord::Schema.define(version: 2020_05_10_110808) do t.boolean "hide_collections" t.integer "avatar_storage_schema_version" t.integer "header_storage_schema_version" + t.string "devices_url" t.index "(((setweight(to_tsvector('simple'::regconfig, (display_name)::text), 'A'::\"char\") || setweight(to_tsvector('simple'::regconfig, (username)::text), 'B'::\"char\")) || setweight(to_tsvector('simple'::regconfig, (COALESCE(domain, ''::character varying))::text), 'C'::\"char\")))", name: "search_index", using: :gin t.index "lower((username)::text), lower((domain)::text)", name: "index_accounts_on_username_and_domain_lower", unique: true t.index ["moved_to_account_id"], name: "index_accounts_on_moved_to_account_id" @@ -317,6 +318,19 @@ ActiveRecord::Schema.define(version: 2020_05_10_110808) do t.index ["account_id"], name: "index_custom_filters_on_account_id" end + create_table "devices", force: :cascade do |t| + t.bigint "access_token_id" + t.bigint "account_id" + t.string "device_id", default: "", null: false + t.string "name", default: "", null: false + t.text "fingerprint_key", default: "", null: false + t.text "identity_key", default: "", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["access_token_id"], name: "index_devices_on_access_token_id" + t.index ["account_id"], name: "index_devices_on_account_id" + end + create_table "domain_allows", force: :cascade do |t| t.string "domain", default: "", null: false t.datetime "created_at", null: false @@ -344,6 +358,20 @@ ActiveRecord::Schema.define(version: 2020_05_10_110808) do t.index ["domain"], name: "index_email_domain_blocks_on_domain", unique: true end + create_table "encrypted_messages", id: :bigint, default: -> { "timestamp_id('encrypted_messages'::text)" }, force: :cascade do |t| + t.bigint "device_id" + t.bigint "from_account_id" + t.string "from_device_id", default: "", null: false + t.integer "type", default: 0, null: false + t.text "body", default: "", null: false + t.text "digest", default: "", null: false + t.text "message_franking", default: "", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["device_id"], name: "index_encrypted_messages_on_device_id" + t.index ["from_account_id"], name: "index_encrypted_messages_on_from_account_id" + end + create_table "favourites", force: :cascade do |t| t.datetime "created_at", null: false t.datetime "updated_at", null: false @@ -551,6 +579,17 @@ ActiveRecord::Schema.define(version: 2020_05_10_110808) do t.index ["uid"], name: "index_oauth_applications_on_uid", unique: true end + create_table "one_time_keys", force: :cascade do |t| + t.bigint "device_id" + t.string "key_id", default: "", null: false + t.text "key", default: "", null: false + t.text "signature", default: "", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["device_id"], name: "index_one_time_keys_on_device_id" + t.index ["key_id"], name: "index_one_time_keys_on_key_id" + end + create_table "pghero_space_stats", force: :cascade do |t| t.text "database" t.text "schema" @@ -749,6 +788,12 @@ ActiveRecord::Schema.define(version: 2020_05_10_110808) do t.index ["tag_id", "status_id"], name: "index_statuses_tags_on_tag_id_and_status_id", unique: true end + create_table "system_keys", force: :cascade do |t| + t.binary "key" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + create_table "tags", force: :cascade do |t| t.string "name", default: "", null: false t.datetime "created_at", null: false @@ -883,7 +928,11 @@ ActiveRecord::Schema.define(version: 2020_05_10_110808) do add_foreign_key "conversation_mutes", "accounts", name: "fk_225b4212bb", on_delete: :cascade add_foreign_key "conversation_mutes", "conversations", on_delete: :cascade add_foreign_key "custom_filters", "accounts", on_delete: :cascade + add_foreign_key "devices", "accounts", on_delete: :cascade + add_foreign_key "devices", "oauth_access_tokens", column: "access_token_id", on_delete: :cascade add_foreign_key "email_domain_blocks", "email_domain_blocks", column: "parent_id", on_delete: :cascade + add_foreign_key "encrypted_messages", "accounts", column: "from_account_id", on_delete: :cascade + add_foreign_key "encrypted_messages", "devices", on_delete: :cascade add_foreign_key "favourites", "accounts", name: "fk_5eb6c2b873", on_delete: :cascade add_foreign_key "favourites", "statuses", name: "fk_b0e856845e", on_delete: :cascade add_foreign_key "featured_tags", "accounts", on_delete: :cascade @@ -914,6 +963,7 @@ ActiveRecord::Schema.define(version: 2020_05_10_110808) do add_foreign_key "oauth_access_tokens", "oauth_applications", column: "application_id", name: "fk_f5fc4c1ee3", on_delete: :cascade add_foreign_key "oauth_access_tokens", "users", column: "resource_owner_id", name: "fk_e84df68546", on_delete: :cascade add_foreign_key "oauth_applications", "users", column: "owner_id", name: "fk_b0988c7c0a", on_delete: :cascade + add_foreign_key "one_time_keys", "devices", on_delete: :cascade add_foreign_key "poll_votes", "accounts", on_delete: :cascade add_foreign_key "poll_votes", "polls", on_delete: :cascade add_foreign_key "polls", "accounts", on_delete: :cascade -- cgit