diff --git a/ntlm.js b/ntlm.js index 6f8e711..d4b5e2b 100644 --- a/ntlm.js +++ b/ntlm.js @@ -231,25 +231,36 @@ Ntlm.isChallenge = function(xhr) { return header && header.indexOf('NTLM') != -1; }; -Ntlm.authenticate = function(url) { - if (!Ntlm.domain || !Ntlm.username || !Ntlm.lmHashedPassword || !Ntlm.ntHashedPassword) { - Ntlm.error('No NTLM credentials specified. Use Ntlm.setCredentials(...) before making calls.'); - return false; - } - var hostname = Ntlm.getLocation(url).hostname; - var msg1 = Ntlm.createMessage1(hostname); - var request = new XMLHttpRequest(); - request.open('GET', url, false); - request.setRequestHeader('Authorization', 'NTLM ' + msg1.toBase64()); - request.send(null); - var response = request.getResponseHeader('WWW-Authenticate'); - var challenge = Ntlm.getChallenge(response); - - var msg3 = Ntlm.createMessage3(challenge, hostname); - request.open('GET', url, false); - request.setRequestHeader('Authorization', 'NTLM ' + msg3.toBase64()); - request.send(null); - return request.status == 200; +Ntlm.authenticate = function (url) { + if (!Ntlm.domain || !Ntlm.username || !Ntlm.lmHashedPassword || !Ntlm.ntHashedPassword) { + Ntlm.error('No NTLM credentials specified. Use Ntlm.setCredentials(...) before making calls.'); + return false; + } + var hostname = Ntlm.getLocation(url).hostname; + var msg1 = Ntlm.createMessage1(hostname); + var authMsg1 = 'NTLM ' + msg1.toBase64(); + var request = new XMLHttpRequest(); + + request.open('GET', url, false); + request.setRequestHeader('Authorization', authMsg1); + try { + request.send(null); + } catch (ex) { + return false; + } + var response = request.getResponseHeader('WWW-Authenticate'); + var challenge = Ntlm.getChallenge(response); + + var msg3 = Ntlm.createMessage3(challenge, hostname); + var authMsg3 = 'NTLM ' + msg3.toBase64(); + request.open('GET', url, false); + request.setRequestHeader('Authorization', authMsg3); + try { + request.send(null); + } catch (ex) { + return false; + } + return request.status == 200; }; /* @@ -581,4 +592,4 @@ function des_createKeys (key) { } //for each iterations //return the keys we've created return keys; -} //end of des_createKeys \ No newline at end of file +} //end of des_createKeys