credentials_manager 0.15.1 → 0.16.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/credentials_manager.rb +1 -0
- data/lib/credentials_manager/account_manager.rb +24 -8
- data/lib/credentials_manager/appfile_config.rb +26 -2
- data/lib/credentials_manager/version.rb +1 -1
- metadata +9 -9
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 6eee55d49f41c211199559e3d44365130b764dbd
         | 
| 4 | 
            +
              data.tar.gz: 125ef8b4502e4a9e15871769298ef4ac4235cca5
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: b4188b66c8c8e9bf4d90e132dbb4ae75112b2604a8f8583d6c67eb8cc06ec661add5d0c18ebbefb4be3d60e9474d2721de0023788b5687d2331492415df4291b
         | 
| 7 | 
            +
              data.tar.gz: de5a4725b24bd66913193daa4777498752fb2fcdc98d44e15b58c647517b5f66b5e898ea3bf791a66599e4e3970398aa03436b0a4a6168a11d2009937afb73b3
         | 
    
        data/README.md
    CHANGED
    
    | @@ -23,7 +23,7 @@ password has been deleted. | |
| 23 23 |  | 
| 24 24 | 
             
            ## Storing in the keychain
         | 
| 25 25 |  | 
| 26 | 
            -
            By default, your Apple credentials are stored in the  | 
| 26 | 
            +
            By default, your Apple credentials are stored in the macOS Keychain.
         | 
| 27 27 |  | 
| 28 28 | 
             
            Your password is only stored locally on your computer.
         | 
| 29 29 |  | 
    
        data/lib/credentials_manager.rb
    CHANGED
    
    
| @@ -3,7 +3,11 @@ require 'highline/import' # to hide the entered password | |
| 3 3 |  | 
| 4 4 | 
             
            module CredentialsManager
         | 
| 5 5 | 
             
              class AccountManager
         | 
| 6 | 
            -
                 | 
| 6 | 
            +
                # @param prefix [String] Very optional, is used for the
         | 
| 7 | 
            +
                #   iTunes Transporter which uses application specofic passwords
         | 
| 8 | 
            +
                def initialize(user: nil, password: nil, prefix: nil)
         | 
| 9 | 
            +
                  @prefix = prefix || "deliver"
         | 
| 10 | 
            +
             | 
| 7 11 | 
             
                  @user = user
         | 
| 8 12 | 
             
                  @password = password
         | 
| 9 13 | 
             
                end
         | 
| @@ -16,9 +20,12 @@ module CredentialsManager | |
| 16 20 | 
             
                  return @user
         | 
| 17 21 | 
             
                end
         | 
| 18 22 |  | 
| 23 | 
            +
                def fetch_password_from_env
         | 
| 24 | 
            +
                  ENV["FASTLANE_PASSWORD"] || ENV["DELIVER_PASSWORD"]
         | 
| 25 | 
            +
                end
         | 
| 26 | 
            +
             | 
| 19 27 | 
             
                def password(ask_if_missing: true)
         | 
| 20 | 
            -
                  @password ||=  | 
| 21 | 
            -
                  @password ||= ENV["DELIVER_PASSWORD"]
         | 
| 28 | 
            +
                  @password ||= fetch_password_from_env
         | 
| 22 29 | 
             
                  unless @password
         | 
| 23 30 | 
             
                    item = Security::InternetPassword.find(server: server_name)
         | 
| 24 31 | 
             
                    @password ||= item.password if item
         | 
| @@ -32,6 +39,13 @@ module CredentialsManager | |
| 32 39 | 
             
                # @return: Did the user decide to remove the old entry and enter a new password?
         | 
| 33 40 | 
             
                def invalid_credentials(force: false)
         | 
| 34 41 | 
             
                  puts "The login credentials for '#{user}' seem to be wrong".red
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                  if fetch_password_from_env
         | 
| 44 | 
            +
                    puts "The password was taken from the environment variable"
         | 
| 45 | 
            +
                    puts "Please make sure it is correct"
         | 
| 46 | 
            +
                    return false
         | 
| 47 | 
            +
                  end
         | 
| 48 | 
            +
             | 
| 35 49 | 
             
                  if force || agree("Do you want to re-enter your password? (y/n)", true)
         | 
| 36 50 | 
             
                    puts "Removing Keychain entry for user '#{user}'...".yellow
         | 
| 37 51 | 
             
                    remove_from_keychain
         | 
| @@ -50,22 +64,28 @@ module CredentialsManager | |
| 50 64 | 
             
                  @password = nil
         | 
