class WinRM::HTTP::TransportFactory

Factory for creating a HTTP transport that can be used for WinRM SOAP calls.

Public Instance Methods

create_transport(connection_opts) click to toggle source

Creates a new WinRM HTTP transport using the specified connection options. @param connection_opts [ConnectionOpts|Hash] The connection ConnectionOpts. @return [HttpTransport] A transport instance for making WinRM calls.

# File lib/winrm/http/transport_factory.rb, line 24
def create_transport(connection_opts)
  transport = connection_opts[:transport]
  validate_transport!(transport)
  send "init_#{transport}_transport", connection_opts
end

Private Instance Methods

init_kerberos_transport(opts) click to toggle source
# File lib/winrm/http/transport_factory.rb, line 36
def init_kerberos_transport(opts)
  HTTP::HttpGSSAPI.new(opts[:endpoint], opts[:realm], opts, opts[:service])
end
init_negotiate_transport(opts) click to toggle source
# File lib/winrm/http/transport_factory.rb, line 32
def init_negotiate_transport(opts)
  HTTP::HttpNegotiate.new(opts[:endpoint], opts[:user], opts[:password], opts)
end
init_plaintext_transport(opts) click to toggle source
# File lib/winrm/http/transport_factory.rb, line 40
def init_plaintext_transport(opts)
  HTTP::HttpPlaintext.new(opts[:endpoint], opts[:user], opts[:password], opts)
end
init_ssl_transport(opts) click to toggle source
# File lib/winrm/http/transport_factory.rb, line 44
def init_ssl_transport(opts)
  if opts[:basic_auth_only]
    HTTP::BasicAuthSSL.new(opts[:endpoint], opts[:user], opts[:password], opts)
  elsif opts[:client_cert]
    HTTP::ClientCertAuthSSL.new(opts[:endpoint], opts[:client_cert],
                                opts[:client_key], opts[:key_pass], opts)
  else
    HTTP::HttpNegotiate.new(opts[:endpoint], opts[:user], opts[:password], opts)
  end
end
validate_transport!(transport) click to toggle source
# File lib/winrm/http/transport_factory.rb, line 55
def validate_transport!(transport)
  valid = private_methods
          .select { |m| m.to_s.start_with?('init_') && m.to_s.end_with?('_transport') }
          .map { |tm| tm.to_s.split('_')[1] }

  raise WinRM::InvalidTransportError.new(transport, valid) unless valid.include?(transport.to_s)
end