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 |
} |