| 51 65 | 
             
                end
         | 
| 52 66 |  | 
| 67 | 
            +
                def server_name
         | 
| 68 | 
            +
                  "#{@prefix}.#{user}"
         | 
| 69 | 
            +
                end
         | 
| 70 | 
            +
             | 
| 53 71 | 
             
                private
         | 
| 54 72 |  | 
| 55 73 | 
             
                def ask_for_login
         | 
| 56 74 | 
             
                  puts "-------------------------------------------------------------------------------------".green
         | 
| 57 75 | 
             
                  puts "The login information you enter will be stored in your Mac OS Keychain".green
         | 
| 58 | 
            -
                  puts "You can also pass the password using the `FASTLANE_PASSWORD`  | 
| 76 | 
            +
                  puts "You can also pass the password using the `FASTLANE_PASSWORD` environment variable".green
         | 
| 59 77 | 
             
                  puts "More information about it on GitHub: https://github.com/fastlane/fastlane/tree/master/credentials_manager".green
         | 
| 60 78 | 
             
                  puts "-------------------------------------------------------------------------------------".green
         | 
| 61 79 |  | 
| 62 80 | 
             
                  if @user.to_s.length == 0
         | 
| 81 | 
            +
                    raise "Missing username, and running in non-interactive shell" if $stdout.isatty == false
         | 
| 63 82 | 
             
                    @user = ask("Username: ") while @user.to_s.length == 0
         | 
| 64 83 | 
             
                    # we return here, as only the username was asked for now, we'll get called for the pw again anyway
         | 
| 65 84 | 
             
                    return
         | 
| 66 85 | 
             
                  end
         | 
| 67 86 |  | 
| 68 87 | 
             
                  while @password.to_s.length == 0
         | 
| 88 | 
            +
                    raise "Missing password for user #{@user}, and running in non-interactive shell" if $stdout.isatty == false
         | 
| 69 89 | 
             
                    @password = ask("Password (for #{@user}): ") { |q| q.echo = "*" }
         | 
| 70 90 | 
             
                  end
         | 
| 71 91 |  | 
| @@ -80,9 +100,5 @@ module CredentialsManager | |
| 80 100 | 
             
                    return false
         | 
| 81 101 | 
             
                  end
         | 
| 82 102 | 
             
                end
         | 
| 83 | 
            -
             | 
| 84 | 
            -
                def server_name
         | 
| 85 | 
            -
                  "deliver.#{user}"
         | 
| 86 | 
            -
                end
         | 
| 87 103 | 
             
              end
         | 
| 88 104 | 
             
            end
         | 
| @@ -1,8 +1,9 @@ | |
| 1 1 | 
             
            module CredentialsManager
         | 
| 2 2 | 
             
              # Access the content of the app file (e.g. app identifier and Apple ID)
         | 
| 3 3 | 
             
              class AppfileConfig
         | 
| 4 | 
            -
             | 
| 5 4 | 
             
                def self.try_fetch_value(key)
         | 
| 5 | 
            +
                  # We need to load the file every time we call this method
         | 
| 6 | 
            +
                  # to support the `for_lane` keyword
         | 
| 6 7 | 
             
                  begin
         | 
| 7 8 | 
             
                    return self.new.data[key]
         | 
| 8 9 | 
             
                  rescue => ex
         | 
| @@ -21,7 +22,7 @@ module CredentialsManager | |
| 21 22 |  | 
| 22 23 | 
             
                def initialize(path = nil)
         | 
| 23 24 | 
             
                  if path
         | 
| 24 | 
            -
                    raise "Could not find Appfile at path '#{path}'".red unless File.exist?(path)
         | 
| 25 | 
            +
                    raise "Could not find Appfile at path '#{path}'".red unless File.exist?(File.expand_path(path))
         | 
| 25 26 | 
             
                  end
         | 
| 26 27 |  | 
| 27 28 | 
             
                  path ||= self.class.default_path
         | 
| @@ -42,12 +43,35 @@ module CredentialsManager | |
| 42 43 | 
             
                      # rubocop:disable Lint/Eval
         | 
| 43 44 | 
             
                      eval(content)
         | 
| 44 45 | 
             
                      # rubocop:enable Lint/Eval
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                      print_debug_information(path: full_path) if $verbose
         | 
| 45 48 | 
             
                    end
         | 
| 46 49 | 
             
                  end
         | 
