class Conjoin::AuthToken::Middleware::Responder

Public Class Methods

new(app, env) click to toggle source
# File lib/conjoin/auth_token.rb, line 49
def initialize(app, env)
  @app      = app
  @env      = env
end

Public Instance Methods

respond() click to toggle source
# File lib/conjoin/auth_token.rb, line 54
def respond
  if req.params['auth_token'] and (auth_token = req.params['auth_token']) and\
     req.params['iv'] and (iv = Base64.decode64(req.params['iv']))

    salt = Base64.decode64(req.params['salt']) if req.params['salt']
    salt ||= nil

    obj = AuthToken.decrypt auth_token, iv, salt

    if Time.now < Time.parse(obj['expires_at'])
      user = AuthToken.settings.klass.constantize.find_by_username obj['username']
      case AuthToken.settings.type.to_sym
      when :warden
        req.env['warden'].set_user(user, scope: :user) if user
      when :shield
        req.session.clear
        req.session[AuthToken.settings.klass] = user.id if user
      end

      res.redirect 'login?return=%2F&sso_error=1' unless user
    end
  end

  res.finish
end

Private Instance Methods

path() click to toggle source
# File lib/conjoin/auth_token.rb, line 92
def path
  @env['PATH_INFO']
end
req() click to toggle source
# File lib/conjoin/auth_token.rb, line 96
def req
  @req ||= Rack::Request.new(@env)
end
res() click to toggle source
# File lib/conjoin/auth_token.rb, line 100
def res
  @res ||= begin
    status, headers, body = @app.call(req.env)
    Rack::Response.new(body, status, headers)
  end
end
return_signature() click to toggle source
# File lib/conjoin/auth_token.rb, line 82
def return_signature
  s3 = S3Signature.new policy_data
  res.status = 200
  res.headers["Content-Type"] = 'application/json; charset=UTF-8'
  res.write({
    policy: s3.policy,
    signature: s3.signature
  }.to_json)
end