Skip to content

Instantly share code, notes, and snippets.

@tstachl
Created November 19, 2011 01:24
Show Gist options
  • Save tstachl/1378274 to your computer and use it in GitHub Desktop.
Save tstachl/1378274 to your computer and use it in GitHub Desktop.
Sinatra Ruby Javascript Ajax Request Proxy
# Copyright (c) 2012, Thomas Stachl <[email protected]>
#
# Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
# associated documentation files (the "Software"), to deal in the Software without restriction,
# including without limitation the rights to use, copy, modify, merge, publish, distribute,
# sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all copies or
# substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
# BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
require 'rubygems'
require 'sinatra'
require 'rest_client'
require 'restclient/components'
require 'logger'
RestClient.enable Rack::CommonLogger, $stdout
RestClient.log = Logger.new(STDOUT)
@@par = Hash.new
@@url = ''
@@auth = ''
configure do
class << Sinatra::Base
def options(path, opts={}, &block)
route 'OPTIONS', path, opts, &block
end
end
Sinatra::Delegator.delegate :options
end
before do
puts request.env["HTTP_ACCESS_CONTROL_REQUEST_HEADERS"]
response.headers["Access-Control-Allow-Origin"] = "*"
response.headers["Access-Control-Allow-Methods"] = "GET, POST, PUT, DELETE, OPTIONS"
response.headers["Access-Control-Allow-Headers"] = request.env["HTTP_ACCESS_CONTROL_REQUEST_HEADERS"]
response.headers["Access-Control-Max-Age"] = "1728000"
env.each { |key, value|
if key.index('HTTP') == 0
if key == 'HTTP_PROXY_URL'
@@url = value
end
if key == 'HTTP_AUTHORIZATION'
@@auth = value
end
end
}
params.each { |key, value|
@@par[key] = value
}
end
get '/' do
RestClient.get(@@url, { :accept => :json, :authorization => @@auth }) {|response, request, result| halt response.code, response.headers, response.body}
end
post '/' do
RestClient.post(@@url, params, :accept => :json, :authorization => @@auth) {|response, request, result| halt response.code, response.headers, response.body}
end
put '/' do
RestClient.put(@@url, @@par) {|response, request, result| halt response.code, response.headers, response.body}
end
delete '/' do
RestClient.delete(@@url, @@par) {|response, request, result| halt response.code, response.headers, response.body}
end
options '/' do
halt 200
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment