webrick 1.4.4 → 1.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a3c66cf23e2b33e288598d3f59d9e56ca97e465835a68829fb2618938563ad87
4
- data.tar.gz: 99c190d49011abfab1f528cf59a6fb4135c6877c1a49a56b69798143ab9d7849
3
+ metadata.gz: 800e0427bf3a5f03799b0615f21888ef4827fde35a89663bcf90c055bf4e2221
4
+ data.tar.gz: ea2b6bdee1ae775c2946e6b16e73a3dbcd18ab27d910cc11eeb72f6eafdc3242
5
5
  SHA512:
6
- metadata.gz: acca7540bda5156d247c6e0a94ed686366ce65fb0b83115667653311d28c2e105729f7f729253b2c382c5f9098c324443b3bdf077b89fffb5f0c8b96342c16dd
7
- data.tar.gz: 20a40ff73c5372bc0453a871fe15ffe4f8ec3e53862eccabfb2849b9b5d275bc22ebba48fe4cf7cac3fcfeff30bb5d1619f6f77efcd53f189803f2ec237adf8d
6
+ metadata.gz: 5d5511564c5ea1ff1eaf936af515acdaff9b157b767093b13e873a38596470bc42cab4a6be97770856e87d91b069ee05716e73dfea88d165a435737e332fb0f4
7
+ data.tar.gz: a2eaabfc8c4e16303a59cf45de503aaf71577824a8fb92dc2ad60cc4f5fc2478e707635062ed9abc138e260fbc7bea0cc999f8033e5a0f59deeb0e697ec47c1a
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (C) 1993-2013 Yukihiro Matsumoto. All rights reserved.
2
+
3
+ Redistribution and use in source and binary forms, with or without
4
+ modification, are permitted provided that the following conditions
5
+ are met:
6
+ 1. Redistributions of source code must retain the above copyright
7
+ notice, this list of conditions and the following disclaimer.
8
+ 2. Redistributions in binary form must reproduce the above copyright
9
+ notice, this list of conditions and the following disclaimer in the
10
+ documentation and/or other materials provided with the distribution.
11
+
12
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
13
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
14
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
15
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
16
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
17
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
18
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
19
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
20
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
21
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
22
+ SUCH DAMAGE.
@@ -0,0 +1,61 @@
1
+ # Webrick
2
+
3
+ WEBrick is an HTTP server toolkit that can be configured as an HTTPS server, a proxy server, and a virtual-host server.
4
+
5
+ WEBrick features complete logging of both server operations and HTTP access.
6
+
7
+ WEBrick supports both basic and digest authentication in addition to algorithms not in RFC 2617.
8
+
9
+ A WEBrick server can be composed of multiple WEBrick servers or servlets to provide differing behavior on a per-host or per-path basis. WEBrick includes servlets for handling CGI scripts, ERB pages, Ruby blocks and directory listings.
10
+
11
+ WEBrick also includes tools for daemonizing a process and starting a process at a higher privilege level and dropping permissions.
12
+
13
+ ## Installation
14
+
15
+ Add this line to your application's Gemfile:
16
+
17
+ ```ruby
18
+ gem 'webrick'
19
+ ```
20
+
21
+ And then execute:
22
+
23
+ $ bundle
24
+
25
+ Or install it yourself as:
26
+
27
+ $ gem install webrick
28
+
29
+ ## Usage
30
+
31
+ To create a new WEBrick::HTTPServer that will listen to connections on port 8000 and serve documents from the current user's public_html folder:
32
+
33
+ ```ruby
34
+ require 'webrick'
35
+
36
+ root = File.expand_path '~/public_html'
37
+ server = WEBrick::HTTPServer.new :Port => 8000, :DocumentRoot => root
38
+ ```
39
+
40
+ To run the server you will need to provide a suitable shutdown hook as
41
+ starting the server blocks the current thread:
42
+
43
+ ```ruby
44
+ trap 'INT' do server.shutdown end
45
+
46
+ server.start
47
+ ```
48
+
49
+ ## Development
50
+
51
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
52
+
53
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
54
+
55
+ ## Contributing
56
+
57
+ Bug reports and Patch are welcome on https://bugs.ruby-lang.org/.
58
+
59
+ ## License
60
+
61
+ The gem is available as open source under the terms of the [2-Clause BSD License](https://opensource.org/licenses/BSD-2-Clause).
@@ -0,0 +1,10 @@
1
+ require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
+
4
+ Rake::TestTask.new(:test) do |t|
5
+ t.libs << "test" << "test/lib"
6
+ t.libs << "lib"
7
+ t.test_files = FileList['test/**/test_*.rb']
8
+ end
9
+
10
+ task :default => :test
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "webrick"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start(__FILE__)
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -15,6 +15,11 @@
15
15
  # WEBrick also includes tools for daemonizing a process and starting a process
16
16
  # at a higher privilege level and dropping permissions.
17
17
  #
18
+ # == Security
19
+ #
20
+ # *Warning:* WEBrick is not recommended for production. It only implements
21
+ # basic security checks.
22
+ #
18
23
  # == Starting an HTTP server
19
24
  #
20
25
  # To create a new WEBrick::HTTPServer that will listen to connections on port
@@ -139,9 +144,9 @@
139
144
  # servers. See WEBrick::HTTPAuth, WEBrick::HTTPAuth::BasicAuth and
140
145
  # WEBrick::HTTPAuth::DigestAuth.
141
146
  #
142
- # == WEBrick as a Production Web Server
147
+ # == WEBrick as a daemonized Web Server
143
148
  #
144
- # WEBrick can be run as a production server for small loads.
149
+ # WEBrick can be run as a daemonized server for small loads.
145
150
  #
146
151
  # === Daemonizing
147
152
  #
@@ -212,7 +217,7 @@ require 'webrick/version.rb'
212
217
  require 'webrick/config.rb'
213
218
  require 'webrick/log.rb'
214
219
  require 'webrick/server.rb'
215
- require 'webrick/utils.rb'
220
+ require_relative 'webrick/utils.rb'
216
221
  require 'webrick/accesslog'
217
222
 
218
223
  require 'webrick/htmlutils.rb'
@@ -149,11 +149,9 @@ module WEBrick
149
149
  # Escapes control characters in +data+
150
150
 
151
151
  def escape(data)
152
- if data.tainted?
153
- data.gsub(/[[:cntrl:]\\]+/) {$&.dump[1...-1]}.untaint
154
- else
155
- data
156
- end
152
+ data = data.gsub(/[[:cntrl:]\\]+/) {$&.dump[1...-1]}
153
+ data.untaint if RUBY_VERSION < '2.7'
154
+ data
157
155
  end
158
156
  end
159
157
  end
@@ -85,7 +85,7 @@ module WEBrick
85
85
  def log(meth, fmt, *args)
86
86
  msg = format("%s %s: ", @auth_scheme, @realm)
87
87
  msg << fmt % args
88
- @logger.send(meth, msg)
88
+ @logger.__send__(meth, msg)
89
89
  end
90
90
 
91
91
  def error(fmt, *args)
@@ -115,7 +115,7 @@ module WEBrick
115
115
  proxy_auth(req, res)
116
116
 
117
117
  begin
118
- self.send("do_#{req.request_method}", req, res)
118
+ public_send("do_#{req.request_method}", req, res)
119
119
  rescue NoMethodError
120
120
  raise HTTPStatus::MethodNotAllowed,
121
121
  "unsupported method `#{req.request_method}'."
@@ -295,6 +295,10 @@ module WEBrick
295
295
  return FakeProxyURI
296
296
  end
297
297
 
298
+ def create_net_http(uri, upstream)
299
+ Net::HTTP.new(uri.host, uri.port, upstream.host, upstream.port)
300
+ end
301
+
298
302
  def perform_proxy_request(req, res, req_class, body_stream = nil)
299
303
  uri = req.request_uri
300
304
  path = uri.path.dup
@@ -303,7 +307,7 @@ module WEBrick
303
307
  upstream = setup_upstream_proxy_authentication(req, res, header)
304
308
 
305
309
  body_tmp = []
306
- http = Net::HTTP.new(uri.host, uri.port, upstream.host, upstream.port)
310
+ http = create_net_http(uri, upstream)
307
311
  req_fib = Fiber.new do
308
312
  http.start do
309
313
  if @config[:ProxyTimeout]
@@ -9,6 +9,7 @@
9
9
  #
10
10
  # $IPR: httprequest.rb,v 1.64 2003/07/13 17:18:22 gotoyuzo Exp $
11
11
 
12
+ require 'fiber'
12
13
  require 'uri'
13
14
  require_relative 'httpversion'
14
15
  require_relative 'httpstatus'
@@ -273,13 +274,17 @@ module WEBrick
273
274
  self
274
275
  end
275
276
 
276
- # for IO.copy_stream. Note: we may return a larger string than +size+
277
- # here; but IO.copy_stream does not care.
277
+ # for IO.copy_stream.
278
278
  def readpartial(size, buf = ''.b) # :nodoc
279
279
  res = @body_tmp.shift or raise EOFError, 'end of file reached'
280
+ if res.length > size
281
+ @body_tmp.unshift(res[size..-1])
282
+ res = res[0..size - 1]
283
+ end
280
284
  buf.replace(res)
281
285
  res.clear
282
- @body_rd.resume # get more chunks
286
+ # get more chunks - check alive? because we can take a partial chunk
287
+ @body_rd.resume if @body_rd.alive?
283
288
  buf
284
289
  end
285
290
 
@@ -517,7 +522,7 @@ module WEBrick
517
522
  if @remaining_size > 0 && @socket.eof?
518
523
  raise HTTPStatus::BadRequest, "invalid body size."
519
524
  end
520
- elsif BODY_CONTAINABLE_METHODS.member?(@request_method)
525
+ elsif BODY_CONTAINABLE_METHODS.member?(@request_method) && !@socket.eof
521
526
  raise HTTPStatus::LengthRequired
522
527
  end
523
528
  return @body
@@ -611,7 +616,12 @@ module WEBrick
611
616
  end
612
617
  if host_port = self["x-forwarded-host"]
613
618
  host_port = host_port.split(",", 2).first
614
- @forwarded_host, tmp = host_port.split(":", 2)
619
+ if host_port =~ /\A(\[[0-9a-fA-F:]+\])(?::(\d+))?\z/
620
+ @forwarded_host = $1
621
+ tmp = $2
622
+ else
623
+ @forwarded_host, tmp = host_port.split(":", 2)
624
+ end
615
625
  @forwarded_port = (tmp || (@forwarded_proto == "https" ? 443 : 80)).to_i
616
626
  end
617
627
  if addrs = self["x-forwarded-for"]
@@ -51,8 +51,21 @@ module WEBrick
51
51
  attr_accessor :reason_phrase
52
52
 
53
53
  ##
54
- # Body may be a String or IO-like object that responds to #read and
55
- # #readpartial.
54
+ # Body may be:
55
+ # * a String;
56
+ # * an IO-like object that responds to +#read+ and +#readpartial+;
57
+ # * a Proc-like object that responds to +#call+.
58
+ #
59
+ # In the latter case, either #chunked= should be set to +true+,
60
+ # or <code>header['content-length']</code> explicitly provided.
61
+ # Example:
62
+ #
63
+ # server.mount_proc '/' do |req, res|
64
+ # res.chunked = true
65
+ # # or
66
+ # # res.header['content-length'] = 10
67
+ # res.body = proc { |out| out.write(Time.now.to_s) }
68
+ # end
56
69
 
57
70
  attr_accessor :body
58
71
 
@@ -113,13 +126,14 @@ module WEBrick
113
126
  @chunked = false
114
127
  @filename = nil
115
128
  @sent_size = 0
129
+ @bodytempfile = nil
116
130
  end
117
131
 
118
132
  ##
119
133
  # The response's HTTP status line
120
134
 
121
135
  def status_line
122
- "HTTP/#@http_version #@status #@reason_phrase #{CRLF}"
136
+ "HTTP/#@http_version #@status #@reason_phrase".rstrip << CRLF
123
137
  end
124
138
 
125
139
  ##
@@ -141,6 +155,7 @@ module WEBrick
141
155
  # Sets the response header +field+ to +value+
142
156
 
143
157
  def []=(field, value)
158
+ @chunked = value.to_s.downcase == 'chunked' if field.downcase == 'transfer-encoding'
144
159
  @header[field.downcase] = value.to_s
145
160
  end
146
161
 
@@ -253,7 +268,10 @@ module WEBrick
253
268
  elsif %r{^multipart/byteranges} =~ @header['content-type']
254
269
  @header.delete('content-length')
255
270
  elsif @header['content-length'].nil?
256
- unless @body.is_a?(IO)
271
+ if @body.respond_to? :readpartial
272
+ elsif @body.respond_to? :call
273
+ make_body_tempfile
274
+ else
257
275
  @header['content-length'] = (@body ? @body.bytesize : 0).to_s
258
276
  end
259
277
  end
@@ -282,6 +300,33 @@ module WEBrick
282
300
  end
283
301
  end
284
302
 
303
+ def make_body_tempfile # :nodoc:
304
+ return if @bodytempfile
305
+ bodytempfile = Tempfile.create("webrick")
306
+ if @body.nil?
307
+ # nothing
308
+ elsif @body.respond_to? :readpartial
309
+ IO.copy_stream(@body, bodytempfile)
310
+ @body.close
311
+ elsif @body.respond_to? :call
312
+ @body.call(bodytempfile)
313
+ else
314
+ bodytempfile.write @body
315
+ end
316
+ bodytempfile.rewind
317
+ @body = @bodytempfile = bodytempfile
318
+ @header['content-length'] = bodytempfile.stat.size.to_s
319
+ end
320
+
321
+ def remove_body_tempfile # :nodoc:
322
+ if @bodytempfile
323
+ @bodytempfile.close
324
+ File.unlink @bodytempfile.path
325
+ @bodytempfile = nil
326
+ end
327
+ end
328
+
329
+
285
330
  ##
286
331
  # Sends the headers on +socket+
287
332
 
@@ -318,12 +363,6 @@ module WEBrick
318
363
  end
319
364
  end
320
365
 
321
- def to_s # :nodoc:
322
- ret = ""
323
- send_response(ret)
324
- ret
325
- end
326
-
327
366
  ##
328
367
  # Redirects to +url+ with a WEBrick::HTTPStatus::Redirect +status+.
329
368
  #
@@ -446,6 +485,7 @@ module WEBrick
446
485
  ensure
447
486
  @body.close
448
487
  end
488
+ remove_body_tempfile
449
489
  end
450
490
 
451
491
  def send_body_string(socket)
@@ -478,7 +518,12 @@ module WEBrick
478
518
  socket.write("0#{CRLF}#{CRLF}")
479
519
  else
480
520
  size = @header['content-length'].to_i
481
- @body.call(socket)
521
+ if @bodytempfile
522
+ @bodytempfile.rewind
523
+ IO.copy_stream(@bodytempfile, socket)
524
+ else
525
+ @body.call(socket)
526
+ end
482
527
  @sent_size = size
483
528
  end
484
529
  end
@@ -28,6 +28,7 @@ module WEBrick
28
28
  class CGIHandler < AbstractServlet
29
29
  Ruby = RbConfig.ruby # :nodoc:
30
30
  CGIRunner = "\"#{Ruby}\" \"#{WEBrick::Config::LIBDIR}/httpservlet/cgi_runner.rb\"" # :nodoc:
31
+ CGIRunnerArray = [Ruby, "#{WEBrick::Config::LIBDIR}/httpservlet/cgi_runner.rb".freeze].freeze # :nodoc:
31
32
 
32
33
  ##
33
34
  # Creates a new CGI script servlet for the script at +name+
@@ -36,7 +37,12 @@ module WEBrick
36
37
  super(server, name)
37
38
  @script_filename = name
38
39
  @tempdir = server[:TempDir]
39
- @cgicmd = "#{CGIRunner} #{server[:CGIInterpreter]}"
40
+ interpreter = server[:CGIInterpreter]
41
+ if interpreter.is_a?(Array)
42
+ @cgicmd = CGIRunnerArray + interpreter
43
+ else
44
+ @cgicmd = "#{CGIRunner} #{interpreter}"
45
+ end
40
46
  end
41
47
 
42
48
  # :stopdoc:
@@ -212,9 +212,18 @@ module WEBrick
212
212
 
213
213
  # :stopdoc:
214
214
 
215
+ def set_filesystem_encoding(str)
216
+ enc = Encoding.find('filesystem')
217
+ if enc == Encoding::US_ASCII
218
+ str.b
219
+ else
220
+ str.dup.force_encoding(enc)
221
+ end
222
+ end
223
+
215
224
  def service(req, res)
216
225
  # if this class is mounted on "/" and /~username is requested.
217
- # we're going to override path informations before invoking service.
226
+ # we're going to override path information before invoking service.
218
227
  if defined?(Etc) && @options[:UserDir] && req.script_name.empty?
219
228
  if %r|^(/~([^/]+))| =~ req.path_info
220
229
  script_name, user = $1, $2
@@ -298,7 +307,7 @@ module WEBrick
298
307
  end
299
308
 
300
309
  def exec_handler(req, res)
301
- raise HTTPStatus::NotFound, "`#{req.path}' not found" unless @root
310
+ raise HTTPStatus::NotFound, "`#{req.path}' not found." unless @root
302
311
  if set_filename(req, res)
303
312
  handler = get_handler(req, res)
304
313
  call_callback(:HandlerCallback, req, res)
@@ -324,11 +333,12 @@ module WEBrick
324
333
  end
325
334
 
326
335
  def set_filename(req, res)
327
- res.filename = @root.dup
336
+ res.filename = @root
328
337
  path_info = req.path_info.scan(%r|/[^/]*|)
329
338
 
330
339
  path_info.unshift("") # dummy for checking @root dir
331
340
  while base = path_info.first
341
+ base = set_filesystem_encoding(base)
332
342
  break if base == "/"
333
343
  break unless File.directory?(File.expand_path(res.filename + base))
334
344
  shift_path_info(req, res, path_info)
@@ -336,6 +346,7 @@ module WEBrick
336
346
  end
337
347
 
338
348
  if base = path_info.first
349
+ base = set_filesystem_encoding(base)
339
350
  if base == "/"
340
351
  if file = search_index_file(req, res)
341
352
  shift_path_info(req, res, path_info, file)
@@ -364,7 +375,7 @@ module WEBrick
364
375
 
365
376
  def shift_path_info(req, res, path_info, base=nil)
366
377
  tmp = path_info.shift
367
- base = base || tmp
378
+ base = base || set_filesystem_encoding(tmp)
368
379
  req.path_info = path_info.join
369
380
  req.script_name << base
370
381
  res.filename = File.expand_path(res.filename + base)
@@ -72,6 +72,7 @@ module WEBrick
72
72
  "json" => "application/json",
73
73
  "lha" => "application/octet-stream",
74
74
  "lzh" => "application/octet-stream",
75
+ "mjs" => "application/javascript",
75
76
  "mov" => "video/quicktime",
76
77
  "mpe" => "video/mpeg",
77
78
  "mpeg" => "video/mpeg",
@@ -95,6 +96,7 @@ module WEBrick
95
96
  "tif" => "image/tiff",
96
97
  "tiff" => "image/tiff",
97
98
  "txt" => "text/plain",
99
+ "wasm" => "application/wasm",
98
100
  "xbm" => "image/x-xbitmap",
99
101
  "xhtml" => "text/html",
100
102
  "xls" => "application/vnd.ms-excel",
@@ -161,10 +163,7 @@ module WEBrick
161
163
  end
162
164
  }
