webrick 1.3.1 → 1.4.0.beta1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of webrick might be problematic. Click here for more details.

Files changed (64) hide show
  1. checksums.yaml +7 -0
  2. data/lib/webrick.rb +6 -6
  3. data/lib/webrick/accesslog.rb +9 -1
  4. data/lib/webrick/cgi.rb +51 -2
  5. data/lib/webrick/compat.rb +2 -1
  6. data/lib/webrick/config.rb +42 -5
  7. data/lib/webrick/cookie.rb +68 -6
  8. data/lib/webrick/htmlutils.rb +4 -2
  9. data/lib/webrick/httpauth.rb +1 -0
  10. data/lib/webrick/httpauth/authenticator.rb +13 -8
  11. data/lib/webrick/httpauth/basicauth.rb +3 -3
  12. data/lib/webrick/httpauth/digestauth.rb +25 -9
  13. data/lib/webrick/httpauth/htdigest.rb +8 -4
  14. data/lib/webrick/httpauth/htgroup.rb +1 -0
  15. data/lib/webrick/httpauth/htpasswd.rb +7 -3
  16. data/lib/webrick/httpauth/userdb.rb +1 -0
  17. data/lib/webrick/httpproxy.rb +47 -14
  18. data/lib/webrick/httprequest.rb +142 -16
  19. data/lib/webrick/httpresponse.rb +96 -24
  20. data/lib/webrick/https.rb +24 -1
  21. data/lib/webrick/httpserver.rb +20 -4
  22. data/lib/webrick/httpservlet.rb +1 -0
  23. data/lib/webrick/httpservlet/abstract.rb +2 -1
  24. data/lib/webrick/httpservlet/cgi_runner.rb +1 -0
  25. data/lib/webrick/httpservlet/cgihandler.rb +19 -5
  26. data/lib/webrick/httpservlet/erbhandler.rb +2 -1
  27. data/lib/webrick/httpservlet/filehandler.rb +87 -34
  28. data/lib/webrick/httpservlet/prochandler.rb +14 -0
  29. data/lib/webrick/httpstatus.rb +24 -10
  30. data/lib/webrick/httputils.rb +129 -13
  31. data/lib/webrick/httpversion.rb +28 -1
  32. data/lib/webrick/log.rb +22 -2
  33. data/lib/webrick/server.rb +203 -60
  34. data/lib/webrick/ssl.rb +80 -5
  35. data/lib/webrick/utils.rb +97 -67
  36. data/lib/webrick/version.rb +6 -1
  37. metadata +59 -69
  38. data/README.txt +0 -21
  39. data/sample/webrick/demo-app.rb +0 -66
  40. data/sample/webrick/demo-multipart.cgi +0 -12
  41. data/sample/webrick/demo-servlet.rb +0 -6
  42. data/sample/webrick/demo-urlencoded.cgi +0 -12
  43. data/sample/webrick/hello.cgi +0 -11
  44. data/sample/webrick/hello.rb +0 -8
  45. data/sample/webrick/httpd.rb +0 -23
  46. data/sample/webrick/httpproxy.rb +0 -25
  47. data/sample/webrick/httpsd.rb +0 -33
  48. data/test/openssl/utils.rb +0 -313
  49. data/test/ruby/envutil.rb +0 -208
  50. data/test/webrick/test_cgi.rb +0 -134
  51. data/test/webrick/test_cookie.rb +0 -131
  52. data/test/webrick/test_filehandler.rb +0 -285
  53. data/test/webrick/test_httpauth.rb +0 -167
  54. data/test/webrick/test_httpproxy.rb +0 -282
  55. data/test/webrick/test_httprequest.rb +0 -411
  56. data/test/webrick/test_httpresponse.rb +0 -49
  57. data/test/webrick/test_httpserver.rb +0 -305
  58. data/test/webrick/test_httputils.rb +0 -96
  59. data/test/webrick/test_httpversion.rb +0 -40
  60. data/test/webrick/test_server.rb +0 -67
  61. data/test/webrick/test_utils.rb +0 -64
  62. data/test/webrick/utils.rb +0 -58
  63. data/test/webrick/webrick.cgi +0 -36
  64. data/test/webrick/webrick_long_filename.cgi +0 -36
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: false
1
2
  #
