class Lita::Handlers::ROTP

The ROTP wrapper for Lita

@author Tim Heckman <tim@pagerduty.com>

Public Class Methods

default_config(config) click to toggle source
# File lib/lita/handlers/rotp.rb, line 53
def self.default_config(config)
  config.secret_pairs = {}
end

Public Instance Methods

hotp(response) click to toggle source
# File lib/lita/handlers/rotp.rb, line 86
def hotp(response)
  md = response.match_data
  name, counter = [md['name'], md['counter']]

  counter = counter.strip.to_i if counter.is_a?(String)

  secret = config.secret_pairs[name.to_sym]

  return response.reply(t('not_found', n: name)) if secret.nil?

  response.reply(hotp_generate(secret, counter))
end
otp(response) click to toggle source
# File lib/lita/handlers/rotp.rb, line 57
def otp(response)
  md = response.match_data
  name, counter = [md['name'], md['counter']]
  counter = counter.strip.to_i if counter.is_a?(String)

  reply = ''

  if counter.nil?
    secret = config.secret_pairs[name.to_sym]
    return response.reply(t('not_found', n: name)) if secret.nil?
    reply = totp_generate(secret)
  else
    secret = config.secret_pairs[name.to_sym]
    return response.reply(t('not_found', n: name)) if secret.nil?
    reply = hotp_generate(secret, counter)
  end

  response.reply(reply)
end
totp(response) click to toggle source
# File lib/lita/handlers/rotp.rb, line 77
def totp(response)
  name = response.match_data['name']
  secret = config.secret_pairs[name.to_sym]

  return response.reply(t('not_found', n: name)) if secret.nil?

  response.reply(totp_generate(secret))
end

Private Instance Methods

hotp_generate(secret, counter) click to toggle source
# File lib/lita/handlers/rotp.rb, line 107
def hotp_generate(secret, counter)
  t('token', t: ::ROTP::HOTP.new(secret).at(counter.to_i))
rescue StandardError => e
  t('boom', m: e.message)
end
totp_generate(secret) click to toggle source
# File lib/lita/handlers/rotp.rb, line 101
def totp_generate(secret)
  t('token', t: ::ROTP::TOTP.new(secret).now)
rescue StandardError => e
  t('boom', m: e.message)
end