Sha256: 50f2a88f1fc237ffae458c3e63ba403053ae4a3b6c4c246f80258b99bc4073a4
Contents?: true
Size: 1.84 KB
Versions: 1
Compression:
Stored size: 1.84 KB
Contents
require 'openssl' module RSolr module ClientCert class Error < Exception; end class Connection attr_reader :ssl_client_cert, :ssl_client_key def initialize opts = {} @ssl_client_cert = extract_client_cert(opts) @ssl_client_key = extract_client_key(opts) end def execute client, request_context resource = RestClient::Resource.new( request_context[:uri].to_s, :ssl_client_cert => ssl_client_cert, :ssl_client_key => ssl_client_key ) result = {} resource.send(request_context[:method]) { |response, request, result, &block| result = { :status => response.net_http_res.code.to_i, :headers => response.net_http_res.to_hash, :body => response.net_http_res.body } } result end protected def extract_key_class(key_text) if key_text =~ /BEGIN (.+) PRIVATE KEY/ OpenSSL::PKey.const_get($1.to_sym) else raise Error, "Cannot determine key type" end end def extract_client_key(opts) if opts[:ssl_client_key] opts[:ssl_client_key] elsif opts[:ssl_key_file] key_text = File.read(opts[:ssl_key_file]) key_class = extract_key_class(key_text) key_class.new(key_text, opts[:ssl_key_pass].to_s) else raise Error, "No :ssl_client_key or :ssl_key_file provided" end end def extract_client_cert(opts) if opts[:ssl_client_cert] opts[:ssl_client_cert] elsif opts[:ssl_cert_file] OpenSSL::X509::Certificate.new(File.read(opts[:ssl_cert_file])) else raise Error, "No :ssl_client_key or :ssl_key_file provided" end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
rsolr-client-cert-0.5.0 | lib/rsolr/client_cert/connection.rb |