diff options
author | Arturo Herrero <arturo.herrero@gmail.com> | 2019-11-05 13:08:31 +0300 |
---|---|---|
committer | Alessio Caiazza <acaiazza@gitlab.com> | 2019-11-26 15:12:18 +0300 |
commit | 9183bf943b36f7505f4ec64c2db14dc3f641b617 (patch) | |
tree | 9ea4bb8e4890fbea98e2c48df1991719c88e3b27 /db/migrate/20191120084627_add_encrypted_fields_to_application_settings.rb | |
parent | 23d237110e6a646dec08e1f5b4696d2d9c51cfef (diff) |
Encrypt application setting tokens
This is the plan to encrypt the plaintext tokens:
First release (this commit):
1. Create new encrypted fields in the database.
2. Start populating new encrypted fields, read the encrypted fields or
fallback to the plaintext fields.
3. Backfill the data removing the plaintext fields to the encrypted fields.
Second release:
4. Remove the virtual attribute (created in step 2).
5. Drop plaintext columns from the database (empty columns after step 3).
Diffstat (limited to 'db/migrate/20191120084627_add_encrypted_fields_to_application_settings.rb')
-rw-r--r-- | db/migrate/20191120084627_add_encrypted_fields_to_application_settings.rb | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/db/migrate/20191120084627_add_encrypted_fields_to_application_settings.rb b/db/migrate/20191120084627_add_encrypted_fields_to_application_settings.rb new file mode 100644 index 00000000000..4e0886a5121 --- /dev/null +++ b/db/migrate/20191120084627_add_encrypted_fields_to_application_settings.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +class AddEncryptedFieldsToApplicationSettings < ActiveRecord::Migration[5.2] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + PLAINTEXT_ATTRIBUTES = %w[ + akismet_api_key + elasticsearch_aws_secret_access_key + recaptcha_private_key + recaptcha_site_key + slack_app_secret + slack_app_verification_token + ].freeze + + def up + PLAINTEXT_ATTRIBUTES.each do |plaintext_attribute| + add_column :application_settings, "encrypted_#{plaintext_attribute}", :text + add_column :application_settings, "encrypted_#{plaintext_attribute}_iv", :string, limit: 255 + end + end + + def down + PLAINTEXT_ATTRIBUTES.each do |plaintext_attribute| + remove_column :application_settings, "encrypted_#{plaintext_attribute}" + remove_column :application_settings, "encrypted_#{plaintext_attribute}_iv" + end + end +end |