class EME::AdminUser::RequiredLogin

Public Class Methods

new(app) click to toggle source
# File lib/eme/admin_user/required_login.rb, line 3
def initialize(app)
  @app = app
end

Public Instance Methods

call(env) click to toggle source
# File lib/eme/admin_user/required_login.rb, line 7
def call(env)
  req = Rack::Request.new(env)
  
  # whitelist check/assets
  if(["/assets/", "/images/"].include?(req.path[0..7]) || (EME::AdminUser.settings[:white_list_paths] && EME::AdminUser.settings[:white_list_paths].include?(req.path)))
    return @app.call(env)
  end
  
  cookies = req.cookies
  session = req.session
  good = false
  ip = req.ip
  if session[:admin_session_key]
    heartbeat = EME::AdminUser.heartbeat(session[:admin_session_key])
    if heartbeat["logged_in"] == true
      data = EME::AdminUser.me(session[:admin_session_key])
      data_permissions = data.delete(:permissions)
      puts "PERMISSIONS + #{data_permissions}"
      permissions = EME::AdminUser.all_permissions(session[:admin_session_key])

      if session[:admin_user_info].nil? || heartbeat["permissions"] != "uptodate"
        session[:admin_user_info] = EME::AdminUser.me(session[:admin_session_key])
      end
      good = true
    end
  end

  if !good && (req.path != EME::AdminUser.settings[:login_path])
    return [302, {"Location" => req.base_url + EME::AdminUser.settings[:login_path] }, []]
  end

  @status, @headers, @response = @app.call(env)
  if req.cookies["admin_session_key"].nil? && !session[:admin_session_key].nil?
    Rack::Utils.set_cookie_header!(@headers, "admin_session_key", {:value => EME::AdminUser.encode_admin_key_cookie(session[:admin_session_key], ip), :path => "/", :domain => ".enmasse.com", :expires => Time.now+86400})
  end
  return [@status, @headers, @response]
end