40 lines
1.2 KiB
Ruby
40 lines
1.2 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
class NullifyFeatureFlagPlaintextTokens < ActiveRecord::Migration[5.2]
|
||
|
DOWNTIME = false
|
||
|
|
||
|
class FeatureFlagsClient < ActiveRecord::Base
|
||
|
include EachBatch
|
||
|
|
||
|
self.table_name = 'operations_feature_flags_clients'
|
||
|
|
||
|
scope :with_encrypted_token, -> { where.not(token_encrypted: nil) }
|
||
|
scope :with_plaintext_token, -> { where.not(token: nil) }
|
||
|
scope :without_plaintext_token, -> { where(token: nil) }
|
||
|
end
|
||
|
|
||
|
disable_ddl_transaction!
|
||
|
|
||
|
def up
|
||
|
return unless Gitlab.ee?
|
||
|
|
||
|
# 7357 records to be updated on GitLab.com
|
||
|
FeatureFlagsClient.with_encrypted_token.with_plaintext_token.each_batch do |relation|
|
||
|
relation.update_all(token: nil)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def down
|
||
|
return unless Gitlab.ee?
|
||
|
|
||
|
# There is no way to restore only the tokens that were NULLifyed in the `up`
|
||
|
# but we can do is to restore _all_ of them in case it is needed.
|
||
|
say_with_time('Decrypting tokens from operations_feature_flags_clients') do
|
||
|
FeatureFlagsClient.with_encrypted_token.without_plaintext_token.find_each do |feature_flags_client|
|
||
|
token = Gitlab::CryptoHelper.aes256_gcm_decrypt(feature_flags_client.token_encrypted)
|
||
|
feature_flags_client.update_column(:token, token)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|