| /* |
| Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved. |
| Available via Academic Free License >= 2.1 OR the modified BSD license. |
| see: http://dojotoolkit.org/license for details |
| */ |
| |
| |
| if(!dojo._hasResource["dojox.xmpp.sasl"]){ |
| dojo._hasResource["dojox.xmpp.sasl"]=true; |
| dojo.provide("dojox.xmpp.sasl"); |
| dojo.require("dojox.xmpp.util"); |
| dojo.require("dojo.AdapterRegistry"); |
| dojo.require("dojox.encoding.digests.MD5"); |
| dojox.xmpp.sasl.saslNS="urn:ietf:params:xml:ns:xmpp-sasl"; |
| dojo.declare("dojox.xmpp.sasl._Base",null,{mechanism:null,closeAuthTag:true,constructor:function(_1){ |
| this.session=_1; |
| this.startAuth(); |
| },startAuth:function(){ |
| var _2=new dojox.string.Builder(dojox.xmpp.util.createElement("auth",{xmlns:dojox.xmpp.sasl.saslNS,mechanism:this.mechanism},this.closeAuthTag)); |
| this.appendToAuth(_2); |
| this.session.dispatchPacket(_2.toString()); |
| },appendToAuth:function(_3){ |
| },onChallenge:function(_4){ |
| if(!this.first_challenge){ |
| this.first_challenge=true; |
| this.onFirstChallenge(_4); |
| }else{ |
| this.onSecondChallenge(_4); |
| } |
| },onFirstChallenge:function(){ |
| },onSecondChallenge:function(){ |
| },onSuccess:function(){ |
| this.session.sendRestart(); |
| }}); |
| dojo.declare("dojox.xmpp.sasl.SunWebClientAuth",dojox.xmpp.sasl._Base,{mechanism:"SUN-COMMS-CLIENT-PROXY-AUTH"}); |
| dojo.declare("dojox.xmpp.sasl.Plain",dojox.xmpp.sasl._Base,{mechanism:"PLAIN",closeAuthTag:false,appendToAuth:function(_5){ |
| var id=this.session.jid; |
| var _6=this.session.jid.indexOf("@"); |
| if(_6!=-1){ |
| id=this.session.jid.substring(0,_6); |
| } |
| var _7=this.session.jid+"\x00"+id+"\x00"+this.session.password; |
| _7=dojox.xmpp.util.Base64.encode(_7); |
| _5.append(_7); |
| _5.append("</auth>"); |
| delete this.session.password; |
| }}); |
| dojo.declare("dojox.xmpp.sasl.DigestMD5",dojox.xmpp.sasl._Base,{mechanism:"DIGEST-MD5",onFirstChallenge:function(_8){ |
| var _9=dojox.encoding.digests; |
| var _a=dojox.encoding.digests.outputTypes; |
| var _b=function(n){ |
| return _9.MD5(n,_a.Hex); |
| }; |
| var H=function(s){ |
| return _9.MD5(s,_a.String); |
| }; |
| var _c=dojox.xmpp.util.Base64.decode(_8.firstChild.nodeValue); |
| var ch={realm:"",nonce:"",qop:"auth",maxbuf:65536}; |
| _c.replace(/([a-z]+)=([^,]+)/g,function(t,k,v){ |
| v=v.replace(/^"(.+)"$/,"$1"); |
| ch[k]=v; |
| }); |
| var _d=""; |
| switch(ch.qop){ |
| case "auth-int": |
| case "auth-conf": |
| _d=":00000000000000000000000000000000"; |
| case "auth": |
| break; |
| default: |
| return false; |
| } |
| var _e=_9.MD5(Math.random()*1234567890,_a.Hex); |
| var _f="xmpp/"+this.session.domain; |
| var _10=this.session.jid; |
| var _11=this.session.jid.indexOf("@"); |
| if(_11!=-1){ |
| _10=this.session.jid.substring(0,_11); |
| } |
| _10=dojox.xmpp.util.encodeJid(_10); |
| var A1=new dojox.string.Builder(); |
| A1.append(H(_10+":"+ch.realm+":"+this.session.password),":",ch.nonce+":"+_e); |
| delete this.session.password; |
| var _12=":"+_f+_d; |
| var A2="AUTHENTICATE"+_12; |
| var _13=new dojox.string.Builder(); |
| _13.append(_b(A1.toString()),":",ch.nonce,":00000001:",_e,":",ch.qop,":"); |
| var ret=new dojox.string.Builder(); |
| 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\""); |
| var _14=new dojox.string.Builder(dojox.xmpp.util.createElement("response",{xmlns:dojox.xmpp.xmpp.SASL_NS},false)); |
| _14.append(dojox.xmpp.util.Base64.encode(ret.toString())); |
| _14.append("</response>"); |
| this.rspauth=_b(_13.toString()+_b(_12)); |
| this.session.dispatchPacket(_14.toString()); |
| },onSecondChallenge:function(msg){ |
| var _15=dojox.xmpp.util.Base64.decode(msg.firstChild.nodeValue); |
| if(this.rspauth==_15.substring(8)){ |
| var _16=new dojox.string.Builder(dojox.xmpp.util.createElement("response",{xmlns:dojox.xmpp.xmpp.SASL_NS},true)); |
| this.session.dispatchPacket(_16.toString()); |
| }else{ |
| } |
| }}); |
| dojox.xmpp.sasl.registry=new dojo.AdapterRegistry(); |
| dojox.xmpp.sasl.registry.register("SUN-COMMS-CLIENT-PROXY-AUTH",function(_17){ |
| return _17=="SUN-COMMS-CLIENT-PROXY-AUTH"; |
| },function(_18,_19){ |
| return new dojox.xmpp.sasl.SunWebClientAuth(_19); |
| }); |
| dojox.xmpp.sasl.registry.register("DIGEST-MD5",function(_1a){ |
| return _1a=="DIGEST-MD5"; |
| },function(_1b,_1c){ |
| return new dojox.xmpp.sasl.DigestMD5(_1c); |
| }); |
| dojox.xmpp.sasl.registry.register("PLAIN",function(_1d){ |
| return _1d=="PLAIN"; |
| },function(_1e,_1f){ |
| return new dojox.xmpp.sasl.Plain(_1f); |
| }); |
| } |