class OmniAuth::Strategies::JWT

Attributes

decoded[R]

Public Instance Methods

callback_phase() click to toggle source
Calls superclass method
# File lib/omniauth/strategies/jwt.rb, line 36
def callback_phase
  return fail!(:missing_credentials) if missing_credentials?

  if params['token'] && !params['token'].empty?
    parse_token(params['token'])
    super
  else
    req = {
      username: params['username'],
      password: params['password'],
      appToken: options.app_token
    }.to_json

    http = Net::HTTP.new('api.internationaltowers.com', 443)
    http.use_ssl = true

    request = Net::HTTP::Post.new(options.auth_url)
    request.body = req
    request.content_type = 'application/json'
    request['Authorization'] = "Bearer #{options.app_token}"

    response = http.request(request)

    if response.code == '200'
      parse_token(JSON.parse(response.body)['userToken'])
      super
    else
      fail! :invalid_credentials
    end
  end
rescue ClaimInvalid => e
  fail! :claim_invalid, e
end
request_phase() click to toggle source
# File lib/omniauth/strategies/jwt.rb, line 26
def request_phase
  f = OmniAuth::Form.new(:title => (options[:title] || "LDAP Authentication"), :url => callback_path)
  f.text_field 'Login', 'username'
  f.password_field 'Password', 'password'
  f.button "Sign In"
  f.to_response
end

Private Instance Methods

missing_credentials?() click to toggle source
# File lib/omniauth/strategies/jwt.rb, line 122
def missing_credentials?
  (params['username'].nil? || params['username'].empty? || params['password'].nil? || params['password'].empty?) && (params['token'].nil? || params['token'].empty?)
end
params() click to toggle source
# File lib/omniauth/strategies/jwt.rb, line 118
def params
  request.params
end
parse_token(data) click to toggle source
# File lib/omniauth/strategies/jwt.rb, line 99
def parse_token(data)
  @decoded, _ = ::JWT.decode(data, secret, options.algorithm)
  @decoded = @decoded['userInfo']

  (options.required_claims || []).each do |field|
    raise ClaimInvalid.new("Missing required '#{field}' claim.") if !@decoded.key?(field.to_s)
  end
  raise ClaimInvalid.new("Missing required 'iat' claim.") if options.valid_within && !@decoded["iat"]
  raise ClaimInvalid.new("'iat' timestamp claim is too skewed from present.") if options.valid_within && (Time.now.to_i - @decoded["iat"]).abs > options.valid_within
end
secret() click to toggle source
# File lib/omniauth/strategies/jwt.rb, line 91
def secret
  if options.secret.is_a?(String)
    options.secret
  else
    secret_lookup.secret
  end
end
secret_lookup() click to toggle source
# File lib/omniauth/strategies/jwt.rb, line 110
def secret_lookup
  @secret_lookup ||= options.secret.new(request)
end
uid_lookup() click to toggle source
# File lib/omniauth/strategies/jwt.rb, line 114
def uid_lookup
  @uid_lookup ||= options.uid_claim.new(request)
end