2
3
  # ssl.rb -- SSL/TLS enhancement for GenericServer
3
4
  #
@@ -12,6 +13,55 @@ module WEBrick
12
13
  module Config
13
14
  svrsoft = General[:ServerSoftware]
14
15
  osslv = ::OpenSSL::OPENSSL_VERSION.split[1]
16
+
17
+ ##
18
+ # Default SSL server configuration.
19
+ #
20
+ # WEBrick can automatically create a self-signed certificate if
21
+ # <code>:SSLCertName</code> is set. For more information on the various
22
+ # SSL options see OpenSSL::SSL::SSLContext.
23
+ #
24
+ # :ServerSoftware ::
25
+ # The server software name used in the Server: header.
26
+ # :SSLEnable :: false,
27
+ # Enable SSL for this server. Defaults to false.
28
+ # :SSLCertificate ::
29
+ # The SSL certificate for the server.
30
+ # :SSLPrivateKey ::
31
+ # The SSL private key for the server certificate.
32
+ # :SSLClientCA :: nil,
33
+ # Array of certificates that will be sent to the client.
34
+ # :SSLExtraChainCert :: nil,
35
+ # Array of certificates that will be added to the certificate chain
36
+ # :SSLCACertificateFile :: nil,
37
+ # Path to a CA certificate file
38
+ # :SSLCACertificatePath :: nil,
39
+ # Path to a directory containing CA certificates
40
+ # :SSLCertificateStore :: nil,
41
+ # OpenSSL::X509::Store used for certificate validation of the client
42
+ # :SSLTmpDhCallback :: nil,
43
+ # Callback invoked when DH parameters are required.
44
+ # :SSLVerifyClient ::
45
+ # Sets whether the client is verified. This defaults to VERIFY_NONE
46
+ # which is typical for an HTTPS server.
47
+ # :SSLVerifyDepth ::
48
+ # Number of CA certificates to walk when verifying a certificate chain
49
+ # :SSLVerifyCallback ::
50
+ # Custom certificate verification callback
51
+ # :SSLTimeout ::
52
+ # Maximum session lifetime
53
+ # :SSLOptions ::
54
+ # Various SSL options
55
+ # :SSLCiphers ::
56
+ # Ciphers to be used
57
+ # :SSLStartImmediately ::
58
+ # Immediately start SSL upon connection? Defaults to true
59
+ # :SSLCertName ::
60
+ # SSL certificate name. Must be set to enable automatic certificate
61
+ # creation.
62
+ # :SSLCertComment ::
63
+ # Comment used during automatic certificate creation.
64
+
15
65
  SSL = {
16
66
  :ServerSoftware => "#{svrsoft} OpenSSL/#{osslv}",
17
67
  :SSLEnable => false,
@@ -22,11 +72,13 @@ module WEBrick
22
72
  :SSLCACertificateFile => nil,
23
73
  :SSLCACertificatePath => nil,
24
74
  :SSLCertificateStore => nil,
75
+ :SSLTmpDhCallback => nil,
25
76
  :SSLVerifyClient => ::OpenSSL::SSL::VERIFY_NONE,
26
77
  :SSLVerifyDepth => nil,
27
78
  :SSLVerifyCallback => nil, # custom verification
28
79
  :SSLTimeout => nil,
29
80
  :SSLOptions => nil,
81
+ :SSLCiphers => nil,
30
82
  :SSLStartImmediately => true,
31
83
  # Must specify if you use auto generated certificate.
32
84
  :SSLCertName => nil,
@@ -36,6 +88,10 @@ module WEBrick
36
88
  end
37
89
 
38
90
  module Utils
91
+ ##
92
+ # Creates a self-signed certificate with the given number of +bits+,
93
+ # the issuer +cn+ and a +comment+ to be stored in the certificate.
94
+
39
95
  def create_self_signed_cert(bits, cn, comment)
40
96
  rsa = OpenSSL::PKey::RSA.new(bits){|p, n|
41
97
  case p
@@ -52,7 +108,8 @@ module WEBrick
52
108
  cert = OpenSSL::X509::Certificate.new
53
109
  cert.version = 2
54
110
  cert.serial = 1
55
- name = OpenSSL::X509::Name.new(cn)
111
+ name = (cn.kind_of? String) ? OpenSSL::X509::Name.parse(cn)
112
+ : OpenSSL::X509::Name.new(cn)
56
113
  cert.subject = name
57
114
  cert.issuer = name
58
115
  cert.not_before = Time.now
@@ -78,14 +135,26 @@ module WEBrick
78
135
  module_function :create_self_signed_cert
79
136
  end
80
137
 
138
+ ##
139
+ #--
140
+ # Updates WEBrick::GenericServer with SSL functionality
141
+
81
142
  class GenericServer
82
- def ssl_context
143
+
144
+ ##
145
+ # SSL context for the server when run in SSL mode
146
+
147
+ def ssl_context # :nodoc:
83
148
  @ssl_context ||= nil
84
149
  end
85
150
 
86
151
  undef listen
87
- def listen(address, port)
88
- listeners = Utils::create_listeners(address, port, @logger)
152
+
153
+ ##
154
+ # Updates +listen+ to enable SSL when the SSL configuration is active.
155
+
156
+ def listen(address, port) # :nodoc:
157
+ listeners = Utils::create_listeners(address, port)
89
158
  if @config[:SSLEnable]
90
159
  unless ssl_context
91
160
  @ssl_context = setup_ssl_context(@config)
@@ -98,9 +167,13 @@ module WEBrick
98
167
  }
99
168
  end
100
169
  @listeners += listeners
170
+ setup_shutdown_pipe
101
171
  end
102
172
 
103
- def setup_ssl_context(config)
173
+ ##
174
+ # Sets up an SSL context for +config+
175
+
176
+ def setup_ssl_context(config) # :nodoc:
104
177
  unless config[:SSLCertificate]
105
178
  cn = config[:SSLCertName]
106
179
  comment = config[:SSLCertComment]
@@ -116,11 +189,13 @@ module WEBrick
116
189
  ctx.ca_file = config[:SSLCACertificateFile]
117
190
  ctx.ca_path = config[:SSLCACertificatePath]
118
191
  ctx.cert_store = config[:SSLCertificateStore]
192
+ ctx.tmp_dh_callback = config[:SSLTmpDhCallback]
119
193
  ctx.verify_mode = config[:SSLVerifyClient]
120
194
  ctx.verify_depth = config[:SSLVerifyDepth]
121
195
  ctx.verify_callback = config[:SSLVerifyCallback]
122
196
  ctx.timeout = config[:SSLTimeout]
123
197
  ctx.options = config[:SSLOptions]
198
+ ctx.ciphers = config[:SSLCiphers]
124
199
  ctx
125
200
  end
126
201
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: false
1
2
  #
2
3
  # utils.rb -- Miscellaneous utilities
3
4
  #
@@ -9,40 +10,29 @@
9
10
  # $IPR: utils.rb,v 1.10 2003/02/16 22:22:54 gotoyuzo Exp $
10
11
 
11
12
  require 'socket'
12
- require 'fcntl'
13
- begin
14
- require 'etc'
15
- rescue LoadError
16
- nil
17
- end
13
+ require 'io/nonblock'
14
+ require 'etc'
18
15
 
19
16
  module WEBrick
20
17
  module Utils
21
18
  ##
22
19
  # Sets IO operations on +io+ to be non-blocking
23
20
  def set_non_blocking(io)
24
- flag = File::NONBLOCK
25
- if defined?(Fcntl::F_GETFL)
26
- flag |= io.fcntl(Fcntl::F_GETFL)
27
- end
28
- io.fcntl(Fcntl::F_SETFL, flag)
21
+ io.nonblock = true if io.respond_to?(:nonblock=)
29
22
  end
30
23
  module_function :set_non_blocking
31
24
 
32
25
  ##
33
26
  # Sets the close on exec flag for +io+
34
27
  def set_close_on_exec(io)
35
- if defined?(Fcntl::FD_CLOEXEC)
36
- io.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC)
37
- end
28
+ io.close_on_exec = true if io.respond_to?(:close_on_exec=)
38
29
  end
