]> jfr.im git - irc/quakenet/qwebirc.git/blobdiff - js/ui/panes/connect.js
Fix several login bugs, add bouncer auth mode.
[irc/quakenet/qwebirc.git] / js / ui / panes / connect.js
index 8f0ba4aeda6bddfc037eafea2e9f3489b48b40a0..9161bfe3ea63b5491099543a8ae64746bee8614d 100644 (file)
@@ -6,10 +6,26 @@ qwebirc.ui.GenericLoginBox = function(parentElement, callback, initialNickname,
   }
 }
 
+qwebirc.ui.AuthLogin = function(e) {
+  var cookie = Cookie.write("redirect", document.location);
+  document.location = "./auth/";
+  new Event(e).stop();
+}
+
 qwebirc.ui.ConfirmBox = function(parentElement, callback, initialNickname, initialChannels, autoNick, networkName) {
+  var outerbox = new Element("table");
+  outerbox.addClass("qwebirc-centrebox");
+  parentElement.appendChild(outerbox);
+  var tbody = new Element("tbody");
+  outerbox.appendChild(tbody);
+  var tr = new Element("tr");
+  tbody.appendChild(tr);
+  var td = new Element("td");
+  tr.appendChild(td);
+  
   var box = new Element("table");
   box.addClass("qwebirc-confirmbox");
-  parentElement.appendChild(box);
+  td.appendChild(box);
 
   var tbody = new Element("tbody");
   box.appendChild(tbody);
@@ -45,7 +61,7 @@ qwebirc.ui.ConfirmBox = function(parentElement, callback, initialNickname, initi
   
   text.appendChild(document.createTextNode(" click 'Connect'."));
   text.appendChild(new Element("br"));
-  if(!qwebirc.auth.loggedin())
+  if(qwebirc.auth.enabled() && qwebirc.auth.quakeNetAuth() && !qwebirc.auth.loggedin())
     text.appendChild(document.createTextNode("If you'd like to connect using your Q auth click 'Log in'."));
 
   var tr = new Element("tr");
@@ -59,24 +75,31 @@ qwebirc.ui.ConfirmBox = function(parentElement, callback, initialNickname, initi
   td.appendChild(yes);
   yes.focus();
   yes.addEvent("click", function(e) {
-    parentElement.removeChild(box);
+    parentElement.removeChild(outerbox);
     callback({"nickname": initialNickname, "autojoin": initialChannels});
   });
   
-  if(!qwebirc.auth.loggedin()) {
+  if(qwebirc.auth.enabled() && qwebirc.auth.quakeNetAuth() && !qwebirc.auth.loggedin()) {
     var auth = new Element("input", {"type": "submit", "value": "Log in"});
     td.appendChild(auth);
-    auth.addEvent("click", function(e) {
-      var cookie = Cookie.write("redirect", document.location);
-      document.location = "./auth/";
-    });
+    auth.addEvent("click", qwebirc.ui.AuthLogin);
   }
 }
 
 qwebirc.ui.LoginBox = function(parentElement, callback, initialNickname, initialChannels, networkName) {
+  var outerbox = new Element("table");
+  outerbox.addClass("qwebirc-centrebox");
+  parentElement.appendChild(outerbox);
+  var tbody = new Element("tbody");
+  outerbox.appendChild(tbody);
+  var tr = new Element("tr");
+  tbody.appendChild(tr);
+  var td = new Element("td");
+  tr.appendChild(td);
+  
   var box = new Element("table");
-  parentElement.appendChild(box);
   box.addClass("qwebirc-loginbox");
+  td.appendChild(box);
   
   var tbody = new Element("tbody");
   box.appendChild(tbody);
@@ -105,7 +128,7 @@ qwebirc.ui.LoginBox = function(parentElement, callback, initialNickname, initial
   var tbody = new Element("tbody");
   boxtable.appendChild(tbody); /* stupid IE */
 
-  function createRow(label, e2) {
+  function createRow(label, e2, style) {
     var r = new Element("tr");
     tbody.appendChild(r);
 
@@ -116,18 +139,54 @@ qwebirc.ui.LoginBox = function(parentElement, callback, initialNickname, initial
 
     var d2 = new Element("td");
     r.appendChild(d2);
-    d2.appendChild(e2);
-    return d1;
+    
+    if($defined(e2))
+      d2.appendChild(e2);
+    if($defined(style)) {
+      r.setStyles(style);
+      return [r, d2];
+    }
+    
+    return d2;
   }
 
   var nick = new Element("input");
   createRow("Nickname:", nick);
+  
+  var chanStyle = null;
+  if(qwebirc.auth.enabled() && qwebirc.auth.bouncerAuth())
+    chanStyle = {display: "none"};
+  
   var chan = new Element("input");
-  createRow("Channels:", chan);
+  createRow("Channels:", chan, chanStyle);
 
+  if(qwebirc.auth.enabled()) {
+    if(qwebirc.auth.passAuth()) {
+      var authRow = createRow("Auth to services:");
+      var authCheckBox = qwebirc.util.createInput("checkbox", authRow, "connect_auth_to_services", false);
+    
+      var usernameBox = new Element("input");
+      var usernameRow = createRow("Username:", usernameBox, {display: "none"})[0];
+    
+      var passwordRow = createRow("Password:", null, {display: "none"});
+      var passwordBox = qwebirc.util.createInput("password", passwordRow[1], "connect_auth_password");
+
+      authCheckBox.addEvent("click", function(e) { qwebirc.ui.authShowHide(authCheckBox, authRow, usernameBox, usernameRow, passwordRow[0]) });
+    } else if(qwebirc.auth.bouncerAuth()) {
+      var passwordRow = createRow("Password:");
+      var passwordBox = qwebirc.util.createInput("password", passwordRow, "connect_auth_password");
+    }
+  }
+  
   var connbutton = new Element("input", {"type": "submit"});
   connbutton.set("value", "Connect");
-  createRow(undefined, connbutton)
+  var r = createRow(undefined, connbutton);
+  
+  if(qwebirc.auth.enabled() && qwebirc.auth.quakeNetAuth() && !qwebirc.auth.loggedin()) {
+    var auth = new Element("input", {"type": "submit", "value": "Log in"});
+    r.appendChild(auth);
+    auth.addEvent("click", qwebirc.ui.AuthLogin);
+  }
 
   form.addEvent("submit", function(e) {
     new Event(e).stop();
@@ -142,13 +201,48 @@ qwebirc.ui.LoginBox = function(parentElement, callback, initialNickname, initial
       return;
     }
 
-    parentElement.removeChild(box);
+    var data = {"nickname": nickname, "autojoin": chans};
+    if(qwebirc.auth.passAuth() && authCheckBox.checked) {
+        if(!usernameBox.value || !passwordBox.value) {
+          alert("You must supply your username and password in auth mode.");
+          if(!usernameBox.value) {
+            usernameBox.focus();
+          } else {
+            passwordBox.focus();
+          }
+          return;
+        }
+        
+        data["serverPassword"] = usernameBox.value + " " + passwordBox.value;
+    } else if(qwebirc.auth.bouncerAuth()) {
+      if(!passwordBox.value) {
+        alert("You must supply a password.");
+        passwordBox.focus();
+        return;
+      }
+      
+      data["serverPassword"] = passwordBox.value;
+    }
+    
+    parentElement.removeChild(outerbox);
     
-    callback({"nickname": nickname, "autojoin": chans});
+    callback(data);
   }.bind(this));
-
+    
   nick.set("value", initialNickname);
   chan.set("value", initialChannels);
 
   nick.focus();
 }
+
+qwebirc.ui.authShowHide = function(checkbox, authRow, usernameBox, usernameRow, passwordRow) {
+  var visible = checkbox.checked;
+  var display = visible?null:"none";
+  usernameRow.setStyle("display", display);
+  passwordRow.setStyle("display", display);
+  
+  if(visible) {
+//    authRow.parentNode.setStyle("display", "none");
+    usernameBox.focus();
+  }
+}