Skip to content

Commit

Permalink
FixAuth for ConfigurationScript#credentials
Browse files Browse the repository at this point in the history
  • Loading branch information
agrare committed Jan 4, 2024
1 parent 0b3d445 commit 3177d2e
Show file tree
Hide file tree
Showing 4 changed files with 65 additions and 2 deletions.
38 changes: 38 additions & 0 deletions spec/tools/fix_auth/models/fix_configuration_script_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
$LOAD_PATH << Rails.root.join("tools").to_s

require "fix_auth"

RSpec.describe FixAuth::FixConfigurationScript do
let!(:configuration_script) { FactoryBot.create(:configuration_script, :credentials => credentials) }
let(:legacy_key) { ManageIQ::Password::Key.new }
let(:pass) { "password" }
let(:enc_old) { ManageIQ::Password.encrypt(pass, legacy_key) }
let(:options) { {:legacy_key => legacy_key, :silent => true} }

context "with nil credentials" do
let(:credentials) { nil }

it "does nothing" do
FixAuth::FixConfigurationScript.run(options)
expect(configuration_script.credentials).to be_nil
end
end

context "with no v2 encrypted passwords in credentials" do
let(:credentials) { {} }

it "does nothing" do
FixAuth::FixConfigurationScript.run(options)
expect(configuration_script.credentials).to eq({})
end
end

context "with v2 encrypted passwords in credentials" do
let(:credentials) { {"foo" => enc_old} }

it "re-encrypts the passwords" do
FixAuth::FixConfigurationScript.run(options)
expect(configuration_script.reload.credentials["foo"]).to be_encrypted(pass)
end
end
end
File renamed without changes.
4 changes: 2 additions & 2 deletions tools/fix_auth/fix_auth.rb
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,8 @@ def database
end

def models
[FixAuthentication, FixMiqDatabase, FixMiqAeValue, FixMiqAeField,
FixSettingsChange, FixMiqRequest, FixMiqRequestTask]
[FixAuthentication, FixConfigurationScript, FixMiqDatabase, FixMiqAeValue,
FixMiqAeField, FixSettingsChange, FixMiqRequest, FixMiqRequestTask]
end

def generate_password
Expand Down
25 changes: 25 additions & 0 deletions tools/fix_auth/models.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,31 @@ class FixAuthentication < ActiveRecord::Base
self.inheritance_column = :_type_disabled
end

class FixConfigurationScript < ActiveRecord::Base
include FixAuth::AuthModel
self.table_name = "configuration_scripts"
self.password_columns = %w[credentials]

def self.selection_criteria
available_columns.collect do |column|
"(#{column}::text like '%v2:{%')"
end.join(" OR ")
end

def self.fix_passwords(obj, options)
available_columns.each do |column|
if (old_value = obj.send(column)).present?
old_value.each do |key, val|
new_value = recrypt(val, options)
old_value[key] = new_value if new_value != val
end
obj.send("#{column}=", old_value)
end
end
obj
end
end

class FixMiqDatabase < ActiveRecord::Base
include FixAuth::AuthModel
self.table_name = "miq_databases"
Expand Down

0 comments on commit 3177d2e

Please sign in to comment.