colouringcode-passenger 0.1 → 0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (170) hide show
  1. data/NEWS +129 -0
  2. data/Rakefile +2 -2
  3. data/bin/passenger-install-apache2-module +1 -0
  4. data/bin/passenger-install-nginx-module +4 -2
  5. data/ext/apache2/Hooks.cpp +4 -2
  6. data/ext/common/ApplicationPoolServer.h +1 -1
  7. data/ext/common/ApplicationPoolServerExecutable.cpp +1 -1
  8. data/ext/common/MessageChannel.h +48 -4
  9. data/ext/common/StandardApplicationPool.h +4 -2
  10. data/ext/common/Version.h +1 -1
  11. data/ext/nginx/Configuration.c +1 -1
  12. data/ext/nginx/HttpStatusExtractor.h +1 -0
  13. data/ext/nginx/ScgiRequestParser.h +1 -0
  14. data/ext/oxt/system_calls.cpp +11 -0
  15. data/ext/oxt/system_calls.hpp +2 -1
  16. data/ext/oxt/thread.hpp +97 -1
  17. data/ext/phusion_passenger/native_support.c +30 -1
  18. data/lib/phusion_passenger/constants.rb +1 -1
  19. data/lib/phusion_passenger/dependencies.rb +32 -0
  20. data/lib/phusion_passenger/message_channel.rb +45 -3
  21. data/lib/phusion_passenger/platform_info.rb +1 -1
  22. data/lib/phusion_passenger/rack/application_spawner.rb +10 -4
  23. data/lib/phusion_passenger/rack/request_handler.rb +2 -5
  24. data/lib/phusion_passenger/railz/application_spawner.rb +59 -7
  25. data/lib/phusion_passenger/utils.rb +70 -16
  26. data/{vendor/rack-1.0.0-git/lib/rack → lib/phusion_passenger/utils}/rewindable_input.rb +34 -9
  27. data/test/ApplicationPoolTest.cpp +1 -1
  28. data/test/MessageChannelTest.cpp +9 -1
  29. data/test/stub/message_channel.rb +1 -1
  30. data/test/stub/message_channel_2.rb +1 -1
  31. data/test/stub/message_channel_3.rb +2 -2
  32. metadata +43 -155
  33. data/doc/Architectural overview.html +0 -1
  34. data/doc/rdoc/classes/ConditionVariable.html +0 -194
  35. data/doc/rdoc/classes/Exception.html +0 -120
  36. data/doc/rdoc/classes/GC.html +0 -113
  37. data/doc/rdoc/classes/IO.html +0 -169
  38. data/doc/rdoc/classes/PhusionPassenger.html +0 -238
  39. data/doc/rdoc/classes/PhusionPassenger/AbstractInstaller.html +0 -153
  40. data/doc/rdoc/classes/PhusionPassenger/AbstractRequestHandler.html +0 -517
  41. data/doc/rdoc/classes/PhusionPassenger/AbstractServer.html +0 -719
  42. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerAlreadyStarted.html +0 -97
  43. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerError.html +0 -96
  44. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerNotStarted.html +0 -97
  45. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/UnknownMessage.html +0 -96
  46. data/doc/rdoc/classes/PhusionPassenger/AbstractServerCollection.html +0 -598
  47. data/doc/rdoc/classes/PhusionPassenger/AdminTools.html +0 -140
  48. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ControlProcess.html +0 -317
  49. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ControlProcess/Instance.html +0 -138
  50. data/doc/rdoc/classes/PhusionPassenger/AppInitError.html +0 -154
  51. data/doc/rdoc/classes/PhusionPassenger/Application.html +0 -283
  52. data/doc/rdoc/classes/PhusionPassenger/ConsoleTextTemplate.html +0 -172
  53. data/doc/rdoc/classes/PhusionPassenger/FrameworkInitError.html +0 -145
  54. data/doc/rdoc/classes/PhusionPassenger/HTMLTemplate.html +0 -181
  55. data/doc/rdoc/classes/PhusionPassenger/InitializationError.html +0 -141
  56. data/doc/rdoc/classes/PhusionPassenger/InvalidPath.html +0 -92
  57. data/doc/rdoc/classes/PhusionPassenger/MessageChannel.html +0 -489
  58. data/doc/rdoc/classes/PhusionPassenger/NativeSupport.html +0 -350
  59. data/doc/rdoc/classes/PhusionPassenger/Rack.html +0 -91
  60. data/doc/rdoc/classes/PhusionPassenger/Rack/ApplicationSpawner.html +0 -188
  61. data/doc/rdoc/classes/PhusionPassenger/Rack/RequestHandler.html +0 -199
  62. data/doc/rdoc/classes/PhusionPassenger/Railz.html +0 -95
  63. data/doc/rdoc/classes/PhusionPassenger/Railz/ApplicationSpawner.html +0 -438
  64. data/doc/rdoc/classes/PhusionPassenger/Railz/ApplicationSpawner/Error.html +0 -98
  65. data/doc/rdoc/classes/PhusionPassenger/Railz/CGIFixed.html +0 -200
  66. data/doc/rdoc/classes/PhusionPassenger/Railz/FrameworkSpawner.html +0 -436
  67. data/doc/rdoc/classes/PhusionPassenger/Railz/FrameworkSpawner/Error.html +0 -98
  68. data/doc/rdoc/classes/PhusionPassenger/Railz/RequestHandler.html +0 -155
  69. data/doc/rdoc/classes/PhusionPassenger/SpawnManager.html +0 -402
  70. data/doc/rdoc/classes/PhusionPassenger/UnknownError.html +0 -125
  71. data/doc/rdoc/classes/PhusionPassenger/Utils.html +0 -803
  72. data/doc/rdoc/classes/PhusionPassenger/Utils/PseudoIO.html +0 -169
  73. data/doc/rdoc/classes/PhusionPassenger/VersionNotFound.html +0 -140
  74. data/doc/rdoc/classes/PhusionPassenger/WSGI.html +0 -89
  75. data/doc/rdoc/classes/PhusionPassenger/WSGI/ApplicationSpawner.html +0 -188
  76. data/doc/rdoc/classes/PlatformInfo.html +0 -866
  77. data/doc/rdoc/classes/RakeExtensions.html +0 -197
  78. data/doc/rdoc/classes/Signal.html +0 -131
  79. data/doc/rdoc/created.rid +0 -1
  80. data/doc/rdoc/files/DEVELOPERS_TXT.html +0 -255
  81. data/doc/rdoc/files/README.html +0 -175
  82. data/doc/rdoc/files/ext/phusion_passenger/native_support_c.html +0 -92
  83. data/doc/rdoc/files/lib/phusion_passenger/abstract_installer_rb.html +0 -129
  84. data/doc/rdoc/files/lib/phusion_passenger/abstract_request_handler_rb.html +0 -129
  85. data/doc/rdoc/files/lib/phusion_passenger/abstract_server_collection_rb.html +0 -126
  86. data/doc/rdoc/files/lib/phusion_passenger/abstract_server_rb.html +0 -128
  87. data/doc/rdoc/files/lib/phusion_passenger/admin_tools/control_process_rb.html +0 -130
  88. data/doc/rdoc/files/lib/phusion_passenger/admin_tools_rb.html +0 -122
  89. data/doc/rdoc/files/lib/phusion_passenger/application_rb.html +0 -127
  90. data/doc/rdoc/files/lib/phusion_passenger/console_text_template_rb.html +0 -126
  91. data/doc/rdoc/files/lib/phusion_passenger/constants_rb.html +0 -122
  92. data/doc/rdoc/files/lib/phusion_passenger/dependencies_rb.html +0 -134
  93. data/doc/rdoc/files/lib/phusion_passenger/events_rb.html +0 -122
  94. data/doc/rdoc/files/lib/phusion_passenger/exceptions_rb.html +0 -122
  95. data/doc/rdoc/files/lib/phusion_passenger/html_template_rb.html +0 -126
  96. data/doc/rdoc/files/lib/phusion_passenger/message_channel_rb.html +0 -120
  97. data/doc/rdoc/files/lib/phusion_passenger/packaging_rb.html +0 -122
  98. data/doc/rdoc/files/lib/phusion_passenger/platform_info_rb.html +0 -127
  99. data/doc/rdoc/files/lib/phusion_passenger/rack/application_spawner_rb.html +0 -133
  100. data/doc/rdoc/files/lib/phusion_passenger/rack/request_handler_rb.html +0 -125
  101. data/doc/rdoc/files/lib/phusion_passenger/railz/application_spawner_rb.html +0 -140
  102. data/doc/rdoc/files/lib/phusion_passenger/railz/cgi_fixed_rb.html +0 -126
  103. data/doc/rdoc/files/lib/phusion_passenger/railz/framework_spawner_rb.html +0 -145
  104. data/doc/rdoc/files/lib/phusion_passenger/railz/request_handler_rb.html +0 -125
  105. data/doc/rdoc/files/lib/phusion_passenger/simple_benchmarking_rb.html +0 -122
  106. data/doc/rdoc/files/lib/phusion_passenger/spawn_manager_rb.html +0 -159
  107. data/doc/rdoc/files/lib/phusion_passenger/utils_rb.html +0 -174
  108. data/doc/rdoc/files/lib/phusion_passenger/wsgi/application_spawner_rb.html +0 -129
  109. data/doc/rdoc/files/misc/rake/extensions_rb.html +0 -130
  110. data/doc/rdoc/fr_class_index.html +0 -91
  111. data/doc/rdoc/fr_file_index.html +0 -76
  112. data/doc/rdoc/fr_method_index.html +0 -205
  113. data/doc/rdoc/index.html +0 -26
  114. data/doc/rdoc/rdoc-style.css +0 -187
  115. data/vendor/README +0 -13
  116. data/vendor/README_FOR_PACKAGERS +0 -1
  117. data/vendor/rack-1.0.0-git/COPYING +0 -18
  118. data/vendor/rack-1.0.0-git/KNOWN-ISSUES +0 -18
  119. data/vendor/rack-1.0.0-git/README +0 -353
  120. data/vendor/rack-1.0.0-git/Rakefile +0 -164
  121. data/vendor/rack-1.0.0-git/lib/rack.rb +0 -90
  122. data/vendor/rack-1.0.0-git/lib/rack/adapter/camping.rb +0 -22
  123. data/vendor/rack-1.0.0-git/lib/rack/auth/abstract/handler.rb +0 -37
  124. data/vendor/rack-1.0.0-git/lib/rack/auth/abstract/request.rb +0 -37
  125. data/vendor/rack-1.0.0-git/lib/rack/auth/basic.rb +0 -58
  126. data/vendor/rack-1.0.0-git/lib/rack/auth/digest/md5.rb +0 -124
  127. data/vendor/rack-1.0.0-git/lib/rack/auth/digest/nonce.rb +0 -51
  128. data/vendor/rack-1.0.0-git/lib/rack/auth/digest/params.rb +0 -55
  129. data/vendor/rack-1.0.0-git/lib/rack/auth/digest/request.rb +0 -40
  130. data/vendor/rack-1.0.0-git/lib/rack/auth/openid.rb +0 -487
  131. data/vendor/rack-1.0.0-git/lib/rack/builder.rb +0 -63
  132. data/vendor/rack-1.0.0-git/lib/rack/cascade.rb +0 -41
  133. data/vendor/rack-1.0.0-git/lib/rack/chunked.rb +0 -49
  134. data/vendor/rack-1.0.0-git/lib/rack/commonlogger.rb +0 -52
  135. data/vendor/rack-1.0.0-git/lib/rack/conditionalget.rb +0 -47
  136. data/vendor/rack-1.0.0-git/lib/rack/content_length.rb +0 -29
  137. data/vendor/rack-1.0.0-git/lib/rack/content_type.rb +0 -23
  138. data/vendor/rack-1.0.0-git/lib/rack/deflater.rb +0 -96
  139. data/vendor/rack-1.0.0-git/lib/rack/directory.rb +0 -153
  140. data/vendor/rack-1.0.0-git/lib/rack/file.rb +0 -88
  141. data/vendor/rack-1.0.0-git/lib/rack/handler.rb +0 -69
  142. data/vendor/rack-1.0.0-git/lib/rack/handler/cgi.rb +0 -61
  143. data/vendor/rack-1.0.0-git/lib/rack/handler/evented_mongrel.rb +0 -8
  144. data/vendor/rack-1.0.0-git/lib/rack/handler/fastcgi.rb +0 -88
  145. data/vendor/rack-1.0.0-git/lib/rack/handler/lsws.rb +0 -55
  146. data/vendor/rack-1.0.0-git/lib/rack/handler/mongrel.rb +0 -84
  147. data/vendor/rack-1.0.0-git/lib/rack/handler/scgi.rb +0 -59
  148. data/vendor/rack-1.0.0-git/lib/rack/handler/swiftiplied_mongrel.rb +0 -8
  149. data/vendor/rack-1.0.0-git/lib/rack/handler/thin.rb +0 -18
  150. data/vendor/rack-1.0.0-git/lib/rack/handler/webrick.rb +0 -67
  151. data/vendor/rack-1.0.0-git/lib/rack/head.rb +0 -19
  152. data/vendor/rack-1.0.0-git/lib/rack/lint.rb +0 -537
  153. data/vendor/rack-1.0.0-git/lib/rack/lobster.rb +0 -65
  154. data/vendor/rack-1.0.0-git/lib/rack/lock.rb +0 -16
  155. data/vendor/rack-1.0.0-git/lib/rack/methodoverride.rb +0 -27
  156. data/vendor/rack-1.0.0-git/lib/rack/mime.rb +0 -204
  157. data/vendor/rack-1.0.0-git/lib/rack/mock.rb +0 -184
  158. data/vendor/rack-1.0.0-git/lib/rack/recursive.rb +0 -57
  159. data/vendor/rack-1.0.0-git/lib/rack/reloader.rb +0 -106
  160. data/vendor/rack-1.0.0-git/lib/rack/request.rb +0 -248
  161. data/vendor/rack-1.0.0-git/lib/rack/response.rb +0 -183
  162. data/vendor/rack-1.0.0-git/lib/rack/session/abstract/id.rb +0 -142
  163. data/vendor/rack-1.0.0-git/lib/rack/session/cookie.rb +0 -91
  164. data/vendor/rack-1.0.0-git/lib/rack/session/memcache.rb +0 -109
  165. data/vendor/rack-1.0.0-git/lib/rack/session/pool.rb +0 -100
  166. data/vendor/rack-1.0.0-git/lib/rack/showexceptions.rb +0 -349
  167. data/vendor/rack-1.0.0-git/lib/rack/showstatus.rb +0 -106
  168. data/vendor/rack-1.0.0-git/lib/rack/static.rb +0 -38
  169. data/vendor/rack-1.0.0-git/lib/rack/urlmap.rb +0 -55
  170. 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