class Polar::Authentication
Public Class Methods
new(app, api_key, secret_key, &failed_handler)
click to toggle source
# File lib/polar/authentication.rb, line 7 def initialize(app, api_key, secret_key, &failed_handler) @app = app @api_key = api_key @secret_key = secret_key @signature_calculator = SignatureCalculator.new(@secret_key) @required_keys = %w{user session_key ss expires}.collect { |e| @api_key + "_" + e } << @api_key @failed_handler = block_given? ? failed_handler : proc { [401, {"Content-Type" => "text/plain"}, ["Unauthorized!"]] } end
Public Instance Methods
call(env)
click to toggle source
# File lib/polar/authentication.rb, line 16 def call(env) request = Rack::Request.new(env) if %r{^/people/(?<person_id>\d+)} =~ request.path_info cookies = request.cookies if valid?(cookies) && cookies["#{@api_key}_user"] == person_id @app.call(env) else @failed_handler.call(env) end else @app.call(env) end end
Private Instance Methods
filter(cookies)
click to toggle source
# File lib/polar/authentication.rb, line 40 def filter(cookies) hash = {} %w{user session_key ss expires}.each { |e| hash[e] = cookies["#{@api_key}_#{e}"] } hash end
valid?(cookies)
click to toggle source
# File lib/polar/authentication.rb, line 32 def valid?(cookies) @required_keys.each do |k| return false unless cookies.has_key?(k) end return false if cookies["#{@api_key}_expires"].to_i < Time.now.to_i cookies[@api_key] == @signature_calculator.calculate(filter(cookies)) end