Skip to content

Commit 7ffc6a7

Browse files
authored
Merge pull request rails#54774 from gregmolnar/master
gitignore all key files in config/credentials
2 parents 11edd88 + ef21ea2 commit 7ffc6a7

File tree

8 files changed

+24
-28
lines changed

8 files changed

+24
-28
lines changed

railties/lib/rails/commands/credentials/credentials_command.rb

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,6 @@ def ensure_encryption_key_has_been_added
8181

8282
encryption_key_file_generator = Rails::Generators::EncryptionKeyFileGenerator.new
8383
encryption_key_file_generator.add_key_file(key_path)
84-
encryption_key_file_generator.ignore_key_file(key_path)
8584
end
8685

8786
def ensure_credentials_have_been_added

railties/lib/rails/commands/encrypted/encrypted_command.rb

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ def encrypted_configuration
4545
def ensure_encryption_key_has_been_added
4646
return if encrypted_configuration.key?
4747
encryption_key_file_generator.add_key_file(key_path)
48-
encryption_key_file_generator.ignore_key_file(key_path)
4948
end
5049

5150
def ensure_encrypted_configuration_has_been_added

railties/lib/rails/generators/rails/app/app_generator.rb

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,6 @@ def master_key
194194
require "rails/generators/rails/master_key/master_key_generator"
195195
master_key_generator = Rails::Generators::MasterKeyGenerator.new([], quiet: options[:quiet], force: options[:force])
196196
master_key_generator.add_master_key_file_silently
197-
master_key_generator.ignore_master_key_file_silently
198197
end
199198

200199
def credentials

railties/lib/rails/generators/rails/encryption_key_file/encryption_key_file_generator.rb

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,18 +21,20 @@ def add_key_file(key_path)
2121

2222
log ""
2323
add_key_file_silently(key_path, key)
24+
ensure_key_files_are_ignored(key_path)
2425
log ""
2526
end
2627
end
2728

2829
def add_key_file_silently(key_path, key = nil)
2930
create_file key_path, key || ActiveSupport::EncryptedFile.generate_key, perm: 0600
31+
ensure_key_files_are_ignored_silently(key_path)
3032
end
3133

32-
def ignore_key_file(key_path, ignore: key_ignore(key_path))
34+
def ensure_key_files_are_ignored(key_path, ignore: key_ignore(key_path))
3335
if File.exist?(".gitignore")
3436
unless File.read(".gitignore").include?(ignore)
35-
log "Ignoring #{key_path} so it won't end up in Git history:"
37+
log "Ignoring #{ignore} so it won't end up in Git history:"
3638
log ""
3739
append_to_file ".gitignore", ignore
3840
log ""
@@ -44,13 +46,23 @@ def ignore_key_file(key_path, ignore: key_ignore(key_path))
4446
end
4547
end
4648

47-
def ignore_key_file_silently(key_path, ignore: key_ignore(key_path))
48-
append_to_file ".gitignore", ignore if File.exist?(".gitignore")
49+
def ensure_key_files_are_ignored_silently(key_path, ignore: key_ignore(key_path))
50+
if File.exist?(".gitignore")
51+
unless File.read(".gitignore").include?(ignore)
52+
append_to_file ".gitignore", ignore
53+
end
54+
end
4955
end
5056

5157
private
5258
def key_ignore(key_path)
53-
[ "", "/#{key_path}", "" ].join("\n")
59+
key_path = Pathname.new(key_path) unless key_path.is_a?(Pathname)
60+
<<~IGNORE
61+
62+
# Ignore key files for decrypting credentials and more.
63+
/#{key_path.dirname.join("*.key")}
64+
65+
IGNORE
5466
end
5567
end
5668
end

railties/lib/rails/generators/rails/master_key/master_key_generator.rb

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -32,22 +32,10 @@ def add_master_key_file_silently(key = nil)
3232
end
3333
end
3434

35-
def ignore_master_key_file
36-
key_file_generator.ignore_key_file(MASTER_KEY_PATH, ignore: key_ignore)
37-
end
38-
39-
def ignore_master_key_file_silently
40-
key_file_generator.ignore_key_file_silently(MASTER_KEY_PATH, ignore: key_ignore)
41-
end
42-
4335
private
4436
def key_file_generator
4537
EncryptionKeyFileGenerator.new([], options)
4638
end
47-
48-
def key_ignore
49-
[ "", "# Ignore master key for decrypting credentials and more.", "/#{MASTER_KEY_PATH}", "" ].join("\n")
50-
end
5139
end
5240
end
5341
end

railties/test/commands/credentials_test.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ class Rails::Command::CredentialsTest < ActiveSupport::TestCase
4242

4343
Dir.chdir(app_path) do
4444
gitignore = File.read(".gitignore")
45-
assert_equal 1, gitignore.scan(%r|config/master\.key|).length
45+
assert_equal 1, gitignore.scan("config/*.key").length
4646
end
4747
end
4848

@@ -61,7 +61,7 @@ class Rails::Command::CredentialsTest < ActiveSupport::TestCase
6161
run_edit_command
6262

6363
assert_file "config/master.key"
64-
assert_match "config/master.key", read_file(".gitignore")
64+
assert_match "config/*.key", read_file(".gitignore")
6565
end
6666

6767
test "edit command does not overwrite master key file if it already exists" do
@@ -74,7 +74,7 @@ class Rails::Command::CredentialsTest < ActiveSupport::TestCase
7474
test "edit command does not add duplicate master key entries to gitignore" do
7575
2.times { run_edit_command }
7676

77-
assert_equal 1, read_file(".gitignore").scan("config/master.key").length
77+
assert_equal 1, read_file(".gitignore").scan("config/*.key").length
7878
end
7979

8080
test "edit command can add master key when require_master_key is true" do

railties/test/commands/encrypted_test.rb

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ class Rails::Command::EncryptedTest < ActiveSupport::TestCase
4646
run_edit_command
4747

4848
assert_file "config/master.key"
49-
assert_match "config/master.key", read_file(".gitignore")
49+
assert_match "config/*.key", read_file(".gitignore")
5050
end
5151

5252
test "edit command does not overwrite master key file if it already exists" do
@@ -58,8 +58,7 @@ class Rails::Command::EncryptedTest < ActiveSupport::TestCase
5858

5959
test "edit command does not add duplicate master key entries to gitignore" do
6060
2.times { run_edit_command }
61-
62-
assert_equal 1, read_file(".gitignore").scan("config/master.key").length
61+
assert_equal 1, read_file(".gitignore").scan("/config/*.key").length
6362
end
6463

6564
test "edit command can add master key when require_master_key is true" do
@@ -87,7 +86,7 @@ class Rails::Command::EncryptedTest < ActiveSupport::TestCase
8786

8887
Dir.chdir(app_path) do
8988
assert File.exist?("config/tokens.key")
90-
assert_match "/config/tokens.key", File.read(".gitignore")
89+
assert_match "/config/*.key", File.read(".gitignore")
9190
end
9291

9392
assert_match(/access_key_id: 123/, run_edit_command(key: "config/tokens.key"))

railties/test/generators/app_generator_test.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1252,7 +1252,7 @@ def test_gitignore
12521252
run_generator
12531253

12541254
assert_file ".gitignore" do |content|
1255-
assert_match(/config\/master\.key/, content)
1255+
assert_match("config/*.key", content)
12561256
end
12571257
end
12581258

0 commit comments

Comments
 (0)