# Based on code from the oa-env gem require 'pg' require 'omniauth' require 'omniauth-ldap/adaptor' module OmniAuth module Strategies class Env include OmniAuth::Strategy def env_user if env['HTTP_REMOTE_USER'] && env['HTTP_REMOTE_USER'] != '' env['HTTP_REMOTE_USER'] else env['HTTP_X_FORWARDED_USER'] end end def request_phase @user_data = {} return fail!(:no_user) unless env_user @uid = env_user.gsub(/@.*/, '') # fill in some defaults @user_data[:name] = @uid @user_data[:email] = env_user fill_ldap_info unless @options.empty? @env['omniauth.auth'] = auth_hash @env['REQUEST_METHOD'] = 'GET' @env['PATH_INFO'] = "#{OmniAuth.config.path_prefix}/#{name}/callback" call_app! end uid { @uid } info { @user_data } private def fill_ldap_info conn = PG::Connection.open( :dbname => Gitlab.config.env['database_name'], :host => Gitlab.config.env['host'], :user => Gitlab.config.env['user'], :password => Gitlab.config.env['password'], ) res = conn.exec("select email, first_name from accounts_user where username='#{@uid}';") @user_data[:email] = res[0]['email'] @user_data[:name] = res[0]['first_name'] end end end end