Skip to content

Commit b67812a

Browse files
Merge pull request #1 from iwmedia/develop
feat: Add commands to modify asn black- and whitelist and asn blacklist
2 parents e90a5d2 + 8c79225 commit b67812a

File tree

10 files changed

+222
-4
lines changed

10 files changed

+222
-4
lines changed

bukkit/src/main/java/ls/ni/networkfilter/bukkit/NetworkFilterBukkitPlugin.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package ls.ni.networkfilter.bukkit;
22

3+
import ls.ni.networkfilter.bukkit.commands.NetworkFilterCommand;
34
import ls.ni.networkfilter.bukkit.listeners.PlayerJoinListener;
45
import ls.ni.networkfilter.common.NetworkFilterCommon;
56
import org.bukkit.plugin.java.JavaPlugin;
@@ -12,6 +13,10 @@ public void onEnable() {
1213

1314
// ---
1415

16+
this.getCommand("networkfilter").setExecutor(new NetworkFilterCommand());
17+
18+
// ---
19+
1520
this.getServer().getPluginManager().registerEvents(new PlayerJoinListener(this), this);
1621
}
1722
}
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
package ls.ni.networkfilter.bukkit.commands;
2+
3+
import com.google.common.primitives.Ints;
4+
import ls.ni.networkfilter.common.NetworkFilterCommon;
5+
import ls.ni.networkfilter.common.config.Config;
6+
import org.bukkit.command.Command;
7+
import org.bukkit.command.CommandSender;
8+
import org.bukkit.command.TabExecutor;
9+
import org.jetbrains.annotations.NotNull;
10+
import org.jetbrains.annotations.Nullable;
11+
12+
import java.util.List;
13+
14+
public class NetworkFilterCommand implements TabExecutor {
15+
16+
private static final String PREFIX = "§e§lNetworkFilter §8» §r";
17+
18+
@Override
19+
public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
20+
if (args.length < 3 ||
21+
(!args[0].equalsIgnoreCase("whitelist") && !args[0].equalsIgnoreCase("blacklist")) ||
22+
(!args[1].equalsIgnoreCase("add") && !args[1].equalsIgnoreCase("remove"))) {
23+
commandSender.sendMessage(PREFIX + "§cUsage: /networkfilter whitelist add|remove <asn>");
24+
commandSender.sendMessage(PREFIX + "§cUsage: /networkfilter blacklist add|remove <asn>");
25+
} else {
26+
Integer asn = Ints.tryParse(args[2]);
27+
28+
if (asn == null) {
29+
commandSender.sendMessage("§cInvalid ASN: " + args[2]);
30+
return true;
31+
}
32+
33+
Config config = NetworkFilterCommon.getConfig();
34+
35+
if (args[0].equalsIgnoreCase("whitelist")) {
36+
List<Integer> asnWhitelist = config.getAsnWhitelist();
37+
38+
if (args[1].equalsIgnoreCase("add")) {
39+
if (asnWhitelist.contains(asn)) {
40+
commandSender.sendMessage(PREFIX + "§cASN " + asn + " is already in the whitelist");
41+
} else {
42+
asnWhitelist.add(asn);
43+
commandSender.sendMessage(PREFIX + "§aAdded ASN " + asn + " to whitelist");
44+
}
45+
} else {
46+
if (asnWhitelist.contains(asn)) {
47+
asnWhitelist.remove(asn);
48+
commandSender.sendMessage(PREFIX + "§aRemoved ASN " + asn + " from whitelist");
49+
} else {
50+
commandSender.sendMessage(PREFIX + "§cASN " + asn + " is not in the whitelist");
51+
}
52+
}
53+
} else {
54+
List<Integer> asnBlacklist = config.getAsnBlacklist();
55+
56+
if (args[1].equalsIgnoreCase("add")) {
57+
if (asnBlacklist.contains(asn)) {
58+
commandSender.sendMessage(PREFIX + "§cASN " + asn + " is already in the blacklist");
59+
} else {
60+
asnBlacklist.add(asn);
61+
commandSender.sendMessage(PREFIX + "§aAdded ASN " + asn + " to blacklist");
62+
}
63+
} else {
64+
if (asnBlacklist.contains(asn)) {
65+
asnBlacklist.remove(asn);
66+
commandSender.sendMessage(PREFIX + "§aRemoved ASN " + asn + " from blacklist");
67+
} else {
68+
commandSender.sendMessage(PREFIX + "§cASN " + asn + " is not in the blacklist");
69+
}
70+
}
71+
}
72+
}
73+
74+
return true;
75+
}
76+
77+
78+
@Override
79+
public @Nullable List<String> onTabComplete(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
80+
if (args.length == 1) {
81+
return List.of("whitelist", "blacklist");
82+
} else if (args.length == 2) {
83+
return List.of("add", "remove");
84+
} else if (args.length == 3) {
85+
Config config = NetworkFilterCommon.getConfig();
86+
87+
if (args[0].equalsIgnoreCase("whitelist") && args[1].equalsIgnoreCase("remove")) {
88+
return config.getAsnWhitelist().stream().map(String::valueOf).toList();
89+
} else if (args[0].equalsIgnoreCase("blacklist") && args[1].equalsIgnoreCase("remove")) {
90+
return config.getAsnBlacklist().stream().map(String::valueOf).toList();
91+
} else {
92+
return null;
93+
}
94+
} else {
95+
return null;
96+
}
97+
}
98+
}

