Sha256: 355627be983b67b0da87d7a4fdafbb22e6db7ec05b6c27da54c37ceb0f14d18f

Contents?: true

Size: 1.71 KB

Versions: 9

Compression:

Stored size: 1.71 KB

Contents

# frozen_string_literal: true

module Isomorfeus
  module Transport
    class RackMiddleware
      WS_RESPONSE = [0, {}, []]

      def initialize(app)
        @app = app
      end

      def call(env)
        if env['PATH_INFO'] == Isomorfeus.api_websocket_path
          if env['rack.upgrade?'] == :websocket
            env['rack.upgrade'] = Isomorfeus::Transport::ServerSocketProcessor.new
          end
          WS_RESPONSE
        elsif env['PATH_INFO'] == Isomorfeus.cookie_eater_path
          cookie_accessor, new_path = env['QUERY_STRING'].split('=')
          cookie = Isomorfeus.session_store.take_cookie(accessor: cookie_accessor)
          if new_path.start_with?('/')
            if cookie
              [302, { 'Location' => new_path, 'Set-Cookie' => cookie }, ["Cookie eaten!"]]
            else
              [302, { 'Location' => new_path }, ["No Cookie!"]]
            end
          else
            [404, {}, ["Must specify relative path!"]]
          end
        else
          cookies = env['HTTP_COOKIE']
          if cookies
            cookies = cookies.split('; ')
            cookie = cookies.detect { |c| c.start_with?('session=') }
            if cookie
              session_id = cookie[8..-1]
              user = Isomorfeus.session_store.get_user(session_id: session_id)
              if user
                Thread.current[:isomorfeus_user] = user
                Thread.current[:isomorfeus_session_id] = session_id
              end
            end
          end
          begin
            result = @app.call(env)
          ensure
            Thread.current[:isomorfeus_user] = nil
            Thread.current[:isomorfeus_session_id] = nil
          end
          result
        end
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
isomorfeus-transport-1.0.0.zeta25 lib/isomorfeus/transport/rack_middleware.rb
isomorfeus-transport-1.0.0.zeta24 lib/isomorfeus/transport/rack_middleware.rb
isomorfeus-transport-1.0.0.zeta23 lib/isomorfeus/transport/rack_middleware.rb
isomorfeus-transport-1.0.0.zeta22 lib/isomorfeus/transport/rack_middleware.rb
isomorfeus-transport-1.0.0.zeta21 lib/isomorfeus/transport/rack_middleware.rb
isomorfeus-transport-1.0.0.zeta20 lib/isomorfeus/transport/rack_middleware.rb
isomorfeus-transport-1.0.0.zeta19 lib/isomorfeus/transport/rack_middleware.rb
isomorfeus-transport-1.0.0.zeta18 lib/isomorfeus/transport/rack_middleware.rb
isomorfeus-transport-1.0.0.zeta17 lib/isomorfeus/transport/rack_middleware.rb