Class: Viewpoint::EWS::Connection

Inherits:
Object
  • Object
show all
Includes:
Viewpoint::EWS, ConnectionHelper
Defined in:
lib/ews/connection.rb

Constant Summary

Constants included from Viewpoint::EWS

ConnectingSID

Instance Attribute Summary collapse

Attributes included from Viewpoint::EWS

#logger

Instance Method Summary collapse

Methods included from Viewpoint::EWS

#remove_impersonation, root_logger, #set_impersonation

Methods included from ConnectionHelper

#init_logging!

Constructor Details

#initialize(endpoint, opts = {}) ⇒ Connection

Returns a new instance of Connection.

Parameters:

  • endpoint (String)

    the URL of the web service. @example https://<site>/ews/Exchange.asmx

  • opts (Hash) (defaults to: {})

    Misc config options (mostly for developement)

Options Hash (opts):

  • :ssl_verify_mode (Fixnum)
  • :receive_timeout (Fixnum)

    override the default receive timeout seconds

  • :trust_ca (Array)

    an array of hashed dir paths or a file



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/ews/connection.rb', line 32

def initialize(endpoint, opts = {})
  @log = Logging.logger[self.class.name.to_s.to_sym]
  @httpcli = HTTPClient.new
  if opts[:trust_ca]
    @httpcli.ssl_config.clear_cert_store
    opts[:trust_ca].each do |ca|
      @httpcli.ssl_config.add_trust_ca ca
    end
  end
  @httpcli.ssl_config.verify_mode = opts[:ssl_verify_mode] if opts[:ssl_verify_mode]
  @httpcli.ssl_config.ssl_version = opts[:ssl_version] if opts[:ssl_version]
  # Up the keep-alive so we don't have to do the NTLM dance as often.
  @httpcli.keep_alive_timeout = 60
  @httpcli.receive_timeout = opts[:receive_timeout] if opts[:receive_timeout]
  @endpoint = endpoint
end

Instance Attribute Details

#endpointObject (readonly)

Returns the value of attribute endpoint.



24
25
26
# File 'lib/ews/connection.rb', line 24

def endpoint
  @endpoint
end

Instance Method Details

#authenticateBoolean

Authenticate to the web service. You don’t have to do this because authentication will happen on the first request if you don’t do it here.

Returns:

  • (Boolean)

    true if authentication is successful, false otherwise



56
57
58
# File 'lib/ews/connection.rb', line 56

def authenticate
  self.get && true
end

#dispatch(ews, soapmsg, opts) ⇒ Object

Every Connection class must have the dispatch method. It is what sends the SOAP request to the server and calls the parser method on the EWS instance.

This was originally in the ExchangeWebService class but it was added here to make the processing chain easier to modify. For example, it allows the reactor pattern to handle the request with a callback.

Parameters:



70
71
72
73
74
75
76
77
78
79
# File 'lib/ews/connection.rb', line 70

def dispatch(ews, soapmsg, opts)
  respmsg = post(soapmsg)
  @log.debug <<-EOF.gsub(/^ {6}/, '')
    Received SOAP Response:
    ----------------
    #{Nokogiri::XML(respmsg).to_xml}
    ----------------
  EOF
  opts[:raw_response] ? respmsg : ews.parse_soap_response(respmsg, opts)
end

#getString

Send a GET to the web service

Returns:

  • (String)

    If the request is successful (200) it returns the body of the response.



84
85
86
# File 'lib/ews/connection.rb', line 84

def get
  check_response( @httpcli.get(@endpoint) )
end

#post(xmldoc) ⇒ String

Send a POST to the web service

Returns:

  • (String)

    If the request is successful (200) it returns the body of the response.



91
92
93
94
# File 'lib/ews/connection.rb', line 91

def post(xmldoc)
  headers = {'Content-Type' => 'text/xml'}
  check_response( @httpcli.post(@endpoint, xmldoc, headers) )
end

#set_auth(user, pass) ⇒ Object



49
50
51
# File 'lib/ews/connection.rb', line 49

def set_auth(user,pass)
  @httpcli.set_auth(@endpoint.to_s, user, pass)
end