class Aws::Session::Credentials::MfaDevice::YubikeyMfaDevice
Gets MFA codes from a Yubikey using YubiOATH
Attributes
device_arn[R]
Public Class Methods
new(options = {})
click to toggle source
# File lib/aws/session/credentials/mfa_device/yubikey_mfa_device.rb, line 9 def initialize(options = {}) @yubikey_name = options.fetch(:yubikey_name) { 'Yubikey' } @oath_credential = options[:oath_credential] @device_arn = options[:device_arn] end
Public Instance Methods
code()
click to toggle source
# File lib/aws/session/credentials/mfa_device/yubikey_mfa_device.rb, line 15 def code card_names.each do |card_name| card(card_name) do |crd| oath = YubiOATH.new(crd) codes = oath.calculate_all(timestamp: Time.now) # Credential names are returned as ASCII-8BIT codes.transform_keys! { |key| key.force_encoding('UTF-8') } return codes[@oath_credential] end end nil end
Private Instance Methods
card(name) { |crd| ... }
click to toggle source
@param [String] name @yieldparam card [Smartcard::PCSC::Card]
# File lib/aws/session/credentials/mfa_device/yubikey_mfa_device.rb, line 32 def card(name) context do |cxt| begin crd = cxt.card(name, :shared) yield crd ensure crd.disconnect unless crd.nil? end end end
card_names()
click to toggle source
@return [Array<String>]
# File lib/aws/session/credentials/mfa_device/yubikey_mfa_device.rb, line 44 def card_names context do |cxt| cxt.readers.select { |name| name.include?(@yubikey_name) } end end
context() { |context| ... }
click to toggle source
@yieldparam context [Smartcard::PCSC::Context]
# File lib/aws/session/credentials/mfa_device/yubikey_mfa_device.rb, line 51 def context context = Smartcard::PCSC::Context.new yield context ensure context.release end