bukkit/src/main/resources/plugin.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,8 @@ author: nidotls
88
website: https://github.com/nidotls/${project.parent.name}
99

1010
main: ${project.groupId}.bukkit.${project.name}Plugin
11+
12+
commands:
13+
networkfilter:
14+
aliases: [nf]
15+
permission: networkfilter.admin

bungee/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
<repositories>
1818
<repository>
1919
<id>bungeecord-repo</id>
20-
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
20+
<url>https://hub.spigotmc.org/nexus/content/repositories/public/</url>
2121
</repository>
2222
</repositories>
2323

bungee/src/main/java/ls/ni/networkfilter/bungee/NetworkFilterBungeePlugin.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
package ls.ni.networkfilter.bungee;
2626

27+
import ls.ni.networkfilter.bungee.commands.NetworkFilterCommand;
2728
import ls.ni.networkfilter.bungee.listeners.PostLoginListener;
2829
import ls.ni.networkfilter.common.NetworkFilterCommon;
2930
import net.md_5.bungee.api.plugin.Plugin;
@@ -36,6 +37,10 @@ public void onEnable() {
3637

3738
// ---
3839

40+
this.getProxy().getPluginManager().registerCommand(this, new NetworkFilterCommand());
41+
42+
// ---
43+
3944
this.getProxy().getPluginManager().registerListener(this, new PostLoginListener(this));
4045
}
4146
}
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package ls.ni.networkfilter.bungee.commands;
2+
3+
import com.google.common.primitives.Ints;
4+
import ls.ni.networkfilter.common.NetworkFilterCommon;
5+
import ls.ni.networkfilter.common.config.Config;
6+
import net.md_5.bungee.api.CommandSender;
7+
import net.md_5.bungee.api.chat.TextComponent;
8+
import net.md_5.bungee.api.plugin.Command;
9+
10+
import java.util.List;
11+
12+
public class NetworkFilterCommand extends Command {
13+
14+
private static final String PREFIX = "§e§lNetworkFilter §8» §r";
15+
16+
public NetworkFilterCommand() {
17+
super("networkfilter", "networkfilter.admin", "nf");
18+
}
19+
20+
@Override
21+
public void execute(CommandSender commandSender, String[] args) {
22+
if (args.length < 3 ||
23+
(!args[0].equalsIgnoreCase("whitelist") && !args[0].equalsIgnoreCase("blacklist")) ||
24+
(!args[1].equalsIgnoreCase("add") && !args[1].equalsIgnoreCase("remove"))) {
25+
commandSender.sendMessage(TextComponent.fromLegacy(PREFIX + "§cUsage: /networkfilter whitelist add|remove <asn>"));
26+
commandSender.sendMessage(TextComponent.fromLegacy(PREFIX + "§cUsage: /networkfilter blacklist add|remove <asn>"));
27+
} else {
28+
Integer asn = Ints.tryParse(args[2]);
29+
30+
if (asn == null) {
31+
commandSender.sendMessage(TextComponent.fromLegacy("§cInvalid ASN: " + args[2]));
32+
return;
33+
}
34+
35+
Config config = NetworkFilterCommon.getConfig();
36+
37+
if (args[0].equalsIgnoreCase("whitelist")) {
38+
List<Integer> asnWhitelist = config.getAsnWhitelist();
39+
40+
if (args[1].equalsIgnoreCase("add")) {
41+
if (asnWhitelist.contains(asn)) {
42+
commandSender.sendMessage(TextComponent.fromLegacy(PREFIX + "§cASN " + asn + " is already in the whitelist"));
43+
} else {
44+
asnWhitelist.add(asn);
45+
commandSender.sendMessage(TextComponent.fromLegacy(PREFIX + "§aAdded ASN " + asn + " to whitelist"));
46+
}
47+
} else {
48+
if (asnWhitelist.contains(asn)) {
49+
asnWhitelist.remove(asn);
50+
commandSender.sendMessage(TextComponent.fromLegacy(PREFIX + "§aRemoved ASN " + asn + " from whitelist"));
51+
} else {
52+
commandSender.sendMessage(TextComponent.fromLegacy(PREFIX + "§cASN " + asn + " is not in the whitelist"));
53+
}
54+
}
55+
} else {
56+
List<Integer> asnBlacklist = config.getAsnBlacklist();
57+
58+
if (args[1].equalsIgnoreCase("add")) {
59+
if (asnBlacklist.contains(asn)) {
60+
commandSender.sendMessage(TextComponent.fromLegacy(PREFIX + "§cASN " + asn + " is already in the blacklist"));
61+
} else {
62+
asnBlacklist.add(asn);
63+
commandSender.sendMessage(TextComponent.fromLegacy(PREFIX + "§aAdded ASN " + asn + " to blacklist"));
64+
}
65+
} else {
66+
if (asnBlacklist.contains(asn)) {
67+
asnBlacklist.remove(asn);
68+
commandSender.sendMessage(TextComponent.fromLegacy(PREFIX + "§aRemoved ASN " + asn + " from blacklist"));
69+
} else {
70+
commandSender.sendMessage(TextComponent.fromLegacy(PREFIX + "§cASN " + asn + " is not in the blacklist"));
71+
}
72+
}
73+
}
74+
}
75+
}
76+
77+
}

