require 'webrick' require 'net/http' require 'base64' require 'json' require 'pp' require_relative '__NOW_HANDLER_FILENAME' def now__handler(event:, context:) if not Object.const_defined?('Handler') return { :statusCode => 500, :body => 'Handler not defined in lambda' } end payload = JSON.parse(event['body']) path = payload['path'] headers = payload['headers'] httpMethod = payload['method'] encoding = payload['encoding'] body = payload['body'] if (not body.nil? and not body.empty?) and (not encoding.nil? and encoding == 'base64') body = Base64.decode64(body) end server = WEBrick::HTTPServer.new :BindAddress => "0.0.0.0", :Port => 3000 if Handler.is_a?(Proc) server.mount_proc '/', Handler else server.mount '/', Handler end shut = proc {server.shutdown} Signal.list.keys.each do |sig| begin Signal.trap(sig, shut) rescue end end Thread.new(server) do |server| server.start end http = Net::HTTP.new('0.0.0.0', 3000) res = http.send_request(httpMethod, path, body, headers) server.shutdown { :statusCode => res.code, :headers => res.each_capitalized.to_h, :body => res.body } end