class MojeID

Constants

MOJEID_ENDPOINT
MOJEID_ENDPOINT_TEST

Attributes

auth_request[RW]
auth_response[RW]
ax_request[RW]
ax_response[RW]
realm[RW]
return_to[RW]
xrds_result[RW]

Public Class Methods

get_consumer(session, store) click to toggle source
# File lib/mojeid.rb, line 29
def self.get_consumer(session, store)
  OpenID::Consumer.new(session, store)
end
get_openid_store(filestore_path) click to toggle source
# File lib/mojeid.rb, line 25
def self.get_openid_store(filestore_path)
  OpenID::Store::Filesystem.new(filestore_path)
end
new(options={:test => false}) click to toggle source
# File lib/mojeid.rb, line 16
def initialize(options={:test => false})
  @test = options[:test]
  OpenID::fetcher.ca_file = "#{File.dirname(__FILE__)}/cert/cznic-cacert-test.pem" if @test
end

Private Class Methods

is_attribute_available?(attribute) click to toggle source

Check if the attribute is available. You can find full list of attributes in lib/attributes.rb

# File lib/mojeid.rb, line 118
def self.is_attribute_available?(attribute)
  MojeIDAttributes::AVAILABLE_ATTRIBUTES.include?(attribute) ? true : raise("'#{attribute}' is not available")
end

Public Instance Methods

add_attributes(attributes=[]) click to toggle source

Add attributes you would like to read about user, to request. You can pass attribute as array and change options like ns_alias or require.

# File lib/mojeid.rb, line 61
def add_attributes(attributes=[])
  attributes.each do |attribute|
    attribute.is_a?(Array) ? add_attribute(attribute[0], attribute[1], attribute[2]) : add_attribute(attribute)
  end
  pack_attributes_into_request
end
data() click to toggle source

Return data parsed to a Hash.

# File lib/mojeid.rb, line 91
def data
  @ax_response.data rescue {}
end
fetch_request(consumer) click to toggle source
# File lib/mojeid.rb, line 33
def fetch_request(consumer)
  identifier = @test ? MOJEID_ENDPOINT_TEST : MOJEID_ENDPOINT
  process_discovery(consumer, identifier)
  @ax_request = OpenID::AX::FetchRequest.new
  pape_request = OpenID::PAPE::Request.new([OpenID::PAPE::AUTH_PHISHING_RESISTANT])
  @auth_request.add_extension(pape_request)
end
fetch_response(consumer, params, request, current_url) click to toggle source
# File lib/mojeid.rb, line 41
def fetch_response(consumer, params, request, current_url)
  process_response_by_type(:get, consumer, params, request, current_url)
  @auth_response
end
redirect_url(immediate=false) click to toggle source

returns the url you have to redirect after you compose your request

# File lib/mojeid.rb, line 76
def redirect_url(immediate=false)
  @auth_request.redirect_url(realm, return_to, immediate)
end
response_status() click to toggle source
# File lib/mojeid.rb, line 80
def response_status
  case @auth_response.status
  when OpenID::Consumer::FAILURE then return :failure
  when OpenID::Consumer::SUCCESS then return :success
  when OpenID::Consumer::SETUP_NEEDED then return :setup_needed
  when OpenID::Consumer::CANCEL then return :cancel
  else return :unknown
  end
end
store_request(consumer) click to toggle source
# File lib/mojeid.rb, line 46
def store_request(consumer)
  identifier = @test ? MOJEID_ENDPOINT_TEST : MOJEID_ENDPOINT
  process_discovery(consumer, identifier)
  @ax_request = OpenID::AX::StoreRequest.new
end
store_response(consumer, params, request, current_url) click to toggle source
# File lib/mojeid.rb, line 52
def store_response(consumer, params, request, current_url)
  process_response_by_type(:put, consumer, params, request, current_url)
  @auth_response
end
update_attributes(data={}) click to toggle source

Add attributes and they values which you would like to update user profile, to the request. Accepts hash like { ‘axschema.org/namePerson’ => ‘my new great name’ }.

# File lib/mojeid.rb, line 70
def update_attributes(data={})
  data.each { |attribute, value| set_attribute(attribute, value) }
  pack_attributes_into_request
end

Private Instance Methods

add_attribute(attribute, ns_alias=nil, required=false) click to toggle source
# File lib/mojeid.rb, line 122
def add_attribute(attribute, ns_alias=nil, required=false)
  if MojeID.is_attribute_available?(attribute)
    @ax_request.add(OpenID::AX::AttrInfo.new(attribute, ns_alias, required))
  end
end
pack_attributes_into_request() click to toggle source
# File lib/mojeid.rb, line 135
def pack_attributes_into_request
  @auth_request.add_extension(@ax_request)
end
process_discovery(consumer, identifier) click to toggle source
# File lib/mojeid.rb, line 97
def process_discovery(consumer, identifier)
  begin
    @auth_request = consumer.begin(identifier)
  rescue OpenID::DiscoveryFailure => f
    raise DiscoveryFailure.new(f.message, f.http_response)
  end
  @xrds_result = OpenID::Yadis::DiscoveryResult.new(@return_to)
end
process_response_by_type(type, consumer, params, request, current_url) click to toggle source
# File lib/mojeid.rb, line 106
def process_response_by_type(type, consumer, params, request, current_url)
  @auth_response = consumer.complete(params.reject { |k, v| request.path_parameters.key?(k.to_sym) }, current_url)
  if @auth_response.status == OpenID::Consumer::SUCCESS
    if type == :get
      @ax_response = OpenID::AX::FetchResponse.from_success_response(@auth_response)
    elsif type == :put
      @ax_response = OpenID::AX::StoreResponse.from_success_response(@auth_response)
    end
  end
end
set_attribute(attribute, value) click to toggle source

Pack attributes and theirs values to request when you would like to store attribute.

# File lib/mojeid.rb, line 129
def set_attribute(attribute, value)
  if is_attribute_available?(attribute)
    fetch_request.set_values(attribute, value)
  end
end