blob: e93456a88c1f930ddd53cb234ac02d3c3b1a5b45 [file] [log] [blame]
/*
Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
if(!dojo._hasResource["dojox.io.OAuth"]){
dojo._hasResource["dojox.io.OAuth"]=true;
dojo.provide("dojox.io.OAuth");
dojo.require("dojox.encoding.digests.SHA1");
dojox.io.OAuth=new (function(){
var _1=this.encode=function(s){
if(!s){
return "";
}
return encodeURIComponent(s).replace(/\!/g,"%21").replace(/\*/g,"%2A").replace(/\'/g,"%27").replace(/\(/g,"%28").replace(/\)/g,"%29");
};
var _2=this.decode=function(_3){
var a=[],_4=_3.split("&");
for(var i=0,l=_4.length;i<l;i++){
var _5=_4[i];
if(_4[i]==""){
continue;
}
if(_4[i].indexOf("=")>-1){
var _6=_4[i].split("=");
a.push([decodeURIComponent(_6[0]),decodeURIComponent(_6[1])]);
}else{
a.push([decodeURIComponent(_4[i]),null]);
}
}
return a;
};
function _7(_8){
var _9=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],_a=/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,_b=_a.exec(_8),_c={},i=_9.length;
while(i--){
_c[_9[i]]=_b[i]||"";
}
var p=_c.protocol.toLowerCase(),a=_c.authority.toLowerCase(),b=(p=="http"&&_c.port==80)||(p=="https"&&_c.port==443);
if(b){
if(a.lastIndexOf(":")>-1){
a=a.substring(0,a.lastIndexOf(":"));
}
}
var _d=_c.path||"/";
_c.url=p+"://"+a+_d;
return _c;
};
var _e="0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
function _f(_10){
var s="",tl=_e.length;
for(var i=0;i<_10;i++){
s+=_e.charAt(Math.floor(Math.random()*tl));
}
return s;
};
function _11(){
return Math.floor(new Date().valueOf()/1000)-2;
};
function _12(_13,key,_14){
if(_14&&_14!="PLAINTEXT"&&_14!="HMAC-SHA1"){
throw new Error("dojox.io.OAuth: the only supported signature encodings are PLAINTEXT and HMAC-SHA1.");
}
if(_14=="PLAINTEXT"){
return key;
}else{
return dojox.encoding.digests.SHA1._hmac(_13,key);
}
};
function key(_15){
return _1(_15.consumer.secret)+"&"+(_15.token&&_15.token.secret?_1(_15.token.secret):"");
};
function _16(_17,oaa){
var o={oauth_consumer_key:oaa.consumer.key,oauth_nonce:_f(16),oauth_signature_method:oaa.sig_method||"HMAC-SHA1",oauth_timestamp:_11(),oauth_version:"1.0"};
if(oaa.token){
o.oauth_token=oaa.token.key;
}
_17.content=dojo.mixin(_17.content||{},o);
};
function _18(_19){
var _1a=[{}],_1b;
if(_19.form){
if(!_19.content){
_19.content={};
}
var _1c=dojo.byId(_19.form);
var _1d=_1c.getAttributeNode("action");
_19.url=_19.url||(_1d?_1d.value:null);
_1b=dojo.formToObject(_1c);
delete _19.form;
}
if(_1b){
_1a.push(_1b);
}
if(_19.content){
_1a.push(_19.content);
}
var map=_7(_19.url);
if(map.query){
var tmp=dojo.queryToObject(map.query);
for(var p in tmp){
tmp[p]=encodeURIComponent(tmp[p]);
}
_1a.push(tmp);
}
_19._url=map.url;
var a=[];
for(var i=0,l=_1a.length;i<l;i++){
var _1e=_1a[i];
for(var p in _1e){
if(dojo.isArray(_1e[p])){
for(var j=0,jl=_1e.length;j<jl;j++){
a.push([p,_1e[j]]);
}
}else{
a.push([p,_1e[p]]);
}
}
}
_19._parameters=a;
return _19;
};
function _1f(_20,_21,oaa){
_16(_21,oaa);
_18(_21);
var a=_21._parameters;
a.sort(function(a,b){
if(a[0]>b[0]){
return 1;
}
if(a[0]<b[0]){
return -1;
}
if(a[1]>b[1]){
return 1;
}
if(a[1]<b[1]){
return -1;
}
return 0;
});
var s=dojo.map(a,function(_22){
return _1(_22[0])+"="+_1(_22[1]||"");
}).join("&");
var _23=_20.toUpperCase()+"&"+_1(_21._url)+"&"+_1(s);
return _23;
};
function _24(_25,_26,oaa){
var k=key(oaa),_27=_1f(_25,_26,oaa),s=_12(_27,k,oaa.sig_method||"HMAC-SHA1");
_26.content["oauth_signature"]=s;
return _26;
};
this.sign=function(_28,_29,oaa){
return _24(_28,_29,oaa);
};
this.xhr=function(_2a,_2b,oaa,_2c){
_24(_2a,_2b,oaa);
return dojo.xhr(_2a,_2b,_2c);
};
this.xhrGet=function(_2d,oaa){
return this.xhr("GET",_2d,oaa);
};
this.xhrPost=this.xhrRawPost=function(_2e,oaa){
return this.xhr("POST",_2e,oaa,true);
};
this.xhrPut=this.xhrRawPut=function(_2f,oaa){
return this.xhr("PUT",_2f,oaa,true);
};
this.xhrDelete=function(_30,oaa){
return this.xhr("DELETE",_30,oaa);
};
})();
}