Class: CredentialsManager::PasswordManager

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

Overview

Handles reading out the password from the keychain or asking for login data

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(id_to_use = nil, ask_if_missing = true) ⇒ PasswordManager

A new instance of PasswordManager.

This already check the Keychain if there is a username and password stored. If that’s not the case, it will ask for login data via stdin

Parameters:

  • id_to_use (String) (defaults to: nil)

    Apple ID (e.g. [email protected]) which should be used for this upload. if given, only the password will be asked/loaded.

  • ask_if_missing (boolean) (defaults to: true)

    true by default: if no credentials are found, should the user be asked?



34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/credentials_manager/password_manager.rb', line 34

def initialize(id_to_use = nil, ask_if_missing = true)
  
  self.username ||= id_to_use || ENV["DELIVER_USER"] || AppfileConfig.try_fetch_value(:apple_id) || load_from_keychain[0]
  self.password ||= ENV["DELIVER_PASSWORD"] || load_from_keychain[1]

  if (self.username || '').length == 0 or (self.password || '').length == 0
    if ask_if_missing
      puts "No username or password given. You can set environment variables:"
      puts "DELIVER_USER, DELIVER_PASSWORD"

      
    end
  end
end

Instance Attribute Details

#passwordString

Returns The password of the currently logged in user.

Returns:

  • (String)

    The password of the currently logged in user



11
12
13
# File 'lib/credentials_manager/password_manager.rb', line 11

def password
  @password
end

#usernameString

Returns The username / email address of the currently logged in user.

Returns:

  • (String)

    The username / email address of the currently logged in user



9
10
11
# File 'lib/credentials_manager/password_manager.rb', line 9

def username
  @username
end

Class Method Details

.logoutObject



23
24
25
# File 'lib/credentials_manager/password_manager.rb', line 23

def self.logout
  @@instance = nil
end

.shared_manager(id_to_use = nil, ask_if_missing = true) ⇒ Object

A singleton object, which also makes sure, to use the correct Apple ID

Parameters:

  • id_to_use (String) (defaults to: nil)

    The Apple ID email address which should be used

  • ask_if_missing (boolean) (defaults to: true)

    true by default: if no credentials are found, should the user be asked?



19
20
21
# File 'lib/credentials_manager/password_manager.rb', line 19

def self.shared_manager(id_to_use = nil, ask_if_missing = true)
  @@instance ||= PasswordManager.new(id_to_use, ask_if_missing)
end

Instance Method Details

#password_seems_wrongObject

This method is called, when the iTunes backend returns that the login data is wrong This will ask the user, if he wants to re-enter the password



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/credentials_manager/password_manager.rb', line 51

def password_seems_wrong
  puts "It seems like the username or password for the account '#{self.username}' is wrong.".red
  reenter = agree("Do you want to re-enter your username and password? (y/n)", true)
  if reenter
    remove_from_keychain

    @username = nil
    @password = nil

    puts "You will have to re-run the recent command to use the new username/password.".yellow
    return true
  else
    return false
  end
end