| 47 50 |  | 
| 48 51 | 
             
                  fallback_to_default_values
         | 
| 49 52 | 
             
                end
         | 
| 50 53 |  | 
| 54 | 
            +
                def print_debug_information(path: nil)
         | 
| 55 | 
            +
                  self.class.already_printed_debug_information ||= {}
         | 
| 56 | 
            +
                  return if self.class.already_printed_debug_information[self.data]
         | 
| 57 | 
            +
                  # self.class.already_printed_debug_information is a hash, we use to detect if we already printed this data
         | 
| 58 | 
            +
                  # this is necessary, as on the course of a fastlane run, the values might change, e.g. when using
         | 
| 59 | 
            +
                  # the `for_lane` keyword.
         | 
| 60 | 
            +
             | 
| 61 | 
            +
                  puts "Successfully loaded Appfile at path '#{path}'".yellow
         | 
| 62 | 
            +
             | 
| 63 | 
            +
                  self.data.each do |key, value|
         | 
| 64 | 
            +
                    puts "- #{key.to_s.cyan}: '#{value.to_s.green}'"
         | 
| 65 | 
            +
                  end
         | 
| 66 | 
            +
                  puts "-------"
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                  self.class.already_printed_debug_information[self.data] = true
         | 
| 69 | 
            +
                end
         | 
| 70 | 
            +
             | 
| 71 | 
            +
                def self.already_printed_debug_information
         | 
| 72 | 
            +
                  @already_printed_debug_information ||= {}
         | 
| 73 | 
            +
                end
         | 
| 74 | 
            +
             | 
| 51 75 | 
             
                def fallback_to_default_values
         | 
| 52 76 | 
             
                  data[:apple_id] ||= ENV["FASTLANE_USER"] || ENV["DELIVER_USER"]
         | 
| 53 77 | 
             
                end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: credentials_manager
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.16.4
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Felix Krause
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2016- | 
| 11 | 
            +
            date: 2016-12-20 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: colored
         | 
| @@ -84,16 +84,16 @@ dependencies: | |
| 84 84 | 
             
              name: rake
         | 
| 85 85 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 86 86 | 
             
                requirements:
         | 
| 87 | 
            -
                - - " | 
| 87 | 
            +
                - - "<"
         | 
| 88 88 | 
             
                  - !ruby/object:Gem::Version
         | 
| 89 | 
            -
                    version: ' | 
| 89 | 
            +
                    version: '12'
         | 
| 90 90 | 
             
              type: :development
         | 
| 91 91 | 
             
              prerelease: false
         | 
| 92 92 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 93 93 | 
             
                requirements:
         | 
| 94 | 
            -
                - - " | 
| 94 | 
            +
                - - "<"
         | 
| 95 95 | 
             
                  - !ruby/object:Gem::Version
         | 
| 96 | 
            -
                    version: ' | 
| 96 | 
            +
                    version: '12'
         | 
| 97 97 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 98 98 | 
             
              name: pry
         | 
| 99 99 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -184,14 +184,14 @@ dependencies: | |
| 184 184 | 
             
                requirements:
         | 
| 185 185 | 
             
                - - "~>"
         | 
| 186 186 | 
             
                  - !ruby/object:Gem::Version
         | 
| 187 | 
            -
                    version: 0. | 
| 187 | 
            +
                    version: 0.44.0
         | 
| 188 188 | 
             
              type: :development
         | 
| 189 189 | 
             
              prerelease: false
         | 
| 190 190 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 191 191 | 
             
                requirements:
         | 
| 192 192 | 
             
                - - "~>"
         | 
| 193 193 | 
             
                  - !ruby/object:Gem::Version
         | 
| 194 | 
            -
                    version: 0. | 
| 194 | 
            +
                    version: 0.44.0
         | 
| 195 195 | 
             
            description: Password manager used in fastlane.tools
         | 
| 196 196 | 
             
            email:
         | 
| 197 197 | 
             
            - fastlane@krausefx.com
         | 
| @@ -228,7 +228,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 228 228 | 
             
                  version: '0'
         | 
| 229 229 | 
             
            requirements: []
         | 
| 230 230 | 
             
            rubyforge_project: 
         | 
| 231 | 
            -
            rubygems_version: 2. | 
| 231 | 
            +
            rubygems_version: 2.6.8
         | 
| 232 232 | 
             
            signing_key: 
         | 
| 233 233 | 
             
            specification_version: 4
         | 
| 234 234 | 
             
            summary: Password manager used in fastlane.tools
         |