Sha256: aae11731e29fa945f34f91365c89481ba72ffd413cb6e572fb40eb0fd4dc04ac

Contents?: true

Size: 1.9 KB

Versions: 1

Compression:

Stored size: 1.9 KB

Contents

# frozen_string_literal: true

module Isomorfeus
  module Puppetmaster
    class Server
      class ExecutorMiddleware
        @@request_key = nil

        def initialize(app)
          raise '@@request_key not set!' unless @@request_key
          @app = app
        end

        def call(env)
          if env['PATH_INFO'] == '/__executor__' && env['REQUEST_METHOD'] == 'POST'
            request = Rack::Request.new(env)
            response = nil
            unless request.body.nil?
              request_hash = Oj.load(request.body.read, mode: :strict)
              if request_hash['key'] != @@request_key
                STDERR.puts "wrong key"
                response = Rack::Response.new(Oj.dump({ 'error' => 'wrong key given, execution denied' }),
                                             401,
                                             'Content-Type' => 'application/json')
              else
                begin
                  if Isomorfeus.respond_to?(:init_store)
                    Isomorfeus.init_store
                    Isomorfeus.store.clear! if Isomorfeus.store.respond_to?(:clear!)
                  end
                  result = TOPLEVEL_BINDING.eval(request_hash['code']) if request_hash['code']
                  response = Rack::Response.new(Oj.dump({ 'result' => result }),
                                                200,
                                                'Content-Type' => 'application/json')
                rescue Exception => e
                  response = Rack::Response.new(Oj.dump({ 'error' => "#{e.class}: #{e.message}", 'backtrace' => e.backtrace&.join("\n") }),
                                                200,
                                                'Content-Type' => 'application/json')
                end
              end
            end
            response.finish
          else
            @app.call(env)
          end
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
isomorfeus-puppetmaster-0.6.15 lib/isomorfeus/puppetmaster/server/executor_middleware.rb