From 9426c8a5206c9f190f82bbf9f51beda419b2465d Mon Sep 17 00:00:00 2001 From: nuxsmin Date: Tue, 27 Mar 2018 12:22:50 +0200 Subject: [PATCH] * [ADD] Random generated password length is restricted to 117 bytes because RSA encryption payload max length * [ADD] Added line breaks for password displaying --- .../web/themes/material-blue/js/app-theme.js | 130 +++++++----------- .../themes/material-blue/js/app-theme.min.js | 36 ++--- .../material-blue/views/account/viewpass.inc | 2 +- lib/SP/Services/Install/Installer.php | 2 +- public/js/app-main.js | 46 ++++++- public/js/app-main.min.js | 23 ++-- 6 files changed, 128 insertions(+), 111 deletions(-) diff --git a/app/modules/web/themes/material-blue/js/app-theme.js b/app/modules/web/themes/material-blue/js/app-theme.js index c2a34579..339f07c1 100644 --- a/app/modules/web/themes/material-blue/js/app-theme.js +++ b/app/modules/web/themes/material-blue/js/app-theme.js @@ -68,93 +68,65 @@ sysPass.Theme = function (Common) { }; // Función para generar claves aleatorias. - const password = function ($target) { - let i = 0; - let chars = ""; - let genPassword = ""; + const randomPassword = function ($target) { + Common.generateRandomPass(function (password, level) { + $target.attr("data-pass", password); - const getRandomChar = function (min, max) { - return chars.charAt(Math.floor((Math.random() * max) + min)); - }; + // if ($target) { + const $dstParent = $target.parent(); + const $targetR = $("#" + $target.attr("id") + "_repeat"); - if (Common.passwordData.complexity.symbols) { - chars += "!\"\\·@|#$~%&/()=?'¿¡^*[]·;,_-{}<>"; - } + Common.outputResult(level, $target); - if (Common.passwordData.complexity.numbers) { - chars += "1234567890"; - } + // Actualizar los componentes de MDL + const mdl = new MaterialTextfield(); - if (Common.passwordData.complexity.chars) { - chars += "abcdefghijklmnopqrstuvwxyz"; + // Poner la clave en los input y actualizar MDL + $dstParent.find("input:password").val(password); + $dstParent.addClass(mdl.CssClasses_.IS_DIRTY).removeClass(mdl.CssClasses_.IS_INVALID); - if (Common.passwordData.complexity.uppercase) { - chars += String("abcdefghijklmnopqrstuvwxyz").toUpperCase(); + // Poner la clave en el input de repetición y encriptarla + if ($targetR.length > 0) { + $targetR.val(password).parent().addClass(mdl.CssClasses_.IS_DIRTY).removeClass(mdl.CssClasses_.IS_INVALID); + Common.encryptFormValue($targetR); } - } - for (; i++ < Common.passwordData.complexity.numlength;) { - genPassword += getRandomChar(0, chars.length - 1); - } - - $target.attr("data-pass", genPassword); - - const level = zxcvbn(genPassword); - Common.passwordData.passLength = genPassword.length; - - // if ($target) { - const $dstParent = $target.parent(); - const $targetR = $("#" + $target.attr("id") + "_repeat"); - - Common.outputResult(level, $target); - - // Actualizar los componentes de MDL - const mdl = new MaterialTextfield(); - - // Poner la clave en los input y actualizar MDL - $dstParent.find("input:password").val(genPassword); - $dstParent.addClass(mdl.CssClasses_.IS_DIRTY).removeClass(mdl.CssClasses_.IS_INVALID); - - // Poner la clave en el input de repetición y encriptarla - if ($targetR.length > 0) { - $targetR.val(genPassword).parent().addClass(mdl.CssClasses_.IS_DIRTY).removeClass(mdl.CssClasses_.IS_INVALID); - Common.encryptFormValue($targetR); - } - - // Mostar el indicador de complejidad - $dstParent.find("#passLevel").show(500); - // } else { - // Common.outputResult(level); - // $("input:password, input.password").val(genPassword); - // $("#passLevel").show(500); - // } + // Mostar el indicador de complejidad + $dstParent.find("#passLevel").show(500); + // } else { + // Common.outputResult(level); + // $("input:password, input.password").val(genPassword); + // $("#passLevel").show(500); + // } + }); }; // Diálogo de configuración de complejidad de clave const complexityDialog = function () { const content = - "
" + - "" + - "" + - "" + - "" + - "
" + - "" + - "" + - "
"; + `
+ + + + +
+ + +
+ `; mdlDialog().show({ title: Common.config().LANG[29], @@ -167,11 +139,13 @@ sysPass.Theme = function (Common) { onClick: function (e) { e.preventDefault(); + const length = parseInt($("#passlength").val()); + Common.passwordData.complexity.chars = $("#checkbox-chars").is(":checked"); Common.passwordData.complexity.numbers = $("#checkbox-numbers").is(":checked"); Common.passwordData.complexity.uppercase = $("#checkbox-uppercase").is(":checked"); Common.passwordData.complexity.symbols = $("#checkbox-symbols").is(":checked"); - Common.passwordData.complexity.numlength = parseInt($("#passlength").val()); + Common.passwordData.complexity.numlength = length; } }, cancelable: true, @@ -223,7 +197,7 @@ sysPass.Theme = function (Common) { // Crear evento para generar clave aleatoria $passwordActions.find(".passGen").on("click", function () { - password($this); + randomPassword($this); $this.blur(); }); @@ -234,7 +208,7 @@ sysPass.Theme = function (Common) { // Crear evento para mostrar clave generada/introducida $passwordActions.find(".showpass").on("mouseover", function () { - $(this).attr("title", $this.data("pass")); + $(this).attr("title", $this[0].dataset.pass); }); // Reset de los campos de clave @@ -518,7 +492,7 @@ sysPass.Theme = function (Common) { return { passwordDetect: passwordDetect, - password: password, + password: randomPassword, viewsTriggers: viewsTriggers, loading: loading, ajax: ajax, diff --git a/app/modules/web/themes/material-blue/js/app-theme.min.js b/app/modules/web/themes/material-blue/js/app-theme.min.js index 7e657fdd..f374800f 100644 --- a/app/modules/web/themes/material-blue/js/app-theme.min.js +++ b/app/modules/web/themes/material-blue/js/app-theme.min.js @@ -1,19 +1,19 @@ -var $jscomp={scope:{},findInternal:function(a,f,c){a instanceof String&&(a=String(a));for(var g=a.length,h=0;h"); -a.passwordData.complexity.numbers&&(d+="1234567890");a.passwordData.complexity.chars&&(d+="abcdefghijklmnopqrstuvwxyz",a.passwordData.complexity.uppercase&&(d+="ABCDEFGHIJKLMNOPQRSTUVWXYZ"));for(;k++
";mdlDialog().show({title:a.config().LANG[29],text:b,negative:{title:a.config().LANG[44]},positive:{title:a.config().LANG[43],onClick:function(b){b.preventDefault();a.passwordData.complexity.chars=$("#checkbox-chars").is(":checked"); -a.passwordData.complexity.numbers=$("#checkbox-numbers").is(":checked");a.passwordData.complexity.uppercase=$("#checkbox-uppercase").is(":checked");a.passwordData.complexity.symbols=$("#checkbox-symbols").is(":checked");a.passwordData.complexity.numlength=parseInt($("#passlength").val())}},cancelable:!0,contentStyle:{"max-width":"300px"},onLoaded:function(){$("#checkbox-chars").prop("checked",a.passwordData.complexity.chars);$("#checkbox-numbers").prop("checked",a.passwordData.complexity.numbers); -$("#checkbox-uppercase").prop("checked",a.passwordData.complexity.uppercase);$("#checkbox-symbols").prop("checked",a.passwordData.complexity.symbols);$("#passlength").val(a.passwordData.complexity.numlength)}})},l=function(b){b.find(".passwordfield__input").each(function(){var b=$(this);if("true"!==b.attr("data-pass-upgraded")){var d=b.parent(),e=b.attr("id"),c='\n
    \n
  • settings'+a.config().LANG[28]+'
  • \n
  • vpn_key'+a.config().LANG[29]+'
  • \n
  • refresh'+a.config().LANG[30]+"
";d.after('
');d.next(".password-actions").prepend('').prepend('remove_red_eye').prepend(c);b.on("keyup",function(){a.checkPassLevel(b)});d=b.parent().next();d.find(".passGen").on("click",function(){g(b);b.blur()});d.find(".passComplexity").on("click",function(){h()});d.find(".showpass").on("mouseover",function(){$(this).attr("title",b.data("pass"))});d.find(".reset").on("click",function(){b.val(""); -var a=$("#"+e+"_repeat");0remove_red_eye');if(1===b.data("clipboard")){var c=$('content_paste');b.parent().after(c).after(d)}else b.parent().after(d); -d.on("mouseover",function(){d.attr("title",b.val())})})},m=function(b){f.info("setupDatePicker");var c={format:"YYYY-MM-DD",lang:a.config().LOCALE.substr(0,2),time:!1,cancelText:a.config().LANG[44],okText:a.config().LANG[43],clearText:a.config().LANG[30],nowText:a.config().LANG[56],minDate:new Date,triggerEvent:"dateIconClick"};b.find(".password-datefield__input").each(function(){var b=$(this),e=b.parent();b.bootstrapMaterialDatePicker(c);var k=e.find("input[name="+b.data("dst-unix")+"]");k.val(moment.tz(b.val(), -a.config().TIMEZONE).format("X"));e.next("i").on("click",function(){b.trigger("dateIconClick")});b.on("change",function(){k.val(moment.tz(b.val(),a.config().TIMEZONE).format("X"))})})};return{passwordDetect:l,password:g,viewsTriggers:{main:function(){var a=document.querySelector(".mdl-layout");$(".mdl-layout__drawer").find("a").click(function(){a.MaterialLayout.toggleDrawer()})},search:function(){var b=$("#frmSearch"),c=$("#res-content");b.find("button.btn-clear").on("click",function(a){$(".icon-searchfav").find("i").removeClass("mdl-color-text--amber-A200")}); -b.find(".icon-searchfav").on("click",function(){var c=$(this).find("i"),d=b.find("input[name='searchfav']");0==d.val()?(c.addClass("mdl-color-text--amber-A200"),c.attr("title",a.config().LANG[53]),d.val(1)):(c.removeClass("mdl-color-text--amber-A200"),c.attr("title",a.config().LANG[52]),d.val(0));b.submit()});var d=b.find("#tags")[0],e=b.find(".search-filters-tags"),f=b.find("i.show-filter");c.on("click","#data-search-header .sort-down,#data-search-header .sort-up",function(){var b=$(this);b.parent().find("a").addClass("filterOn"); -a.appActions().account.sort(b)}).on("click","#search-rows i.icon-favorite",function(){var b=$(this);a.appActions().account.saveFavorite(b,function(){"on"===b.data("status")?(b.addClass("mdl-color-text--amber-A100"),b.attr("title",a.config().LANG[50]),b.html("star")):(b.removeClass("mdl-color-text--amber-A100"),b.attr("title",a.config().LANG[49]),b.html("star_border"))})}).on("click","#search-rows span.tag",function(){e.is(":hidden")&&f.trigger("click");d.selectize.addItem($(this).data("tag-id"),!1)}); -f.on("click",function(){var a=$(this);e.is(":hidden")?(e.slideDown("slow"),a.html(a.data("icon-up"))):(e.slideUp("slow"),a.html(a.data("icon-down")))});-1!==d.selectedIndex&&f.trigger("click")},common:function(a){l(a);m(a)}},loading:c,ajax:{complete:function(){f.info("ajax:complete");componentHandler.upgradeDom()}},html:{getList:function(a,c){var b=$('
    '),e=$('
  • '),f=$(''),g=''+ -(void 0===c||""===c?"description":c)+"";a.forEach(function(a){var c=f.clone();c.append(g);c.append(a);a=e.clone().append(c);b.append(a)});return b},tabs:{add:function(a,c,d,e){a=$(a);var b;1===e&&(a.parent().find("#tabs-"+c).addClass("is-active"),b="is-active");a.append(''+d+"")}}}}}; +sysPass.Theme=function(a){var e=a.log,c={elems:{$wrap:$("#wrap-loading"),$loading:$("#loading")},show:function(a){void 0!==a&&!0===a&&c.elems.$wrap.addClass("overlay-full");c.elems.$wrap.show();c.elems.$loading.addClass("is-active")},hide:function(){c.elems.$wrap.removeClass("overlay-full").hide();c.elems.$loading.removeClass("is-active")},upgradeFull:function(){c.elems.$wrap.addClass("overlay-full")}},f=function(b){a.generateRandomPass(function(d,m){b.attr("data-pass",d);var c=b.parent(),g=$("#"+ +b.attr("id")+"_repeat");a.outputResult(m,b);var l=new MaterialTextfield;c.find("input:password").val(d);c.addClass(l.CssClasses_.IS_DIRTY).removeClass(l.CssClasses_.IS_INVALID);0\n \n \n \n \n
    \n \n \n
    \n ';mdlDialog().show({title:a.config().LANG[29],text:b,negative:{title:a.config().LANG[44]},positive:{title:a.config().LANG[43],onClick:function(d){d.preventDefault();d=parseInt($("#passlength").val());a.passwordData.complexity.chars=$("#checkbox-chars").is(":checked");a.passwordData.complexity.numbers= +$("#checkbox-numbers").is(":checked");a.passwordData.complexity.uppercase=$("#checkbox-uppercase").is(":checked");a.passwordData.complexity.symbols=$("#checkbox-symbols").is(":checked");a.passwordData.complexity.numlength=d}},cancelable:!0,contentStyle:{"max-width":"300px"},onLoaded:function(){$("#checkbox-chars").prop("checked",a.passwordData.complexity.chars);$("#checkbox-numbers").prop("checked",a.passwordData.complexity.numbers);$("#checkbox-uppercase").prop("checked",a.passwordData.complexity.uppercase); +$("#checkbox-symbols").prop("checked",a.passwordData.complexity.symbols);$("#passlength").val(a.passwordData.complexity.numlength)}})},k=function(b){b.find(".passwordfield__input").each(function(){var d=$(this);if("true"!==d.attr("data-pass-upgraded")){var b=d.parent(),c=d.attr("id"),g='\n
      \n
    • settings'+a.config().LANG[28]+'
    • \n
    • vpn_key'+a.config().LANG[29]+'
    • \n
    • refresh'+a.config().LANG[30]+"
    ";b.after('
    ');b.next(".password-actions").prepend('').prepend('remove_red_eye').prepend(g);d.on("keyup",function(){a.checkPassLevel(d)});b=d.parent().next();b.find(".passGen").on("click",function(){f(d);d.blur()});b.find(".passComplexity").on("click",function(){h()});b.find(".showpass").on("mouseover",function(){$(this).attr("title",d[0].dataset.pass)});b.find(".reset").on("click",function(){d.val(""); +var a=$("#"+c+"_repeat");0remove_red_eye');if(1===b.data("clipboard")){var e=$('content_paste');b.parent().after(e).after(c)}else b.parent().after(c); +c.on("mouseover",function(){c.attr("title",b.val())})})},n=function(b){e.info("setupDatePicker");var c={format:"YYYY-MM-DD",lang:a.config().LOCALE.substr(0,2),time:!1,cancelText:a.config().LANG[44],okText:a.config().LANG[43],clearText:a.config().LANG[30],nowText:a.config().LANG[56],minDate:new Date,triggerEvent:"dateIconClick"};b.find(".password-datefield__input").each(function(){var b=$(this),d=b.parent();b.bootstrapMaterialDatePicker(c);var g=d.find("input[name="+b.data("dst-unix")+"]");g.val(moment.tz(b.val(), +a.config().TIMEZONE).format("X"));d.next("i").on("click",function(){b.trigger("dateIconClick")});b.on("change",function(){g.val(moment.tz(b.val(),a.config().TIMEZONE).format("X"))})})};return{passwordDetect:k,password:f,viewsTriggers:{main:function(){var a=document.querySelector(".mdl-layout");$(".mdl-layout__drawer").find("a").click(function(){a.MaterialLayout.toggleDrawer()})},search:function(){var b=$("#frmSearch"),c=$("#res-content");b.find("button.btn-clear").on("click",function(a){$(".icon-searchfav").find("i").removeClass("mdl-color-text--amber-A200")}); +b.find(".icon-searchfav").on("click",function(){var c=$(this).find("i"),d=b.find("input[name='searchfav']");0==d.val()?(c.addClass("mdl-color-text--amber-A200"),c.attr("title",a.config().LANG[53]),d.val(1)):(c.removeClass("mdl-color-text--amber-A200"),c.attr("title",a.config().LANG[52]),d.val(0));b.submit()});var e=b.find("#tags")[0],f=b.find(".search-filters-tags"),g=b.find("i.show-filter");c.on("click","#data-search-header .sort-down,#data-search-header .sort-up",function(){var b=$(this);b.parent().find("a").addClass("filterOn"); +a.appActions().account.sort(b)}).on("click","#search-rows i.icon-favorite",function(){var b=$(this);a.appActions().account.saveFavorite(b,function(){"on"===b.data("status")?(b.addClass("mdl-color-text--amber-A100"),b.attr("title",a.config().LANG[50]),b.html("star")):(b.removeClass("mdl-color-text--amber-A100"),b.attr("title",a.config().LANG[49]),b.html("star_border"))})}).on("click","#search-rows span.tag",function(){f.is(":hidden")&&g.trigger("click");e.selectize.addItem($(this).data("tag-id"),!1)}); +g.on("click",function(){var a=$(this);f.is(":hidden")?(f.slideDown("slow"),a.html(a.data("icon-up"))):(f.slideUp("slow"),a.html(a.data("icon-down")))});-1!==e.selectedIndex&&g.trigger("click")},common:function(a){k(a);n(a)}},loading:c,ajax:{complete:function(){e.info("ajax:complete");componentHandler.upgradeDom()}},html:{getList:function(a,c){var b=$('
      '),d=$('
    • '),e=$(''),f=''+ +(void 0===c||""===c?"description":c)+"";a.forEach(function(a){var c=e.clone();c.append(f);c.append(a);a=d.clone().append(c);b.append(a)});return b},tabs:{add:function(a,c,e,f){a=$(a);var b;1===f&&(a.parent().find("#tabs-"+c).addClass("is-active"),b="is-active");a.append(''+e+"")}}}}}; diff --git a/app/modules/web/themes/material-blue/views/account/viewpass.inc b/app/modules/web/themes/material-blue/views/account/viewpass.inc index b7124d26..731c2fad 100644 --- a/app/modules/web/themes/material-blue/views/account/viewpass.inc +++ b/app/modules/web/themes/material-blue/views/account/viewpass.inc @@ -24,7 +24,7 @@ - +