Skip to content

Instantly share code, notes, and snippets.

@pomu0325
Created December 17, 2011 15:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pomu0325/1490519 to your computer and use it in GitHub Desktop.
Save pomu0325/1490519 to your computer and use it in GitHub Desktop.
hacked FDC.ForceOAuth
(function(){
var o = {};
o.open = function(clientId) {
o.clientId = clientId;
FDC.ForceOAuth.open(clientId);
};
o.apiVersion = FDC.ForceOAuth.apiVersion;
o.makeRestCall = function (path, callback, error, method, payload, retry) {
if (!o.instanceUrl) {
var oauthData = Ti.App.Properties.getString("oauthData_preference");
var oauthJ = JSON.parse(oauthData);
o.instanceUrl = oauthJ.instance_url;
o.accessToken = oauthJ.access_token;
o.refreshToken = oauthJ.refresh_token;
}
var restUrl=Ti.Network.decodeURIComponent(o.instanceUrl)+'/services'+path;
var xhr=Ti.Network.createHTTPClient();
xhr.onload=function(){
Ti.API.info("REST Response: "+this.responseText);
var data="";
if(this.responseText){data=this.responseText;}
callback(data);
};
xhr.onerror=function(e){
Ti.API.error("XHR, error handler..."+"\nDbDotCom.REST.OAuth.refreshToken: "+o.refreshToken+"\nretry: "+retry+"\n e: "+e.error+"\nXHR status: "+this.status);if(!o.refreshToken||retry){error(e.error);
}else{
Ti.API.error("In the error handler looking for a 401, and have a "+xhr.status);
if(xhr.status===401){
Ti.API.error("Handleing the 401 error...");
o.refreshAccessToken(function(oauthResponse){
Ti.API.error("Refresh response... "+oauthResponse);
o.makeRestCall(path,callback,error,method,payload,true);
},error);
}else{
Ti.API.error("Not a 401 error, re-throwing...");error(e);
}
}
};
xhr.open(method||"GET",restUrl,true)
Ti.API.info("Rest url: "+restUrl);
xhr.setRequestHeader("Authorization","OAuth "+Ti.Network.decodeURIComponent(o.accessToken));
xhr.setRequestHeader("Content-Type","application/json");
xhr.send(payload);
};
o.refreshAccessToken = function(callback, onerror) {
var url = 'https://login.salesforce.com/services/oauth2/token';
var qs = '?grant_type=refresh_token&client_id=' + o.clientId + '&refresh_token=' + o.refreshToken;
var xhr = Ti.Network.createHTTPClient();
xhr.onload = function(){
Ti.API.debug(xhr.responseText);
var j = JSON.parse(xhr.responseText);
j.refresh_token = o.refreshToken;
o.accessToken = j.access_token;
Ti.App.Properties.setString('oauthData_preference', JSON.stringify(j));
FDC.ForceOAuth.setOAuthData(j);
callback(xhr.responseText);
};
xhr.onerror = onerror;
xhr.open('POST', url + qs);
xhr.send();
};
o.query = function (soql, callback, error) {o.makeRestCall('/data/v'+o.apiVersion+'/query/?q='+escape(soql),callback,error,"GET");}
FDC.ForceOAuth2 = o;
})();
@pomu0325
Copy link
Author

sorry, i forgot to mention that you need to use "makeRestCall" method directly.
like:

FDC.ForceOAuth2.makeRestCall('/data/v22.0/query/?...', function(e) {...});

@pomu0325
Copy link
Author

client_secret no more needed for refresh.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment