Sha256: e78f09c8efbfea6bc25c039c433b031ce689f6b69f18fcda1ac67a5269170d93

Contents?: true

Size: 1.11 KB

Versions: 6

Compression:

Stored size: 1.11 KB

Contents

#!/usr/bin/env ruby
# Usage: script/proxy-server [-p PORT] [-u USER:PASSWORD]
require 'webrick'
require 'webrick/httpproxy'

port = 4001

if found = ARGV.index('-p')
  port = ARGV[found + 1].to_i
end
if found = ARGV.index('-u')
  username, password = ARGV[found + 1].split(':', 2)
end

match_credentials = lambda { |credentials|
  got_username, got_password = credentials.to_s.unpack("m*")[0].split(":", 2)
  got_username == username && got_password == password
}

log_io = $stdout
log_io.sync = true

webrick_opts = {
  :Port => port, :Logger => WEBrick::Log::new(log_io),
  :AccessLog => [[log_io, "[%{X-Faraday-Adapter}i] %m  %U  ->  %s %b"]],
  :ProxyAuthProc => lambda { |req, res|
    if username
      type, credentials = req.header['proxy-authorization'].first.to_s.split(/\s+/, 2)
      unless "Basic" == type && match_credentials.call(credentials)
        res['proxy-authenticate'] = %{Basic realm="testing"}
        raise WEBrick::HTTPStatus::ProxyAuthenticationRequired
      end
    end
  }
}

proxy = WEBrick::HTTPProxyServer.new(webrick_opts)

trap(:TERM) { proxy.shutdown }
trap(:INT) { proxy.shutdown }

proxy.start

Version data entries

6 entries across 6 versions & 2 rubygems

Version Path
faraday-0.9.1 script/proxy-server
whos_dated_who-0.1.0 vendor/bundle/gems/faraday-0.9.0/script/proxy-server
whos_dated_who-0.0.1 vendor/bundle/gems/faraday-0.9.0/script/proxy-server
faraday-0.9.0 script/proxy-server
faraday-0.9.0.rc7 script/proxy-server
faraday-0.9.0.rc6 script/proxy-server