Method: Aspera::WebServerSimple#initialize

Defined in:
lib/aspera/web_server_simple.rb

#initialize(uri, certificate: nil) ⇒ WebServerSimple

Returns a new instance of WebServerSimple.

Parameters:



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/aspera/web_server_simple.rb', line 41

def initialize(uri, certificate: nil)
  @url = uri
  # see https://www.rubydoc.info/stdlib/webrick/WEBrick/Config
  webrick_options = {
    BindAddress: uri.host,
    Port:        uri.port,
    Logger:      Log.log,
    AccessLog:   [[self, WEBrick::AccessLog::COMMON_LOG_FORMAT]] # replace default access log to call local method "<<" below
  }
  case uri.scheme
  when 'http'
    Log.log.debug('HTTP mode')
  when 'https'
    webrick_options[:SSLEnable] = true
    if certificate.nil?
      webrick_options[:SSLCertName] = [['CN', WEBrick::Utils.getservername]]
    else
      Aspera.assert_type(certificate, Hash)
      certificate = certificate.symbolize_keys
      raise "unexpected key in certificate config: only: #{CERT_PARAMETERS.join(', ')}" if certificate.keys.any?{|key|!CERT_PARAMETERS.include?(key)}
      webrick_options[:SSLPrivateKey] = if certificate.key?(:key)
        OpenSSL::PKey::RSA.new(File.read(certificate[:key]))
      else
        OpenSSL::PKey::RSA.new(4096)
      end
      if certificate.key?(:cert)
        webrick_options[:SSLCertificate] = OpenSSL::X509::Certificate.new(File.read(certificate[:cert]))
      else
        webrick_options[:SSLCertificate] = OpenSSL::X509::Certificate.new
        self.class.fill_self_signed_cert(webrick_options[:SSLCertificate], webrick_options[:SSLPrivateKey])
      end
      if certificate.key?(:chain)
        webrick_options[:SSLExtraChainCert] = [OpenSSL::X509::Certificate.new(File.read(certificate[:chain]))]
      end
    end
  end
  # call constructor of parent class, but capture STDERR
  # self signed certificate generates characters on STDERR, see create_self_signed_cert in webrick/ssl.rb
  Log.capture_stderr { super(webrick_options) }
end