let users_db_list = null;
function ShowDeleteUserConfirm(elem, footprint) {
let uname = /^user_/.test(footprint) ? $('.' + footprint).data('uname') : $('#_mongo_user_db_item_' + footprint + '_').data('uname');
$('#_mongo_user_deleting_footprint_').val(footprint);
$('#_mongodb_user_to_remove_').text(uname);
$('#_mongo_delete_user_modal_').modal('show');
}
function OpenModaluser(parent_ancestor) {
let uname = parent_ancestor.data('uname');
let dbname = parent_ancestor.data('dbname');
let role = parent_ancestor.data('role');
$('#_user_role').val(role);
$('#_mongo_user_modal_dbname_').val(dbname);
$('#_mongodb_username_wrapper_').hide();
$('#_mongodb_manage_username_wrapper_').show();
$('#_mongodb_manage_username_wrapper_ span').text(uname);
$('#_mongodb_modal_user_title_').text('{{langmod.LABMON39}}');
$('#_mongo_manage_user_modal_').modal('show');
$('#_mongodb_modal_user_save_btn_').unbind('click').click(function () {
MongoSendUserInfo('edit', parent_ancestor);
});
}
function manageUserFromList(elem) {
OpenModaluser($(elem).closest('.mongodb-user-list-item'));
}
function manageUsermodal(elem) {
OpenModaluser($(elem).closest('.mongo-userdb-item-wrapper'));
}
function renderUserDBItem(user, dbname, users_length, footprint, uindex) {
return '<div class="db_list_user_' + dbname + '_' + user.uname + ' mongo-userdb-item-wrapper' + (uindex > 1 ? ' mongo-userdb-item-hidden' : '') + '" id="_mongo_user_db_item_' + footprint + '_" data-role="' + user.role + '" data-dbname="' + dbname + '" data-uname="' + user.uname + '">' +
'<div class="mongo-userdb-item' + (users_length === 1 ? ' mongo-userdb-item-alone' : '') + '">' +
'<span>' + user.uname + ' (<b><span class="user_item_role_' + dbname + '_' + user.uname + ' mongodb-user-role-container">' + parseRoleDisplay(user.role) + '</span></b>)</span> ' +
// '<button class="btn btn-success btn-xs" title="Change password" data-toggle="tooltip" data-placement="top"><i class="fa fa-lock"></i></button>' +
'<div>' +
'<button class="btn btn-success btn-xs" title="{{langmod.LABMON35}}" data-toggle="tooltip" data-placement="top" onclick="manageUsermodal(this)"><i class="fa fa-cogs"></i></button>' +
'<button class="btn btn-warning btn-xs" title="{{langmod.LABMON36}}" data-toggle="tooltip" data-placement="top" onclick="ShowDeleteUserConfirm(this,\'' + footprint + '\')"><i class="fa fa-trash"></i></button>' +
'</div>' +
'</div>' +
'</div>';
}
function UpdateUserInfoInUI(user_info, anchor) {
if (user_info.type === 'edit') {
anchor.data('role', user_info.user_data.role);
let role_display = parseRoleDisplay(user_info.user_data.role);
// anchor.find('.mongodb-user-role-container').text(role_display);
$('.user_item_' + user_info.user_data.dbname + '_' + user_info.user_data.uname + ' .users-list-role-container').text(role_display);
$('.user_item_role_' + user_info.user_data.dbname + '_' + user_info.user_data.uname + '.mongodb-user-role-container').text(role_display);
} else {
let users_container = $('#_mongo_db_item_' + anchor + ' .mongo-userdb-items');
let dbname = $('#_mongo_db_item_' + anchor).data('name');
let user_items = users_container.find('.mongo-userdb-item-wrapper');
let uindex = user_items.length;
let user = {
uname: user_info.user_data.uname,
role: user_info.user_data.role,
dbname: user_info.user_data.dbname
};
if (users_db_list !== null) {
users_db_list.push({
name: user_info.user_data.uname,
database: user_info.user_data.dbname,
role: user_info.user_data.role
});
}
let html_user = renderUserDBItem(user, dbname, uindex + 1, anchor + '_' + uindex, uindex);
if (uindex == 0) {
users_container.find('.mongo-userdb-not-users').remove();
users_container.prepend(html_user);
users_container.find('.mongo-userdb-item').addClass('mongo-userdb-item-alone');
} else {
user_items.last().after(html_user);
users_container.find('.mongo-userdb-item-alone').removeClass('mongo-userdb-item-alone');
if (users_container.find('.mongo-userdb-item-hidden').is(':visible')) {
$('#_mongo_user_db_item_' + anchor + '_' + uindex + '_').slideDown('fast');
}
if (uindex >= 2) {
users_container.find('.mongodb-users-display-control').slideDown('fast');
}
}
$('[data-toggle="tooltip"]').tooltip();
}
}
function BindUserModal() {
let optpass1 = {
ui: {
container: "#pass_container",
showVerdictsInsideProgressBar: true,
viewports: {
progress: ".pwstrength_viewport_progress"
}
},
common: {
debug: false,
}
}
$('#_user_new_pass_field').pwstrength(optpass1);
}
function showMoreOrLessUsers(elem, less) {
let toShow = 'vless-users-btn';
let toHide = 'vmore-users-btn';
let parent_items_hidden = $(elem).closest('.mongo-userdb-items').find('.mongo-userdb-item-hidden');
if (less != undefined) {
toHide = 'vless-users-btn';
toShow = 'vmore-users-btn';
parent_items_hidden.slideUp('fast');
} else {
parent_items_hidden.slideDown('fast');
}
let control_div = $(elem).parent();
control_div.find('.' + toHide).hide();
control_div.find('.' + toShow).show();
}
function parseRoleDisplay(role) {
if (role == 'read') {
return '{{langmod.LABMON37}}';
} else {
return '{{langmod.LABMON38}}';
}
}
function LoadeDBUsers() {
if (users_db_list === null){
uchip.slideToggle('#_mongdb_users_loader_', '#_mongdb_users_list_wrapper_');
getMongoDBUsersList(function(resp_data){
users_db_list = resp_data.list;
renderUsersList();
uchip.slideToggle('#_mongdb_users_list_wrapper_', '#_mongdb_users_loader_');
}, function(){
$('#_mongdb_users_list_wrapper_').html('<div class="mongodb-user-list-error">' +
'<i class="fa fa-ban text-danger"></i>' +
'<h5>{{langmod.LABMON32}}</h5>' +
'<button class="btn btn-success">' +
'<i class="fa fa-refresh"></i> {{langmod.LABMON33}}'+
'</button>' +
'</div>');
uchip.slideToggle('#_mongdb_users_list_wrapper_', '#_mongdb_users_loader_');
});
}else{
renderUsersList();
}
}
function MongoDBUserDeletionConfirmed() {
let footprint = $('#_mongo_user_deleting_footprint_').val();
let db_user_item = /^user_/.test(footprint) ? $('.' + footprint) : $('#_mongo_user_db_item_' + footprint + '_');
let delete_button = db_user_item.find('.btn-warning');
db_user_item.addClass('deleting_tr');
uchip.handleButton(delete_button, 'fa-trash');
db_user_item.find('.btn').prop('disabled', true);
$('#_mongo_delete_user_modal_').modal('hide');
let user_data = {
uname: db_user_item.data('uname'),
dbname: db_user_item.data('dbname')
};
sendMongoDBUserDeletion(user_data, function () {
function cleanUserList(user_data) {
let user_item_list = $('.user_item_' + user_data.dbname + '_' + user_data.uname);
if (user_item_list.length > 0) {
user_item_list.slideUp('fast', function () {
users_db_table.row(this).remove().draw();
});
}
}
if (/^user_/.test(footprint)) {
db_user_item = $('.db_list_user_' + user_data.dbname + '_' + user_data.uname);
}
db_user_item.slideUp('fast', function () {
let parent_ancestor = db_user_item.parent();
if (db_user_item.hasClass('mongo-userdb-item-hidden')) {
db_user_item.remove();
if (parent_ancestor.find('.mongo-userdb-item-hidden').length === 0) {
parent_ancestor.find('.mongodb-users-display-control').fadeOut('fast');
}
} else {
let next_item = db_user_item.parent().find('.mongo-userdb-item-hidden').first();
if (next_item.length === 0) {
db_user_item.remove();
let item_wrappers = parent_ancestor.find('.mongo-userdb-item-wrapper');
if (item_wrappers.length === 1) {
item_wrappers.find(".mongo-userdb-item").animate({ height: "5rem" });
}
} else if (next_item.is(':visible')) {
next_item.removeClass('mongo-userdb-item-hidden');
setUserItemVisibleEvent(next_item, db_user_item);
} else {
next_item.slideDown('fast', function () {
setUserItemVisibleEvent(next_item, db_user_item);
});
}
}
let item_wrappers_2 = parent_ancestor.find('.mongo-userdb-item-wrapper');
if (item_wrappers_2.length == 0 ){
parent_ancestor.prepend('<div class="mongo-userdb-not-users"><h5>{{langmod.LABMON55}}</h5></div>');
}
if (users_db_list !== null){
let user_index = users_db_list.findIndex(function(user){
return user.name == user_data.uname && user.database == user_data.dbname;
});
if (user_index >= 0){
users_db_list.splice(user_index, 1);
}
}
// parent_ancestor.find('.mongo-userdb-item-alone').removeClass('mongo-userdb-item-alone');
// mongo-userdb-item
cleanUserList(user_data);
});
noti_bubble('{{langmod.LABMON66}}', '{{langmod.LABMON18}}', 'success', false, false, '3000', true);
}, function () {
db_user_item.removeClass('deleting_tr');
uchip.handleButton(delete_button, 'fa-trash', true);
db_user_item.find('.btn').prop('disabled', false);
});
}
function setUserItemVisibleEvent(elem, db_user_item) {
$(elem).removeClass('mongo-userdb-item-hidden');
if (db_user_item.parent().find('.mongo-userdb-item-hidden').length === 0) {
db_user_item.parent().find('.mongodb-users-display-control').fadeOut('fast');
}
db_user_item.remove();
}
function renderUsersList(){
let html_list = '';
if (users_db_list.length > 0) {
let html_content = '';
index = 0;
users_db_list.forEach(function (user) {
let footprint = 'user_item_' + user.database + '_' + user.name;
html_content += '<tr id="_mongo_db_user_item_' + index + '" class="mongodb-user-list-item ' + footprint + '" data-role="' + user.role + '" data-dbname="' + user.database + '" data-uname="' + user.name + '">' +
'<td>' + user.name + '</td>' +
'<td>' + user.database + '</td>' +
'<td><span class="users-list-role-container">' + parseRoleDisplay(user.role) + '</span></td>' +
'<td width="90">' +
'<div class="mongo-db-actions">' +
'<button title="{{langmod.LABMON39}}" data-toggle="tooltip" data-placement="top" onclick="manageUserFromList(this)" class="btn btn-success btn-md"><i class="fa fa-cogs"></i></button>' +
'<button class="btn btn-warning btn-md" data-name="' + user.name + '" data-user="' + user.user + '" title="{{langmod.LABMON40}}" data-toggle="tooltip" data-placement="top" onclick="ShowDeleteUserConfirm(this,\'' + footprint + '\')"><i class="fa fa-trash"></i></button>' +
'</div>' +
'</td>' +
'</tr>';
index++;
});
html_list = '<table class="table mongodb_users_table table-striped table-bordered table-hover" style="width:100% !important;">' +
'<thead>' +
'<tr role="row">' +
'<th>{{langmod.LABMON41}}</th>' +
'<th>{{langmod.LABMON42}}</th>' +
'<th>{{langmod.LABMON43}}</th>' +
'<th width="90">{{langmod.LABMON44}}</th>' +
'</tr>' +
'</thead>' +
'<tbody id="contenttr">' +
html_content +
'</tbody>' +
'</table>';
$('#_mongdb_users_list_wrapper_').html(html_list);
users_db_table = $('.mongodb_users_table').removeAttr('width').DataTable({
columnDefs: [
{ width: 50, targets: 3 }
],
"bAutoWidth": false,
});
} else {
html_list = '<div class="mongodb-empty-list-database">' +
'<h4>{{langmod.LABMON45}}</h4>' +
// '<button class="btn btn-success" onclick="addNewNodeJSApp()">' +
// '<i class="fa fa-plus"></i> ' +
// '{{langmod.LABNODEJS115}}'
// '</button>' +
'</div>';
$('#_mongdb_users_list_wrapper_').html(html_list);
}
$('[data-toggle="tooltip"]').tooltip();
}
function CleanUserModal() {
$('#_mongodb_username_input_').val('');
$('#_user_role').val('');
$('#_user_new_pass_field').val('');
$('#_user_new_pass_field').pwstrength("forceUpdate");
$('#_user_new_pass_field_confirm').val('');
$('#_mongo_manage_user_modal_ .error-field').removeClass('error-field');
}
function LockModalUserButtons(status) {
$('#_mongodb_modal_user_cancel_btn_').prop('disabled', status);
uchip.handleButton('#_mongodb_modal_user_save_btn_', 'fa-flopp-o', status === true ? undefined : false);
}
function AddMongoDBUser(elem, index) {
let dbname = $(elem).data('dbname');
$('#_mongo_user_modal_dbname_').val(dbname);
$('#_mongodb_modal_user_title_').text('Adding user to database: ' + dbname);
$('#_mongodb_manage_username_wrapper_').hide();
$('#_mongodb_username_wrapper_').show();
$('#_mongodb_user_modal_sysowner_').text('{{ users }}' + '_');
$('#_mongo_manage_user_modal_').modal('show');
$('#_mongodb_modal_user_save_btn_').unbind('click').click(function () {
MongoSendUserInfo('new', index);
});
}
function MongoValidateuserForm() {
let valid = true;
let uname = $('#_mongodb_username_input_').val();
let dbname = $('#_mongo_user_modal_dbname_').val();
let error_message = '{{langmod.LABMON30}}';
let is_new_user = $('#_mongodb_username_input_').is(':visible');
if (is_new_user) {
if (/^[A-Za-z0-9\_\-]+$/.test(uname) === false) {
valid = false;
$('#_mongodb_username_input_').addClass('error-field');
} else {
uname = $('#_mongodb_user_modal_sysowner_').text() + uname;
$('#_mongodb_username_input_').removeClass('error-field');
}
if ($('#_user_new_pass_field').val() == '') {
valid = false;
$('#_user_new_pass_field').addClass('error-field');
} else {
$('#_user_new_pass_field').removeClass('error-field');
}
} else {
uname = $('#_mongodb_manage_username_wrapper_ span').text();
}
if ($('#_user_role').val() == '') {
valid = false;
$('#_user_role').addClass('error-field');
} else {
$('#_user_role').removeClass('error-field');
}
if ($('#_user_new_pass_field').val() != $('#_user_new_pass_field_confirm').val()) {
$('#_user_new_pass_field').addClass('error-field');
$('#_user_new_pass_field_confirm').addClass('error-field');
error_message = valid === true ? '{{langmod.LABMON31}}' : error_message + '<br /><b>{{langmod.LABMON31}}</b>';
valid = false;
} else if (!is_new_user || (is_new_user && $('#_user_new_pass_field').val() != '')) {
$('#_user_new_pass_field').removeClass('error-field');
$('#_user_new_pass_field_confirm').removeClass('error-field');
}
if (valid === true) {
return {
dbname: dbname,
uname: uname,
role: $('#_user_role').val(),
pass: $('#_user_new_pass_field').val(),
};
} else {
noti_bubble(error_message, '{{langmod.LABMON20}}', 'error', false, false, '5000', true);
return false;
}
}
function MongoSendUserInfo(type, anchor) {
let user_data = MongoValidateuserForm();
if (user_data) {
LockModalUserButtons(true);
// let user_info = ;
sendMongoDBUserInfo(JSON.stringify(user_data), type, function () {
UpdateUserInfoInUI({
user_data: user_data,
type: type
}, anchor);
LockModalUserButtons(false);
$('#_mongo_manage_user_modal_').modal('hide');
// $.gritter.add({
// title: '{{langmod.LABMONSUCCESS}}',
// text: '{{langmod.LABMON34}}',
// time: 3500,
// close_icon: '',
// icon: 'icomoon-icon-quill-2',
// class_name: 'success-notice'
// });
noti_bubble('{{langmod.LABMON34}}', '{{langmod.LABMONSUCCESS}}', 'success', false, false, '3000', true);
}, function () {
LockModalUserButtons(false);
});
}
}
function sendMongoDBUserDeletion(user_data, success, cleaner) {
uchip.call('module=mongodb_manager&acc=delete_mongodb_user', {
data: 'uname=' + user_data.uname + '&dbname=' + user_data.dbname,
callback: function (response) {
if (response.hasOwnProperty('result') && response.result === 'success') {
success(response);
} else {
let message_error = '{{langmod.LABMON23}}';
if (response.hasOwnProperty('code')) {
if (response.code == 1) {
message_error = '{{langmod.LABMON46}}';
} else if (response.code == 2) {
message_error = '{{langmod.LABMON47}}';
} else if (response.code == 3) {
message_error = '{{langmod.LABMON48}}';
}
}
noti_bubble(message_error, '{{langmod.LABMON20}}', 'error', false, false, '5000', true);
cleaner();
}
}
});
}
function sendMongoDBUserInfo(user_data, type, success, cleaner) {
uchip.call('module=mongodb_manager&acc=save_user_info', {
data: 'user_data=' + user_data + '&type=' + type,
callback: function (response) {
if (response.hasOwnProperty('result') && response.result === 'success') {
success(response);
} else {
// let message_error = '{{langmod.LABMON23}}';
let message_error = '{{langmod.LABMON23}}';
if (response.hasOwnProperty('code')) {
if (response.code == 1) {
message_error = '{{langmod.LABMON48}}';
} else if (response.code == 2) {
message_error = '{{langmod.LABMON49}}';
} else if (response.code == 3) {
message_error = '{{langmod.LABMON51}}';
} else if (response.code == 5) {
message_error = '{{langmod.LABMON52}}';
} else if (response.code == 4) {
message_error = '{{langmod.LABMON53}}';
} else if (response.code == 6) {
message_error = '{{langmod.LABMON54}}';
}
}
noti_bubble(message_error, '{{langmod.LABMON20}}', 'error', false, false, '4000', true);
cleaner();
}
}
});
}
function getMongoDBUsersList(success, cleaner) {
uchip.call('module=mongodb_manager&acc=users_list', {
callback: function(response){
if (response.hasOwnProperty('result') && response.result === 'success') {
success(response);
} else {
let message_error = '{{langmod.LABMON23}}';
noti_bubble(message_error, '{{langmod.LABMON20}}', 'error', false, false, '5000', true);
cleaner();
}
}
});
} |