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.
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