colouringcode-passenger 0.1 → 0.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|