Class: Aspera::Keychain::MacosSystem

Inherits:
Object
  • Object
show all
Defined in:
lib/aspera/keychain/macos_security.rb

Instance Method Summary collapse

Constructor Details

#initialize(name = nil, _password = nil) ⇒ MacosSystem

Returns a new instance of MacosSystem.



131
132
133
134
# File 'lib/aspera/keychain/macos_security.rb', line 131

def initialize(name=nil, _password=nil)
  @keychain = name.nil? ? MacosSecurity::Keychain.default_keychain : MacosSecurity::Keychain.by_name(name)
  raise "no such keychain #{name}" if @keychain.nil?
end

Instance Method Details

#delete(options) ⇒ Object



162
163
164
165
166
167
# File 'lib/aspera/keychain/macos_security.rb', line 162

def delete(options)
  Aspera.assert_type(options, Hash){'options'}
  unsupported = options.keys - %i[label]
  Aspera.assert(unsupported.empty?){"unsupported options: #{unsupported}"}
  raise 'delete not implemented, use macos keychain app'
end

#get(options) ⇒ Object



145
146
147
148
149
150
151
152
153
154
155
# File 'lib/aspera/keychain/macos_security.rb', line 145

def get(options)
  Aspera.assert_type(options, Hash){'options'}
  unsupported = options.keys - %i[label]
  Aspera.assert(unsupported.empty?){"unsupported options: #{unsupported}"}
  info = @keychain.password(:find, :generic, label: options[:label])
  raise 'not found' if info.nil?
  result = options.clone
  result[:secret] = info['password']
  result[:description] = info['icmt'] # cspell: disable-line
  return result
end

#listObject



157
158
159
160
# File 'lib/aspera/keychain/macos_security.rb', line 157

def list
  # the only way to list is `dump-keychain` which triggers security alert
  raise 'list not implemented, use macos keychain app'
end

#set(options) ⇒ Object



136
137
138
139
140
141
142
143
# File 'lib/aspera/keychain/macos_security.rb', line 136

def set(options)
  Aspera.assert_type(options, Hash){'options'}
  unsupported = options.keys - %i[label username password url description]
  Aspera.assert(unsupported.empty?){"unsupported options: #{unsupported}"}
  @keychain.password(
    :add, :generic, service: options[:label],
    account: options[:username] || 'none', password: options[:password], comment: options[:description])
end