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?



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

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



33
34
35
# File 'lib/credentials_manager/password_manager.rb', line 33

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
22
23
24
25
26
27
28
29
30
31
# File 'lib/credentials_manager/password_manager.rb', line 19

def self.shared_manager(id_to_use = nil, ask_if_missing = true)
  @instance ||= {}
  return @instance[id_to_use] if @instance[id_to_use]
  if id_to_use
    @instance[id_to_use] ||= PasswordManager.new(id_to_use, ask_if_missing)
  else
    # No user given, let's see if we have a previously used one
    return @instance.values.first if @instance.values.count > 0

    # Create a new one
    @instance[id_to_use] ||= PasswordManager.new(id_to_use, ask_if_missing)
  end
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



60
61
62
63
64
# File 'lib/credentials_manager/password_manager.rb', line 60

def password_seems_wrong
  puts "It seems like the username or password for the account '#{self.username}' is wrong.".red
  puts "Please open the Keychain app, switch to `Passwords` and search for `deliver.`".red
  puts "You can then either remove the outdated entry or directly update it.".red
end