Sha256: 369adcc30de49fe00306919a6c0f52f3a413bd95717409579562d7306919b974

Contents?: true

Size: 1.91 KB

Versions: 2

Compression:

Stored size: 1.91 KB

Contents

require "googlecalendar/service_base"

module GoogleCalendar
  #
  # This class interacts with google calendar service. 
  # If you want to use ClientLogin for authentication, use this class.
  # If you want to use AuthSub, use ServiceAuthSub. 
  #
  class Service < ServiceBase

    # Server Path to authenticate
    AUTH_PATH = "/accounts/ClientLogin"

    # URL to get calendar list
    CALENDAR_LIST_PATH = "http://www.google.com/calendar/feeds/"
  
    #
    # get the list of user's calendars and returns http response object
    #
    def calendar_list
      logger.info("-- calendar list st --") if logger
      auth unless @auth
      uri = URI.parse(CALENDAR_LIST_PATH + @email)
      res = do_get(uri, {})
      logger.info("-- calendar list en(#{res.message}) --") if logger
      res
    end

    alias :calendars :calendar_list
  
    def initialize(email, pass)
      @email = email
      @pass = pass
      @session = nil
      @cookie = nil
      @auth = nil
    end 

  private 
    def auth
      https = Net::HTTP.new(AUTH_SERVER, 443, @@proxy_addr, @@proxy_port, @@proxy_user, @@proxy_pass)
      https.use_ssl = true
      https.verify_mode = OpenSSL::SSL::VERIFY_NONE
      head = {'Content-Type' => 'application/x-www-form-urlencoded'}
      logger.info "-- auth st --" if logger
      https.start do |w|
        res = w.post(AUTH_PATH, "Email=#{@email}&Passwd=#{@pass}&source=company-app-1&service=cl", head)
        logger.debug res if logger
        if res.body =~ /Auth=(.+)/
          @auth = $1 
        else
          if logger
            logger.fatal(res)
            logger.fatal(res.body)
          end
          raise AuthenticationFailed
        end
      end
      logger.info "-- auth en --" if logger
    end
  
    def add_authorize_header(header)
      header["Authorization"] = "GoogleLogin auth=#{@auth}"
    end
  end # Service
end # GoogleCalendar

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
gcalapi-0.1.0 lib/googlecalendar/service.rb
gcalapi-0.1.1 lib/googlecalendar/service.rb