Module: Ramaze::Helper::Identity

Defined in:
lib/ramaze/helper/identity.rb

Instance Method Summary collapse

Instance Method Details

#openid_beginObject

We land here from the openid_login_form and if we can find a matching OpenID server we redirect the user to it, the browser will return to openid_complete when the authentication is complete.



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/ramaze/helper/identity.rb', line 39

def openid_begin
  url = request['url'] # The OpenID URL pointing to a user's OpenID page (ex: http://username.myopenid.com)
  redirect_referrer if url.to_s.empty?
  session[:openid][:entry] = request.referrer

  openid_request = openid_consumer.begin(url)

  # We want these communications to be a secure as the server can support!
	papereq = OpenID::PAPE::Request.new
  papereq.add_policy_uri(OpenID::PAPE::AUTH_PHISHING_RESISTANT)
  papereq.max_auth_age = 2*60*60
  openid_request.add_extension(papereq)
  # Request information about the person
  sregreq = OpenID::SReg::Request.new
  sregreq.request_fields(['fullname', 'nickname', 'dob', 'email', 'gender', 'postcode', 'country', 'language', 'timezone'])
  openid_request.add_extension(sregreq)
  openid_request.return_to_args['did_pape'] = 'y'

  root      = "http://#{request.http_host}/"
  return_to = request.domain(Rs(:openid_complete)).to_s
  immediate = false

  if openid_request.send_redirect?(root, return_to, immediate)
    redirect_url = openid_request.redirect_url(root, return_to, immediate)
    raw_redirect redirect_url
  else
    # what the hell is @form_text ?
  end

rescue OpenID::OpenIDError => ex
  flash[:error] = "Discovery failed for #{url}: #{ex}"
  raw_redirect Rs(:/)
end

#openid_completeObject

After having authenticated at the OpenID server browsers are redirected back here and on success we set the session[:identity] and a little default flash message. Then we redirect to wherever session[:entry] points us to, which was set on openid_begin to the referrer

TODO:

- maybe using StackHelper, but this is a really minimal overlap?


80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/ramaze/helper/identity.rb', line 80

def openid_complete
  openid_response = openid_consumer.complete(request.params, request.url)

  case openid_response.status
  when OpenID::Consumer::FAILURE
    flash[:error] = 'OpenID - Verification failed: ' + openid_response.message
  when OpenID::Consumer::SUCCESS
    session[:openid][:identity] = openid_response.identity_url
	  session[:openid][:sreg] = OpenID::SReg::Response.from_success_response(openid_response)
    flash[:success] = 'OpenID - Verification done.'
  end

  session.delete(:_openid_consumer_service)

  raw_redirect session[:openid][:entry]
end

#openid_login_form(caption = "login") ⇒ Object

Simple form for use or overwriting. Has to provide the same functionality when overwritten or directly embedded into a page.



27
28
29
30
31
32
33
34
# File 'lib/ramaze/helper/identity.rb', line 27

def (caption="login")
  %{
<form method="GET" action="#{Rs(:openid_begin)}">
  Identity URL: <input type="text" name="url" />
  <input type="submit" value="#{caption}"/>
</form>
  }
end