Class: WifiWand::Platforms::Mac::KeychainPasswordReader
- Inherits:
-
Object
- Object
- WifiWand::Platforms::Mac::KeychainPasswordReader
- Defined in:
- lib/wifi_wand/platforms/mac/keychain_password_reader.rb
Constant Summary collapse
- DEFAULT_LOOKUP_TIMEOUT_SECONDS =
5- EXIT_CODE_HANDLERS =
Keychain exit code handlers for password retrieval: 44: item not found, 45: access denied, 128: user cancelled, 51: non-interactive access, 25: invalid search parameters, 1: general error that may contain "could not be found".
{ 44 => ->(_network_name, _error) {}, 45 => ->(network_name, _error) { raise KeychainAccessDeniedError, network_name }, 128 => ->(network_name, _error) { raise KeychainAccessCancelledError, network_name }, 51 => ->(network_name, _error) { raise KeychainNonInteractiveError, network_name }, 25 => ->(network_name, _error) { raise KeychainError, "Invalid keychain search parameters for network '#{network_name}'" }, 1 => ->(network_name, error) { if error.text.include?('could not be found') nil else raise KeychainError, "Keychain error accessing password for network '#{network_name}': #{error.text.strip}" end }, }.freeze
Instance Method Summary collapse
-
#initialize(command_runner:) ⇒ KeychainPasswordReader
constructor
A new instance of KeychainPasswordReader.
- #password_for(network_name, timeout_in_secs: DEFAULT_LOOKUP_TIMEOUT_SECONDS) ⇒ Object
Constructor Details
#initialize(command_runner:) ⇒ KeychainPasswordReader
Returns a new instance of KeychainPasswordReader.
34 35 36 |
# File 'lib/wifi_wand/platforms/mac/keychain_password_reader.rb', line 34 def initialize(command_runner:) @command_runner = command_runner end |
Instance Method Details
#password_for(network_name, timeout_in_secs: DEFAULT_LOOKUP_TIMEOUT_SECONDS) ⇒ Object
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/wifi_wand/platforms/mac/keychain_password_reader.rb', line 38 def password_for(network_name, timeout_in_secs: DEFAULT_LOOKUP_TIMEOUT_SECONDS) @command_runner.call( [ 'security', 'find-generic-password', '-D', 'AirPort network password', '-a', network_name, '-w', ], raise_on_error: true, timeout_in_secs: timeout_in_secs ).stdout.chomp rescue WifiWand::CommandExecutor::OsCommandError => e handle_keychain_error(network_name, e) end |