lib/zuora_connect/middleware/hallway.rb



# frozen_string_literal: true

module ZuoraConnect
  module Middleware
    # Enables requests to be served from dynamic paths, determined by headers
    class Hallway
      UI_PATH = 'HTTP_ZUORA_UI_PATH'
      LAYOUT_ID = 'HTTP_ZUORA_LAYOUT_FETCH_TEMPLATE_ID'

      def initialize(app)
        @app = app
      end

      def call(env)
        dynamic_path = env[UI_PATH].presence || layout_id(env)

        Thread.current[:isHallway] = dynamic_path

        if dynamic_path.present?
          env['SCRIPT_NAME'] = dynamic_path
          env['PATH_INFO'] = env['PATH_INFO'].sub(dynamic_path, '')
        end

        @app.call(env)
      end

      private

      def layout_id(env)
        "/#{env[LAYOUT_ID]}" if env[LAYOUT_ID].present?
      end
    end
  end
end