Module: Duo::Auth

Defined in:
lib/duo/auth.rb,
lib/duo/auth/version.rb

Constant Summary collapse

VERSION =
"0.0.1"

Class Method Summary collapse

Class Method Details

.sign_request(ikey, skey, akey, username) ⇒ Object

Sign a Duo request with the ikey, skey, akey, and username



25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/duo/auth.rb', line 25

def sign_request(ikey, skey, akey, username)
  return Duo::ERR_USER if not username or username.to_s.length == 0
  return Duo::ERR_USER if username.include? '|'
  return Duo::ERR_IKEY if not ikey or ikey.to_s.length != Duo::IKEY_LEN
  return Duo::ERR_SKEY if not skey or skey.to_s.length != Duo::SKEY_LEN
  return Duo::ERR_AKEY if not akey or akey.to_s.length < Duo::AKEY_LEN

  vals = [username, ikey]

  duo_sig = sign_vals(skey, vals, Duo::DUO_PREFIX, Duo::DUO_EXPIRE)
  app_sig = sign_vals(akey, vals, Duo::APP_PREFIX, Duo::APP_EXPIRE)

  return [duo_sig, app_sig].join(':')
end

.verify_response(ikey, skey, akey, sig_response) ⇒ Object

Verify a response from Duo with the skey and akey.



41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/duo/auth.rb', line 41

def verify_response(ikey, skey, akey, sig_response)
  begin
    auth_sig, app_sig = sig_response.to_s.split(':')
    auth_user = parse_vals(skey, auth_sig, Duo::AUTH_PREFIX, ikey)
    app_user = parse_vals(akey, app_sig, Duo::APP_PREFIX, ikey)
  rescue
    return nil
  end

  return nil if auth_user != app_user

  return auth_user
end