163
165
  header.each{|key, values|
164
- values.each{|value|
165
- value.strip!
166
- value.gsub!(/\s+/, " ")
167
- }
166
+ values.each(&:strip!)
168
167
  }
169
168
  header
170
169
  end
@@ -102,6 +102,9 @@ module WEBrick
102
102
  @listeners = []
103
103
  @shutdown_pipe = nil
104
104
  unless @config[:DoNotListen]
105
+ raise ArgumentError, "Port must an integer" unless @config[:Port].to_s == @config[:Port].to_i.to_s
106
+
107
+ @config[:Port] = @config[:Port].to_i
105
108
  if @config[:Listen]
106
109
  warn(":Listen option is deprecated; use GenericServer#listen", uplevel: 1)
107
110
  end
@@ -122,7 +122,7 @@ module WEBrick
122
122
  ef.issuer_certificate = cert
123
123
  cert.extensions = [
124
124
  ef.create_extension("basicConstraints","CA:FALSE"),
125
- ef.create_extension("keyUsage", "keyEncipherment"),
125
+ ef.create_extension("keyUsage", "keyEncipherment, digitalSignature, keyAgreement, dataEncipherment"),
126
126
  ef.create_extension("subjectKeyIdentifier", "hash"),
127
127
  ef.create_extension("extendedKeyUsage", "serverAuth"),
128
128
  ef.create_extension("nsComment", comment),
@@ -130,7 +130,7 @@ module WEBrick
130
130
  aki = ef.create_extension("authorityKeyIdentifier",
131
131
  "keyid:always,issuer:always")
132
132
  cert.add_extension(aki)
133
- cert.sign(rsa, OpenSSL::Digest::SHA256.new)
133
+ cert.sign(rsa, "SHA256")
134
134
 
135
135
  return [ cert, rsa ]
136
136
  end
@@ -45,12 +45,7 @@ module WEBrick
45
45
  ##
46
46
  # The server hostname
47
47
  def getservername
48
- host = Socket::gethostname
49
- begin
50
- Socket::gethostbyname(host)[0]
51
- rescue
52
- host
53
- end
48
+ Socket::gethostname
54
49
  end
55
50
  module_function :getservername
56
51
 
@@ -14,5 +14,5 @@ module WEBrick
14
14
  ##
15
15
  # The WEBrick version
16
16
 
17
- VERSION = "1.4.4"
17
+ VERSION = "1.7.0"
18
18
  end
@@ -0,0 +1,74 @@
1
+ # frozen_string_literal: true
2
+ begin
3
+ require_relative 'lib/webrick/version'
4
+ rescue LoadError
5
+ # for Ruby core repository
6
+ require_relative 'version'
7
+ end
8
+
9
+ Gem::Specification.new do |s|
10
+ s.name = "webrick"
11
+ s.version = WEBrick::VERSION
12
+ s.summary = "HTTP server toolkit"
13
+ s.description = "WEBrick is an HTTP server toolkit that can be configured as an HTTPS server, a proxy server, and a virtual-host server."
14
+
15
+ s.require_path = %w{lib}
16
+ s.files = [
17
+ "Gemfile",
18
+ "LICENSE.txt",
19
+ "README.md",
20
+ "Rakefile",
21
+ "bin/console",
22
+ "bin/setup",
23
+ "lib/webrick.rb",
24
+ "lib/webrick/accesslog.rb",
25
+ "lib/webrick/cgi.rb",
26
+ "lib/webrick/compat.rb",
27
+ "lib/webrick/config.rb",
28
+ "lib/webrick/cookie.rb",
29
+ "lib/webrick/htmlutils.rb",
30
+ "lib/webrick/httpauth.rb",
31
+ "lib/webrick/httpauth/authenticator.rb",
32
+ "lib/webrick/httpauth/basicauth.rb",
33
+ "lib/webrick/httpauth/digestauth.rb",
34
+ "lib/webrick/httpauth/htdigest.rb",
35
+ "lib/webrick/httpauth/htgroup.rb",
36
+ "lib/webrick/httpauth/htpasswd.rb",
37
+ "lib/webrick/httpauth/userdb.rb",
38
+ "lib/webrick/httpproxy.rb",
39
+ "lib/webrick/httprequest.rb",
40
+ "lib/webrick/httpresponse.rb",
41
+ "lib/webrick/https.rb",
42
+ "lib/webrick/httpserver.rb",
43
+ "lib/webrick/httpservlet.rb",
44
+ "lib/webrick/httpservlet/abstract.rb",
45
+ "lib/webrick/httpservlet/cgi_runner.rb",
46
+ "lib/webrick/httpservlet/cgihandler.rb",
47
+ "lib/webrick/httpservlet/erbhandler.rb",
48
+ "lib/webrick/httpservlet/filehandler.rb",
49
+ "lib/webrick/httpservlet/prochandler.rb",
50
+ "lib/webrick/httpstatus.rb",
51
+ "lib/webrick/httputils.rb",
52
+ "lib/webrick/httpversion.rb",
53
+ "lib/webrick/log.rb",
54
+ "lib/webrick/server.rb",
55
+ "lib/webrick/ssl.rb",
56
+ "lib/webrick/utils.rb",
57
+ "lib/webrick/version.rb",
58
+ "webrick.gemspec",
59
+ ]
60
+ s.required_ruby_version = ">= 2.3.0"
61
+
62
+ s.authors = ["TAKAHASHI Masayoshi", "GOTOU YUUZOU", "Eric Wong"]
63
+ s.email = [nil, nil, 'normal@ruby-lang.org']
64
+ s.homepage = "https://github.com/ruby/webrick"
65
+ s.licenses = ["Ruby", "BSD-2-Clause"]
66
+
67
+ if s.respond_to?(:metadata=)
68
+ s.metadata = {
69
+ "bug_tracker_uri" => "https://github.com/ruby/webrick/issues",
70
+ }
71
+ end
72
+
73
+ s.add_development_dependency "rake"
74
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: webrick
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.4
4
+ version: 1.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - TAKAHASHI Masayoshi
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2020-09-29 00:00:00.000000000 Z
13
+ date: 2020-12-11 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rake
@@ -36,6 +36,12 @@ executables: []
36
36
  extensions: []
37
37
  extra_rdoc_files: []
38
38
  files:
39
+ - Gemfile
40
+ - LICENSE.txt
41
+ - README.md
42
+ - Rakefile
43
+ - bin/console
44
+ - bin/setup
39
45
  - lib/webrick.rb
40
46
  - lib/webrick/accesslog.rb
41
47
  - lib/webrick/cgi.rb
@@ -71,13 +77,13 @@ files:
71
77
  - lib/webrick/ssl.rb
72
78
  - lib/webrick/utils.rb
73
79
  - lib/webrick/version.rb
74
- homepage: https://www.ruby-lang.org
80
+ - webrick.gemspec
81
+ homepage: https://github.com/ruby/webrick
75
82
  licenses:
83
+ - Ruby
76
84
  - BSD-2-Clause
77
85
  metadata:
78
- bug_tracker_uri: https://bugs.ruby-lang.org/projects/ruby-trunk/issues
79
- homepage_uri: https://www.ruby-lang.org
80
- source_code_uri: https://svn.ruby-lang.org/repos/ruby
86
+ bug_tracker_uri: https://github.com/ruby/webrick/issues
81
87
  post_install_message:
82
88
  rdoc_options: []
83
89
  require_paths:
@@ -93,7 +99,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
93
99
  - !ruby/object:Gem::Version
94
100
  version: '0'
95
101
  requirements: []
96
- rubygems_version: 3.2.0.rc.1
102
+ rubygems_version: 3.2.0
97
103
  signing_key:
98
104
  specification_version: 4
99
105
  summary: HTTP server toolkit