root / trunk / web / dojo / dojox / io / OAuth.js @ 10
History | View | Annotate | Download (4.04 KB)
| 1 |
/*
|
|---|---|
| 2 |
Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
|
| 3 |
Available via Academic Free License >= 2.1 OR the modified BSD license.
|
| 4 |
see: http://dojotoolkit.org/license for details
|
| 5 |
*/
|
| 6 |
|
| 7 |
|
| 8 |
if(!dojo._hasResource["dojox.io.OAuth"]){ |
| 9 |
dojo._hasResource["dojox.io.OAuth"]=true; |
| 10 |
dojo.provide("dojox.io.OAuth");
|
| 11 |
dojo.require("dojox.encoding.digests.SHA1");
|
| 12 |
dojox.io.OAuth=new (function(){ |
| 13 |
var _1=this.encode=function(s){ |
| 14 |
if(!s){
|
| 15 |
return ""; |
| 16 |
} |
| 17 |
return encodeURIComponent(s).replace(/\!/g,"%21").replace(/\*/g,"%2A").replace(/\'/g,"%27").replace(/\(/g,"%28").replace(/\)/g,"%29"); |
| 18 |
}; |
| 19 |
var _2=this.decode=function(_3){ |
| 20 |
var a=[],_4=_3.split("&"); |
| 21 |
for(var i=0,l=_4.length;i<l;i++){ |
| 22 |
var _5=_4[i];
|
| 23 |
if(_4[i]==""){ |
| 24 |
continue;
|
| 25 |
} |
| 26 |
if(_4[i].indexOf("=")>-1){ |
| 27 |
var _6=_4[i].split("="); |
| 28 |
a.push([decodeURIComponent(_6[0]),decodeURIComponent(_6[1])]); |
| 29 |
}else{
|
| 30 |
a.push([decodeURIComponent(_4[i]),null]);
|
| 31 |
} |
| 32 |
} |
| 33 |
return a;
|
| 34 |
}; |
| 35 |
function _7(_8){ |
| 36 |
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; |
| 37 |
while(i--){
|
| 38 |
_c[_9[i]]=_b[i]||"";
|
| 39 |
} |
| 40 |
var p=_c.protocol.toLowerCase(),a=_c.authority.toLowerCase(),b=(p=="http"&&_c.port==80)||(p=="https"&&_c.port==443); |
| 41 |
if(b){
|
| 42 |
if(a.lastIndexOf(":")>-1){ |
| 43 |
a=a.substring(0,a.lastIndexOf(":")); |
| 44 |
} |
| 45 |
} |
| 46 |
var _d=_c.path||"/"; |
| 47 |
_c.url=p+"://"+a+_d;
|
| 48 |
return _c;
|
| 49 |
}; |
| 50 |
var _e="0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz"; |
| 51 |
function _f(_10){ |
| 52 |
var s="",tl=_e.length; |
| 53 |
for(var i=0;i<_10;i++){ |
| 54 |
s+=_e.charAt(Math.floor(Math.random()*tl)); |
| 55 |
} |
| 56 |
return s;
|
| 57 |
}; |
| 58 |
function _11(){ |
| 59 |
return Math.floor(new Date().valueOf()/1000)-2; |
| 60 |
}; |
| 61 |
function _12(_13,key,_14){ |
| 62 |
if(_14&&_14!="PLAINTEXT"&&_14!="HMAC-SHA1"){ |
| 63 |
throw new Error("dojox.io.OAuth: the only supported signature encodings are PLAINTEXT and HMAC-SHA1."); |
| 64 |
} |
| 65 |
if(_14=="PLAINTEXT"){ |
| 66 |
return key;
|
| 67 |
}else{
|
| 68 |
return dojox.encoding.digests.SHA1._hmac(_13,key);
|
| 69 |
} |
| 70 |
}; |
| 71 |
function key(_15){ |
| 72 |
return _1(_15.consumer.secret)+"&"+(_15.token&&_15.token.secret?_1(_15.token.secret):""); |
| 73 |
}; |
| 74 |
function _16(_17,oaa){ |
| 75 |
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"}; |
| 76 |
if(oaa.token){
|
| 77 |
o.oauth_token=oaa.token.key; |
| 78 |
} |
| 79 |
_17.content=dojo.mixin(_17.content||{},o);
|
| 80 |
}; |
| 81 |
function _18(_19){ |
| 82 |
var _1a=[{}],_1b;
|
| 83 |
if(_19.form){
|
| 84 |
if(!_19.content){
|
| 85 |
_19.content={};
|
| 86 |
} |
| 87 |
var _1c=dojo.byId(_19.form);
|
| 88 |
var _1d=_1c.getAttributeNode("action"); |
| 89 |
_19.url=_19.url||(_1d?_1d.value:null);
|
| 90 |
_1b=dojo.formToObject(_1c); |
| 91 |
delete _19.form;
|
| 92 |
} |
| 93 |
if(_1b){
|
| 94 |
_1a.push(_1b); |
| 95 |
} |
| 96 |
if(_19.content){
|
| 97 |
_1a.push(_19.content); |
| 98 |
} |
| 99 |
var map=_7(_19.url);
|
| 100 |
if(map.query){
|
| 101 |
var tmp=dojo.queryToObject(map.query);
|
| 102 |
for(var p in tmp){ |
| 103 |
tmp[p]=encodeURIComponent(tmp[p]); |
| 104 |
} |
| 105 |
_1a.push(tmp); |
| 106 |
} |
| 107 |
_19._url=map.url; |
| 108 |
var a=[];
|
| 109 |
for(var i=0,l=_1a.length;i<l;i++){ |
| 110 |
var _1e=_1a[i];
|
| 111 |
for(var p in _1e){ |
| 112 |
if(dojo.isArray(_1e[p])){
|
| 113 |
for(var j=0,jl=_1e.length;j<jl;j++){ |
| 114 |
a.push([p,_1e[j]]); |
| 115 |
} |
| 116 |
}else{
|
| 117 |
a.push([p,_1e[p]]); |
| 118 |
} |
| 119 |
} |
| 120 |
} |
| 121 |
_19._parameters=a; |
| 122 |
return _19;
|
| 123 |
}; |
| 124 |
function _1f(_20,_21,oaa){ |
| 125 |
_16(_21,oaa); |
| 126 |
_18(_21); |
| 127 |
var a=_21._parameters;
|
| 128 |
a.sort(function(a,b){
|
| 129 |
if(a[0]>b[0]){ |
| 130 |
return 1; |
| 131 |
} |
| 132 |
if(a[0]<b[0]){ |
| 133 |
return -1; |
| 134 |
} |
| 135 |
if(a[1]>b[1]){ |
| 136 |
return 1; |
| 137 |
} |
| 138 |
if(a[1]<b[1]){ |
| 139 |
return -1; |
| 140 |
} |
| 141 |
return 0; |
| 142 |
}); |
| 143 |
var s=dojo.map(a,function(_22){ |
| 144 |
return _1(_22[0])+"="+_1(_22[1]||""); |
| 145 |
}).join("&");
|
| 146 |
var _23=_20.toUpperCase()+"&"+_1(_21._url)+"&"+_1(s); |
| 147 |
return _23;
|
| 148 |
}; |
| 149 |
function _24(_25,_26,oaa){ |
| 150 |
var k=key(oaa),_27=_1f(_25,_26,oaa),s=_12(_27,k,oaa.sig_method||"HMAC-SHA1"); |
| 151 |
_26.content["oauth_signature"]=s;
|
| 152 |
return _26;
|
| 153 |
}; |
| 154 |
this.sign=function(_28,_29,oaa){ |
| 155 |
return _24(_28,_29,oaa);
|
| 156 |
}; |
| 157 |
this.xhr=function(_2a,_2b,oaa,_2c){ |
| 158 |
_24(_2a,_2b,oaa); |
| 159 |
return dojo.xhr(_2a,_2b,_2c);
|
| 160 |
}; |
| 161 |
this.xhrGet=function(_2d,oaa){ |
| 162 |
return this.xhr("GET",_2d,oaa); |
| 163 |
}; |
| 164 |
this.xhrPost=this.xhrRawPost=function(_2e,oaa){ |
| 165 |
return this.xhr("POST",_2e,oaa,true); |
| 166 |
}; |
| 167 |
this.xhrPut=this.xhrRawPut=function(_2f,oaa){ |
| 168 |
return this.xhr("PUT",_2f,oaa,true); |
| 169 |
}; |
| 170 |
this.xhrDelete=function(_30,oaa){ |
| 171 |
return this.xhr("DELETE",_30,oaa); |
| 172 |
}; |
| 173 |
})(); |
| 174 |
} |