class SabredavClient::Request

Attributes

client[R]
http[R]
path[RW]
request[R]

Public Class Methods

new(method, client, path) click to toggle source
# File lib/sabredav_client/request.rb, line 6
def initialize(method, client, path)
  @client  = client
  @path    = "#{client.base_path}/#{path}"
  @http    = build_http
  @request = build_request(method)

  add_auth
end

Public Instance Methods

add_body(body) click to toggle source
# File lib/sabredav_client/request.rb, line 15
def add_body(body)
  request.body = body
end
add_header(data) click to toggle source
# File lib/sabredav_client/request.rb, line 19
def add_header(data)
  request['Content-Length']  = data[:content_length]  if data[:content_length]
  request['If-Match']        = data[:if_match]        if data[:if_match]
  request['Content-Type']    = data[:content_type]    if data[:content_type]
  request['DAV']             = data[:dav]             if data[:dav]
end
run() click to toggle source
# File lib/sabredav_client/request.rb, line 26
def run
  @http.request(request)
end

Private Instance Methods

add_auth() click to toggle source
# File lib/sabredav_client/request.rb, line 72
def add_auth
  unless client.authtype == 'digest'
    request.basic_auth client.user, client.password
  else
    request.add_field 'Authorization', digestauth(method.to_s.upcase)
  end
end
build_http() click to toggle source
# File lib/sabredav_client/request.rb, line 32
def build_http
  unless client.proxy_uri
    http = Net::HTTP.new(client.host, client.port)
  else
    http = Net::HTTP.new(client.host, client.port, client.proxy_host, client.proxy_port)
  end

  if client.ssl
    http.use_ssl = client.ssl
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE
  end

  http
end
build_request(method) click to toggle source
# File lib/sabredav_client/request.rb, line 47
def build_request(method)
  case method
  when :get
    Net::HTTP::Get.new(path)
  when :post
    Net::HTTP::Post.new(path)
  when :put
    Net::HTTP::Put.new(path)
  when :delete
    Net::HTTP::Delete.new(path)
  when :propfind
    Net::HTTP::Propfind.new(path)
  when :proppatch
    Net::HTTP::Proppatch.new(path)
  when :report
    Net::HTTP::Report.new(path)
  when :mkcalendar
    Net::HTTP::Mkcalendar.new(path)
  when :mkcol
    Net::HTTP::Mkcol.new(path)
  else
    raise SabredavClient::Errors::HTTPMethodNotSupportedError, method
  end
end
digestauth() click to toggle source
# File lib/sabredav_client/request.rb, line 80
def digestauth
  h = Net::HTTP.new client.duri.host, client.duri.port

  if client.ssl
    h.use_ssl = client.ssl
    h.verify_mode = OpenSSL::SSL::VERIFY_NONE
  end

  req = Net::HTTP::Get.new client.duri.request_uri
  res = h.request req
  # res is a 401 response with a WWW-Authenticate header

  auth = client.digest_auth.auth_header client.duri, res['www-authenticate'], method

  return auth
end