require 'webrick' require 'net/http' require 'base64' require 'httparty' require_relative '__NOW_HANDLER_FILENAME' SupportedHTTPMethods = { 'GET' => Net::HTTP::Get, 'POST' => Net::HTTP::Post, 'PATCH' => Net::HTTP::Patch, 'PUT' => Net::HTTP::Put, 'DELETE' => Net::HTTP::Delete, 'HEAD' => Net::HTTP::Head, 'OPTIONS' => Net::HTTP::Options, 'MOVE' => Net::HTTP::Move, 'COPY' => Net::HTTP::Copy, 'MKCOL' => Net::HTTP::Mkcol, 'LOCK' => Net::HTTP::Lock, 'UNLOCK' => Net::HTTP::Unlock, } def handler(event:, context:) if not Object.const_defined?('Handler') return { :statusCode => 500, :body => 'Handler not exposed in lambda' } end if not SupportedHTTPMethods.key?(event['httpMethod']) return { :statusCode => 405, :body => 'Method Not Allowed' } end server = WEBrick::HTTPServer.new :Port => 3000 server.mount '/', Handler Thread.new(server) do |server| server.start end path = 'http://localhost:3000' + event['path'] if event['queryStringParameters'] path = path + '?' + URI.encode_www_form(event['queryStringParameters']) end req = HTTParty::Request.new(SupportedHTTPMethods[event['httpMethod']], path, { headers: event['headers'], body: event['isBase64Encoded'] ? Base64.decode64(event['body']) : event['body'], }) res = req.perform return_hashmap = { :statusCode => res.code, :headers => res.headers } if not res.nil? return_hashmap['body'] = Base64.encode64(res.body) return_hashmap['encoding'] = 'base64' end return_hashmap end