class Rack::OpenID::SimpleAuth

A simple OpenID middleware that restricts access to a single identifier.

use Rack::OpenID::SimpleAuth, "http://example.org"

SimpleAuth will automatically insert the required Rack::OpenID middleware, so use Rack::OpenID is unnecessary.

Attributes

app[R]
identifier[R]

Public Class Methods

new(*args) click to toggle source
Calls superclass method
# File lib/rack/openid/simple_auth.rb, line 14
def self.new(*args)
  Rack::OpenID.new(super)
end
new(app, identifier) click to toggle source
# File lib/rack/openid/simple_auth.rb, line 20
def initialize(app, identifier)
  @app        = app
  @identifier = identifier
end

Public Instance Methods

call(env) click to toggle source
# File lib/rack/openid/simple_auth.rb, line 25
def call(env)
  if session_authenticated?(env)
    app.call(env)
  elsif successful_response?(env)
    authenticate_session(env)
    redirect_to requested_url(env)
  else
    authentication_request
  end
end

Private Instance Methods

authenticate_session(env) click to toggle source
# File lib/rack/openid/simple_auth.rb, line 50
def authenticate_session(env)
  session(env)['authenticated'] = true
end
authentication_request() click to toggle source
# File lib/rack/openid/simple_auth.rb, line 69
def authentication_request
  [401, { OpenID::AUTHENTICATE_HEADER => www_authenticate_header }, []]
end
raise_session_error() click to toggle source
# File lib/rack/openid/simple_auth.rb, line 42
def raise_session_error
  raise RuntimeError, 'Rack::OpenID::SimpleAuth requires a session'
end
redirect_to(url) click to toggle source
# File lib/rack/openid/simple_auth.rb, line 65
def redirect_to(url)
  [303, {'Content-Type' => 'text/html', 'Location' => url}, []]
end
requested_url(env) click to toggle source
# File lib/rack/openid/simple_auth.rb, line 60
def requested_url(env)
  req = Rack::Request.new(env)
  req.url
end
session(env) click to toggle source
# File lib/rack/openid/simple_auth.rb, line 38
def session(env)
  env['rack.session'] || raise_session_error
end
session_authenticated?(env) click to toggle source
# File lib/rack/openid/simple_auth.rb, line 46
def session_authenticated?(env)
  session(env)['authenticated'] == true
end
successful_response?(env) click to toggle source
# File lib/rack/openid/simple_auth.rb, line 54
def successful_response?(env)
  if resp = env[OpenID::RESPONSE]
    resp.status == :success && resp.display_identifier == identifier
  end
end
www_authenticate_header() click to toggle source
# File lib/rack/openid/simple_auth.rb, line 73
def www_authenticate_header
  OpenID.build_header(:identifier => identifier)
end