remote_user.rb 1.01 KB
module OmniAuth
  module Strategies
    class RemoteUser
      include OmniAuth::Strategy

      option :fields, [:name, :email]
      option :uid_field, :email

      def call(env)
        request = Rack::Request.new env
        cookies = request.cookies["_gitlab_session"]
        remote_user = env["HTTP_REMOTE_USER"]
        unless remote_user.empty? && cookies.empty?
          super(env)
        end
      end

      def request_phase
        @user_data = {}
        @uid = env
        return fail!(:no_remote_user) unless @uid

        @user_data[:name] = @uid['NAME']
        @user_data[:email] = @uid['EMAIL']

        @env['omniauth.auth'] = auth_hash
        @env['REQUEST_METHOD'] = 'GET'
        @env['PATH_INFO'] = "#{OmniAuth.config.path_prefix}/#{name}/callback"

        call_app!
      end

      uid { @uid['NAME'] }
      info{ @user_data }

      def callback_phase
        fail(:invalid_request)
      end

      def auth_hash
        Omniauth::Utils.deep_merge(super, {'uid' => @uid})
      end
    end
  end
end