Class: GData::Auth::ClientLogin
- Inherits:
-
Object
- Object
- GData::Auth::ClientLogin
- Defined in:
- lib/gdata/auth/clientlogin.rb
Overview
This class implements ClientLogin signatures for Data API requests. It can be used with a GData::Client::GData object.
Instance Attribute Summary collapse
-
#account_type ⇒ Object
One of ‘HOSTED_OR_GOOGLE’, ‘GOOGLE’, or ‘HOSTED’.
-
#auth_url ⇒ Object
The ClientLogin authentication handler.
-
#service ⇒ Object
The service name for the API you are working with.
-
#token ⇒ Object
The access token.
Instance Method Summary collapse
-
#get_token(username, password, source, login_token = nil, login_captcha = nil) ⇒ Object
Retrieves a token for the given username and password.
-
#initialize(service, options = {}) ⇒ ClientLogin
constructor
Initialize the class with the service name of an API that you wish to request a token for.
-
#sign_request!(request) ⇒ Object
Creates an appropriate Authorization header on a GData::HTTP::Request object.
Constructor Details
#initialize(service, options = {}) ⇒ ClientLogin
Initialize the class with the service name of an API that you wish to request a token for.
37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/gdata/auth/clientlogin.rb', line 37 def initialize(service, = {}) if service.nil? raise ArgumentError, "Service name cannot be nil" end @service = service .each do |key, value| self.send("#{key}=", value) end @auth_url ||= 'https://www.google.com/accounts/ClientLogin' @account_type ||= 'HOSTED_OR_GOOGLE' end |
Instance Attribute Details
#account_type ⇒ Object
One of ‘HOSTED_OR_GOOGLE’, ‘GOOGLE’, or ‘HOSTED’. See documentation here: code.google.com/apis/accounts/docs/AuthForInstalledApps.html
29 30 31 |
# File 'lib/gdata/auth/clientlogin.rb', line 29 def account_type @account_type end |
#auth_url ⇒ Object
The ClientLogin authentication handler
25 26 27 |
# File 'lib/gdata/auth/clientlogin.rb', line 25 def auth_url @auth_url end |
#service ⇒ Object
The service name for the API you are working with
33 34 35 |
# File 'lib/gdata/auth/clientlogin.rb', line 33 def service @service end |
#token ⇒ Object
The access token
31 32 33 |
# File 'lib/gdata/auth/clientlogin.rb', line 31 def token @token end |
Instance Method Details
#get_token(username, password, source, login_token = nil, login_captcha = nil) ⇒ Object
Retrieves a token for the given username and password. source identifies your application. login_token and login_captcha are used only if you are responding to a previously issued CAPTCHA challenge.
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/gdata/auth/clientlogin.rb', line 56 def get_token(username, password, source, login_token = nil, login_captcha = nil) body = Hash.new body['accountType'] = @account_type body['Email'] = username body['Passwd'] = password body['service'] = @service body['source'] = source if login_token and login_captcha body['logintoken'] = login_token body['logincaptcha'] = login_captcha end request = GData::HTTP::Request.new(@auth_url, :body => body, :method => :post) service = GData::HTTP::DefaultService.new response = service.make_request(request) if response.status_code != 200 url = response.body[/Url=(.*)/,1] error = response.body[/Error=(.*)/,1] if error == "CaptchaRequired" captcha_token = response.body[/CaptchaToken=(.*)/,1] captcha_url = response.body[/CaptchaUrl=(.*)/,1] raise GData::Client::CaptchaError.new(captcha_token, captcha_url), "#{error} : #{url}" end raise GData::Client::AuthorizationError.new(response) end @token = response.body[/Auth=(.*)/,1] return @token end |
#sign_request!(request) ⇒ Object
Creates an appropriate Authorization header on a GData::HTTP::Request object.
93 94 95 96 97 98 99 |
# File 'lib/gdata/auth/clientlogin.rb', line 93 def sign_request!(request) if @token == nil raise GData::Client::Error, "Cannot sign request without credentials" end request.headers['Authorization'] = "GoogleLogin auth=#{@token}" end |