Class: Rails::Command::CredentialsCommand
| Relationships & Source Files | |
| Namespace Children | |
|
Modules:
| |
| Super Chains via Extension / Inclusion / Inheritance | |
|
Class Chain:
self,
Base,
Thor
|
|
|
Instance Chain:
|
|
| Inherits: |
Rails::Command::Base
|
| Defined in: | railties/lib/rails/commands/credentials/credentials_command.rb |
Constant Summary
Diffing - Included
Class Attribute Summary
Base - Inherited
| .bin, .bin?, | |
| .engine? | Returns true when the app is a Rails engine. |
| .exit_on_failure? | |
Class Method Summary
Base - Inherited
| .banner, | |
| .base_name | Sets the base_name taking into account the current class namespace. |
| .command_name | Return command name without namespaces. |
| .default_command_root | Default file root to place extra files a command might need, placed one folder above the command file. |
| .desc | Tries to get the description from a USAGE file one folder above the command root. |
| .executable, | |
| .hide_command! | Convenience method to hide this command from the available ones when running rails command. |
| .namespace | Convenience method to get the namespace from the class name. |
| .printing_commands, | |
| .usage_path | Path to lookup a USAGE description in a file. |
| .create_command | Allow the command method to be called perform. |
| .namespaced_name, .resolve_path, .class_usage, | |
| .help | Override Thor’s class-level help to also show the USAGE. |
| .inherited, .perform | |
Instance Attribute Summary
Diffing - Included
EnvironmentArgument - Included
Instance Method Summary
- #diff(content_path = nil)
- #edit
- #fetch(path)
- #show
- #change_credentials_in_system_editor private
- #config private
- #content_path private
- #credentials private
- #ensure_credentials_have_been_added private
- #ensure_encryption_key_has_been_added private
- #extract_custom_environment(path) private
- #extract_environment_from_path(path) private
- #key_path private
- #missing_credentials! private
- #relative_path(path) private
- #warn_if_credentials_are_invalid private
Diffing - Included
| #disenroll_project_from_credentials_diffing, #enroll_project_in_credentials_diffing, #ensure_diffing_driver_is_configured, #configure_diffing_driver, #gitattributes |
EnvironmentArgument - Included
Helpers::Editor - Included
Actions - Included
| #boot_application!, #load_environment_config!, | |
| #load_generators | See additional method definition at line 36. |
| #load_tasks | See additional method definition at line 31. |
| #require_application!, | |
| #set_application_directory! | Change to the application’s path if there is no |
Instance Method Details
#change_credentials_in_system_editor (private)
[ GitHub ]# File 'railties/lib/rails/commands/credentials/credentials_command.rb', line 116
def change_credentials_in_system_editor using_system_editor do say "Editing #{content_path}..." credentials.change { |tmp_path| system_editor(tmp_path) } say "File encrypted and saved." warn_if_credentials_are_invalid end rescue ActiveSupport::EncryptedFile::MissingKeyError => error say error. rescue ActiveSupport::MessageEncryptor::InvalidMessage say "Couldn't decrypt #{content_path}. Perhaps you passed the wrong key?" end
#config (private)
[ GitHub ]# File 'railties/lib/rails/commands/credentials/credentials_command.rb', line 81
def config Rails.application.config.credentials end
#content_path (private)
[ GitHub ]# File 'railties/lib/rails/commands/credentials/credentials_command.rb', line 85
def content_path @content_path ||= relative_path(config.content_path) end
#credentials (private)
[ GitHub ]# File 'railties/lib/rails/commands/credentials/credentials_command.rb', line 93
def credentials @credentials ||= Rails.application.encrypted(content_path, key_path: key_path) end
#diff(content_path = nil)
[ GitHub ]# File 'railties/lib/rails/commands/credentials/credentials_command.rb', line 46
def diff(content_path = nil) if @content_path = content_path self.environment = extract_environment_from_path(content_path) load_environment_config! say credentials.read.presence || credentials.content_path.read else disenroll_project_from_credentials_diffing if [:disenroll] enroll_project_in_credentials_diffing if [:enroll] end rescue ActiveSupport::MessageEncryptor::InvalidMessage say credentials.content_path.read end
#edit
[ GitHub ]# File 'railties/lib/rails/commands/credentials/credentials_command.rb', line 18
def edit load_environment_config! load_generators if environment_specified? @content_path = "config/credentials/#{environment}.yml.enc" unless config.overridden?(:content_path) @key_path = "config/credentials/#{environment}.key" unless config.overridden?(:key_path) end ensure_encryption_key_has_been_added ensure_credentials_have_been_added ensure_diffing_driver_is_configured change_credentials_in_system_editor end
#ensure_credentials_have_been_added (private)
[ GitHub ]# File 'railties/lib/rails/commands/credentials/credentials_command.rb', line 106
def ensure_credentials_have_been_added require "rails/generators/rails/credentials/credentials_generator" Rails::Generators::CredentialsGenerator.new( [content_path, key_path], skip_secret_key_base: environment_specified? && %w[development test].include?(environment), quiet: true ).invoke_all end
#ensure_encryption_key_has_been_added (private)
[ GitHub ]# File 'railties/lib/rails/commands/credentials/credentials_command.rb', line 97
def ensure_encryption_key_has_been_added return if credentials.key? require "rails/generators/rails/encryption_key_file/encryption_key_file_generator" encryption_key_file_generator = Rails::Generators::EncryptionKeyFileGenerator.new encryption_key_file_generator.add_key_file(key_path) end
#extract_custom_environment(path) (private)
[ GitHub ]# File 'railties/lib/rails/commands/credentials/credentials_command.rb', line 154
def extract_custom_environment(path) path =~ %r{config/credentials/(.+)\.yml\.enc} && $1 end
#extract_environment_from_path(path) (private)
[ GitHub ]# File 'railties/lib/rails/commands/credentials/credentials_command.rb', line 150
def extract_environment_from_path(path) available_environments.find { |env| path.end_with?("#{env}.yml.enc") } || extract_custom_environment(path) end
#fetch(path)
[ GitHub ]# File 'railties/lib/rails/commands/credentials/credentials_command.rb', line 61
def fetch(path) load_environment_config! if (yaml = credentials.read) begin value = YAML.load(yaml) value = path.split(".").inject(value) do |doc, key| doc.fetch(key) end say value.to_s rescue KeyError, NoMethodError say_error "Invalid or missing credential path: #{path}" exit 1 end else missing_credentials! end end
#key_path (private)
[ GitHub ]# File 'railties/lib/rails/commands/credentials/credentials_command.rb', line 89
def key_path @key_path ||= relative_path(config.key_path) end
#missing_credentials! (private)
[ GitHub ]# File 'railties/lib/rails/commands/credentials/credentials_command.rb', line 137
def missing_credentials! if !credentials.key? say_error "Missing '#{key_path}' to decrypt credentials. See `#{executable(:help)}`." else say_error "File '#{content_path}' does not exist. Use `#{executable(:edit)}` to change that." end exit 1 end
#relative_path(path) (private)
[ GitHub ]#show
[ GitHub ]# File 'railties/lib/rails/commands/credentials/credentials_command.rb', line 35
def show load_environment_config! say credentials.read.presence || missing_credentials! end
#warn_if_credentials_are_invalid (private)
[ GitHub ]# File 'railties/lib/rails/commands/credentials/credentials_command.rb', line 129
def warn_if_credentials_are_invalid credentials.validate! rescue ActiveSupport::EncryptedConfiguration::InvalidContentError => error say "WARNING: #{error.}", :red say "" say "Your application will not be able to load '#{content_path}' until the error has been fixed.", :red end