Project

General

Profile

Statistics
| Revision:

root / trunk / web / dojo / dojox / io / OAuth.js @ 13

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
}