extensions/net.sf.basedb.yubikey/trunk/resources/edit-user.js

Code
Comments
Other
Rev Date Author Line
2259 28 Feb 14 nicklas 1
2259 28 Feb 14 nicklas 2 var YubiKey = function()
2259 28 Feb 14 nicklas 3 {
2259 28 Feb 14 nicklas 4   var yubikey = {};
2259 28 Feb 14 nicklas 5   
2259 28 Feb 14 nicklas 6   yubikey.initPage = function()
2259 28 Feb 14 nicklas 7   {
2259 28 Feb 14 nicklas 8     // Disable YubiKey fields on extended properties tab
2259 28 Feb 14 nicklas 9     Doc.element('ep.yubiKeySerial').disabled = true;
2259 28 Feb 14 nicklas 10     Doc.element('ep.yubiKeyId').disabled = true;
2259 28 Feb 14 nicklas 11     
2259 28 Feb 14 nicklas 12     Events.addEventHandler('yubiKeySerial', 'blur', yubikey.copySerial);
2259 28 Feb 14 nicklas 13     Events.doOnEnter('yubiKeyOtp', yubikey.verifyOtp);
2259 28 Feb 14 nicklas 14     Buttons.addClickHandler('btnYubiKeyRemove', yubikey.removeYubiKey);
2488 05 Jun 14 nicklas 15     
2488 05 Jun 14 nicklas 16     TabControl.addTabActivateListener('settings.yubikey-tab', yubikey.autoFocus);
2259 28 Feb 14 nicklas 17   }
2259 28 Feb 14 nicklas 18   
2488 05 Jun 14 nicklas 19   // If the user has a YubiKey set focus to the serial number field, otherwise the YubiKey OTP field
2488 05 Jun 14 nicklas 20   yubikey.autoFocus = function()
2488 05 Jun 14 nicklas 21   {
2488 05 Jun 14 nicklas 22     if (Doc.element('ep.yubiKeyId').value)
2488 05 Jun 14 nicklas 23     {
2488 05 Jun 14 nicklas 24       Doc.element('yubiKeySerial').focus();
2488 05 Jun 14 nicklas 25     }
2488 05 Jun 14 nicklas 26     else
2488 05 Jun 14 nicklas 27     {
2488 05 Jun 14 nicklas 28       Doc.element('yubiKeyOtp').focus();
2488 05 Jun 14 nicklas 29     }
2488 05 Jun 14 nicklas 30   }
2488 05 Jun 14 nicklas 31   
2259 28 Feb 14 nicklas 32   /* Copy serial number to extended properties tab */
2259 28 Feb 14 nicklas 33   yubikey.copySerial = function()
2259 28 Feb 14 nicklas 34   {
2259 28 Feb 14 nicklas 35     Doc.element('ep.yubiKeySerial').value = Doc.element('yubiKeySerial').value;
2259 28 Feb 14 nicklas 36   }
2259 28 Feb 14 nicklas 37   
2259 28 Feb 14 nicklas 38   /* Set serial number in all relevant places */
2259 28 Feb 14 nicklas 39   yubikey.setSerial = function(serial)
2259 28 Feb 14 nicklas 40   {
2259 28 Feb 14 nicklas 41     Doc.element('yubiKeySerial').value = serial;
2259 28 Feb 14 nicklas 42     Doc.element('ep.yubiKeySerial').value = serial;
2259 28 Feb 14 nicklas 43   }
2259 28 Feb 14 nicklas 44   
2259 28 Feb 14 nicklas 45   /* Set YubiKey ID in all relevant places */
2259 28 Feb 14 nicklas 46   yubikey.setYubiKeyId = function(id)
2259 28 Feb 14 nicklas 47   {
2259 28 Feb 14 nicklas 48     Doc.element('yubiKeyId').value = id;
2259 28 Feb 14 nicklas 49     Doc.element('ep.yubiKeyId').value = id;
2259 28 Feb 14 nicklas 50     Doc.element('yubiKeyId2').innerHTML = id ? id : '<i>No YubiKey</i>';
2259 28 Feb 14 nicklas 51   }
2259 28 Feb 14 nicklas 52   
2259 28 Feb 14 nicklas 53   /*
2259 28 Feb 14 nicklas 54     Remove all YubiKey values for this user.
2259 28 Feb 14 nicklas 55     Switch to the non-YubiKey form
2259 28 Feb 14 nicklas 56   */
2259 28 Feb 14 nicklas 57   yubikey.removeYubiKey = function()
2259 28 Feb 14 nicklas 58   {
2259 28 Feb 14 nicklas 59     yubikey.setSerial('');
2259 28 Feb 14 nicklas 60     yubikey.setYubiKeyId('');
2259 28 Feb 14 nicklas 61     
2259 28 Feb 14 nicklas 62     Doc.hide('has-yubikey');
2259 28 Feb 14 nicklas 63     Doc.show('no-yubikey');
2259 28 Feb 14 nicklas 64     Doc.element('yubiKeyOtp').value = '';
2259 28 Feb 14 nicklas 65     Doc.element('yubiKeyOtp').focus();
2259 28 Feb 14 nicklas 66   }
2259 28 Feb 14 nicklas 67   
2259 28 Feb 14 nicklas 68   /**
2259 28 Feb 14 nicklas 69     Verify that the one-time-password is ok.
2259 28 Feb 14 nicklas 70   */
2259 28 Feb 14 nicklas 71   yubikey.verifyOtp = function()
2259 28 Feb 14 nicklas 72   {
2259 28 Feb 14 nicklas 73     var otp = Doc.element('yubiKeyOtp').value;
2259 28 Feb 14 nicklas 74     Doc.hide('yubikey-error');
2259 28 Feb 14 nicklas 75     
2259 28 Feb 14 nicklas 76     var request = Ajax.getXmlHttpRequest();
2259 28 Feb 14 nicklas 77     var response;
2259 28 Feb 14 nicklas 78     var error;
2259 28 Feb 14 nicklas 79     try
2259 28 Feb 14 nicklas 80     {
2259 28 Feb 14 nicklas 81       Doc.show('yubikey-verifying');
2259 28 Feb 14 nicklas 82       var home = Data.get('yubikey-data', 'home');
2259 28 Feb 14 nicklas 83       var url = home + '/YubiKey.servlet?ID='+App.getSessionId();
2259 28 Feb 14 nicklas 84       url += '&cmd=Verify&otp='+encodeURIComponent(otp);
2259 28 Feb 14 nicklas 85       request.open("GET", url, false);  
2259 28 Feb 14 nicklas 86       request.send(null);
2259 28 Feb 14 nicklas 87       response = JSON.parse(request.responseText);
2259 28 Feb 14 nicklas 88       
2259 28 Feb 14 nicklas 89       if (response.status != 'ok')
2259 28 Feb 14 nicklas 90       {
2259 28 Feb 14 nicklas 91         error = response.message;
2259 28 Feb 14 nicklas 92       }
2259 28 Feb 14 nicklas 93     }
2259 28 Feb 14 nicklas 94     catch (e)
2259 28 Feb 14 nicklas 95     {
2259 28 Feb 14 nicklas 96       error = e;
2259 28 Feb 14 nicklas 97     }
2259 28 Feb 14 nicklas 98     finally
2259 28 Feb 14 nicklas 99     {
2259 28 Feb 14 nicklas 100       Doc.hide('yubikey-verifying');
2259 28 Feb 14 nicklas 101     }
2259 28 Feb 14 nicklas 102     
2259 28 Feb 14 nicklas 103     if (error)
2259 28 Feb 14 nicklas 104     {
2259 28 Feb 14 nicklas 105       Doc.element('yubikey-error').innerHTML = Strings.encodeTags(error.toString ? error.toString() : error);
2259 28 Feb 14 nicklas 106       Doc.show('yubikey-error');
2259 28 Feb 14 nicklas 107       return;
2259 28 Feb 14 nicklas 108     }
2259 28 Feb 14 nicklas 109         
2259 28 Feb 14 nicklas 110     var publicId = response.publicId;
2259 28 Feb 14 nicklas 111     
2259 28 Feb 14 nicklas 112     // Update form elements and switch to the has-YubiKey form
2259 28 Feb 14 nicklas 113     yubikey.setYubiKeyId(publicId);
2259 28 Feb 14 nicklas 114     Doc.show('has-yubikey');
2259 28 Feb 14 nicklas 115     Doc.hide('no-yubikey');  
2488 05 Jun 14 nicklas 116     Doc.element('yubiKeySerial').focus();
2259 28 Feb 14 nicklas 117   }
2259 28 Feb 14 nicklas 118   
2259 28 Feb 14 nicklas 119   return yubikey;
2259 28 Feb 14 nicklas 120 }();
2259 28 Feb 14 nicklas 121
2259 28 Feb 14 nicklas 122 Doc.onLoad(YubiKey.initPage);
2259 28 Feb 14 nicklas 123