/* Copyright 2012-2020 OpenBroadcaster, Inc. This file is part of OpenBroadcaster Server. OpenBroadcaster Server is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. OpenBroadcaster Server is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with OpenBroadcaster Server. If not, see . */ OB.User = new Object(); OB.User.init = function() { OB.Callbacks.add('ready',-4,OB.User.initMenu); } OB.User.initMenu = function() { //T Permissions OB.UI.addSubMenuItem('admin', 'Permissions', 'user_permissions', OB.User.managePermissions, 60, 'manage_permissions'); //T User Management OB.UI.addSubMenuItem('admin', 'User Management', 'user_manage', OB.User.manageUsers, 70, 'manage_users'); } OB.User.manageUsers = function() { OB.UI.replaceMain('user/manage_users.html'); OB.API.post('users','user_registration_get',{},function(response) { if(response.data==true) $('#users_allow_registration_checkbox').prop('checked',true); }); $('#users_allow_registration_checkbox').change(OB.User.allowRegistrationToggle); OB.User.manageUsersList(); } OB.User.allowRegistrationToggle = function() { var checked = $('#users_allow_registration_checkbox').is(':checked'); OB.API.post('users','user_registration_set',{'user_registration': checked}, function(response) { }); } OB.User.manage_users_sort_col = false; OB.User.manage_users_sort_desc = false; OB.User.manageUsersSort = function(column) { if(column == OB.User.manage_users_sort_col) { OB.User.manage_users_sort_desc=!OB.User.manage_users_sort_desc; } else { OB.User.manage_users_sort_col = column; OB.User.manage_users_sort_desc=false; } OB.User.manageUsersList(); } OB.User.manageUsersList = function() { var postfields = new Object(); postfields.sort_col = OB.User.manage_users_sort_col; postfields.sort_desc = OB.User.manage_users_sort_desc; OB.API.post('users','user_manage_list',postfields,function(data) { $('#user_list_table tbody').html(''); if(data.status!=true) return false; OB.User.manage_users_sort_col = data.data[1]; OB.User.manage_users_sort_desc = data.data[2]; $.each(data.data[0],function(index,userdata) { var $html = $(''); $html.append(''+htmlspecialchars(userdata.display_name)+''); $html.append(''+htmlspecialchars(userdata.email)+''); $html.append(''+format_timestamp(userdata.created)+''); $html.append(''+format_timestamp(userdata.last_access)+''); $html.append(''); //T Edit $html.append(''); $html.attr('id','user_'+userdata.id); $html.attr('data-id',userdata.id); $html.attr('data-username',userdata.username); $html.attr('data-display_name',userdata.display_name); $html.attr('data-name',userdata.name); $html.attr('data-email',userdata.email); $html.attr('data-enabled',userdata.enabled); $('#user_list_table tbody').append($html); // $('#user_'+userdata.id).dblclick(function() { OB.User.manageUsersEdit(userdata.id); }); $.each(userdata.groups,function(index,group) { var $groupname = $('#user_'+userdata.id+' .user_groups'); $groupname.append(''+htmlspecialchars(group.name)); if (typeof(userdata.groups[index+1]) != 'undefined') $groupname.append(', '); $groupname.append(''); }); }); }); } OB.User.manageUsersGroupList = function(callback) { OB.API.post('users','group_list',{},function(data) { groups = data.data; $.each(groups,function(index,group) { var html = '
'+htmlspecialchars(group.name)+'
'; $('#user_addedit_group_list').append(html); }); if(callback) callback(); }); } OB.User.manageUsersNew = function() { OB.UI.openModalWindow('user/manage_users_addedit.html'); OB.User.manageUsersGroupList(); $('#user_name_input').val(''); $('#user_username_input').val(''); $('#user_display_name_input').val(''); $('#user_email_input').val(''); $('#user_enabled_input').val(1); $('#user_addedit_id').val(''); $('.edit_only').hide(); } OB.User.manageUsersEdit = function(id) { OB.UI.openModalWindow('user/manage_users_addedit.html'); var $user = $('#user_'+id); $('#user_name_input').val($user.attr('data-name')); $('#user_username_input').val($user.attr('data-username')); $('#user_display_name_input').val($user.attr('data-display_name')); $('#user_email_input').val($user.attr('data-email')); $('#user_enabled_input').val($user.attr('data-enabled')); $('#user_addedit_id').val($user.attr('data-id')); $('.edit_only').show(); OB.User.manageUsersGroupList(function() { $user.find('.user_groups').children().each(function(index,element) { $('#user_addedit_group_list input[value='+$(element).attr('data-group_id')+']').attr('checked',true); }); }); OB.User.manageUsersKeyLoad(id); } OB.User.manageUsersSave = function() { // $('#users_addedit_messagebox').hide(); var fields = new Object(); fields.name = $('#user_name_input').val(); fields.username = $('#user_username_input').val(); fields.display_name = $('#user_display_name_input').val(); fields.email = $('#user_email_input').val(); fields.enabled = $('#user_enabled_input').val(); fields.id = $('#user_addedit_id').val(); fields.password = $('#user_password_input').val(); fields.password_confirm = $('#user_password_confirm_input').val(); fields.group_ids = new Array(); $('#user_addedit_group_list input:checked').each(function(index,element) { fields.group_ids.push($(element).val()); }); fields.appkeys = new Array(); $('#user_appkey_table tbody tr').each(function (index, row) { fields.appkeys.push([ $(row).attr('data-id'), $(row).find('.user_appkey_name').val() ]); }); OB.API.post('users','user_manage_addedit',fields,function(data) { if(data.status==true) { OB.UI.closeModalWindow(); OB.User.manageUsersList(); } else { $('#user_addedit_message').obWidget('error',data.msg); return; } }); } OB.User.manageUsersDelete = function(confirm) { if(!confirm) { /* $('#users_addedit_messagebox').html('

Delete this user?

' + '

    ' + '

').show(); $('#user_addedit_message').obWidget('error',data.msg); deletemeifworks */ //T Are you sure you want to delete this user? //T Yes, Delete //T No, Cancel OB.UI.confirm( 'Are you sure you want to delete this user?', function() { OB.User.manageUsersDelete(true); }, 'Yes, Delete', 'No, Cancel', 'delete' ); } else { OB.API.post('users','user_manage_delete',{'id': $('#user_addedit_id').val()},function(data) { if(data.status==true) { OB.UI.closeModalWindow(); OB.User.manageUsersList(); } else { $('#user_addedit_message').obWidget('error',data.msg); return; } }); } } OB.User.manageUsersKeyAdd = function () { OB.API.post('users', 'user_manage_key_new', {'id': $('#user_addedit_id').val()}, function (response) { if (!response.status) { $('#user_addedit_message').obWidget('error', response.msg); return; } $('#user_appkey_newkeyinfo').show().html( "A new App Key has been created on " + format_timestamp(response.data.created) + ". The secret key to use with your App key requests is:

" + response.data.key + "

Please save this key in a secure place." ); $tr = $('').attr('data-id', response.data.id); $tr.append($('').html('')); $tr.append($('').text(format_timestamp(response.data.created))); $tr.append($('').text(format_timestamp(response.data.last_access))); $tr.append($('').html('')); $('#user_appkey_table tbody').append($tr); }); } OB.User.manageUsersKeyDelete = function (elem) { OB.API.post('users', 'user_manage_key_delete', { 'user_id': $('#user_addedit_id').val(), 'id': $(elem).closest('tr').attr('data-id') }, function (response) { if (!response.status) { $('#user_addedit_message').obWidget('error', response.msg); return; } $(elem).closest('tr').remove(); $('#user_appkey_newkeyinfo').hide(); }); } OB.User.manageUsersKeyLoad = function (id) { OB.API.post('users', 'user_manage_key_load', {id: id}, function (response) { if (!response.status) { $('#user_addedit_message').obWidget('error', response.msg); return; } $.each(response.data, function (index, row) { $tr = $('').attr('data-id', row.id); $tr.append($('').html('')); $tr.append($('').text(format_timestamp(row.created))); $tr.append($('').text(format_timestamp(row.last_access))); $tr.append($('').html('')); $('#user_appkey_table tbody').append($tr); }); }); } OB.User.manage_permissions_list = null; OB.User.managePermissions = function() { OB.UI.replaceMain('user/manage_permissions.html'); OB.API.post('users','permissions_manage_list',{}, function(data) { OB.API.post('users','group_list',{},function(groups) { OB.User.manage_permissions_list = data.data; // this is used later (when adding/editing a group). var group_ids = new Array(); groups = groups.data; $thead = $(''); $thead.append(' '); $.each(groups,function(index,group) { $thead.append(' '+ (group.id!=1 ? '' : '')+ '
'+htmlspecialchars(group.name)+ ''); group_ids.push(group.id); }); $('#permissions_table').prepend($thead); // attach group data to th for later use. $.each(groups,function(index,group) { if(group.permissions) { $('#group_permissions_'+group.id).data('permissions',group.permissions); } }); if(data.status!=false) { var categories = data.data; $.each(categories,function(category,permissions) { //T player if(category.match(/^player: /)) var category_translated = category.replace(/^player: /,OB.t('player')+': '); else var category_translated = category; // no dynamic variable translation for now $('#permissions_table tbody').append(''+ htmlspecialchars(category_translated)+''); $.each(permissions,function(index,permission) { $('#permissions_table tbody').append(''+ htmlspecialchars(permission.description)+''); $.each(groups,function(index,group) { if(group.id==1) return; if(group.permissions.indexOf(permission.name)==-1) var check = ''; else var check = ''; $('#permissions_table tbody tr[data-permission="'+htmlspecialchars(permission.name)+'"]').append(''+check+''); }); }); }); } }); }); } OB.User.managePermissionsDelete = function(confirm) { if(confirm) { OB.API.post('users','permissions_manage_delete',{'id': $('#group_addedit_id').val()},function(data) { if(data.status==true) { OB.UI.closeModalWindow(); OB.User.managePermissions(); } else { $('permissions_addedit_message').obWidget(data.msg); } }); } else { //T Are you sure you want to delete this group? //T Yes, Delete //T No, Cancel OB.UI.confirm( 'Are you sure you want to delete this group?', function() { OB.User.managePermissionsDelete(true); }, 'Yes, Delete', 'No, Cancel', 'delete' ); } } OB.User.managePermissionsSave = function() { fields = new Object(); fields.id = $('#group_addedit_id').val(); fields.name = $('#group_name_input').val(); fields.permissions = new Array(); $('#permissions_addedit_form .permission_checkbox').each(function(index,element) { if($(element).prop('checked')==true) fields.permissions.push($(element).attr('data-name')); }); OB.API.post('users','permissions_manage_addedit',fields,function(data) { if(data.status==true) { OB.UI.closeModalWindow(); OB.User.managePermissions(); } else { $('#permissions_addedit_message').obWidget('error', data.msg) } }); } OB.User.managePermissionsNew = function() { OB.UI.openModalWindow('user/manage_permissions_addedit.html'); //T New Group $('#permissions_addedit_heading').text(OB.t('New Group')); $('.edit_only').hide(); OB.User.managePermissionsForm(); } OB.User.managePermissionsEdit = function(id) { OB.UI.openModalWindow('user/manage_permissions_addedit.html'); //T Edit Group/Permissions $('#permissions_addedit_heading').text(OB.t('Edit Group/Permissions')); $('#group_addedit_id').val(id); $('#group_name_input').val($('#group_permissions_'+id).attr('data-name')); $('.edit_only').show(); OB.User.managePermissionsForm(id); } OB.User.managePermissionsForm = function(id) { var category = null; if(id) var group_permissions = $('#group_permissions_'+id).data('permissions'); $.each(OB.User.manage_permissions_list,function(category,permissions) { //T player if(category.match(/^player: /)) var category_translated = category.replace(/^player: /,OB.t('player')+': '); else var category_translated = category; var $fieldset = $('
'+htmlspecialchars(category_translated)+'
'); $.each(permissions,function(index,permission) { var $fieldrow = $('
'); $fieldrow.append( ''+ ' ' ); if(id && group_permissions.indexOf(permission.name)!=-1) { $fieldrow.find('.permission_checkbox[data-name="'+permission.name+'"]').attr('checked',true); } $fieldset.append($fieldrow); }); $('#permissions_addedit_form').append($fieldset); }); }