extensions/net.sf.basedb.otp/trunk/resources/setup-otp.js

Code
Comments
Other
Rev Date Author Line
4849 13 Jun 18 nicklas 1 'use strict';
4849 13 Jun 18 nicklas 2
4849 13 Jun 18 nicklas 3 var SetupOTP = function()
4849 13 Jun 18 nicklas 4 {
4849 13 Jun 18 nicklas 5   var setup = {};
4849 13 Jun 18 nicklas 6   
4849 13 Jun 18 nicklas 7   setup.initPage = function()
4849 13 Jun 18 nicklas 8   {
4850 14 Jun 18 nicklas 9     Events.addEventHandler('username', 'change', setup.getQrCode);
4850 14 Jun 18 nicklas 10
4850 14 Jun 18 nicklas 11     Events.addEventHandler('username', 'keypress', setup.focusOnEnter);
4850 14 Jun 18 nicklas 12     Events.addEventHandler('password', 'keypress', setup.focusOnEnter);
4857 18 Jun 18 nicklas 13     Events.addEventHandler('newpw', 'keypress', setup.focusOnEnter);
4857 18 Jun 18 nicklas 14     Events.addEventHandler('newpw2', 'keypress', setup.focusOnEnter);
4851 14 Jun 18 nicklas 15     Events.doOnEnter('otp', setup.save);
4850 14 Jun 18 nicklas 16     
4857 18 Jun 18 nicklas 17     Events.addEventHandler('change-pwd', 'change', setup.enableChangePassword);
4857 18 Jun 18 nicklas 18     
4849 13 Jun 18 nicklas 19     Buttons.addClickHandler('btnCancel', App.closeWindow);
4851 14 Jun 18 nicklas 20     Buttons.addClickHandler('btnClose', App.closeWindow);
4851 14 Jun 18 nicklas 21     Buttons.addClickHandler('btnSave', setup.save);
4854 15 Jun 18 nicklas 22     
4854 15 Jun 18 nicklas 23     var username = Doc.element('username').value;
4854 15 Jun 18 nicklas 24     
4854 15 Jun 18 nicklas 25     if (username)
4854 15 Jun 18 nicklas 26     {
4854 15 Jun 18 nicklas 27       Events.sendChangeEvent('username');
4854 15 Jun 18 nicklas 28       Doc.element('password').focus();
4854 15 Jun 18 nicklas 29     }
4854 15 Jun 18 nicklas 30     else
4854 15 Jun 18 nicklas 31     {
4854 15 Jun 18 nicklas 32       Doc.element('username').focus();
4854 15 Jun 18 nicklas 33     }
4849 13 Jun 18 nicklas 34   }
4850 14 Jun 18 nicklas 35     
4850 14 Jun 18 nicklas 36   setup.getQrCode = function()
4850 14 Jun 18 nicklas 37   {
4850 14 Jun 18 nicklas 38     var username = Doc.element('username').value;
4850 14 Jun 18 nicklas 39     if (username == '') 
4850 14 Jun 18 nicklas 40     {
4857 18 Jun 18 nicklas 41       Doc.show('no-qrcode', 'inline-block');
4850 14 Jun 18 nicklas 42       Doc.hide('qrcode');
4850 14 Jun 18 nicklas 43       return;
4850 14 Jun 18 nicklas 44     }
4850 14 Jun 18 nicklas 45     
4850 14 Jun 18 nicklas 46     var url = 'OTP.servlet?ID='+App.getSessionId();
4850 14 Jun 18 nicklas 47     url += '&cmd=CreateQRCode&username='+encodeURIComponent(username);
4850 14 Jun 18 nicklas 48
4850 14 Jun 18 nicklas 49     var request = Ajax.getXmlHttpRequest();
4850 14 Jun 18 nicklas 50     request.open('GET', url, true);
4850 14 Jun 18 nicklas 51     Ajax.setReadyStateHandler(request, setup.qrCodeLoaded, setup.qrCodeLoaded);
4850 14 Jun 18 nicklas 52     request.send(null);
4850 14 Jun 18 nicklas 53   }
4850 14 Jun 18 nicklas 54
4851 14 Jun 18 nicklas 55   setup.getResponse = function(request)
4850 14 Jun 18 nicklas 56   {
4850 14 Jun 18 nicklas 57     var response;
4850 14 Jun 18 nicklas 58     var error = false;
4850 14 Jun 18 nicklas 59     try
4850 14 Jun 18 nicklas 60     {
4850 14 Jun 18 nicklas 61       response = JSON.parse(request.responseText);
4850 14 Jun 18 nicklas 62       if (response.status != 'ok')
4850 14 Jun 18 nicklas 63       {
4850 14 Jun 18 nicklas 64         error = response.message || response.stacktrace || 'Unexpected error';
4850 14 Jun 18 nicklas 65       }
4850 14 Jun 18 nicklas 66     }
4850 14 Jun 18 nicklas 67     catch (ex)
4850 14 Jun 18 nicklas 68     {
4850 14 Jun 18 nicklas 69       error = ex;
4850 14 Jun 18 nicklas 70     }
4850 14 Jun 18 nicklas 71     
4850 14 Jun 18 nicklas 72     if (error)
4850 14 Jun 18 nicklas 73     {
4851 14 Jun 18 nicklas 74       setup.showError(Strings.encodeTags(error));
4850 14 Jun 18 nicklas 75       return;
4850 14 Jun 18 nicklas 76     }
4851 14 Jun 18 nicklas 77     
4851 14 Jun 18 nicklas 78     return response;
4851 14 Jun 18 nicklas 79   }
4851 14 Jun 18 nicklas 80   
4851 14 Jun 18 nicklas 81   setup.qrCodeLoaded = function(request)
4851 14 Jun 18 nicklas 82   {
4851 14 Jun 18 nicklas 83     var response = setup.getResponse(request);
4851 14 Jun 18 nicklas 84     if (!response) return;
4851 14 Jun 18 nicklas 85     
4850 14 Jun 18 nicklas 86     Doc.element('qrcode').src = 'data:image/png;base64,'+response.image;
4850 14 Jun 18 nicklas 87     Doc.show('qrcode', 'inline');
4850 14 Jun 18 nicklas 88     Doc.hide('no-qrcode');
4850 14 Jun 18 nicklas 89   }
4850 14 Jun 18 nicklas 90
4857 18 Jun 18 nicklas 91   setup.enableChangePassword = function()
4857 18 Jun 18 nicklas 92   {
4857 18 Jun 18 nicklas 93     Doc.hide('change-password');
4857 18 Jun 18 nicklas 94     Doc.show('new-password-1');
4857 18 Jun 18 nicklas 95     Doc.show('new-password-2');
4857 18 Jun 18 nicklas 96     Doc.element('newpw').focus();
4857 18 Jun 18 nicklas 97   }
4857 18 Jun 18 nicklas 98   
4851 14 Jun 18 nicklas 99   setup.showError = function(message, focusElement)
4851 14 Jun 18 nicklas 100   {
4851 14 Jun 18 nicklas 101     Doc.element('message').innerHTML = '<div class="error">'+message+'</div>';
4851 14 Jun 18 nicklas 102     if (focusElement) Doc.element(focusElement).focus();
4851 14 Jun 18 nicklas 103   }
4849 13 Jun 18 nicklas 104   
4850 14 Jun 18 nicklas 105   setup.focusOnEnter = function(event)
4850 14 Jun 18 nicklas 106   {
4850 14 Jun 18 nicklas 107     if (event.keyCode == 13)
4850 14 Jun 18 nicklas 108     {
4850 14 Jun 18 nicklas 109       var nextFocus = Doc.element(Data.get(event.currentTarget, 'next-focus'));
4850 14 Jun 18 nicklas 110       if (nextFocus && nextFocus.focus) nextFocus.focus();
4850 14 Jun 18 nicklas 111     }
4850 14 Jun 18 nicklas 112   }
4850 14 Jun 18 nicklas 113   
4851 14 Jun 18 nicklas 114   setup.save = function()
4851 14 Jun 18 nicklas 115   {
4851 14 Jun 18 nicklas 116     var username = Doc.element('username').value;
4851 14 Jun 18 nicklas 117     var password = Doc.element('password').value;
4851 14 Jun 18 nicklas 118     var otp = Doc.element('otp').value;
4857 18 Jun 18 nicklas 119     var newPw = Doc.element('newpw').value;
4857 18 Jun 18 nicklas 120     var newPw2 = Doc.element('newpw2').value;
4857 18 Jun 18 nicklas 121     
4851 14 Jun 18 nicklas 122     if (username == '')
4851 14 Jun 18 nicklas 123     {
4851 14 Jun 18 nicklas 124       setup.showError('A username must be specified', 'username');
4851 14 Jun 18 nicklas 125       return;
4851 14 Jun 18 nicklas 126     }
4851 14 Jun 18 nicklas 127     else if (password == '')
4851 14 Jun 18 nicklas 128     {
4851 14 Jun 18 nicklas 129       setup.showError('A password must be specified', 'password');
4851 14 Jun 18 nicklas 130       return;
4851 14 Jun 18 nicklas 131     }
4851 14 Jun 18 nicklas 132     else if (otp == '')
4851 14 Jun 18 nicklas 133     {
4851 14 Jun 18 nicklas 134       setup.showError('A one-time passcode must be specified', 'otp');
4851 14 Jun 18 nicklas 135       return;
4851 14 Jun 18 nicklas 136     }
4857 18 Jun 18 nicklas 137     else if (newPw != newPw2)
4857 18 Jun 18 nicklas 138     {
4857 18 Jun 18 nicklas 139       setup.showError('The new passwords do not match', 'newpw2');
4857 18 Jun 18 nicklas 140       return;
4857 18 Jun 18 nicklas 141     }
4851 14 Jun 18 nicklas 142     
4851 14 Jun 18 nicklas 143     var url = 'OTP.servlet?ID='+App.getSessionId();
4851 14 Jun 18 nicklas 144     url += '&cmd=SaveOTPSetup';
4851 14 Jun 18 nicklas 145     
4851 14 Jun 18 nicklas 146     var postData = {};
4851 14 Jun 18 nicklas 147     postData.username = username;
4851 14 Jun 18 nicklas 148     postData.password = password;
4851 14 Jun 18 nicklas 149     postData.otp = otp;
4857 18 Jun 18 nicklas 150     if (newPw)
4857 18 Jun 18 nicklas 151     {
4857 18 Jun 18 nicklas 152       postData.newPassword = newPw;
4857 18 Jun 18 nicklas 153     }
4851 14 Jun 18 nicklas 154     
4851 14 Jun 18 nicklas 155     var request = Ajax.getXmlHttpRequest();
4851 14 Jun 18 nicklas 156     request.open('POST', url, true);
4851 14 Jun 18 nicklas 157     request.setRequestHeader("Content-Type", "application/json; charset=UTF-8");
4851 14 Jun 18 nicklas 158     Ajax.setReadyStateHandler(request, setup.setupCompleted, setup.setupCompleted);
4851 14 Jun 18 nicklas 159     request.send(JSON.stringify(postData));
4851 14 Jun 18 nicklas 160   }
4851 14 Jun 18 nicklas 161   
4851 14 Jun 18 nicklas 162   setup.setupCompleted = function(request)
4851 14 Jun 18 nicklas 163   {
4851 14 Jun 18 nicklas 164     var response = setup.getResponse(request);
4851 14 Jun 18 nicklas 165     if (!response) return;
4851 14 Jun 18 nicklas 166     
4857 18 Jun 18 nicklas 167     Doc.element('message').innerHTML = '<div class="success bg-filled-100">'+Strings.encodeTags(response.message)+'</div>';
4851 14 Jun 18 nicklas 168     
4851 14 Jun 18 nicklas 169     Doc.hide('setup-buttons');
4851 14 Jun 18 nicklas 170     Doc.hide('setup-form');
4851 14 Jun 18 nicklas 171     Doc.show('close-button');
4851 14 Jun 18 nicklas 172   }
4851 14 Jun 18 nicklas 173   
4849 13 Jun 18 nicklas 174   return setup;
4849 13 Jun 18 nicklas 175 }();
4849 13 Jun 18 nicklas 176
4849 13 Jun 18 nicklas 177 Doc.onLoad(SetupOTP.initPage);
4849 13 Jun 18 nicklas 178