39
30
  module_function :set_close_on_exec
40
31
 
41
32
  ##
42
33
  # Changes the process's uid and gid to the ones of +user+
43
34
  def su(user)
44
- if defined?(Etc)
45
- pw = Etc.getpwnam(user)
35
+ if pw = Etc.getpwnam(user)
46
36
  Process::initgroups(user, pw.gid)
47
37
  Process::Sys::setgid(pw.gid)
48
38
  Process::Sys::setuid(pw.uid)
@@ -68,30 +58,17 @@ module WEBrick
68
58
  # Creates TCP server sockets bound to +address+:+port+ and returns them.
69
59
  #
70
60
  # It will create IPV4 and IPV6 sockets on all interfaces.
71
- def create_listeners(address, port, logger=nil)
61
+ def create_listeners(address, port)
72
62
  unless port
73
63
  raise ArgumentError, "must specify port"
74
64
  end
75
- res = Socket::getaddrinfo(address, port,
76
- Socket::AF_UNSPEC, # address family
77
- Socket::SOCK_STREAM, # socket type
78
- 0, # protocol
79
- Socket::AI_PASSIVE) # flag
80
- last_error = nil
81
- sockets = []
82
- res.each{|ai|
83
- begin
84
- logger.debug("TCPServer.new(#{ai[3]}, #{port})") if logger
85
- sock = TCPServer.new(ai[3], port)
86
- port = sock.addr[1] if port == 0
87
- Utils::set_close_on_exec(sock)
88
- sockets << sock
89
- rescue => ex
90
- logger.warn("TCPServer Error: #{ex}") if logger
91
- last_error = ex
92
- end
65
+ sockets = Socket.tcp_server_sockets(address, port)
66
+ sockets = sockets.map {|s|
67
+ s.autoclose = false
68
+ ts = TCPServer.for_fd(s.fileno)
69
+ s.close
70
+ ts
93
71
  }
94
- raise last_error if sockets.empty?
95
72
  return sockets
96
73
  end
97
74
  module_function :create_listeners
@@ -149,7 +126,7 @@ module WEBrick
149
126
 
150
127
  ##
151
128
  # Mutex used to synchronize access across threads
152
- TimeoutMutex = Mutex.new # :nodoc:
129
+ TimeoutMutex = Thread::Mutex.new # :nodoc:
153
130
 
154
131
  ##
155
132
  # Registers a new timeout handler
@@ -157,43 +134,82 @@ module WEBrick
157
134
  # +time+:: Timeout in seconds
158
135
  # +exception+:: Exception to raise when timeout elapsed
159
136
  def TimeoutHandler.register(seconds, exception)
160
- TimeoutMutex.synchronize{
161
- instance.register(Thread.current, Time.now + seconds, exception)
162
- }
137
+ at = Process.clock_gettime(Process::CLOCK_MONOTONIC) + seconds
138
+ instance.register(Thread.current, at, exception)
163
139
  end
164
140
 
165
141
  ##
166
142
  # Cancels the timeout handler +id+
167
143
  def TimeoutHandler.cancel(id)
144
+ instance.cancel(Thread.current, id)
145
+ end
146
+
147
+ def self.terminate
148
+ instance.terminate
149
+ end
150
+
151
+ ##
152
+ # Creates a new TimeoutHandler. You should use ::register and ::cancel
153
+ # instead of creating the timeout handler directly.
154
+ def initialize
168
155
  TimeoutMutex.synchronize{
169
- instance.cancel(Thread.current, id)
156
+ @timeout_info = Hash.new
170
157
  }
158
+ @queue = Thread::Queue.new
159
+ @watcher = nil
171
160
  end
172
161
 
173
- def initialize
174
- @timeout_info = Hash.new
175
- Thread.start{
162
+ # :nodoc:
163
+ private \
164
+ def watch
165
+ to_interrupt = []
176
166
  while true
177
- now = Time.now
178
- @timeout_info.each{|thread, ary|
179
- ary.dup.each{|info|
180
- time, exception = *info
181
- interrupt(thread, info.object_id, exception) if time < now
167
+ now = Process.clock_gettime(Process::CLOCK_MONOTONIC)
168
+ wakeup = nil
169
+ to_interrupt.clear
170
+ TimeoutMutex.synchronize{
171
+ @timeout_info.each {|thread, ary|
172
+ next unless ary
173
+ ary.each{|info|
174
+ time, exception = *info
175
+ if time < now
176
+ to_interrupt.push [thread, info.object_id, exception]
177
+ elsif !wakeup || time < wakeup
178
+ wakeup = time
179
+ end
180
+ }
182
181
  }
183
182
  }
184
- sleep 0.5
183
+ to_interrupt.each {|arg| interrupt(*arg)}
184
+ if !wakeup
185
+ @queue.pop
186
+ elsif (wakeup -= now) > 0
187
+ begin
188
+ (th = Thread.start {@queue.pop}).join(wakeup)
189
+ ensure
190
+ th&.kill&.join
191
+ end
192
+ end
193
+ @queue.clear
185
194
  end
186
- }
187
- end
195
+ end
196
+
197
+ # :nodoc:
198
+ private \
199
+ def watcher
200
+ (w = @watcher)&.alive? and return w # usual case
201
+ TimeoutMutex.synchronize{
202
+ (w = @watcher)&.alive? and next w # pathological check
203
+ @watcher = Thread.start(&method(:watch))
204
+ }
205
+ end
188
206
 
189
207
  ##
190
208
  # Interrupts the timeout handler +id+ and raises +exception+
191
209
  def interrupt(thread, id, exception)
192
- TimeoutMutex.synchronize{
193
- if cancel(thread, id) && thread.alive?
194
- thread.raise(exception, "execution timeout")
195
- end
196
- }
210
+ if cancel(thread, id) && thread.alive?
211
+ thread.raise(exception, "execution timeout")
212
+ end
197
213
  end
198
214
 
199
215
  ##
@@ -202,22 +218,36 @@ module WEBrick
202
218
  # +time+:: Timeout in seconds
203
219
  # +exception+:: Exception to raise when timeout elapsed
204
220
  def register(thread, time, exception)
205
- @timeout_info[thread] ||= Array.new
206
- @timeout_info[thread] << [time, exception]
207
- return @timeout_info[thread].last.object_id
221
+ info = nil
222
+ TimeoutMutex.synchronize{
223
+ (@timeout_info[thread] ||= []) << (info = [time, exception])
224
+ }
225
+ @queue.push nil
226
+ watcher
227
+ return info.object_id
208
228
  end
209
229
 
210
230
  ##
211
231
  # Cancels the timeout handler +id+
212
232
  def cancel(thread, id)
213
- if ary = @timeout_info[thread]
214
- ary.delete_if{|info| info.object_id == id }
215
- if ary.empty?
216
- @timeout_info.delete(thread)
233
+ TimeoutMutex.synchronize{
234
+ if ary = @timeout_info[thread]
235
+ ary.delete_if{|info| info.object_id == id }
236
+ if ary.empty?
237
+ @timeout_info.delete(thread)
238
+ end
239
+ return true
217
240
  end
218
- return true
219
- end
220
- return false
241
+ return false
242
+ }
243
+ end
244
+
245
+ ##
246
+ def terminate
247
+ TimeoutMutex.synchronize{
248
+ @timeout_info.clear
249
+ @watcher&.kill&.join
250
+ }
221
251
  end
222
252
  end
223
253
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: false
1
2
  #--
2
3
  # version.rb -- version and release date
3
4
  #
@@ -9,5 +10,9 @@
9
10
  # $IPR: version.rb,v 1.74 2003/07/22 19:20:43 gotoyuzo Exp $
10
11
 
11
12
  module WEBrick
12
- VERSION = "1.3.1"
13
+
14
+ ##
15
+ # The WEBrick version
16
+
17
+ VERSION = "1.4.0.beta1"
13
18
  end
metadata CHANGED
@@ -1,106 +1,96 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: webrick
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.1
5
- prerelease:
4
+ version: 1.4.0.beta1
6
5
  platform: ruby
7
6
  authors:
8
- - IPR -- Internet Programming with Ruby -- writers
7
+ - TAKAHASHI Masayoshi
8
+ - GOTOU YUUZOU
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-12-28 00:00:00.000000000 Z
13
- dependencies: []
14
- description:
15
- email: nahi@ruby-lang.org
12
+ date: 2017-05-01 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ">="
19
+ - !ruby/object:Gem::Version
20
+ version: '0'
21
+ type: :development
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ version: '0'
28
+ description: WEBrick is an HTTP server toolkit that can be configured as an HTTPS
29
+ server, a proxy server, and a virtual-host server.
30
+ email:
31
+ -
32
+ -
16
33
  executables: []
17
34
  extensions: []
18
35
  extra_rdoc_files: []
19
36
  files:
20
- - lib/webrick/https.rb
21
- - lib/webrick/httpservlet/cgi_runner.rb
22
- - lib/webrick/httpservlet/erbhandler.rb
23
- - lib/webrick/httpservlet/filehandler.rb
24
- - lib/webrick/httpservlet/prochandler.rb
25
- - lib/webrick/httpservlet/abstract.rb
26
- - lib/webrick/httpservlet/cgihandler.rb
27
- - lib/webrick/compat.rb
28
- - lib/webrick/httpresponse.rb
37
+ - lib/webrick.rb
29
38
  - lib/webrick/accesslog.rb
30
- - lib/webrick/httpversion.rb
31
- - lib/webrick/utils.rb
32
- - lib/webrick/version.rb
33
- - lib/webrick/httprequest.rb
34
- - lib/webrick/httpauth.rb
35
- - lib/webrick/server.rb
36
- - lib/webrick/httpproxy.rb
37
- - lib/webrick/ssl.rb
38
39
  - lib/webrick/cgi.rb
39
- - lib/webrick/httpstatus.rb
40
- - lib/webrick/htmlutils.rb
41
- - lib/webrick/httpserver.rb
40
+ - lib/webrick/compat.rb
41
+ - lib/webrick/config.rb
42
42
  - lib/webrick/cookie.rb
43
- - lib/webrick/httputils.rb
43
+ - lib/webrick/htmlutils.rb
44
+ - lib/webrick/httpauth.rb
45
+ - lib/webrick/httpauth/authenticator.rb
44
46
  - lib/webrick/httpauth/basicauth.rb
45
47
  - lib/webrick/httpauth/digestauth.rb
46
- - lib/webrick/httpauth/authenticator.rb
47
48
  - lib/webrick/httpauth/htdigest.rb
48
49
  - lib/webrick/httpauth/htgroup.rb
49
50
  - lib/webrick/httpauth/htpasswd.rb
50
51
  - lib/webrick/httpauth/userdb.rb
51
- - lib/webrick/config.rb
52
+ - lib/webrick/httpproxy.rb
53
+ - lib/webrick/httprequest.rb
54
+ - lib/webrick/httpresponse.rb
55
+ - lib/webrick/https.rb
56
+ - lib/webrick/httpserver.rb
52
57
  - lib/webrick/httpservlet.rb
58
+ - lib/webrick/httpservlet/abstract.rb
59
+ - lib/webrick/httpservlet/cgi_runner.rb
60
+ - lib/webrick/httpservlet/cgihandler.rb
61
+ - lib/webrick/httpservlet/erbhandler.rb
62
+ - lib/webrick/httpservlet/filehandler.rb
63
+ - lib/webrick/httpservlet/prochandler.rb
64
+ - lib/webrick/httpstatus.rb
65
+ - lib/webrick/httputils.rb
66
+ - lib/webrick/httpversion.rb
53
67
  - lib/webrick/log.rb
54
- - lib/webrick.rb
55
- - sample/webrick/demo-urlencoded.cgi
56
- - sample/webrick/demo-multipart.cgi
57
- - sample/webrick/hello.rb
58
- - sample/webrick/hello.cgi
59
- - sample/webrick/httpproxy.rb
60
- - sample/webrick/httpsd.rb
61
- - sample/webrick/httpd.rb
62
- - sample/webrick/demo-app.rb
63
- - sample/webrick/demo-servlet.rb
64
- - test/webrick/webrick_long_filename.cgi
65
- - test/webrick/utils.rb
66
- - test/webrick/test_httpproxy.rb
67
- - test/webrick/test_cookie.rb
68
- - test/webrick/test_server.rb
69
- - test/webrick/test_httpresponse.rb
70
- - test/webrick/test_utils.rb
71
- - test/webrick/test_httpserver.rb
72
- - test/webrick/test_httprequest.rb
73
- - test/webrick/test_httpversion.rb
74
- - test/webrick/webrick.cgi
75
- - test/webrick/test_httpauth.rb
76
- - test/webrick/test_cgi.rb
77
- - test/webrick/test_httputils.rb
78
- - test/webrick/test_filehandler.rb
79
- - test/ruby/envutil.rb
80
- - test/openssl/utils.rb
81
- - README.txt
82
- homepage: http://github.com/nahi/webrick
83
- licenses: []
68
+ - lib/webrick/server.rb
69
+ - lib/webrick/ssl.rb
70
+ - lib/webrick/utils.rb
71
+ - lib/webrick/version.rb
72
+ homepage: https://www.ruby-lang.org
73
+ licenses:
74
+ - BSD-2-Clause
75
+ metadata: {}
84
76
  post_install_message:
85
77
  rdoc_options: []
86
78
  require_paths:
87
79
  - lib
88
80
  required_ruby_version: !ruby/object:Gem::Requirement
89
- none: false
90
81
  requirements:
91
- - - ! '>='
82
+ - - ">="
92
83
  - !ruby/object:Gem::Version
93
- version: '0'
84
+ version: 2.5.0dev
94
85
  required_rubygems_version: !ruby/object:Gem::Requirement
95
- none: false
96
86
  requirements:
97
- - - ! '>='
87
+ - - ">"
98
88
  - !ruby/object:Gem::Version
99
- version: '0'
89
+ version: 1.3.1
100
90
  requirements: []
101
91
  rubyforge_project:
102
- rubygems_version: 1.8.11
92
+ rubygems_version: 2.6.11
103
93
  signing_key:
104
- specification_version: 3
105
- summary: WEBrick is an HTTP server toolkit that can be configured as an HTTPS server,
94
+ specification_version: 4
95
+ summary: HTTP server toolkit
106
96
  test_files: []