Class: CredentialsManager::AccountManager

Inherits:
Object
  • Object
show all
Defined in:
credentials_manager/lib/credentials_manager/account_manager.rb

Constant Summary collapse

DEFAULT_PREFIX =
"deliver"

Instance Method Summary collapse

Constructor Details

#initialize(user: nil, password: nil, prefix: nil, note: nil) ⇒ AccountManager

Returns a new instance of AccountManager.

Parameters:

  • prefix (String) (defaults to: nil)

    Very optional, is used for the iTunes Transporter which uses application specific passwords

  • note (String) (defaults to: nil)

    An optional note that will be shown next to the password and username prompt



13
14
15
16
17
18
19
# File 'credentials_manager/lib/credentials_manager/account_manager.rb', line 13

def initialize(user: nil, password: nil, prefix: nil, note: nil)
  @prefix = prefix || DEFAULT_PREFIX

  @user = user
  @password = password
  @note = note
end

Instance Method Details

#add_to_keychainObject



77
78
79
80
81
82
83
# File 'credentials_manager/lib/credentials_manager/account_manager.rb', line 77

def add_to_keychain
  if options
    Security::InternetPassword.add(server_name, user, password, options)
  else
    Security::InternetPassword.add(server_name, user, password)
  end
end

#default_prefix?Boolean

Is the default prefix “deliver”

Returns:

  • (Boolean)


22
23
24
# File 'credentials_manager/lib/credentials_manager/account_manager.rb', line 22

def default_prefix?
  @prefix == DEFAULT_PREFIX
end

#fetch_password_from_envObject



37
38
39
40
41
# File 'credentials_manager/lib/credentials_manager/account_manager.rb', line 37

def fetch_password_from_env
  password = ENV["FASTLANE_PASSWORD"] || ENV["DELIVER_PASSWORD"]
  return password if password.to_s.length > 0
  return nil
end

#invalid_credentials(force: false) ⇒ Object

Call this method to ask the user to re-enter the credentials @return: Did the user decide to remove the old entry and enter a new password?

Parameters:

  • force: (defaults to: false)

    if false, the user is asked before it gets deleted



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'credentials_manager/lib/credentials_manager/account_manager.rb', line 59

def invalid_credentials(force: false)
  puts("The login credentials for '#{user}' seem to be wrong".red)

  if fetch_password_from_env
    puts("The password was taken from the environment variable")
    puts("Please make sure it is correct")
    return false
  end

  if force || agree("Do you want to re-enter your password? (y/n)", true)
    puts("Removing Keychain entry for user '#{user}'...".yellow)
    remove_from_keychain
    
    return true
  end
  false
end

#optionsObject

Use env variables from this method to augment internet password item with additional data. These variables are used by Xamarin Studio to authenticate Apple developers.



96
97
98
99
100
101
102
# File 'credentials_manager/lib/credentials_manager/account_manager.rb', line 96

def options
  hash = {}
  hash[:p] = ENV["FASTLANE_PATH"] if ENV["FASTLANE_PATH"]
  hash[:P] = ENV["FASTLANE_PORT"] if ENV["FASTLANE_PORT"]
  hash[:r] = ENV["FASTLANE_PROTOCOL"] if ENV["FASTLANE_PROTOCOL"]
  hash.empty? ? nil : hash
end

#password(ask_if_missing: true) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
# File 'credentials_manager/lib/credentials_manager/account_manager.rb', line 43

def password(ask_if_missing: true)
  if default_prefix?
    @password ||= fetch_password_from_env
  end

  unless @password
    item = Security::InternetPassword.find(server: server_name)
    @password ||= item.password if item
  end
   while ask_if_missing && @password.to_s.length == 0
  return @password
end

#remove_from_keychainObject



85
86
87
88
# File 'credentials_manager/lib/credentials_manager/account_manager.rb', line 85

def remove_from_keychain
  Security::InternetPassword.delete(server: server_name)
  @password = nil
end

#server_nameObject



90
91
92
# File 'credentials_manager/lib/credentials_manager/account_manager.rb', line 90

def server_name
  "#{@prefix}.#{user}"
end

#userObject



26
27
28
29
30
31
32
33
34
35
# File 'credentials_manager/lib/credentials_manager/account_manager.rb', line 26

def user
  if default_prefix?
    @user ||= ENV["FASTLANE_USER"]
    @user ||= ENV["DELIVER_USER"]
    @user ||= AppfileConfig.try_fetch_value(:apple_id)
  end

   if @user.to_s.length == 0
  return @user
end