From cf47d3e51d7b0aecdda8b0f27631161977900a47 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Thu, 10 Jun 2010 18:22:25 -0700 Subject: add Rainbows::ServerToken middleware Some folks can now show off their Rainbows! installation --- lib/rainbows/server_token.rb | 39 +++++++++++++++++++++++++++++++++++++++ t/t9002-server-token.sh | 37 +++++++++++++++++++++++++++++++++++++ t/t9002.ru | 4 ++++ 3 files changed, 80 insertions(+) create mode 100644 lib/rainbows/server_token.rb create mode 100755 t/t9002-server-token.sh create mode 100644 t/t9002.ru diff --git a/lib/rainbows/server_token.rb b/lib/rainbows/server_token.rb new file mode 100644 index 0000000..4098ca7 --- /dev/null +++ b/lib/rainbows/server_token.rb @@ -0,0 +1,39 @@ +# -*- encoding: binary -*- +module Rainbows + +# An optional middleware to proudly display your usage of \Rainbows! in +# the "Server:" response header. This means you can help tell the world +# you're using \Rainbows! and spread fun and joy all over the Internet! +# +# ------ in your config.ru ------ +# require 'rainbows/server_token' +# require 'rack/lobster' +# use Rainbows::ServerToken +# run Rack::Lobster.new +# +# If you're nervous about the exact version of \Rainbows! you're running, +# then you can actually specify anything you want: +# +# use Rainbows::ServerToken, "netcat 1.0" +# + +class ServerToken < Struct.new(:app, :token) + + # :stopdoc: + # + # Freeze constants as they're slightly faster when setting hashes + SERVER = "Server".freeze + + def initialize(app, token = Const::RACK_DEFAULTS['SERVER_SOFTWARE']) + super + end + + def call(env) + status, headers, body = app.call(env) + headers = Rack::Utils::HeaderHash.new(headers) + headers[SERVER] = token + [ status, headers, body ] + end + # :startdoc: +end +end diff --git a/t/t9002-server-token.sh b/t/t9002-server-token.sh new file mode 100755 index 0000000..914a717 --- /dev/null +++ b/t/t9002-server-token.sh @@ -0,0 +1,37 @@ +#!/bin/sh +. ./test-lib.sh +case $model in +Base) ;; +*) exit 0 ;; # don't waste cycles on trivial stuff :P +esac + +t_plan 6 "ServerToken Rack middleware test for $model" + +t_begin "configure and start" && { + rtmpfiles curl_out curl_err + rainbows_setup + rainbows -D t9002.ru -c $unicorn_config + rainbows_wait_start +} + +t_begin "hit with curl" && { + curl -sSfiI http://$listen/ > $curl_out 2> $curl_err +} + +t_begin "kill server" && { + kill $rainbows_pid +} + +t_begin "no errors in curl stderr" && { + test ! -s $curl_err +} + +t_begin "no errors in Rainbows! stderr" && { + check_stderr +} + +t_begin "Server: token added" && { + grep Server: $curl_out +} + +t_done diff --git a/t/t9002.ru b/t/t9002.ru new file mode 100644 index 0000000..7f55824 --- /dev/null +++ b/t/t9002.ru @@ -0,0 +1,4 @@ +require 'rainbows/server_token' +require 'rack/lobster' +use Rainbows::ServerToken +run Rack::Lobster.new -- cgit v1.2.3-24-ge0c7