add unban subnet command and subnet list interaction
This commit is contained in:
parent
973ea83ab9
commit
dbca3675ba
@ -1,5 +1,6 @@
|
||||
const cidrRegex = /^([0-9]{1,3}\.){3}[0-9]{1,3}(\/([0-9]|[1-2][0-9]|3[0-2]))?$/;
|
||||
const validCIDR = input => cidrRegex.test(input);
|
||||
const subnetBanlistKey = 'Webfront::Nav::Admin::SubnetBanlist';
|
||||
let subnetList = [];
|
||||
|
||||
const commands = [{
|
||||
@ -26,7 +27,36 @@ const commands = [{
|
||||
|
||||
gameEvent.Origin.Tell(`Added ${input} to subnet banlist`);
|
||||
}
|
||||
}];
|
||||
},
|
||||
{
|
||||
name: 'unbansubnet',
|
||||
description: 'unbans an IPv4 subnet',
|
||||
alias: 'ubs',
|
||||
permission: 'SeniorAdmin',
|
||||
targetRequired: false,
|
||||
arguments: [{
|
||||
name: 'subnet in IPv4 CIDR notation',
|
||||
required: true
|
||||
}],
|
||||
execute: (gameEvent) => {
|
||||
const input = String(gameEvent.Data).trim();
|
||||
|
||||
if (!validCIDR(input)) {
|
||||
gameEvent.Origin.Tell('Invalid CIDR input');
|
||||
return;
|
||||
}
|
||||
|
||||
if (!subnetList.includes(input)) {
|
||||
gameEvent.Origin.Tell('Subnet is not banned');
|
||||
return;
|
||||
}
|
||||
|
||||
subnetList = subnetList.filter(item => item !== input);
|
||||
_configHandler.SetValue('SubnetBanList', subnetList);
|
||||
|
||||
gameEvent.Origin.Tell(`Removed ${input} from subnet banlist`);
|
||||
}
|
||||
}];
|
||||
|
||||
convertIPtoLong = ip => {
|
||||
let components = String(ip).match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/);
|
||||
@ -66,7 +96,7 @@ isSubnetBanned = (ip, list) => {
|
||||
|
||||
const plugin = {
|
||||
author: 'RaidMax',
|
||||
version: 1.0,
|
||||
version: 1.1,
|
||||
name: 'Subnet Banlist Plugin',
|
||||
manager: null,
|
||||
logger: null,
|
||||
@ -86,7 +116,8 @@ const plugin = {
|
||||
this.manager = manager;
|
||||
this.logger = manager.GetLogger(0);
|
||||
this.configHandler = _configHandler;
|
||||
this.subnetList = [];
|
||||
subnetList = [];
|
||||
this.interactionRegistration = _serviceResolver.ResolveService('IInteractionRegistration');
|
||||
|
||||
const list = this.configHandler.GetValue('SubnetBanList');
|
||||
if (list !== undefined) {
|
||||
@ -105,9 +136,58 @@ const plugin = {
|
||||
this.banMessage = 'You are not allowed to join this server.';
|
||||
this.configHandler.SetValue('BanMessage', this.banMessage);
|
||||
}
|
||||
|
||||
this.interactionRegistration.RegisterScriptInteraction(subnetBanlistKey, plugin.name, (targetId, game, token) => {
|
||||
const helpers = importNamespace('SharedLibraryCore.Helpers');
|
||||
const interactionData = new helpers.InteractionData();
|
||||
|
||||
interactionData.Name = 'Subnet Banlist'; // navigation link name
|
||||
interactionData.Description = `List of banned subnets (${subnetList.length} Total)`; // alt and title
|
||||
interactionData.DisplayMeta = 'oi-circle-x'; // nav icon
|
||||
interactionData.InteractionId = subnetBanlistKey;
|
||||
interactionData.MinimumPermission = 3; // moderator
|
||||
interactionData.InteractionType = 2; // 1 is RawContent for apis etc..., 2 is
|
||||
interactionData.Source = plugin.name;
|
||||
|
||||
interactionData.ScriptAction = (sourceId, targetId, game, meta, token) => {
|
||||
let table = '<table class="table bg-dark-dm bg-light-lm">';
|
||||
|
||||
const unbanSubnetInteraction = {
|
||||
InteractionId: 'command',
|
||||
Data: 'unbansubnet',
|
||||
ActionButtonLabel: 'Unban',
|
||||
Name: 'Unban Subnet'
|
||||
};
|
||||
|
||||
subnetList.forEach(subnet => {
|
||||
unbanSubnetInteraction.Data += ' ' + subnet
|
||||
table += `<tr>
|
||||
<td>
|
||||
<p>${subnet}</p>
|
||||
</td>
|
||||
<td>
|
||||
<a href="#" class="profile-action no-decoration float-right" data-action="DynamicAction"
|
||||
data-action-meta="${encodeURI(JSON.stringify(unbanSubnetInteraction))}">
|
||||
<div class="btn">
|
||||
<i class="oi oi-circle-x mr-5 font-size-12"></i>
|
||||
<span class="text-truncate">Unban Subnet</span>
|
||||
</div>
|
||||
</a>
|
||||
</td>
|
||||
</tr>`;
|
||||
});
|
||||
|
||||
table += '</table>';
|
||||
|
||||
return table;
|
||||
}
|
||||
|
||||
return interactionData;
|
||||
});
|
||||
},
|
||||
|
||||
onUnloadAsync: () => {
|
||||
this.interactionRegistration.UnregisterInteraction(subnetBanlistKey);
|
||||
},
|
||||
|
||||
onTickAsync: server => {
|
||||
|
@ -98,7 +98,8 @@ $(document).ready(function () {
|
||||
let actionKeys = actionId === undefined ? '' : `?id=${actionId}`;
|
||||
|
||||
if (actionMeta !== undefined) {
|
||||
actionKeys = actionKeys + '&meta=' + JSON.stringify(actionMeta);
|
||||
const and = actionKeys === '' ? '?' : '&';
|
||||
actionKeys = actionKeys + and + 'meta=' + JSON.stringify(actionMeta);
|
||||
}
|
||||
showLoader();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user