lib/xero_gateway/oauth.rb in xero_gateway-2.0.12 vs lib/xero_gateway/oauth.rb in xero_gateway-2.0.13
- old
+ new
@@ -23,11 +23,11 @@
end
extend Forwardable
def_delegators :access_token, :get, :post, :put, :delete
- attr_reader :ctoken, :csecret, :consumer_options
+ attr_reader :ctoken, :csecret, :consumer_options, :session_handle, :authorization_expires_at
def initialize(ctoken, csecret, options = {})
@ctoken, @csecret = ctoken, csecret
@consumer_options = XERO_CONSUMER_OPTIONS.merge(options)
end
@@ -42,17 +42,46 @@
def authorize_from_request(rtoken, rsecret, params = {})
request_token = ::OAuth::RequestToken.new(consumer, rtoken, rsecret)
access_token = request_token.get_access_token(params)
@atoken, @asecret = access_token.token, access_token.secret
+
+ update_attributes_from_token(access_token)
end
def access_token
@access_token ||= ::OAuth::AccessToken.new(consumer, @atoken, @asecret)
end
def authorize_from_access(atoken, asecret)
@atoken, @asecret = atoken, asecret
end
+
+ # Renewing access tokens only works for Partner applications
+ def renew_access_token(access_token = nil, access_secret = nil, session_handle = nil)
+ access_token ||= @atoken
+ access_secret ||= @asecret
+ session_handle ||= @session_handle
+
+ old_token = ::OAuth::RequestToken.new(consumer, access_token, access_secret)
+
+ access_token = old_token.get_access_token({
+ :oauth_session_handle => session_handle,
+ :token => old_token
+ })
+
+ update_attributes_from_token(access_token)
+ end
+
+ private
+
+ # Update instance variables with those from the AccessToken.
+ def update_attributes_from_token(access_token)
+ @expires_at = Time.now + access_token.params[:oauth_expires_in].to_i
+ @authorization_expires_at = Time.now + access_token.params[:oauth_authorization_expires_in].to_i
+ @session_handle = access_token.params[:oauth_session_handle]
+ @atoken, @asecret = access_token.token, access_token.secret
+ @access_token = nil
+ end
end
end