class GoogleAppsOauth2::Transport

Attributes

client_id[R]
client_secret[R]
domain[R]
refresh_token[R]
token[R]
user_path[R]

Public Class Methods

new(options, &block) click to toggle source
# File lib/google_apps_oauth2/transport.rb, line 14
def initialize(options, &block)
  @domain = options[:domain]
  @token = options[:token]
  @client_id = options[:client_id]
  @client_secret = options[:client_secret]
  @refresh_token = options[:refresh_token]
  @token_changed_block = block

  @user_path= "/#{@domain}/user/2.0"
end

Public Instance Methods

get_users(options = {}) click to toggle source
# File lib/google_apps_oauth2/transport.rb, line 25
def get_users(options = {})
  headers = {'content-type' => 'application/atom+xml', 'Authorization' => "OAuth #{token}"}

  url = user_path + "?startUsername=#{options[:start]}"
  response = self.class.get(url, headers: headers)
  response = check_for_refresh(response)

  response
end

Private Instance Methods

check_for_refresh(old_response) click to toggle source
# File lib/google_apps_oauth2/transport.rb, line 39
def check_for_refresh(old_response)
  response = old_response
  if old_response.code == 401
    data = {
        :client_id => @client_id,
        :client_secret => @client_secret,
        :refresh_token => refresh_token,
        :grant_type => "refresh_token"
    }
    response_json = MultiJson.load(self.class.post("https://accounts.google.com/o/oauth2/token", :body => data))
    @token = response_json["access_token"]
    @token_changed_block.call(@token)
    headers = old_response.request.options[:headers].merge("Authorization" => "OAuth #{token}")
    response = self.class.get(old_response.request.uri.to_s, headers: headers)
  end
  response
end