Sha256: 9f0a76642501e8f81d8cbd85781390b9e7dc9616a8d033c37d4e93c93f4ab216
Contents?: true
Size: 1.84 KB
Versions: 2
Compression:
Stored size: 1.84 KB
Contents
require "rack/openid" require "rack/request" module Rack class OpenID # 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. class SimpleAuth class << self def new(*args) Rack::OpenID.new(super) end end attr_reader :app, :identifier def initialize(app, identifier) @app = app @identifier = identifier end 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 def session(env) env["rack.session"] || raise_session_error end def raise_session_error raise "Rack::OpenID::SimpleAuth requires a session" end def session_authenticated?(env) session(env)["authenticated"] == true end def authenticate_session(env) session(env)["authenticated"] = true end def successful_response?(env) if (resp = env[Rack::OpenID::RESPONSE]) resp.status == :success && resp.display_identifier == identifier end end def requested_url(env) req = Rack::Request.new(env) req.url end def redirect_to(url) [303, {"Content-Type" => "text/html", "Location" => url}, []] end def authentication_request [401, {OpenID::AUTHENTICATE_HEADER => www_authenticate_header}, []] end def www_authenticate_header OpenID.build_header(identifier: identifier) end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
rack-openid2-2.0.3 | lib/rack/openid/simple_auth.rb |
rack-openid2-2.0.2 | lib/rack/openid/simple_auth.rb |