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 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 lib/rainbows/server_token.rb (limited to 'lib/rainbows/server_token.rb') 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 -- cgit v1.2.3-24-ge0c7