import 'jquery'; import 'bootstrap'; import 'jquery-form' import {ConfirmDialog, Dialog} from './confirm-modal.js'; jQuery = window.$ = window.jQuery = require('jquery'); var forge = require('node-forge'); var QRCode = require("qrcode-svg"); var pki = require('node-forge/lib/pki'); var asn1 = require('node-forge/lib/asn1'); var pkcs12 = require('node-forge/lib/pkcs12'); var util = require('node-forge/lib/util'); import SimpleFormSubmit from "simple-form-submit"; const $ = document.querySelector.bind(document); const $$ = document.querySelectorAll.bind(document); /* Convert an ArrayBuffer into a string from https://developers.google.com/web/updates/2012/06/How-to-convert-ArrayBuffer-to-and-from-String */ function ab2str(buf) { return String.fromCharCode.apply(null, new Uint8Array(buf)); } function randBase32() { // src: https://en.wikipedia.org/wiki/Base32 RFC4648 const alphabet = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y','Z','2', '3', '4', '5', '6', '7']; var result = ''; var buf = new Uint8Array(1); for ( var i = 0; i < 16; i++ ) { window.crypto.getRandomValues(buf); var rand_val = buf[0] & 31; result += alphabet[rand_val]; } return result; } window.ConfirmDialog = ConfirmDialog; window.Dialog = Dialog; window.$(document).ready(function () { $('#sidebarCollapse').onclick = function () { $('nav.sidebar').classList.toggle('d-none'); }; }); window.totp = { init_list: function(){ }, init_new: function() { //create new TOTP secret, create qrcode and ask for token. var form = $('form'); var secret = randBase32(); var input_secret = form.querySelector('#secret') if(input_secret.value == '') { input_secret.value = secret; } form.querySelector('#name').onchange=window.totp.generate_qrcode; form.querySelector('#name').onkeyup=window.totp.generate_qrcode; window.totp.generate_qrcode(); }, generate_qrcode: function(){ var form = $('form'); var secret = form.querySelector('#secret').value; var name = form.querySelector('#name').value; var issuer = 'Lenticular%20Cloud'; var svg_container = $('#svg-container') var svg = new QRCode(`otpauth://totp/${issuer}:${name}?secret=${secret}&issuer=${issuer}`).svg(); var svg_xml =new DOMParser().parseFromString(svg,'text/xml') if(svg_container.childNodes.length > 0) { svg_container.childNodes[0].replaceWith(svg_xml.childNodes[0]) } else { svg_container.appendChild(svg_xml.childNodes[0]); } // .innerHtml=svg; } } window.fido2 = { init: function() { } } window.password_change= { init: function(){ var form = $('form'); form.onsubmit = function () { SimpleFormSubmit.submitForm(form.action, form) .then(response =>{ response.json().then(function(data) { if (data.errors) { var msg ='