File: ssl_resolver.rb

package info (click to toggle)
libwww-mechanize-ruby 1.0.0-1
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 956 kB
  • ctags: 883
  • sloc: ruby: 6,621; makefile: 4
file content (40 lines) | stat: -rw-r--r-- 1,195 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
class Mechanize
  class Chain
    class SSLResolver
      include Mechanize::Handler

      def initialize(ca_file, verify_callback, cert, key, pass)
        @ca_file = ca_file
        @verify_callback = verify_callback
        @cert = cert
        @key = key
        @pass = pass
      end

      def handle(ctx, params)
        uri       = params[:uri]
        http_obj  = params[:connection]

        ssl = nil
        if http_obj.instance_variable_defined?(:@ssl_context)
          ssl = http_obj.instance_variable_get(:@ssl_context)
        end

        if uri.scheme == 'https' && ! http_obj.started? && (ssl.nil? || ! ssl.frozen?)
          http_obj.use_ssl = true
          http_obj.verify_mode = OpenSSL::SSL::VERIFY_NONE
          if @ca_file
            http_obj.ca_file = @ca_file
            http_obj.verify_mode = OpenSSL::SSL::VERIFY_PEER
            http_obj.verify_callback = @verify_callback if @verify_callback
          end
          if @cert && @key
            http_obj.cert = OpenSSL::X509::Certificate.new(::File.read(@cert))
            http_obj.key  = OpenSSL::PKey::RSA.new(::File.read(@key), @pass)
          end
        end
        super
      end
    end
  end
end