common/src/main/java/ls/ni/networkfilter/common/config/Config.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import ls.ni.networkfilter.common.config.service.ServiceSettings;
1414
import ls.ni.networkfilter.common.config.service.ServiceType;
1515

16+
import java.util.ArrayList;
1617
import java.util.List;
1718

1819
@Valid
@@ -49,6 +50,10 @@ public class Config {
4950
@NotNull
5051
private List<Integer> asnWhitelist;
5152

53+
@Valid
54+
@NotNull
55+
private List<Integer> asnBlacklist = new ArrayList<>();
56+
5257
@Valid
5358
@NotNull
5459
private ConsequenceSettings consequences;

common/src/main/java/ls/ni/networkfilter/common/filter/types/IPApiIsFilterService.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,20 @@ public IPApiIsFilterService(@Nullable String apiKey, @NotNull Set<String> checkT
4444

4545
JSONObject asnObject = response.getBody().getObject().getJSONObject("asn");
4646

47+
int asn = Optional.ofNullable(asnObject).map(jsonObject -> jsonObject.getInt("asn")).orElse(-1);
48+
49+
//blacklist
50+
List<Integer> asnBlacklist = NetworkFilterCommon.getConfig().getAsnBlacklist();
51+
if (asn != -1 && asnBlacklist.contains(asn)) {
52+
return new FilterResult(
53+
true,
54+
asn,
55+
Optional.of(asnObject).map(jsonObject -> jsonObject.getString("org")).orElse("Unknown")
56+
);
57+
}
58+
4759
// whitelist
4860
List<Integer> asnWhitelist = NetworkFilterCommon.getConfig().getAsnWhitelist();
49-
int asn = Optional.ofNullable(asnObject).map(jsonObject -> jsonObject.getInt("asn")).orElse(-1);
5061
if (asn != -1 && asnWhitelist.contains(asn)) {
5162
return new FilterResult(
5263
false,

common/src/main/java/ls/ni/networkfilter/common/filter/types/NetworkFilterFilterService.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import org.jetbrains.annotations.NotNull;
1313

1414
import java.util.List;
15-
import java.util.Optional;
1615

1716
public class NetworkFilterFilterService implements FilterService {
1817

@@ -48,9 +47,20 @@ public NetworkFilterFilterService(@NotNull @NotBlank String apiKey) {
4847

4948
JSONObject data = body.getJSONObject("data");
5049

50+
int asn = data.getInt("asn");
51+
52+
//blacklist
53+
List<Integer> asnBlacklist = NetworkFilterCommon.getConfig().getAsnBlacklist();
54+
if (asnBlacklist.contains(asn)) {
55+
return new FilterResult(
56+
true,
57+
asn,
58+
data.getString("org")
59+
);
60+
}
61+
5162
//whitelist
5263
List<Integer> asnWhitelist = NetworkFilterCommon.getConfig().getAsnWhitelist();
53-
int asn = data.getInt("asn");
5464
if (asnWhitelist.contains(asn)) {
5565
return new FilterResult(
5666
false,

common/src/main/resources/config.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ ignore:
6161

6262
asnWhitelist: []
6363

64+
asnBlacklist: []
65+
6466
consequences:
6567
kick:
6668
enabled: true

0 commit comments

Comments
 (0)