Completed gui manager virtual server
This commit is contained in:
parent
6f5a37fb00
commit
c757f53b07
5 changed files with 233 additions and 3 deletions
|
@ -59,11 +59,22 @@
|
||||||
resize: none;
|
resize: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.properties_messages textarea {
|
.properties_messages textarea {
|
||||||
height: 70px;
|
height: 70px;
|
||||||
resize: none;
|
resize: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.properties_misc {
|
||||||
|
.complains {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: auto auto auto;
|
||||||
|
grid-template-rows: auto auto;
|
||||||
|
grid-column-gap: 5px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.container {
|
.container {
|
||||||
padding: 6px;
|
padding: 6px;
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,10 @@ enum GroupTarget {
|
||||||
|
|
||||||
class GroupProperties {
|
class GroupProperties {
|
||||||
iconid: number = 0;
|
iconid: number = 0;
|
||||||
|
|
||||||
|
sortid: number = 0;
|
||||||
|
savedb: boolean = false;
|
||||||
|
namemode: number = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
class Group {
|
class Group {
|
||||||
|
@ -66,6 +70,21 @@ class GroupManager {
|
||||||
this.handle.serverConnection.sendCommand("channelgrouplist");
|
this.handle.serverConnection.sendCommand("channelgrouplist");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static sorter() : (a: Group, b: Group) => number {
|
||||||
|
return (a, b) => {
|
||||||
|
if(a.properties.sortid < b.properties.sortid)
|
||||||
|
return 1;
|
||||||
|
if(a.properties.sortid > b.properties.sortid)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if(a.id < b.id)
|
||||||
|
return -1;
|
||||||
|
if(a.id > b.id)
|
||||||
|
return 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
serverGroup?(id: number) : Group {
|
serverGroup?(id: number) : Group {
|
||||||
for(let group of this.serverGroups)
|
for(let group of this.serverGroups)
|
||||||
if(group.id == id) return group;
|
if(group.id == id) return group;
|
||||||
|
@ -103,7 +122,7 @@ class GroupManager {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
let group = new Group(this,target == GroupTarget.SERVER ? groupData["sgid"] : groupData["cgid"], target, type, groupData["name"]);
|
let group = new Group(this,parseInt(target == GroupTarget.SERVER ? groupData["sgid"] : groupData["cgid"]), target, type, groupData["name"]);
|
||||||
for(let key in groupData as any) {
|
for(let key in groupData as any) {
|
||||||
if(key == "sgid") continue;
|
if(key == "sgid") continue;
|
||||||
if(key == "cgid") continue;
|
if(key == "cgid") continue;
|
||||||
|
|
|
@ -33,6 +33,8 @@ namespace Modals {
|
||||||
server_applyHostListener(properties, server.properties, modal.htmlTag.find(".properties_host"), modal.htmlTag.find(".button_ok"));
|
server_applyHostListener(properties, server.properties, modal.htmlTag.find(".properties_host"), modal.htmlTag.find(".button_ok"));
|
||||||
server_applyMessages(properties, server, modal.htmlTag.find(".properties_messages"));
|
server_applyMessages(properties, server, modal.htmlTag.find(".properties_messages"));
|
||||||
server_applyFlood(properties, server, modal.htmlTag.find(".properties_flood"));
|
server_applyFlood(properties, server, modal.htmlTag.find(".properties_flood"));
|
||||||
|
server_applySecurity(properties, server, modal.htmlTag.find(".properties_security"));
|
||||||
|
server_applyMisc(properties, server, modal.htmlTag.find(".properties_misc"));
|
||||||
|
|
||||||
modal.htmlTag.find(".button_ok").click(() => {
|
modal.htmlTag.find(".button_ok").click(() => {
|
||||||
modal.close();
|
modal.close();
|
||||||
|
@ -63,6 +65,10 @@ namespace Modals {
|
||||||
updateButton();
|
updateButton();
|
||||||
}).prop("disabled", !globalClient.permissions.neededPermission(PermissionType.B_VIRTUALSERVER_MODIFY_NAME).granted(1));
|
}).prop("disabled", !globalClient.permissions.neededPermission(PermissionType.B_VIRTUALSERVER_MODIFY_NAME).granted(1));
|
||||||
|
|
||||||
|
tag.find(".virtualserver_name_phonetic").change(function (this: HTMLInputElement) {
|
||||||
|
properties.virtualserver_name_phonetic = this.value;
|
||||||
|
}).prop("disabled", !globalClient.permissions.neededPermission(PermissionType.B_VIRTUALSERVER_MODIFY_NAME).granted(1));
|
||||||
|
|
||||||
tag.find(".virtualserver_password").change(function (this: HTMLInputElement) {
|
tag.find(".virtualserver_password").change(function (this: HTMLInputElement) {
|
||||||
properties.virtualserver_flag_password = this.value.length != 0;
|
properties.virtualserver_flag_password = this.value.length != 0;
|
||||||
if(properties.virtualserver_flag_password)
|
if(properties.virtualserver_flag_password)
|
||||||
|
@ -186,4 +192,120 @@ namespace Modals {
|
||||||
properties.virtualserver_antiflood_points_needed_ip_block = this.valueAsNumber;
|
properties.virtualserver_antiflood_points_needed_ip_block = this.valueAsNumber;
|
||||||
}).prop("disabled", !globalClient.permissions.neededPermission(PermissionType.B_VIRTUALSERVER_MODIFY_ANTIFLOOD).granted(1));
|
}).prop("disabled", !globalClient.permissions.neededPermission(PermissionType.B_VIRTUALSERVER_MODIFY_ANTIFLOOD).granted(1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function server_applySecurity(properties: ServerProperties, server: ServerEntry, tag: JQuery) {
|
||||||
|
server.updateProperties().then(() => {
|
||||||
|
tag.find(".virtualserver_needed_identity_security_level").val(server.properties.virtualserver_needed_identity_security_level);
|
||||||
|
});
|
||||||
|
|
||||||
|
tag.find(".virtualserver_needed_identity_security_level").change(function (this: HTMLInputElement) {
|
||||||
|
properties.virtualserver_needed_identity_security_level = this.valueAsNumber;
|
||||||
|
}).prop("disabled", !globalClient.permissions.neededPermission(PermissionType.B_VIRTUALSERVER_MODIFY_NEEDED_IDENTITY_SECURITY_LEVEL).granted(1));
|
||||||
|
|
||||||
|
tag.find(".virtualserver_codec_encryption_mode").change(function (this: HTMLSelectElement) {
|
||||||
|
properties.virtualserver_codec_encryption_mode = this.selectedIndex;
|
||||||
|
}).prop("disabled", !globalClient.permissions.neededPermission(PermissionType.B_VIRTUALSERVER_MODIFY_ANTIFLOOD).granted(1))
|
||||||
|
.find("option").eq(server.properties.virtualserver_codec_encryption_mode).prop('selected', true);
|
||||||
|
}
|
||||||
|
|
||||||
|
function server_applyMisc(properties: ServerProperties, server: ServerEntry, tag: JQuery) {
|
||||||
|
{ //TODO notify on tmp channeladmin group and vice versa
|
||||||
|
//virtualserver_default_server_group
|
||||||
|
//virtualserver_default_channel_group
|
||||||
|
//virtualserver_default_channel_admin_group
|
||||||
|
{
|
||||||
|
let groups_tag = tag.find(".default_server_group");
|
||||||
|
groups_tag.change(function (this: HTMLSelectElement) {
|
||||||
|
properties.virtualserver_default_server_group = parseInt($(this.item(this.selectedIndex)).attr("group-id"));
|
||||||
|
});
|
||||||
|
|
||||||
|
for(let group of server.channelTree.client.groups.serverGroups.sort(GroupManager.sorter())) {
|
||||||
|
if(group.type != 2) continue;
|
||||||
|
let group_tag = $.spawn("option").text(group.name + " [" + (group.properties.savedb ? "perm" : "tmp") + "]").attr("group-id", group.id);
|
||||||
|
if(group.id == server.properties.virtualserver_default_server_group)
|
||||||
|
group_tag.prop("selected", true);
|
||||||
|
group_tag.appendTo(groups_tag);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
let groups_tag = tag.find(".default_channel_group");
|
||||||
|
groups_tag.change(function (this: HTMLSelectElement) {
|
||||||
|
properties.virtualserver_default_channel_group = parseInt($(this.item(this.selectedIndex)).attr("group-id"));
|
||||||
|
});
|
||||||
|
|
||||||
|
for(let group of server.channelTree.client.groups.channelGroups.sort(GroupManager.sorter())) {
|
||||||
|
if(group.type != 2) continue;
|
||||||
|
let group_tag = $.spawn("option").text(group.name + " [" + (group.properties.savedb ? "perm" : "tmp") + "]").attr("group-id", group.id);
|
||||||
|
if(group.id == server.properties.virtualserver_default_channel_group)
|
||||||
|
group_tag.prop("selected", true);
|
||||||
|
group_tag.appendTo(groups_tag);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
let groups_tag = tag.find(".default_channel_admin_group");
|
||||||
|
groups_tag.change(function (this: HTMLSelectElement) {
|
||||||
|
properties.virtualserver_default_channel_admin_group = parseInt($(this.item(this.selectedIndex)).attr("group-id"));
|
||||||
|
});
|
||||||
|
|
||||||
|
for(let group of server.channelTree.client.groups.channelGroups.sort(GroupManager.sorter())) {
|
||||||
|
if(group.type != 2) continue;
|
||||||
|
let group_tag = $.spawn("option").text(group.name + " [" + (group.properties.savedb ? "perm" : "tmp") + "]").attr("group-id", group.id);
|
||||||
|
if(group.id == server.properties.virtualserver_default_channel_admin_group)
|
||||||
|
group_tag.prop("selected", true);
|
||||||
|
group_tag.appendTo(groups_tag);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
server.updateProperties().then(() => {
|
||||||
|
//virtualserver_antiflood_points_needed_ip_block
|
||||||
|
//virtualserver_antiflood_points_needed_command_block
|
||||||
|
//virtualserver_antiflood_points_tick_reduce
|
||||||
|
|
||||||
|
//virtualserver_complain_autoban_count
|
||||||
|
//virtualserver_complain_autoban_time
|
||||||
|
//virtualserver_complain_remove_time
|
||||||
|
tag.find(".virtualserver_antiflood_points_needed_ip_block").val(server.properties.virtualserver_antiflood_points_needed_ip_block);
|
||||||
|
tag.find(".virtualserver_antiflood_points_needed_command_block").val(server.properties.virtualserver_antiflood_points_needed_command_block);
|
||||||
|
tag.find(".virtualserver_antiflood_points_tick_reduce").val(server.properties.virtualserver_antiflood_points_tick_reduce);
|
||||||
|
tag.find(".virtualserver_complain_autoban_count").val(server.properties.virtualserver_complain_autoban_count);
|
||||||
|
tag.find(".virtualserver_complain_autoban_time").val(server.properties.virtualserver_complain_autoban_time);
|
||||||
|
tag.find(".virtualserver_complain_remove_time").val(server.properties.virtualserver_complain_remove_time);
|
||||||
|
|
||||||
|
tag.find(".virtualserver_weblist_enabled").prop("checked", server.properties.virtualserver_weblist_enabled);
|
||||||
|
});
|
||||||
|
|
||||||
|
tag.find(".virtualserver_antiflood_points_needed_ip_block").change(function (this: HTMLInputElement) {
|
||||||
|
properties.virtualserver_antiflood_points_needed_ip_block = this.valueAsNumber;
|
||||||
|
}).prop("disabled", !globalClient.permissions.neededPermission(PermissionType.B_VIRTUALSERVER_MODIFY_ANTIFLOOD).granted(1));
|
||||||
|
|
||||||
|
tag.find(".virtualserver_antiflood_points_needed_command_block").change(function (this: HTMLInputElement) {
|
||||||
|
properties.virtualserver_antiflood_points_needed_command_block = this.valueAsNumber;
|
||||||
|
}).prop("disabled", !globalClient.permissions.neededPermission(PermissionType.B_VIRTUALSERVER_MODIFY_ANTIFLOOD).granted(1));
|
||||||
|
|
||||||
|
tag.find(".virtualserver_antiflood_points_tick_reduce").change(function (this: HTMLInputElement) {
|
||||||
|
properties.virtualserver_antiflood_points_tick_reduce = this.valueAsNumber;
|
||||||
|
}).prop("disabled", !globalClient.permissions.neededPermission(PermissionType.B_VIRTUALSERVER_MODIFY_ANTIFLOOD).granted(1));
|
||||||
|
|
||||||
|
|
||||||
|
tag.find(".virtualserver_complain_autoban_count").change(function (this: HTMLInputElement) {
|
||||||
|
properties.virtualserver_complain_autoban_count = this.valueAsNumber;
|
||||||
|
}).prop("disabled", !globalClient.permissions.neededPermission(PermissionType.B_VIRTUALSERVER_MODIFY_COMPLAIN).granted(1));
|
||||||
|
|
||||||
|
tag.find(".virtualserver_complain_autoban_time").change(function (this: HTMLInputElement) {
|
||||||
|
properties.virtualserver_complain_autoban_time = this.valueAsNumber;
|
||||||
|
}).prop("disabled", !globalClient.permissions.neededPermission(PermissionType.B_VIRTUALSERVER_MODIFY_COMPLAIN).granted(1));
|
||||||
|
|
||||||
|
tag.find(".virtualserver_complain_remove_time").change(function (this: HTMLInputElement) {
|
||||||
|
properties.virtualserver_complain_remove_time = this.valueAsNumber;
|
||||||
|
}).prop("disabled", !globalClient.permissions.neededPermission(PermissionType.B_VIRTUALSERVER_MODIFY_COMPLAIN).granted(1));
|
||||||
|
|
||||||
|
|
||||||
|
tag.find(".virtualserver_weblist_enabled").change(function (this: HTMLInputElement) {
|
||||||
|
properties.virtualserver_weblist_enabled = $(this).prop("checked");
|
||||||
|
}).prop("disabled", !globalClient.permissions.neededPermission(PermissionType.B_VIRTUALSERVER_MODIFY_WEBLIST).granted(1));
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -6,6 +6,7 @@ class ServerProperties {
|
||||||
virtualserver_port: number = 0;
|
virtualserver_port: number = 0;
|
||||||
|
|
||||||
virtualserver_name: string = "";
|
virtualserver_name: string = "";
|
||||||
|
virtualserver_name_phonetic: string = "";
|
||||||
virtualserver_icon_id: number = 0;
|
virtualserver_icon_id: number = 0;
|
||||||
virtualserver_version: string = "unknown";
|
virtualserver_version: string = "unknown";
|
||||||
virtualserver_platform: string = "unknown";
|
virtualserver_platform: string = "unknown";
|
||||||
|
@ -35,6 +36,12 @@ class ServerProperties {
|
||||||
virtualserver_hostbutton_url: string = "";
|
virtualserver_hostbutton_url: string = "";
|
||||||
virtualserver_hostbutton_gfx_url: string = "";
|
virtualserver_hostbutton_gfx_url: string = "";
|
||||||
|
|
||||||
|
virtualserver_codec_encryption_mode: number = 0;
|
||||||
|
|
||||||
|
virtualserver_default_server_group: number = 0;
|
||||||
|
virtualserver_default_channel_group: number = 0;
|
||||||
|
virtualserver_default_channel_admin_group: number = 0;
|
||||||
|
|
||||||
//Special requested properties
|
//Special requested properties
|
||||||
virtualserver_default_client_description: string = "";
|
virtualserver_default_client_description: string = "";
|
||||||
virtualserver_default_channel_description: string = "";
|
virtualserver_default_channel_description: string = "";
|
||||||
|
@ -43,6 +50,14 @@ class ServerProperties {
|
||||||
virtualserver_antiflood_points_tick_reduce: number = 0;
|
virtualserver_antiflood_points_tick_reduce: number = 0;
|
||||||
virtualserver_antiflood_points_needed_command_block: number = 0;
|
virtualserver_antiflood_points_needed_command_block: number = 0;
|
||||||
virtualserver_antiflood_points_needed_ip_block: number = 0;
|
virtualserver_antiflood_points_needed_ip_block: number = 0;
|
||||||
|
|
||||||
|
virtualserver_complain_autoban_count: number = 0;
|
||||||
|
virtualserver_complain_autoban_time: number = 0;
|
||||||
|
virtualserver_complain_remove_time: number = 0;
|
||||||
|
|
||||||
|
virtualserver_needed_identity_security_level: number = 8;
|
||||||
|
virtualserver_weblist_enabled: boolean = false;
|
||||||
|
virtualserver_min_clients_in_channel_before_forced_silence: number = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface ServerAddress {
|
interface ServerAddress {
|
||||||
|
|
|
@ -108,6 +108,8 @@
|
||||||
<div class="properties">
|
<div class="properties">
|
||||||
<a class="key">Name:</a>
|
<a class="key">Name:</a>
|
||||||
<input class="value virtualserver_name" value="{{>virtualserver_name}}"/>
|
<input class="value virtualserver_name" value="{{>virtualserver_name}}"/>
|
||||||
|
<a class="key">Phonetic Name:</a>
|
||||||
|
<input class="value virtualserver_name_phonetic" value="{{>virtualserver_name_phonetic}}"/>
|
||||||
|
|
||||||
<a class="key">Password:</a>
|
<a class="key">Password:</a>
|
||||||
<!-- Use a random id to trick the default browser password manager. (I think something like a default password is really useless and -->
|
<!-- Use a random id to trick the default browser password manager. (I think something like a default password is really useless and -->
|
||||||
|
@ -228,16 +230,77 @@
|
||||||
</x-entry>
|
</x-entry>
|
||||||
<x-entry>
|
<x-entry>
|
||||||
<x-tag>Security</x-tag>
|
<x-tag>Security</x-tag>
|
||||||
<x-content>TODO!</x-content>
|
<x-content>
|
||||||
|
<div class="container properties_security">
|
||||||
|
<div class="properties">
|
||||||
|
<div class="key">Needed Security Level:</div>
|
||||||
|
<input type="number" min="1" max="64" value="{{:virtualserver_needed_identity_security_level}}" class="value virtualserver_needed_identity_security_level">
|
||||||
|
<div class="key">Channel voice data encryption:</div>
|
||||||
|
<select class="value virtualserver_codec_encryption_mode">
|
||||||
|
<option value="unset">Edit per channel individually</option>
|
||||||
|
<option value="off">Globally disabled</option>
|
||||||
|
<option value="on">Globally enabled (recommended)</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</x-content>
|
||||||
</x-entry>
|
</x-entry>
|
||||||
<x-entry>
|
<x-entry>
|
||||||
<x-tag>Misc</x-tag>
|
<x-tag>Misc</x-tag>
|
||||||
<x-content>TODO!</x-content>
|
<x-content>
|
||||||
|
<div class="container properties_misc">
|
||||||
|
<div class="group_box">
|
||||||
|
<div class="header">Default groups</div>
|
||||||
|
<div class="content properties">
|
||||||
|
<div class="key">Server group</div>
|
||||||
|
<select class="value default_server_group"></select>
|
||||||
|
|
||||||
|
<div class="key">Channel group</div>
|
||||||
|
<select class="value default_channel_group"></select>
|
||||||
|
|
||||||
|
<div class="key">Channel Admin group</div>
|
||||||
|
<select class="value default_channel_admin_group"></select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="group_box">
|
||||||
|
<div class="header">Complain</div>
|
||||||
|
<div class="content complains">
|
||||||
|
<div class="key">Autoban Count</div>
|
||||||
|
<div class="key">Autoban Time</div>
|
||||||
|
<div class="key">Remove Time</div>
|
||||||
|
|
||||||
|
<input type="number" min="1" max="65536" value="{{:virtualserver_complain_autoban_count}}" class="value virtualserver_complain_autoban_count">
|
||||||
|
<input type="number" min="1" max="65536" value="{{:virtualserver_complain_autoban_time}}" class="value virtualserver_complain_autoban_time">
|
||||||
|
<input type="number" min="1" max="65536" value="{{:virtualserver_complain_remove_time}}" class="value virtualserver_complain_remove_time">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="properties">
|
||||||
|
<div class="key">Minimum clients is channel before silence:</div>
|
||||||
|
<input type="number" min="1" max="65536" value="{{:virtualserver_min_clients_in_channel_before_forced_silence}}" class="value virtualserver_min_clients_in_channel_before_forced_silence">
|
||||||
|
|
||||||
|
<div class="key">Priority speaker dim modificator:</div>
|
||||||
|
<input type="number" min="-100" max="0" value="{{:virtualserver_priority_speaker_dimm_modificator}}" class="value virtualserver_priority_speaker_dimm_modificator">
|
||||||
|
|
||||||
|
<div class="key">Delete delay for temporary channels</div>
|
||||||
|
<input type="number" min="1" max="65536" value="{{:virtualserver_channel_temp_delete_delay_default}}" class="value virtualserver_channel_temp_delete_delay_default">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="group_box">
|
||||||
|
<div class="header">Server list</div>
|
||||||
|
<div class="content">
|
||||||
|
<input type="checkbox" class="value virtualserver_weblist_enabled" checked="{{:virtualserver_weblist_enabled}}"> Enable reporting to the TeamSpeak server list<br>
|
||||||
|
<input type="checkbox" class="value" checked="false" disabled> <del>Enable reporting to the TeaSpeak server list</del> (TeaSpeak does not support this setting)
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</x-content>
|
||||||
</x-entry>
|
</x-entry>
|
||||||
|
<!-- TeaSpeak don't have any configurable log section
|
||||||
<x-entry>
|
<x-entry>
|
||||||
<x-tag>Log</x-tag>
|
<x-tag>Log</x-tag>
|
||||||
<x-content>TODO!</x-content>
|
<x-content>TODO!</x-content>
|
||||||
</x-entry>
|
</x-entry>
|
||||||
|
-->
|
||||||
<x-entry>
|
<x-entry>
|
||||||
<x-tag>Messages</x-tag>
|
<x-tag>Messages</x-tag>
|
||||||
<x-content>
|
<x-content>
|
||||||
|
|
Loading…
Add table
Reference in a new issue