extensions/net.sf.basedb.otp/trunk/resources/display-qrcode.js

Code
Comments
Other
Rev Date Author Line
4923 10 Aug 18 nicklas 1
4923 10 Aug 18 nicklas 2 var OTP = function()
4923 10 Aug 18 nicklas 3 {
4923 10 Aug 18 nicklas 4   var otp = {};
4923 10 Aug 18 nicklas 5   
4923 10 Aug 18 nicklas 6   otp.initPage = function()
4923 10 Aug 18 nicklas 7   {
4923 10 Aug 18 nicklas 8     // Focs OTP when switching to this tab
4923 10 Aug 18 nicklas 9     TabControl.addTabActivateListener('settings.otp-tab', otp.setFocus);
4923 10 Aug 18 nicklas 10
4923 10 Aug 18 nicklas 11     // Accept digits and generate QR code when ENTER is pressed
4923 10 Aug 18 nicklas 12     Events.addEventHandler('otp', 'keypress', Events.integerOnly);
4923 10 Aug 18 nicklas 13     Events.doOnEnter('otp', otp.loadQrCode);
4923 10 Aug 18 nicklas 14   }
4923 10 Aug 18 nicklas 15   
4923 10 Aug 18 nicklas 16   otp.setFocus = function()
4923 10 Aug 18 nicklas 17   {
4923 10 Aug 18 nicklas 18     Doc.element('otp').focus();
4923 10 Aug 18 nicklas 19   }
4923 10 Aug 18 nicklas 20   
4923 10 Aug 18 nicklas 21   otp.loadQrCode = function()
4923 10 Aug 18 nicklas 22   {
4923 10 Aug 18 nicklas 23     var otpValue = Doc.element('otp').value;
4923 10 Aug 18 nicklas 24     var url = Data.get('otp-data', 'home') + '/OTP.servlet?ID='+App.getSessionId();
4923 10 Aug 18 nicklas 25     url += '&cmd=DisplayQRCode&otp='+otpValue;
4923 10 Aug 18 nicklas 26     
4923 10 Aug 18 nicklas 27     var request = Ajax.getXmlHttpRequest();
4923 10 Aug 18 nicklas 28     request.open('GET', url, true);
4923 10 Aug 18 nicklas 29     Ajax.setReadyStateHandler(request, otp.qrCodeLoaded, otp.qrCodeLoaded);
4923 10 Aug 18 nicklas 30     request.send(null);
4923 10 Aug 18 nicklas 31   }
4923 10 Aug 18 nicklas 32   
4923 10 Aug 18 nicklas 33   
4923 10 Aug 18 nicklas 34   otp.getResponse = function(request)
4923 10 Aug 18 nicklas 35   {
4923 10 Aug 18 nicklas 36     var response;
4923 10 Aug 18 nicklas 37     var error = false;
4923 10 Aug 18 nicklas 38     try
4923 10 Aug 18 nicklas 39     {
4923 10 Aug 18 nicklas 40       response = JSON.parse(request.responseText);
4923 10 Aug 18 nicklas 41       if (response.status != 'ok')
4923 10 Aug 18 nicklas 42       {
4923 10 Aug 18 nicklas 43         error = response.message || response.stacktrace || 'Unexpected error';
4923 10 Aug 18 nicklas 44       }
4923 10 Aug 18 nicklas 45     }
4923 10 Aug 18 nicklas 46     catch (ex)
4923 10 Aug 18 nicklas 47     {
4923 10 Aug 18 nicklas 48       error = ex;
4923 10 Aug 18 nicklas 49     }
4923 10 Aug 18 nicklas 50     
4923 10 Aug 18 nicklas 51     if (error)
4923 10 Aug 18 nicklas 52     {
4923 10 Aug 18 nicklas 53       otp.showError(Strings.encodeTags(error));
4923 10 Aug 18 nicklas 54       return;
4923 10 Aug 18 nicklas 55     }
4923 10 Aug 18 nicklas 56     
4923 10 Aug 18 nicklas 57     return response;
4923 10 Aug 18 nicklas 58   }
4923 10 Aug 18 nicklas 59   
4923 10 Aug 18 nicklas 60   otp.qrCodeLoaded = function(request)
4923 10 Aug 18 nicklas 61   {
4923 10 Aug 18 nicklas 62     var response = otp.getResponse(request);
4923 10 Aug 18 nicklas 63     if (!response) return;
4923 10 Aug 18 nicklas 64     
4923 10 Aug 18 nicklas 65     Doc.element('qrcode').src = 'data:image/png;base64,'+response.image;
4923 10 Aug 18 nicklas 66     Doc.show('qrcode', 'inline');
4923 10 Aug 18 nicklas 67     Doc.hide('no-qrcode');
4924 13 Aug 18 nicklas 68     var msg = 'Scan the QR code with your device!<br><br>';
4924 13 Aug 18 nicklas 69     msg += Strings.encodeTags(response.issuer + ' (' + response.username + ')');
4924 13 Aug 18 nicklas 70     Doc.element('message').innerHTML = msg;
4923 10 Aug 18 nicklas 71   }
4923 10 Aug 18 nicklas 72   
4923 10 Aug 18 nicklas 73   otp.showError = function(message, focusElement)
4923 10 Aug 18 nicklas 74   {
4924 13 Aug 18 nicklas 75     Doc.element('message').innerHTML = '<div class="error">'+Strings.encodeTags(message)+'</div>';
4923 10 Aug 18 nicklas 76     Doc.element('otp').focus();
4923 10 Aug 18 nicklas 77     Doc.element('otp').select();
4923 10 Aug 18 nicklas 78   }
4923 10 Aug 18 nicklas 79
4923 10 Aug 18 nicklas 80   return otp;
4923 10 Aug 18 nicklas 81 }();
4923 10 Aug 18 nicklas 82
4923 10 Aug 18 nicklas 83 Doc.onLoad(OTP.initPage);
4923 10 Aug 18 nicklas 84