113 lines
3.9 KiB
JavaScript
113 lines
3.9 KiB
JavaScript
|
//>>built
|
||
|
define(["dijit","dojo","dojox","dojo/require!dojox/xmpp/util,dojo/AdapterRegistry,dojox/encoding/digests/MD5"],function(_1,_2,_3){
|
||
|
_2.provide("dojox.xmpp.sasl");
|
||
|
_2.require("dojox.xmpp.util");
|
||
|
_2.require("dojo.AdapterRegistry");
|
||
|
_2.require("dojox.encoding.digests.MD5");
|
||
|
_3.xmpp.sasl.saslNS="urn:ietf:params:xml:ns:xmpp-sasl";
|
||
|
_2.declare("dojox.xmpp.sasl._Base",null,{mechanism:null,closeAuthTag:true,constructor:function(_4){
|
||
|
this.session=_4;
|
||
|
this.startAuth();
|
||
|
},startAuth:function(){
|
||
|
var _5=new _3.string.Builder(_3.xmpp.util.createElement("auth",{xmlns:_3.xmpp.sasl.saslNS,mechanism:this.mechanism},this.closeAuthTag));
|
||
|
this.appendToAuth(_5);
|
||
|
this.session.dispatchPacket(_5.toString());
|
||
|
},appendToAuth:function(_6){
|
||
|
},onChallenge:function(_7){
|
||
|
if(!this.first_challenge){
|
||
|
this.first_challenge=true;
|
||
|
this.onFirstChallenge(_7);
|
||
|
}else{
|
||
|
this.onSecondChallenge(_7);
|
||
|
}
|
||
|
},onFirstChallenge:function(){
|
||
|
},onSecondChallenge:function(){
|
||
|
},onSuccess:function(){
|
||
|
this.session.sendRestart();
|
||
|
}});
|
||
|
_2.declare("dojox.xmpp.sasl.SunWebClientAuth",_3.xmpp.sasl._Base,{mechanism:"SUN-COMMS-CLIENT-PROXY-AUTH"});
|
||
|
_2.declare("dojox.xmpp.sasl.Plain",_3.xmpp.sasl._Base,{mechanism:"PLAIN",closeAuthTag:false,appendToAuth:function(_8){
|
||
|
var id=this.session.jid;
|
||
|
var _9=this.session.jid.indexOf("@");
|
||
|
if(_9!=-1){
|
||
|
id=this.session.jid.substring(0,_9);
|
||
|
}
|
||
|
var _a=this.session.jid+"\x00"+id+"\x00"+this.session.password;
|
||
|
_a=_3.xmpp.util.Base64.encode(_a);
|
||
|
_8.append(_a);
|
||
|
_8.append("</auth>");
|
||
|
delete this.session.password;
|
||
|
}});
|
||
|
_2.declare("dojox.xmpp.sasl.DigestMD5",_3.xmpp.sasl._Base,{mechanism:"DIGEST-MD5",onFirstChallenge:function(_b){
|
||
|
var _c=_3.encoding.digests;
|
||
|
var _d=_3.encoding.digests.outputTypes;
|
||
|
var _e=function(n){
|
||
|
return _c.MD5(n,_d.Hex);
|
||
|
};
|
||
|
var H=function(s){
|
||
|
return _c.MD5(s,_d.String);
|
||
|
};
|
||
|
var _f=_3.xmpp.util.Base64.decode(_b.firstChild.nodeValue);
|
||
|
var ch={realm:"",nonce:"",qop:"auth",maxbuf:65536};
|
||
|
_f.replace(/([a-z]+)=([^,]+)/g,function(t,k,v){
|
||
|
v=v.replace(/^"(.+)"$/,"$1");
|
||
|
ch[k]=v;
|
||
|
});
|
||
|
var _10="";
|
||
|
switch(ch.qop){
|
||
|
case "auth-int":
|
||
|
case "auth-conf":
|
||
|
_10=":00000000000000000000000000000000";
|
||
|
case "auth":
|
||
|
break;
|
||
|
default:
|
||
|
return false;
|
||
|
}
|
||
|
var _11=_c.MD5(Math.random()*1234567890,_d.Hex);
|
||
|
var _12="xmpp/"+this.session.domain;
|
||
|
var _13=this.session.jid;
|
||
|
var _14=this.session.jid.indexOf("@");
|
||
|
if(_14!=-1){
|
||
|
_13=this.session.jid.substring(0,_14);
|
||
|
}
|
||
|
_13=_3.xmpp.util.encodeJid(_13);
|
||
|
var A1=new _3.string.Builder();
|
||
|
A1.append(H(_13+":"+ch.realm+":"+this.session.password),":",ch.nonce+":"+_11);
|
||
|
delete this.session.password;
|
||
|
var _15=":"+_12+_10;
|
||
|
var A2="AUTHENTICATE"+_15;
|
||
|
var _16=new _3.string.Builder();
|
||
|
_16.append(_e(A1.toString()),":",ch.nonce,":00000001:",_11,":",ch.qop,":");
|
||
|
var ret=new _3.string.Builder();
|
||
|
ret.append("username=\"",_13,"\",","realm=\"",ch.realm,"\",","nonce=",ch.nonce,",","cnonce=\"",_11,"\",","nc=\"00000001\",qop=\"",ch.qop,"\",digest-uri=\"",_12,"\",","response=\"",_e(_16.toString()+_e(A2)),"\",charset=\"utf-8\"");
|
||
|
var _17=new _3.string.Builder(_3.xmpp.util.createElement("response",{xmlns:_3.xmpp.xmpp.SASL_NS},false));
|
||
|
_17.append(_3.xmpp.util.Base64.encode(ret.toString()));
|
||
|
_17.append("</response>");
|
||
|
this.rspauth=_e(_16.toString()+_e(_15));
|
||
|
this.session.dispatchPacket(_17.toString());
|
||
|
},onSecondChallenge:function(msg){
|
||
|
var _18=_3.xmpp.util.Base64.decode(msg.firstChild.nodeValue);
|
||
|
if(this.rspauth==_18.substring(8)){
|
||
|
var _19=new _3.string.Builder(_3.xmpp.util.createElement("response",{xmlns:_3.xmpp.xmpp.SASL_NS},true));
|
||
|
this.session.dispatchPacket(_19.toString());
|
||
|
}else{
|
||
|
}
|
||
|
}});
|
||
|
_3.xmpp.sasl.registry=new _2.AdapterRegistry();
|
||
|
_3.xmpp.sasl.registry.register("SUN-COMMS-CLIENT-PROXY-AUTH",function(_1a){
|
||
|
return _1a=="SUN-COMMS-CLIENT-PROXY-AUTH";
|
||
|
},function(_1b,_1c){
|
||
|
return new _3.xmpp.sasl.SunWebClientAuth(_1c);
|
||
|
});
|
||
|
_3.xmpp.sasl.registry.register("DIGEST-MD5",function(_1d){
|
||
|
return _1d=="DIGEST-MD5";
|
||
|
},function(_1e,_1f){
|
||
|
return new _3.xmpp.sasl.DigestMD5(_1f);
|
||
|
});
|
||
|
_3.xmpp.sasl.registry.register("PLAIN",function(_20){
|
||
|
return _20=="PLAIN";
|
||
|
},function(_21,_22){
|
||
|
return new _3.xmpp.sasl.Plain(_22);
|
||
|
});
|
||
|
});
|