Project

General

Profile

Statistics
| Revision:

root / trunk / web / dojo / dojox / xmpp / sasl.js @ 10

History | View | Annotate | Download (4.18 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.xmpp.sasl"]){
9
dojo._hasResource["dojox.xmpp.sasl"]=true;
10
dojo.provide("dojox.xmpp.sasl");
11
dojo.require("dojox.xmpp.util");
12
dojo.require("dojo.AdapterRegistry");
13
dojo.require("dojox.encoding.digests.MD5");
14
dojox.xmpp.sasl.saslNS="urn:ietf:params:xml:ns:xmpp-sasl";
15
dojo.declare("dojox.xmpp.sasl._Base",null,{mechanism:null,closeAuthTag:true,constructor:function(_1){
16
this.session=_1;
17
this.startAuth();
18
},startAuth:function(){
19
var _2=new dojox.string.Builder(dojox.xmpp.util.createElement("auth",{xmlns:dojox.xmpp.sasl.saslNS,mechanism:this.mechanism},this.closeAuthTag));
20
this.appendToAuth(_2);
21
this.session.dispatchPacket(_2.toString());
22
},appendToAuth:function(_3){
23
},onChallenge:function(_4){
24
if(!this.first_challenge){
25
this.first_challenge=true;
26
this.onFirstChallenge(_4);
27
}else{
28
this.onSecondChallenge(_4);
29
}
30
},onFirstChallenge:function(){
31
},onSecondChallenge:function(){
32
},onSuccess:function(){
33
this.session.sendRestart();
34
}});
35
dojo.declare("dojox.xmpp.sasl.SunWebClientAuth",dojox.xmpp.sasl._Base,{mechanism:"SUN-COMMS-CLIENT-PROXY-AUTH"});
36
dojo.declare("dojox.xmpp.sasl.Plain",dojox.xmpp.sasl._Base,{mechanism:"PLAIN",closeAuthTag:false,appendToAuth:function(_5){
37
var id=this.session.jid;
38
var _6=this.session.jid.indexOf("@");
39
if(_6!=-1){
40
id=this.session.jid.substring(0,_6);
41
}
42
var _7=this.session.jid+"\x00"+id+"\x00"+this.session.password;
43
_7=dojox.xmpp.util.Base64.encode(_7);
44
_5.append(_7);
45
_5.append("</auth>");
46
delete this.session.password;
47
}});
48
dojo.declare("dojox.xmpp.sasl.DigestMD5",dojox.xmpp.sasl._Base,{mechanism:"DIGEST-MD5",onFirstChallenge:function(_8){
49
var _9=dojox.encoding.digests;
50
var _a=dojox.encoding.digests.outputTypes;
51
var _b=function(n){
52
return _9.MD5(n,_a.Hex);
53
};
54
var H=function(s){
55
return _9.MD5(s,_a.String);
56
};
57
var _c=dojox.xmpp.util.Base64.decode(_8.firstChild.nodeValue);
58
var ch={realm:"",nonce:"",qop:"auth",maxbuf:65536};
59
_c.replace(/([a-z]+)=([^,]+)/g,function(t,k,v){
60
v=v.replace(/^"(.+)"$/,"$1");
61
ch[k]=v;
62
});
63
var _d="";
64
switch(ch.qop){
65
case "auth-int":
66
case "auth-conf":
67
_d=":00000000000000000000000000000000";
68
case "auth":
69
break;
70
default:
71
return false;
72
}
73
var _e=_9.MD5(Math.random()*1234567890,_a.Hex);
74
var _f="xmpp/"+this.session.domain;
75
var _10=this.session.jid;
76
var _11=this.session.jid.indexOf("@");
77
if(_11!=-1){
78
_10=this.session.jid.substring(0,_11);
79
}
80
_10=dojox.xmpp.util.encodeJid(_10);
81
var A1=new dojox.string.Builder();
82
A1.append(H(_10+":"+ch.realm+":"+this.session.password),":",ch.nonce+":"+_e);
83
delete this.session.password;
84
var _12=":"+_f+_d;
85
var A2="AUTHENTICATE"+_12;
86
var _13=new dojox.string.Builder();
87
_13.append(_b(A1.toString()),":",ch.nonce,":00000001:",_e,":",ch.qop,":");
88
var ret=new dojox.string.Builder();
89
ret.append("username=\"",_10,"\",","realm=\"",ch.realm,"\",","nonce=",ch.nonce,",","cnonce=\"",_e,"\",","nc=\"00000001\",qop=\"",ch.qop,"\",digest-uri=\"",_f,"\",","response=\"",_b(_13.toString()+_b(A2)),"\",charset=\"utf-8\"");
90
var _14=new dojox.string.Builder(dojox.xmpp.util.createElement("response",{xmlns:dojox.xmpp.xmpp.SASL_NS},false));
91
_14.append(dojox.xmpp.util.Base64.encode(ret.toString()));
92
_14.append("</response>");
93
this.rspauth=_b(_13.toString()+_b(_12));
94
this.session.dispatchPacket(_14.toString());
95
},onSecondChallenge:function(msg){
96
var _15=dojox.xmpp.util.Base64.decode(msg.firstChild.nodeValue);
97
if(this.rspauth==_15.substring(8)){
98
var _16=new dojox.string.Builder(dojox.xmpp.util.createElement("response",{xmlns:dojox.xmpp.xmpp.SASL_NS},true));
99
this.session.dispatchPacket(_16.toString());
100
}else{
101
}
102
}});
103
dojox.xmpp.sasl.registry=new dojo.AdapterRegistry();
104
dojox.xmpp.sasl.registry.register("SUN-COMMS-CLIENT-PROXY-AUTH",function(_17){
105
return _17=="SUN-COMMS-CLIENT-PROXY-AUTH";
106
},function(_18,_19){
107
return new dojox.xmpp.sasl.SunWebClientAuth(_19);
108
});
109
dojox.xmpp.sasl.registry.register("DIGEST-MD5",function(_1a){
110
return _1a=="DIGEST-MD5";
111
},function(_1b,_1c){
112
return new dojox.xmpp.sasl.DigestMD5(_1c);
113
});
114
dojox.xmpp.sasl.registry.register("PLAIN",function(_1d){
115
return _1d=="PLAIN";
116
},function(_1e,_1f){
117
return new dojox.xmpp.sasl.Plain(_1f);
118
});
119
}