ElixirVault/www/system-brs-core/sys/sysUsersManager/js/sysUsersManager.js

390 lines
15 KiB
JavaScript

var SysUsersManager = (function() {
function SysUsersManager(){
var _this = this;
if(CBase.dt && CBase.dt.profile){
_this.oBlank = new CBlank();
_this.oBlank.loadBlankView();
}else{
_this.oTable = new CTable("data");
_this.oTable.loadTableData();
}
}
// Rewrite CTable object callback
if(typeof CTable !== 'undefined'){
CTable.prototype.tableObjectCallback = function(oTable){
var _this = this;
oTable.find("a#iCreateQRCode").click(function(){
CBase.jsModule.CreateQRDialogBox();
});
// Clone blank action
oTable.find("a#iclone").click(function(){
CBase.message.hide(true, false);
_this.loadRecord(false, $(".dxr:not(.head) li.first div.chked").closest("ul").find("#ledit").attr("href") + "/clone:1");
});
};
}else{
$(document).bind('keydown', function(event){
if(CBase.os.win || CBase.os.mac || CBase.os.linux){
if(!event.altKey){
// Set control button
var ctrl = (event.ctrlKey || CBase.os.mac && event.metaKey);
// Ctrl + s - save form
if(event.which == CBase.iKeys.KEY_S && ctrl){
if(CBase.jsModule.oBlank.isVisible){
event.preventDefault();
CBase.jsModule.oBlank.saveBlankView();
return false;
}
}
}
}
});
}
SysUsersManager.prototype.CreateQRDialogBox = function(){
var jqObj = $("#qr_code").clone().css({display : "block"});
jqObj.find("input").focusin(
function(){
$(this).parent().addClass('act');
}).focusout(
function(){
if(!$(this).val().length)
$(this).parent().removeClass('act');
});
var oData = {};
CBase.oDialog.jqDialog.removeAttr("class");
CBase.oDialog.jqDialog.addClass("form-data");
CBase.oDialog.show({
closeBtn: true,
title : $.isDefined(CBase.gM.sCreateQRTitle)?CBase.gM.sCreateQRTitle:"Create QR code",
message : jqObj,
buttons : {
1 : {
lbl : $.isDefined(CBase.gM.sGenQR)?CBase.gM.sGenQR:"Create code",
id : "buttonYes",
click : function(){
jqObj.find("input").each(function(){
oData[$(this).attr("id")] = $(this).val();
});
CBase.ajax({action : "gen2FA-QRCode", data : $.toJSON(oData)}, false, function(d){
if(d && d.sUrl)
jqObj.find("img").prop('src', d.sUrl);
});
}
},
2 : {
lbl : $.isDefined(CBase.gM.sClearCancel)?CBase.gM.sClearCancel:"Cancel",
id : "buttonNo",
click : function(){
CBase.oDialog.hide();
}
}
}
});
};
// Save blank data callback function
CBlank.prototype.saveBlankViewCallback = function(d){
if(d && d.jsonok){
if(d.url) window.location = d.url;
this.jqBlank.find("input:password").val("");
}
};
// Bind additional events
SysUsersManager.prototype.bindLoadableContentActions = function(jqObj){
// Bind collapse / expand
jqObj.find("ul.table-fields div.title").click(function(e){
$(this).toggleClass("exp");
var ctrl = (e.ctrlKey || CBase.os.mac && e.metaKey);
if(ctrl){
if($(this).hasClass("exp")){
$(this).closest("ul.table-fields").find("div.title").addClass("exp").next().slideDown("fast");
}else{
$(this).closest("ul.table-fields").find("div.title").removeClass("exp").next().slideUp("fast");
}
}else{
if($(this).hasClass("exp")){
$(this).next().slideDown("fast");
}else{
$(this).next().slideUp("fast");
}
}
});
// Bind table column sort
jqObj.find("ul.tfields").each(function(){
$(this).sortable({
axis: 'y',
helper : 'clone',
items: "> li:not(#h_checkbox, #h_buttons, .title)"
}).disableSelection();
});
// Disable checkboxes
jqObj.find("li#h_checkbox input, li#h_buttons input").attr("disabled", true);
};
// Rewrite CBase form callback
CBlank.prototype.viewCallback = function(jqObj){
var _this = this;
jqObj.find(".setting-block, #p2fa, #psettings, #ppasschange, #tablescfg, #portletscfg, #user_groups, #user_permissions, #groups, #permissions").find("h3").click(function(){
var jqParent = $(this).parent();
if(jqParent.hasClass("load"))
_this.loadBlankBlockSubContent(jqParent, function(jqObj, d){
CBase.jsModule.bindLoadableContentActions(jqObj, d);
});
else
_this.showHideSubContentPanel(jqParent);
});
this.oBtnPan.find("#fcancel").click(function(){
CBase.message.hide();
if(_this.isModiffied){
CBase.oTable.filterTableData(true);
}else{
CBase.oTable.show();
}
});
this.oBtnPan.find("#fsave").click(function(){
_this.saveBlankView();
});
// Auto pass gen switch
jqObj.find("#user_passgen").change(function(){
var jqPsCnt = $("#ppasschange");
if($(this).val()){
CBase.ajax({action: "genRandomPwd"}, false, function(d){
jqPsCnt.find("#auto-gen-pwd").find("b").html(d.key);
jqPsCnt.find("#auto-gen-pwd").stop(true, true).fadeIn("fast");
_this.showHideSubContentPanel(jqPsCnt.find("> h3").parent(), true);
jqPsCnt.find("input:password").val(d.key);
});
}else{
jqPsCnt.find("#auto-gen-pwd").stop(true, true).fadeOut("fast");
jqPsCnt.find("input:password").val("");
_this.showHideSubContentPanel(jqPsCnt.find("> h3").parent(), false);
}
});
jqObj.find("#copy_code").bind({
click : function(){
if(CBase.copyToClipboard($(this).parent().find("b").html())){
var jqNode = $(this).find(".errMsg");
jqNode.html(jqNode.attr("data-ok-msg"));
}
},
mouseenter : function(){
var jqNode = $(this).find(".errMsg");
jqNode.html(jqNode.attr("data-base-msg"));
}
});
jqObj.find("#user_theme .chk").change(function(){
jqObj.find("#user_theme .chked").not(this).removeClass("chked");
if(!jqObj.find("#user_theme .chked").length)
$(this).addClass("chked");
});
jqObj.find("#user_theme .chk").closest("li").click(function(e){
e.stopPropagation();
$(this).find(".chk").click();
});
// 2FA authenticator setup / removal
jqObj.find("#act_2fa").click(function(){
CBase.jsModule.activate2FA();
});
jqObj.find("#dis_2fa").click(function(){
CBase.jsModule.deactivate2FA();
});
// Bind pp-search
this.bindSearch(jqObj);
this.bindBlankActions(jqObj);
};
// Activate 2FA
SysUsersManager.prototype.activate2FA = function(){
var _this = this;
var sUrl = (CBase.dt && CBase.dt.profile ? _this.oBlank.url : _this.oTable.oBlank.url);
CBase.ajax({action : "get2FA-QRCode"}, sUrl, function(d){
if(d && d.html){
CBase.oDialog.show({
closeBtn: true,
title : d.msgEnableAuth ? d.msgEnableAuth : "...",
message : d.html,
buttons : {
1 : {
lbl : d.buttonCancel ? d.buttonCancel : "Cancel",
id : "buttonNo",
click : function(){
CBase.oDialog.hide();
}
},
2 : {
lbl : d.buttonYes ? d.buttonYes : "Next step",
id : "buttonYes",
click : function(jqObj){
jqObj.object.find("#buttonNo, #buttonYes, #step1").hide();
jqObj.object.find("#buttonBack, #buttonActivate2fa, #step2").fadeIn("fast");
}
},
// Step 2 buttons
3 : {
lbl : d.buttonBack ? d.buttonBack : "Go Back",
id : "buttonBack",
click : function(jqObj){
jqObj.object.find("#buttonBack, #buttonActivate2fa, #step2").hide();
jqObj.object.find("#buttonNo, #buttonYes, #step1").fadeIn("fast");
}
},
4 : {
lbl : d.buttonActivate ? d.buttonActivate : "Activate",
id : "buttonActivate2fa",
click : function(){
if(_this.o2FAValidator.isFormValid()){
CBase.ajax({
action : "activate-2FA",
secret : $("#secret").text(),
code : $("#code").val()
}, sUrl, function(d){
if(d){
if(d.error && d.data)
_this.o2FAValidator.showErrorsByObject(d.data);
if(d.jsonok){
$("#p2fa").addClass("enabled");
CBase.oDialog.hide();
}
}
});
}
}
}
},
callbackAfterAppend : function(jqObj){
jqObj.find("#buttonBack, #buttonActivate2fa").hide();
jqObj.find("#reload-qr").click(function(){
CBase.ajax({action : "get2FA-QRCode", reload : 1}, sUrl, function(d){
if(d && d.sUrl && d.sSecret){
jqObj.find("img").prop('src', d.sUrl);
jqObj.find("#secret").html(d.sSecret);
}
});
});
jqObj.find("input").bind({
focus : function(){
$(this).parent().addClass("act");
},
blur : function(){
if(!$(this).val().length)
$(this).parent().removeClass("act");
},
keydown : function(e){
if(e.which == CBase.iKeys.ENTER)
$("#buttonActivate2fa").click();
}
});
// Bind validator
if($.isFunction(Validator) && $.isDefined(CBase.dt.vcfg)){
_this.o2FAValidator = new Validator(CBase.dt.vcfg, "#step2", CBase.gM);
}
}
});
}
});
};
// Deactivate 2FA
SysUsersManager.prototype.deactivate2FA = function(){
var _this = this;
var sUrl = (CBase.dt && CBase.dt.profile ? _this.oBlank.url : _this.oTable.oBlank.url);
CBase.ajax({action : "get2FA-4Deactivate"}, sUrl, function(d){
if(d && d.html){
CBase.oDialog.show({
closeBtn: true,
title : d.msgDisableAuth ? d.msgDisableAuth : "...",
message : d.html,
buttons : {
1 : {
lbl : d.buttonCancel ? d.buttonCancel : "Cancel",
id : "buttonNo",
click : function(){
CBase.oDialog.hide();
}
},
2 : {
lbl : d.buttonDeactivate ? d.buttonDeactivate : "Deactivate",
id : "buttonDeactivate",
click : function(){
if(_this.o2FAValidator.isFormValid()){
CBase.ajax({
action : "deactivate-2FA",
code : $("#code").val()
}, sUrl, function(d){
if(d){
if(d.error && d.data)
_this.o2FAValidator.showErrorsByObject(d.data);
if(d.jsonok){
$("#p2fa").removeClass("enabled");
CBase.oDialog.hide();
}
}
});
}
}
}
},
callbackAfterAppend : function(jqObj){
jqObj.find("input").bind({
focus : function(){
$(this).parent().addClass("act");
},
blur : function(){
if(!$(this).val().length)
$(this).parent().removeClass("act");
},
keydown : function(e){
if(e.which == CBase.iKeys.ENTER)
$("#buttonDeactivate").click();
}
});
// Bind validator
if($.isFunction(Validator) && $.isDefined(CBase.dt.vcfg)){
_this.o2FAValidator = new Validator(CBase.dt.vcfg, "#step2", CBase.gM);
}
}
});
}
});
};
return SysUsersManager;
})();