Commit be834c4d authored by James Lopez's avatar James Lopez

changed a few things based on feedback

parent 350a9aa9
...@@ -12,7 +12,11 @@ require 'file_size_validator' ...@@ -12,7 +12,11 @@ require 'file_size_validator'
class ProjectImportData < ActiveRecord::Base class ProjectImportData < ActiveRecord::Base
belongs_to :project belongs_to :project
attr_encrypted :credentials, key: Gitlab::Application.secrets.db_key_base, marshal: true, encode: true, mode: :per_attribute_iv_and_salt attr_encrypted :credentials,
key: Gitlab::Application.secrets.db_key_base,
marshal: true,
encode: true,
mode: :per_attribute_iv_and_salt
serialize :data, JSON serialize :data, JSON
...@@ -21,7 +25,7 @@ class ProjectImportData < ActiveRecord::Base ...@@ -21,7 +25,7 @@ class ProjectImportData < ActiveRecord::Base
before_validation :symbolize_credentials before_validation :symbolize_credentials
def symbolize_credentials def symbolize_credentials
# bang doesn't work here # bang doesn't work here - attr_encrypted makes it not to work
self.credentials = self.credentials.deep_symbolize_keys unless self.credentials.blank? self.credentials = self.credentials.deep_symbolize_keys unless self.credentials.blank?
end end
end end
class AddImportCredentialsToProjectImportData < ActiveRecord::Migration class AddImportCredentialsToProjectImportData < ActiveRecord::Migration
def change def change
add_column :project_import_data, :encrypted_credentials, :text add_column :project_import_data, :encrypted_credentials, :text
add_column :project_import_data, :encrypted_credentials_iv, :text add_column :project_import_data, :encrypted_credentials_iv, :string
add_column :project_import_data, :encrypted_credentials_salt, :text add_column :project_import_data, :encrypted_credentials_salt, :string
end end
end end
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
# #down method not supported # #down method not supported
class RemoveWrongImportUrlFromProjects < ActiveRecord::Migration class RemoveWrongImportUrlFromProjects < ActiveRecord::Migration
class FakeProjectImportData class ProjectImportDataFake
extend AttrEncrypted extend AttrEncrypted
attr_accessor :credentials attr_accessor :credentials
attr_encrypted :credentials, key: Gitlab::Application.secrets.db_key_base, marshal: true, encode: true, :mode => :per_attribute_iv_and_salt attr_encrypted :credentials, key: Gitlab::Application.secrets.db_key_base, marshal: true, encode: true, :mode => :per_attribute_iv_and_salt
...@@ -13,14 +13,11 @@ class RemoveWrongImportUrlFromProjects < ActiveRecord::Migration ...@@ -13,14 +13,11 @@ class RemoveWrongImportUrlFromProjects < ActiveRecord::Migration
say("Encrypting and migrating project import credentials...") say("Encrypting and migrating project import credentials...")
# This should cover GitHub, GitLab, Bitbucket user:password, token@domain, and other similar URLs. # This should cover GitHub, GitLab, Bitbucket user:password, token@domain, and other similar URLs.
say("Projects and GitHub projects with a wrong URL. It also migrates GitLab project credentials.") in_transaction(message: "Projects including GitHub and GitLab projects with an unsecured URL.") { process_projects_with_wrong_url }
in_transaction { process_projects_with_wrong_url }
say("Migrating Bitbucket credentials...") in_transaction(message: "Migrating Bitbucket credentials...") { process_project(import_type: 'bitbucket', credentials_keys: ['bb_session']) }
in_transaction { process_project(import_type: 'bitbucket', credentials_keys: ['bb_session']) }
say("Migrating FogBugz credentials...") in_transaction(message: "Migrating FogBugz credentials...") { process_project(import_type: 'fogbugz', credentials_keys: ['fb_session']) }
in_transaction { process_project(import_type: 'fogbugz', credentials_keys: ['fb_session']) }
end end
...@@ -33,7 +30,7 @@ class RemoveWrongImportUrlFromProjects < ActiveRecord::Migration ...@@ -33,7 +30,7 @@ class RemoveWrongImportUrlFromProjects < ActiveRecord::Migration
end end
end end
def process_project(import_type: , credentials_keys: []) def process_project(import_type:, credentials_keys: [])
unencrypted_import_data(import_type: import_type).each do |data| unencrypted_import_data(import_type: import_type).each do |data|
replace_data_credentials(data, credentials_keys) replace_data_credentials(data, credentials_keys)
end end
...@@ -56,8 +53,8 @@ class RemoveWrongImportUrlFromProjects < ActiveRecord::Migration ...@@ -56,8 +53,8 @@ class RemoveWrongImportUrlFromProjects < ActiveRecord::Migration
new_data_hash.deep_symbolize_keys new_data_hash.deep_symbolize_keys
end end
def in_transaction def in_transaction(message:)
say_with_time("Processing new transaction...") do say_with_time(message) do
ActiveRecord::Base.transaction do ActiveRecord::Base.transaction do
yield yield
end end
...@@ -65,7 +62,7 @@ class RemoveWrongImportUrlFromProjects < ActiveRecord::Migration ...@@ -65,7 +62,7 @@ class RemoveWrongImportUrlFromProjects < ActiveRecord::Migration
end end
def update_import_data(import_url, project) def update_import_data(import_url, project)
fake_import_data = FakeProjectImportData.new fake_import_data = ProjectImportDataFake.new
fake_import_data.credentials = import_url.credentials fake_import_data.credentials = import_url.credentials
import_data_id = project['import_data_id'] import_data_id = project['import_data_id']
if import_data_id if import_data_id
...@@ -76,7 +73,7 @@ class RemoveWrongImportUrlFromProjects < ActiveRecord::Migration ...@@ -76,7 +73,7 @@ class RemoveWrongImportUrlFromProjects < ActiveRecord::Migration
end end
def update_with_encrypted_data(data_hash, import_data_id, unencrypted_data = ' NULL ') def update_with_encrypted_data(data_hash, import_data_id, unencrypted_data = ' NULL ')
fake_import_data = FakeProjectImportData.new fake_import_data = ProjectImportDataFake.new
fake_import_data.credentials = data_hash fake_import_data.credentials = data_hash
execute(update_import_data_sql(import_data_id, fake_import_data, unencrypted_data)) execute(update_import_data_sql(import_data_id, fake_import_data, unencrypted_data))
end end
......
FactoryGirl.define do
factory :project_import_data, class: ProjectImportData do
data "test"
project
end
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment