colouringcode-passenger 0.1 → 0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/NEWS +129 -0
- data/Rakefile +2 -2
- data/bin/passenger-install-apache2-module +1 -0
- data/bin/passenger-install-nginx-module +4 -2
- data/ext/apache2/Hooks.cpp +4 -2
- data/ext/common/ApplicationPoolServer.h +1 -1
- data/ext/common/ApplicationPoolServerExecutable.cpp +1 -1
- data/ext/common/MessageChannel.h +48 -4
- data/ext/common/StandardApplicationPool.h +4 -2
- data/ext/common/Version.h +1 -1
- data/ext/nginx/Configuration.c +1 -1
- data/ext/nginx/HttpStatusExtractor.h +1 -0
- data/ext/nginx/ScgiRequestParser.h +1 -0
- data/ext/oxt/system_calls.cpp +11 -0
- data/ext/oxt/system_calls.hpp +2 -1
- data/ext/oxt/thread.hpp +97 -1
- data/ext/phusion_passenger/native_support.c +30 -1
- data/lib/phusion_passenger/constants.rb +1 -1
- data/lib/phusion_passenger/dependencies.rb +32 -0
- data/lib/phusion_passenger/message_channel.rb +45 -3
- data/lib/phusion_passenger/platform_info.rb +1 -1
- data/lib/phusion_passenger/rack/application_spawner.rb +10 -4
- data/lib/phusion_passenger/rack/request_handler.rb +2 -5
- data/lib/phusion_passenger/railz/application_spawner.rb +59 -7
- data/lib/phusion_passenger/utils.rb +70 -16
- data/{vendor/rack-1.0.0-git/lib/rack → lib/phusion_passenger/utils}/rewindable_input.rb +34 -9
- data/test/ApplicationPoolTest.cpp +1 -1
- data/test/MessageChannelTest.cpp +9 -1
- data/test/stub/message_channel.rb +1 -1
- data/test/stub/message_channel_2.rb +1 -1
- data/test/stub/message_channel_3.rb +2 -2
- metadata +43 -155
- data/doc/Architectural overview.html +0 -1
- data/doc/rdoc/classes/ConditionVariable.html +0 -194
- data/doc/rdoc/classes/Exception.html +0 -120
- data/doc/rdoc/classes/GC.html +0 -113
- data/doc/rdoc/classes/IO.html +0 -169
- data/doc/rdoc/classes/PhusionPassenger.html +0 -238
- data/doc/rdoc/classes/PhusionPassenger/AbstractInstaller.html +0 -153
- data/doc/rdoc/classes/PhusionPassenger/AbstractRequestHandler.html +0 -517
- data/doc/rdoc/classes/PhusionPassenger/AbstractServer.html +0 -719
- data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerAlreadyStarted.html +0 -97
- data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerError.html +0 -96
- data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerNotStarted.html +0 -97
- data/doc/rdoc/classes/PhusionPassenger/AbstractServer/UnknownMessage.html +0 -96
- data/doc/rdoc/classes/PhusionPassenger/AbstractServerCollection.html +0 -598
- data/doc/rdoc/classes/PhusionPassenger/AdminTools.html +0 -140
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/ControlProcess.html +0 -317
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/ControlProcess/Instance.html +0 -138
- data/doc/rdoc/classes/PhusionPassenger/AppInitError.html +0 -154
- data/doc/rdoc/classes/PhusionPassenger/Application.html +0 -283
- data/doc/rdoc/classes/PhusionPassenger/ConsoleTextTemplate.html +0 -172
- data/doc/rdoc/classes/PhusionPassenger/FrameworkInitError.html +0 -145
- data/doc/rdoc/classes/PhusionPassenger/HTMLTemplate.html +0 -181
- data/doc/rdoc/classes/PhusionPassenger/InitializationError.html +0 -141
- data/doc/rdoc/classes/PhusionPassenger/InvalidPath.html +0 -92
- data/doc/rdoc/classes/PhusionPassenger/MessageChannel.html +0 -489
- data/doc/rdoc/classes/PhusionPassenger/NativeSupport.html +0 -350
- data/doc/rdoc/classes/PhusionPassenger/Rack.html +0 -91
- data/doc/rdoc/classes/PhusionPassenger/Rack/ApplicationSpawner.html +0 -188
- data/doc/rdoc/classes/PhusionPassenger/Rack/RequestHandler.html +0 -199
- data/doc/rdoc/classes/PhusionPassenger/Railz.html +0 -95
- data/doc/rdoc/classes/PhusionPassenger/Railz/ApplicationSpawner.html +0 -438
- data/doc/rdoc/classes/PhusionPassenger/Railz/ApplicationSpawner/Error.html +0 -98
- data/doc/rdoc/classes/PhusionPassenger/Railz/CGIFixed.html +0 -200
- data/doc/rdoc/classes/PhusionPassenger/Railz/FrameworkSpawner.html +0 -436
- data/doc/rdoc/classes/PhusionPassenger/Railz/FrameworkSpawner/Error.html +0 -98
- data/doc/rdoc/classes/PhusionPassenger/Railz/RequestHandler.html +0 -155
- data/doc/rdoc/classes/PhusionPassenger/SpawnManager.html +0 -402
- data/doc/rdoc/classes/PhusionPassenger/UnknownError.html +0 -125
- data/doc/rdoc/classes/PhusionPassenger/Utils.html +0 -803
- data/doc/rdoc/classes/PhusionPassenger/Utils/PseudoIO.html +0 -169
- data/doc/rdoc/classes/PhusionPassenger/VersionNotFound.html +0 -140
- data/doc/rdoc/classes/PhusionPassenger/WSGI.html +0 -89
- data/doc/rdoc/classes/PhusionPassenger/WSGI/ApplicationSpawner.html +0 -188
- data/doc/rdoc/classes/PlatformInfo.html +0 -866
- data/doc/rdoc/classes/RakeExtensions.html +0 -197
- data/doc/rdoc/classes/Signal.html +0 -131
- data/doc/rdoc/created.rid +0 -1
- data/doc/rdoc/files/DEVELOPERS_TXT.html +0 -255
- data/doc/rdoc/files/README.html +0 -175
- data/doc/rdoc/files/ext/phusion_passenger/native_support_c.html +0 -92
- data/doc/rdoc/files/lib/phusion_passenger/abstract_installer_rb.html +0 -129
- data/doc/rdoc/files/lib/phusion_passenger/abstract_request_handler_rb.html +0 -129
- data/doc/rdoc/files/lib/phusion_passenger/abstract_server_collection_rb.html +0 -126
- data/doc/rdoc/files/lib/phusion_passenger/abstract_server_rb.html +0 -128
- data/doc/rdoc/files/lib/phusion_passenger/admin_tools/control_process_rb.html +0 -130
- data/doc/rdoc/files/lib/phusion_passenger/admin_tools_rb.html +0 -122
- data/doc/rdoc/files/lib/phusion_passenger/application_rb.html +0 -127
- data/doc/rdoc/files/lib/phusion_passenger/console_text_template_rb.html +0 -126
- data/doc/rdoc/files/lib/phusion_passenger/constants_rb.html +0 -122
- data/doc/rdoc/files/lib/phusion_passenger/dependencies_rb.html +0 -134
- data/doc/rdoc/files/lib/phusion_passenger/events_rb.html +0 -122
- data/doc/rdoc/files/lib/phusion_passenger/exceptions_rb.html +0 -122
- data/doc/rdoc/files/lib/phusion_passenger/html_template_rb.html +0 -126
- data/doc/rdoc/files/lib/phusion_passenger/message_channel_rb.html +0 -120
- data/doc/rdoc/files/lib/phusion_passenger/packaging_rb.html +0 -122
- data/doc/rdoc/files/lib/phusion_passenger/platform_info_rb.html +0 -127
- data/doc/rdoc/files/lib/phusion_passenger/rack/application_spawner_rb.html +0 -133
- data/doc/rdoc/files/lib/phusion_passenger/rack/request_handler_rb.html +0 -125
- data/doc/rdoc/files/lib/phusion_passenger/railz/application_spawner_rb.html +0 -140
- data/doc/rdoc/files/lib/phusion_passenger/railz/cgi_fixed_rb.html +0 -126
- data/doc/rdoc/files/lib/phusion_passenger/railz/framework_spawner_rb.html +0 -145
- data/doc/rdoc/files/lib/phusion_passenger/railz/request_handler_rb.html +0 -125
- data/doc/rdoc/files/lib/phusion_passenger/simple_benchmarking_rb.html +0 -122
- data/doc/rdoc/files/lib/phusion_passenger/spawn_manager_rb.html +0 -159
- data/doc/rdoc/files/lib/phusion_passenger/utils_rb.html +0 -174
- data/doc/rdoc/files/lib/phusion_passenger/wsgi/application_spawner_rb.html +0 -129
- data/doc/rdoc/files/misc/rake/extensions_rb.html +0 -130
- data/doc/rdoc/fr_class_index.html +0 -91
- data/doc/rdoc/fr_file_index.html +0 -76
- data/doc/rdoc/fr_method_index.html +0 -205
- data/doc/rdoc/index.html +0 -26
- data/doc/rdoc/rdoc-style.css +0 -187
- data/vendor/README +0 -13
- data/vendor/README_FOR_PACKAGERS +0 -1
- data/vendor/rack-1.0.0-git/COPYING +0 -18
- data/vendor/rack-1.0.0-git/KNOWN-ISSUES +0 -18
- data/vendor/rack-1.0.0-git/README +0 -353
- data/vendor/rack-1.0.0-git/Rakefile +0 -164
- data/vendor/rack-1.0.0-git/lib/rack.rb +0 -90
- data/vendor/rack-1.0.0-git/lib/rack/adapter/camping.rb +0 -22
- data/vendor/rack-1.0.0-git/lib/rack/auth/abstract/handler.rb +0 -37
- data/vendor/rack-1.0.0-git/lib/rack/auth/abstract/request.rb +0 -37
- data/vendor/rack-1.0.0-git/lib/rack/auth/basic.rb +0 -58
- data/vendor/rack-1.0.0-git/lib/rack/auth/digest/md5.rb +0 -124
- data/vendor/rack-1.0.0-git/lib/rack/auth/digest/nonce.rb +0 -51
- data/vendor/rack-1.0.0-git/lib/rack/auth/digest/params.rb +0 -55
- data/vendor/rack-1.0.0-git/lib/rack/auth/digest/request.rb +0 -40
- data/vendor/rack-1.0.0-git/lib/rack/auth/openid.rb +0 -487
- data/vendor/rack-1.0.0-git/lib/rack/builder.rb +0 -63
- data/vendor/rack-1.0.0-git/lib/rack/cascade.rb +0 -41
- data/vendor/rack-1.0.0-git/lib/rack/chunked.rb +0 -49
- data/vendor/rack-1.0.0-git/lib/rack/commonlogger.rb +0 -52
- data/vendor/rack-1.0.0-git/lib/rack/conditionalget.rb +0 -47
- data/vendor/rack-1.0.0-git/lib/rack/content_length.rb +0 -29
- data/vendor/rack-1.0.0-git/lib/rack/content_type.rb +0 -23
- data/vendor/rack-1.0.0-git/lib/rack/deflater.rb +0 -96
- data/vendor/rack-1.0.0-git/lib/rack/directory.rb +0 -153
- data/vendor/rack-1.0.0-git/lib/rack/file.rb +0 -88
- data/vendor/rack-1.0.0-git/lib/rack/handler.rb +0 -69
- data/vendor/rack-1.0.0-git/lib/rack/handler/cgi.rb +0 -61
- data/vendor/rack-1.0.0-git/lib/rack/handler/evented_mongrel.rb +0 -8
- data/vendor/rack-1.0.0-git/lib/rack/handler/fastcgi.rb +0 -88
- data/vendor/rack-1.0.0-git/lib/rack/handler/lsws.rb +0 -55
- data/vendor/rack-1.0.0-git/lib/rack/handler/mongrel.rb +0 -84
- data/vendor/rack-1.0.0-git/lib/rack/handler/scgi.rb +0 -59
- data/vendor/rack-1.0.0-git/lib/rack/handler/swiftiplied_mongrel.rb +0 -8
- data/vendor/rack-1.0.0-git/lib/rack/handler/thin.rb +0 -18
- data/vendor/rack-1.0.0-git/lib/rack/handler/webrick.rb +0 -67
- data/vendor/rack-1.0.0-git/lib/rack/head.rb +0 -19
- data/vendor/rack-1.0.0-git/lib/rack/lint.rb +0 -537
- data/vendor/rack-1.0.0-git/lib/rack/lobster.rb +0 -65
- data/vendor/rack-1.0.0-git/lib/rack/lock.rb +0 -16
- data/vendor/rack-1.0.0-git/lib/rack/methodoverride.rb +0 -27
- data/vendor/rack-1.0.0-git/lib/rack/mime.rb +0 -204
- data/vendor/rack-1.0.0-git/lib/rack/mock.rb +0 -184
- data/vendor/rack-1.0.0-git/lib/rack/recursive.rb +0 -57
- data/vendor/rack-1.0.0-git/lib/rack/reloader.rb +0 -106
- data/vendor/rack-1.0.0-git/lib/rack/request.rb +0 -248
- data/vendor/rack-1.0.0-git/lib/rack/response.rb +0 -183
- data/vendor/rack-1.0.0-git/lib/rack/session/abstract/id.rb +0 -142
- data/vendor/rack-1.0.0-git/lib/rack/session/cookie.rb +0 -91
- data/vendor/rack-1.0.0-git/lib/rack/session/memcache.rb +0 -109
- data/vendor/rack-1.0.0-git/lib/rack/session/pool.rb +0 -100
- data/vendor/rack-1.0.0-git/lib/rack/showexceptions.rb +0 -349
- data/vendor/rack-1.0.0-git/lib/rack/showstatus.rb +0 -106
- data/vendor/rack-1.0.0-git/lib/rack/static.rb +0 -38
- data/vendor/rack-1.0.0-git/lib/rack/urlmap.rb +0 -55
- data/vendor/rack-1.0.0-git/lib/rack/utils.rb +0 -522
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
# Rakefile for Rack. -*-ruby-*-
|
|
2
|
-
require 'rake/rdoctask'
|
|
3
|
-
require 'rake/testtask'
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
desc "Run all the tests"
|
|
7
|
-
task :default => [:test]
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
desc "Make an archive as .tar.gz"
|
|
11
|
-
task :dist => [:chmod, :changelog, :rdoc, "SPEC", "rack.gemspec"] do
|
|
12
|
-
FileUtils.touch("RDOX")
|
|
13
|
-
sh "git archive --format=tar --prefix=#{release}/ HEAD^{tree} >#{release}.tar"
|
|
14
|
-
sh "pax -waf #{release}.tar -s ':^:#{release}/:' RDOX SPEC ChangeLog doc rack.gemspec"
|
|
15
|
-
sh "gzip -f -9 #{release}.tar"
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
desc "Make an official release"
|
|
19
|
-
task :officialrelease do
|
|
20
|
-
puts "Official build for #{release}..."
|
|
21
|
-
sh "rm -rf stage"
|
|
22
|
-
sh "git clone --shared . stage"
|
|
23
|
-
sh "cd stage && rake officialrelease_really"
|
|
24
|
-
sh "mv stage/#{release}.tar.gz stage/#{release}.gem ."
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
task :officialrelease_really => [:fulltest, "RDOX", "SPEC", :dist, :gem] do
|
|
28
|
-
sh "sha1sum #{release}.tar.gz #{release}.gem"
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
def version
|
|
33
|
-
abort "You need to pass VERSION=... to build packages." unless ENV["VERSION"]
|
|
34
|
-
ENV["VERSION"]
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def release
|
|
38
|
-
"rack-#{version}"
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def manifest
|
|
42
|
-
`git ls-files`.split("\n")
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
desc "Make binaries executable"
|
|
47
|
-
task :chmod do
|
|
48
|
-
Dir["bin/*"].each { |binary| File.chmod(0775, binary) }
|
|
49
|
-
Dir["test/cgi/test*"].each { |binary| File.chmod(0775, binary) }
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
desc "Generate a ChangeLog"
|
|
53
|
-
task :changelog do
|
|
54
|
-
File.open("ChangeLog", "w") { |out|
|
|
55
|
-
`git log -z`.split("\0").map { |chunk|
|
|
56
|
-
author = chunk[/Author: (.*)/, 1].strip
|
|
57
|
-
date = chunk[/Date: (.*)/, 1].strip
|
|
58
|
-
desc, detail = $'.strip.split("\n", 2)
|
|
59
|
-
detail ||= ""
|
|
60
|
-
detail = detail.gsub(/.*darcs-hash:.*/, '')
|
|
61
|
-
detail.rstrip!
|
|
62
|
-
out.puts "#{date} #{author}"
|
|
63
|
-
out.puts " * #{desc.strip}"
|
|
64
|
-
out.puts detail unless detail.empty?
|
|
65
|
-
out.puts
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
desc "Generate RDox"
|
|
72
|
-
task "RDOX" do
|
|
73
|
-
sh "specrb -Ilib:test -a --rdox >RDOX"
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
desc "Generate Rack Specification"
|
|
77
|
-
task "SPEC" do
|
|
78
|
-
File.open("SPEC", "wb") { |file|
|
|
79
|
-
IO.foreach("lib/rack/lint.rb") { |line|
|
|
80
|
-
if line =~ /## (.*)/
|
|
81
|
-
file.puts $1
|
|
82
|
-
end
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
desc "Run all the fast tests"
|
|
88
|
-
task :test do
|
|
89
|
-
sh "specrb -Ilib:test -w #{ENV['TEST'] || '-a'} #{ENV['TESTOPTS'] || '-t "^(?!Rack::Handler|Rack::Adapter|Rack::Session::Memcache|Rack::Auth::OpenID)"'}"
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
desc "Run all the tests"
|
|
93
|
-
task :fulltest => [:chmod] do
|
|
94
|
-
sh "specrb -Ilib:test -w #{ENV['TEST'] || '-a'} #{ENV['TESTOPTS']}"
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
begin
|
|
98
|
-
require 'rubygems'
|
|
99
|
-
rescue LoadError
|
|
100
|
-
# Too bad.
|
|
101
|
-
else
|
|
102
|
-
task "rack.gemspec" do
|
|
103
|
-
spec = Gem::Specification.new do |s|
|
|
104
|
-
s.name = "rack"
|
|
105
|
-
s.version = version
|
|
106
|
-
s.platform = Gem::Platform::RUBY
|
|
107
|
-
s.summary = "a modular Ruby webserver interface"
|
|
108
|
-
|
|
109
|
-
s.description = <<-EOF
|
|
110
|
-
Rack provides minimal, modular and adaptable interface for developing
|
|
111
|
-
web applications in Ruby. By wrapping HTTP requests and responses in
|
|
112
|
-
the simplest way possible, it unifies and distills the API for web
|
|
113
|
-
servers, web frameworks, and software in between (the so-called
|
|
114
|
-
middleware) into a single method call.
|
|
115
|
-
|
|
116
|
-
Also see http://rack.rubyforge.org.
|
|
117
|
-
EOF
|
|
118
|
-
|
|
119
|
-
s.files = manifest + %w(SPEC RDOX rack.gemspec)
|
|
120
|
-
s.bindir = 'bin'
|
|
121
|
-
s.executables << 'rackup'
|
|
122
|
-
s.require_path = 'lib'
|
|
123
|
-
s.has_rdoc = true
|
|
124
|
-
s.extra_rdoc_files = ['README', 'SPEC', 'RDOX', 'KNOWN-ISSUES']
|
|
125
|
-
s.test_files = Dir['test/{test,spec}_*.rb']
|
|
126
|
-
|
|
127
|
-
s.author = 'Christian Neukirchen'
|
|
128
|
-
s.email = 'chneukirchen@gmail.com'
|
|
129
|
-
s.homepage = 'http://rack.rubyforge.org'
|
|
130
|
-
s.rubyforge_project = 'rack'
|
|
131
|
-
|
|
132
|
-
s.add_development_dependency 'test-spec'
|
|
133
|
-
|
|
134
|
-
s.add_development_dependency 'camping'
|
|
135
|
-
s.add_development_dependency 'fcgi'
|
|
136
|
-
s.add_development_dependency 'memcache-client'
|
|
137
|
-
s.add_development_dependency 'mongrel'
|
|
138
|
-
s.add_development_dependency 'ruby-openid', '~> 2.0.0'
|
|
139
|
-
s.add_development_dependency 'thin'
|
|
140
|
-
end
|
|
141
|
-
|
|
142
|
-
File.open("rack.gemspec", "w") { |f| f << spec.to_ruby }
|
|
143
|
-
end
|
|
144
|
-
|
|
145
|
-
task :gem => ["rack.gemspec", "SPEC"] do
|
|
146
|
-
FileUtils.touch("RDOX")
|
|
147
|
-
sh "gem build rack.gemspec"
|
|
148
|
-
end
|
|
149
|
-
end
|
|
150
|
-
|
|
151
|
-
desc "Generate RDoc documentation"
|
|
152
|
-
task :rdoc do
|
|
153
|
-
sh(*%w{rdoc --line-numbers --main README
|
|
154
|
-
--title 'Rack\ Documentation' --charset utf-8 -U -o doc} +
|
|
155
|
-
%w{README KNOWN-ISSUES SPEC RDOX} +
|
|
156
|
-
Dir["lib/**/*.rb"])
|
|
157
|
-
end
|
|
158
|
-
|
|
159
|
-
task :pushsite => [:rdoc] do
|
|
160
|
-
sh "cd site && git gc"
|
|
161
|
-
sh "rsync -avz doc/ chneukirchen@rack.rubyforge.org:/var/www/gforge-projects/rack/doc/"
|
|
162
|
-
sh "rsync -avz site/ chneukirchen@rack.rubyforge.org:/var/www/gforge-projects/rack/"
|
|
163
|
-
sh "cd site && git push"
|
|
164
|
-
end
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
# Copyright (C) 2007, 2008, 2009 Christian Neukirchen <purl.org/net/chneukirchen>
|
|
2
|
-
#
|
|
3
|
-
# Rack is freely distributable under the terms of an MIT-style license.
|
|
4
|
-
# See COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
5
|
-
|
|
6
|
-
path = File.expand_path(File.dirname(__FILE__))
|
|
7
|
-
$:.unshift(path) unless $:.include?(path)
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
# The Rack main module, serving as a namespace for all core Rack
|
|
11
|
-
# modules and classes.
|
|
12
|
-
#
|
|
13
|
-
# All modules meant for use in your application are <tt>autoload</tt>ed here,
|
|
14
|
-
# so it should be enough just to <tt>require rack.rb</tt> in your code.
|
|
15
|
-
|
|
16
|
-
module Rack
|
|
17
|
-
# The Rack protocol version number implemented.
|
|
18
|
-
VERSION = [1,0]
|
|
19
|
-
|
|
20
|
-
# Return the Rack protocol version as a dotted string.
|
|
21
|
-
def self.version
|
|
22
|
-
VERSION.join(".")
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
# Return the Rack release as a dotted string.
|
|
26
|
-
def self.release
|
|
27
|
-
"1.0"
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
autoload :Builder, "rack/builder"
|
|
31
|
-
autoload :Cascade, "rack/cascade"
|
|
32
|
-
autoload :Chunked, "rack/chunked"
|
|
33
|
-
autoload :CommonLogger, "rack/commonlogger"
|
|
34
|
-
autoload :ConditionalGet, "rack/conditionalget"
|
|
35
|
-
autoload :ContentLength, "rack/content_length"
|
|
36
|
-
autoload :ContentType, "rack/content_type"
|
|
37
|
-
autoload :File, "rack/file"
|
|
38
|
-
autoload :Deflater, "rack/deflater"
|
|
39
|
-
autoload :Directory, "rack/directory"
|
|
40
|
-
autoload :ForwardRequest, "rack/recursive"
|
|
41
|
-
autoload :Handler, "rack/handler"
|
|
42
|
-
autoload :Head, "rack/head"
|
|
43
|
-
autoload :Lint, "rack/lint"
|
|
44
|
-
autoload :Lock, "rack/lock"
|
|
45
|
-
autoload :MethodOverride, "rack/methodoverride"
|
|
46
|
-
autoload :Mime, "rack/mime"
|
|
47
|
-
autoload :Recursive, "rack/recursive"
|
|
48
|
-
autoload :Reloader, "rack/reloader"
|
|
49
|
-
autoload :ShowExceptions, "rack/showexceptions"
|
|
50
|
-
autoload :ShowStatus, "rack/showstatus"
|
|
51
|
-
autoload :Static, "rack/static"
|
|
52
|
-
autoload :URLMap, "rack/urlmap"
|
|
53
|
-
autoload :Utils, "rack/utils"
|
|
54
|
-
|
|
55
|
-
autoload :MockRequest, "rack/mock"
|
|
56
|
-
autoload :MockResponse, "rack/mock"
|
|
57
|
-
|
|
58
|
-
autoload :Request, "rack/request"
|
|
59
|
-
autoload :Response, "rack/response"
|
|
60
|
-
|
|
61
|
-
module Auth
|
|
62
|
-
autoload :Basic, "rack/auth/basic"
|
|
63
|
-
autoload :AbstractRequest, "rack/auth/abstract/request"
|
|
64
|
-
autoload :AbstractHandler, "rack/auth/abstract/handler"
|
|
65
|
-
autoload :OpenID, "rack/auth/openid"
|
|
66
|
-
module Digest
|
|
67
|
-
autoload :MD5, "rack/auth/digest/md5"
|
|
68
|
-
autoload :Nonce, "rack/auth/digest/nonce"
|
|
69
|
-
autoload :Params, "rack/auth/digest/params"
|
|
70
|
-
autoload :Request, "rack/auth/digest/request"
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
module Session
|
|
75
|
-
autoload :Cookie, "rack/session/cookie"
|
|
76
|
-
autoload :Pool, "rack/session/pool"
|
|
77
|
-
autoload :Memcache, "rack/session/memcache"
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
# *Adapters* connect Rack with third party web frameworks.
|
|
81
|
-
#
|
|
82
|
-
# Rack includes an adapter for Camping, see README for other
|
|
83
|
-
# frameworks supporting Rack in their code bases.
|
|
84
|
-
#
|
|
85
|
-
# Refer to the submodules for framework-specific calling details.
|
|
86
|
-
|
|
87
|
-
module Adapter
|
|
88
|
-
autoload :Camping, "rack/adapter/camping"
|
|
89
|
-
end
|
|
90
|
-
end
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
module Rack
|
|
2
|
-
module Adapter
|
|
3
|
-
class Camping
|
|
4
|
-
def initialize(app)
|
|
5
|
-
@app = app
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
def call(env)
|
|
9
|
-
env["PATH_INFO"] ||= ""
|
|
10
|
-
env["SCRIPT_NAME"] ||= ""
|
|
11
|
-
controller = @app.run(env['rack.input'], env)
|
|
12
|
-
h = controller.headers
|
|
13
|
-
h.each_pair do |k,v|
|
|
14
|
-
if v.kind_of? URI
|
|
15
|
-
h[k] = v.to_s
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
[controller.status, controller.headers, [controller.body.to_s]]
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
module Rack
|
|
2
|
-
module Auth
|
|
3
|
-
# Rack::Auth::AbstractHandler implements common authentication functionality.
|
|
4
|
-
#
|
|
5
|
-
# +realm+ should be set for all handlers.
|
|
6
|
-
|
|
7
|
-
class AbstractHandler
|
|
8
|
-
|
|
9
|
-
attr_accessor :realm
|
|
10
|
-
|
|
11
|
-
def initialize(app, realm=nil, &authenticator)
|
|
12
|
-
@app, @realm, @authenticator = app, realm, authenticator
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
private
|
|
17
|
-
|
|
18
|
-
def unauthorized(www_authenticate = challenge)
|
|
19
|
-
return [ 401,
|
|
20
|
-
{ 'Content-Type' => 'text/plain',
|
|
21
|
-
'Content-Length' => '0',
|
|
22
|
-
'WWW-Authenticate' => www_authenticate.to_s },
|
|
23
|
-
[]
|
|
24
|
-
]
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def bad_request
|
|
28
|
-
return [ 400,
|
|
29
|
-
{ 'Content-Type' => 'text/plain',
|
|
30
|
-
'Content-Length' => '0' },
|
|
31
|
-
[]
|
|
32
|
-
]
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
module Rack
|
|
2
|
-
module Auth
|
|
3
|
-
class AbstractRequest
|
|
4
|
-
|
|
5
|
-
def initialize(env)
|
|
6
|
-
@env = env
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
def provided?
|
|
10
|
-
!authorization_key.nil?
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def parts
|
|
14
|
-
@parts ||= @env[authorization_key].split(' ', 2)
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def scheme
|
|
18
|
-
@scheme ||= parts.first.downcase.to_sym
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def params
|
|
22
|
-
@params ||= parts.last
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
private
|
|
27
|
-
|
|
28
|
-
AUTHORIZATION_KEYS = ['HTTP_AUTHORIZATION', 'X-HTTP_AUTHORIZATION', 'X_HTTP_AUTHORIZATION']
|
|
29
|
-
|
|
30
|
-
def authorization_key
|
|
31
|
-
@authorization_key ||= AUTHORIZATION_KEYS.detect { |key| @env.has_key?(key) }
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
end
|
|
37
|
-
end
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
require 'rack/auth/abstract/handler'
|
|
2
|
-
require 'rack/auth/abstract/request'
|
|
3
|
-
|
|
4
|
-
module Rack
|
|
5
|
-
module Auth
|
|
6
|
-
# Rack::Auth::Basic implements HTTP Basic Authentication, as per RFC 2617.
|
|
7
|
-
#
|
|
8
|
-
# Initialize with the Rack application that you want protecting,
|
|
9
|
-
# and a block that checks if a username and password pair are valid.
|
|
10
|
-
#
|
|
11
|
-
# See also: <tt>example/protectedlobster.rb</tt>
|
|
12
|
-
|
|
13
|
-
class Basic < AbstractHandler
|
|
14
|
-
|
|
15
|
-
def call(env)
|
|
16
|
-
auth = Basic::Request.new(env)
|
|
17
|
-
|
|
18
|
-
return unauthorized unless auth.provided?
|
|
19
|
-
|
|
20
|
-
return bad_request unless auth.basic?
|
|
21
|
-
|
|
22
|
-
if valid?(auth)
|
|
23
|
-
env['REMOTE_USER'] = auth.username
|
|
24
|
-
|
|
25
|
-
return @app.call(env)
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
unauthorized
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
private
|
|
33
|
-
|
|
34
|
-
def challenge
|
|
35
|
-
'Basic realm="%s"' % realm
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
def valid?(auth)
|
|
39
|
-
@authenticator.call(*auth.credentials)
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
class Request < Auth::AbstractRequest
|
|
43
|
-
def basic?
|
|
44
|
-
:basic == scheme
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
def credentials
|
|
48
|
-
@credentials ||= params.unpack("m*").first.split(/:/, 2)
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
def username
|
|
52
|
-
credentials.first
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
end
|
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
require 'rack/auth/abstract/handler'
|
|
2
|
-
require 'rack/auth/digest/request'
|
|
3
|
-
require 'rack/auth/digest/params'
|
|
4
|
-
require 'rack/auth/digest/nonce'
|
|
5
|
-
require 'digest/md5'
|
|
6
|
-
|
|
7
|
-
module Rack
|
|
8
|
-
module Auth
|
|
9
|
-
module Digest
|
|
10
|
-
# Rack::Auth::Digest::MD5 implements the MD5 algorithm version of
|
|
11
|
-
# HTTP Digest Authentication, as per RFC 2617.
|
|
12
|
-
#
|
|
13
|
-
# Initialize with the [Rack] application that you want protecting,
|
|
14
|
-
# and a block that looks up a plaintext password for a given username.
|
|
15
|
-
#
|
|
16
|
-
# +opaque+ needs to be set to a constant base64/hexadecimal string.
|
|
17
|
-
#
|
|
18
|
-
class MD5 < AbstractHandler
|
|
19
|
-
|
|
20
|
-
attr_accessor :opaque
|
|
21
|
-
|
|
22
|
-
attr_writer :passwords_hashed
|
|
23
|
-
|
|
24
|
-
def initialize(*args)
|
|
25
|
-
super
|
|
26
|
-
@passwords_hashed = nil
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def passwords_hashed?
|
|
30
|
-
!!@passwords_hashed
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def call(env)
|
|
34
|
-
auth = Request.new(env)
|
|
35
|
-
|
|
36
|
-
unless auth.provided?
|
|
37
|
-
return unauthorized
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
if !auth.digest? || !auth.correct_uri? || !valid_qop?(auth)
|
|
41
|
-
return bad_request
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
if valid?(auth)
|
|
45
|
-
if auth.nonce.stale?
|
|
46
|
-
return unauthorized(challenge(:stale => true))
|
|
47
|
-
else
|
|
48
|
-
env['REMOTE_USER'] = auth.username
|
|
49
|
-
|
|
50
|
-
return @app.call(env)
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
unauthorized
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
private
|
|
59
|
-
|
|
60
|
-
QOP = 'auth'.freeze
|
|
61
|
-
|
|
62
|
-
def params(hash = {})
|
|
63
|
-
Params.new do |params|
|
|
64
|
-
params['realm'] = realm
|
|
65
|
-
params['nonce'] = Nonce.new.to_s
|
|
66
|
-
params['opaque'] = H(opaque)
|
|
67
|
-
params['qop'] = QOP
|
|
68
|
-
|
|
69
|
-
hash.each { |k, v| params[k] = v }
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
def challenge(hash = {})
|
|
74
|
-
"Digest #{params(hash)}"
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
def valid?(auth)
|
|
78
|
-
valid_opaque?(auth) && valid_nonce?(auth) && valid_digest?(auth)
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
def valid_qop?(auth)
|
|
82
|
-
QOP == auth.qop
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
def valid_opaque?(auth)
|
|
86
|
-
H(opaque) == auth.opaque
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
def valid_nonce?(auth)
|
|
90
|
-
auth.nonce.valid?
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
def valid_digest?(auth)
|
|
94
|
-
digest(auth, @authenticator.call(auth.username)) == auth.response
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
def md5(data)
|
|
98
|
-
::Digest::MD5.hexdigest(data)
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
alias :H :md5
|
|
102
|
-
|
|
103
|
-
def KD(secret, data)
|
|
104
|
-
H([secret, data] * ':')
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
def A1(auth, password)
|
|
108
|
-
[ auth.username, auth.realm, password ] * ':'
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
def A2(auth)
|
|
112
|
-
[ auth.method, auth.uri ] * ':'
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
def digest(auth, password)
|
|
116
|
-
password_hash = passwords_hashed? ? password : H(A1(auth, password))
|
|
117
|
-
|
|
118
|
-
KD(password_hash, [ auth.nonce, auth.nc, auth.cnonce, QOP, H(A2(auth)) ] * ':')
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
end
|
|
122
|
-
end
|
|
123
|
-
end
|
|
124
|
-
end
|