Skip to content

Commit 58123dd

Browse files
committed
eagler
1 parent 91adbd5 commit 58123dd

10 files changed

Lines changed: 174 additions & 116 deletions

File tree

build.gradle.kts

Lines changed: 51 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import groovy.lang.Closure
2+
import com.palantir.gradle.gitversion.VersionDetails
13
import org.gradle.api.tasks.compile.JavaCompile
24
import org.gradle.language.jvm.tasks.ProcessResources
35
import xyz.jpenilla.runpaper.task.RunServer
@@ -26,23 +28,27 @@ val PLUGIN_CTBR = emptyList<String>()
2628

2729

2830

29-
val PLUGIN_DEPA_J = getJSONObj(PLUGIN_DEPA)
30-
val PLUGIN_DEPB_J = getJSONObj(PLUGIN_DEPB)
31-
val PLUGIN_DEPC_J = getJSONObjMerge(PLUGIN_DEPC, PLUGIN_SDPC)
32-
val PLUGIN_SDPA_J = getJSONObj(PLUGIN_SDPA)
33-
val PLUGIN_SDPB_J = getJSONObj(PLUGIN_SDPB)
34-
val PLUGIN_PROV_J = getJSONObj(PLUGIN_PROV)
35-
val PLUGIN_ATHR_J = getJSONObj(PLUGIN_ATHR)
36-
val PLUGIN_CTBR_J = getJSONObj(PLUGIN_CTBR)
31+
val PLUGIN_DEPA_J = getBukkitBungeeDeps(PLUGIN_DEPA)
32+
val PLUGIN_DEPB_J = getBukkitBungeeDeps(PLUGIN_DEPB)
33+
val PLUGIN_DEPC_J = getVelocityDeps(PLUGIN_DEPC, PLUGIN_SDPC)
34+
val PLUGIN_SDPA_J = getBukkitBungeeDeps(PLUGIN_SDPA)
35+
val PLUGIN_SDPB_J = getBukkitBungeeDeps(PLUGIN_SDPB)
36+
val PLUGIN_PROV_J = getBukkitBungeeDeps(PLUGIN_PROV)
37+
val PLUGIN_ATHR_J = getBukkitBungeeDeps(PLUGIN_ATHR)
38+
val PLUGIN_CTBR_J = getBukkitBungeeDeps(PLUGIN_CTBR)
3739

3840
plugins {
3941
id("java")
4042
id("com.gradleup.shadow") version "9.3.0"
43+
id("com.palantir.git-version") version "4.2.0"
4144
id("xyz.jpenilla.run-paper") version "3.0.2"
4245
id("xyz.jpenilla.run-waterfall") version "3.0.2"
4346
id("xyz.jpenilla.run-velocity") version "3.0.2"
4447
}
4548

49+
@Suppress("UNCHECKED_CAST")
50+
val GIT_INFO = (extra["versionDetails"] as Closure<VersionDetails>)()
51+
4652
repositories {
4753
mavenCentral()
4854
maven("https://repo.papermc.io/repository/maven-public/")
@@ -85,6 +91,23 @@ java {
8591
toolchain.languageVersion.set(JavaLanguageVersion.of(17))
8692
}
8793

94+
val BUILD_PROPS = mapOf(
95+
"plugin_name" to PLUGIN_NAME,
96+
"plugin_iden" to PLUGIN_IDEN,
97+
"plugin_desc" to PLUGIN_DESC,
98+
"plugin_vers" to PLUGIN_VERS,
99+
"plugin_site" to PLUGIN_SITE,
100+
"plugin_depa" to PLUGIN_DEPA_J,
101+
"plugin_depb" to PLUGIN_DEPB_J,
102+
"plugin_depc" to PLUGIN_DEPC_J,
103+
"plugin_sdpa" to PLUGIN_SDPA_J,
104+
"plugin_sdpb" to PLUGIN_SDPB_J,
105+
"plugin_prov" to PLUGIN_PROV_J,
106+
"plugin_athr" to PLUGIN_ATHR_J,
107+
"plugin_ctbr" to PLUGIN_CTBR_J,
108+
"git_cm_hash" to GIT_INFO.gitHashFull,
109+
)
110+
88111
tasks.withType<JavaCompile>().configureEach {
89112
options.encoding = "UTF-8"
90113
options.release.set(17)
@@ -93,26 +116,24 @@ tasks.withType<JavaCompile>().configureEach {
93116
tasks.withType<ProcessResources>() {
94117
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
95118
outputs.upToDateWhen { false }
119+
96120
doFirst {
97121
filesMatching(listOf("plugin.yml", "bungee.yml", "velocity-plugin.json")) {
98-
expand(mapOf(
99-
"plugin_name" to PLUGIN_NAME,
100-
"plugin_iden" to PLUGIN_IDEN,
101-
"plugin_desc" to PLUGIN_DESC,
102-
"plugin_vers" to PLUGIN_VERS,
103-
"plugin_site" to PLUGIN_SITE,
104-
"plugin_depa" to PLUGIN_DEPA_J,
105-
"plugin_depb" to PLUGIN_DEPB_J,
106-
"plugin_depc" to PLUGIN_DEPC_J,
107-
"plugin_sdpa" to PLUGIN_SDPA_J,
108-
"plugin_sdpb" to PLUGIN_SDPB_J,
109-
"plugin_prov" to PLUGIN_PROV_J,
110-
"plugin_athr" to PLUGIN_ATHR_J,
111-
"plugin_ctbr" to PLUGIN_CTBR_J,
112-
))
122+
expand(BUILD_PROPS)
113123
}
114124
}
115125

126+
doLast {
127+
val file = destinationDir.resolve("build.properties")
128+
file.parentFile.mkdirs()
129+
130+
file.writeText(
131+
BUILD_PROPS.entries.joinToString("\n") { (k, v) ->
132+
"$k = $v"
133+
}
134+
)
135+
}
136+
116137
inputs.files(tasks.named<JavaCompile>("compileJava").map { it.outputs.files })
117138
}
118139

@@ -162,20 +183,15 @@ tasks.register("printVars") {
162183
}
163184
}
164185

165-
fun getJSONObj(list: List<String>): String {
166-
return if (list.isNotEmpty()) {
167-
list.joinToString(
168-
separator = "\", \"",
169-
prefix = "\"",
170-
postfix = "\""
171-
)
172-
} else {
173-
""
174-
}
186+
fun getBukkitBungeeDeps(list: List<String>): String {
187+
return list.joinToString(
188+
prefix = "[",
189+
postfix = "]"
190+
) { "\"$it\"" }
175191
}
176192

177-
fun getJSONObjMerge(a: List<String>, b: List<String>): String {
193+
fun getVelocityDeps(a: List<String>, b: List<String>): String {
178194
val c = a.joinToString(", ") { "{\"id\":\"$it\",\"optional\":false}" }
179195
val d = b.joinToString(", ") { "{\"id\":\"$it\",\"optional\":true}" }
180-
return listOf(c, d).filter { it.isNotEmpty() }.joinToString(",")
196+
return "[" + listOf(c, d).filter { it.isNotEmpty() }.joinToString(",") + "]"
181197
}

src/main/java/xyz/webmc/originblacklist/base/OriginBlacklist.java

Lines changed: 52 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import xyz.webmc.originblacklist.base.enums.EnumLogLevel;
77
import xyz.webmc.originblacklist.base.events.OriginBlacklistLoginEvent;
88
import xyz.webmc.originblacklist.base.events.OriginBlacklistMOTDEvent;
9+
import xyz.webmc.originblacklist.base.util.BuildInfo;
910
import xyz.webmc.originblacklist.base.util.IOriginBlacklistPlugin;
1011
import xyz.webmc.originblacklist.base.util.OPlayer;
1112
import xyz.webmc.originblacklist.base.util.UpdateChecker;
@@ -14,8 +15,11 @@
1415
import java.io.OutputStream;
1516
import java.net.HttpURLConnection;
1617
import java.net.URL;
18+
import java.net.URLDecoder;
19+
import java.nio.charset.StandardCharsets;
1720
import java.nio.file.Files;
1821
import java.nio.file.Path;
22+
import java.nio.file.Paths;
1923
import java.nio.file.StandardCopyOption;
2024
import java.util.ArrayList;
2125
import java.util.Base64;
@@ -54,6 +58,11 @@ public OriginBlacklist(final IOriginBlacklistPlugin plugin) {
5458
}, 60, TimeUnit.MINUTES);
5559
}
5660

61+
public final void init() {
62+
this.plugin.log(EnumLogLevel.INFO, "Initialized Plugin");
63+
this.plugin.log(EnumLogLevel.DEBUG, "Commit " + BuildInfo.get("git_cm_hash"));
64+
}
65+
5766
public final void handleLogin(final OriginBlacklistLoginEvent event) {
5867
final OPlayer player = event.getPlayer();
5968
final EnumBlacklistType blacklisted = this.testBlacklist(player);
@@ -165,7 +174,7 @@ private final EnumBlacklistType testBlacklist(final OPlayer player) {
165174
return EnumBlacklistType.ADDR;
166175
}
167176
} catch (final AddressStringException exception) {
168-
exception.printStackTrace();
177+
// exception.printStackTrace();
169178
}
170179
}
171180
}
@@ -275,7 +284,7 @@ private final void sendWebhooks(final OriginBlacklistLoginEvent event, final Enu
275284
}
276285

277286
conn.disconnect();
278-
} catch (Throwable t) {
287+
} catch (final Throwable t) {
279288
t.printStackTrace();
280289
}
281290
});
@@ -293,42 +302,49 @@ private final void checkForUpdate() {
293302
if (!this.config.get("update_checker.auto_update").getAsBoolean()) {
294303
this.plugin.log(EnumLogLevel.INFO, "An update is available! Download it at " + this.updateURL);
295304
} else {
296-
final Path jar = this.plugin.getPluginJarPath();
297-
final Path bak = jar.resolveSibling(jar.getFileName().toString() + ".bak");
298-
final Path tmp = jar.resolveSibling(jar.getFileName().toString() + ".tmp");
299-
try {
300-
Files.copy(jar, bak, StandardCopyOption.REPLACE_EXISTING);
301-
} catch (final Throwable t) {
302-
t.printStackTrace();
303-
}
304-
try {
305-
final URL url = new URL(this.updateURL);
306-
final HttpURLConnection conn = (HttpURLConnection) url.openConnection();
307-
conn.setRequestMethod("GET");
308-
conn.setConnectTimeout(15000);
309-
conn.setReadTimeout(15000);
310-
conn.connect();
311-
try (final InputStream in = conn.getInputStream()) {
312-
Files.copy(in, tmp, StandardCopyOption.REPLACE_EXISTING);
313-
} finally {
314-
conn.disconnect();
315-
}
316-
Files.move(tmp, jar, StandardCopyOption.REPLACE_EXISTING);
317-
Files.delete(bak);
318-
} catch (final Throwable t) {
319-
t.printStackTrace();
320-
try {
321-
Files.move(bak, jar, StandardCopyOption.REPLACE_EXISTING);
322-
} catch (final Throwable _t) {
323-
_t.printStackTrace();
324-
}
325-
}
305+
this.updatePlugin();
326306
}
327307
}
328308
});
329309
}
330310
}
331311

312+
private final void updatePlugin() {
313+
try {
314+
final URL url = new URL(this.updateURL);
315+
final Path jar = this.plugin.getPluginJarPath();
316+
final Path bak = jar.resolveSibling(jar.getFileName().toString() + ".bak");
317+
final Path upd = jar.resolveSibling(Paths.get(URLDecoder.decode(url.getPath(), StandardCharsets.UTF_8)).getFileName());
318+
319+
try {
320+
Files.copy(jar, bak, StandardCopyOption.REPLACE_EXISTING);
321+
} catch (final Throwable t) {
322+
t.printStackTrace();
323+
}
324+
325+
try {
326+
final HttpURLConnection conn = (HttpURLConnection) url.openConnection();
327+
conn.setRequestMethod("GET");
328+
conn.setConnectTimeout(15000);
329+
conn.setReadTimeout(15000);
330+
conn.setRequestProperty("User-Agent", OriginBlacklist.getUserAgent());
331+
conn.connect();
332+
try (final InputStream in = conn.getInputStream()) {
333+
Files.copy(in, upd, StandardCopyOption.REPLACE_EXISTING);
334+
} finally {
335+
conn.disconnect();
336+
}
337+
Files.delete(jar);
338+
Files.delete(bak);
339+
} catch (final Throwable t) {
340+
t.printStackTrace();
341+
Files.move(bak, jar, StandardCopyOption.REPLACE_EXISTING);
342+
}
343+
} catch (final Throwable t) {
344+
t.printStackTrace();
345+
}
346+
}
347+
332348
public static final String getComponentString(final Component comp) {
333349
return LegacyComponentSerializer.legacySection().serialize(comp);
334350
}
@@ -341,6 +357,10 @@ public static final String getPNGBase64FromBytes(final byte[] bytes) {
341357
return "data:image/png;base64," + Base64.getEncoder().encodeToString(bytes);
342358
}
343359

360+
public static final String getUserAgent() {
361+
return BuildInfo.get("plugin_name") + "/" + BuildInfo.get("plugin_vers") + "+" + BuildInfo.get("git_cm_hash");
362+
}
363+
344364
public static final boolean isNonNull(final String str) {
345365
return str != null && !str.isEmpty() && !str.isBlank() && !str.equals("null");
346366
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package xyz.webmc.originblacklist.base.util;
2+
3+
import java.io.InputStream;
4+
import java.util.Properties;
5+
6+
public class BuildInfo {
7+
private static final Properties properties;
8+
9+
public static final String get(final String key) {
10+
return properties.getProperty(key).trim();
11+
}
12+
13+
static {
14+
properties = new Properties();
15+
try (final InputStream in = BuildInfo.class.getClassLoader().getResourceAsStream("build.properties")) {
16+
properties.load(in);
17+
} catch (final Throwable t) {}
18+
}
19+
}

src/main/java/xyz/webmc/originblacklist/base/util/UpdateChecker.java

Lines changed: 34 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -17,54 +17,57 @@
1717
public class UpdateChecker {
1818
private static final Json5 json5 = Json5.builder(builder -> builder.build());
1919

20-
public static final String checkForUpdate(final String repo, final Semver currentVersion, final boolean allowPreRelease) {
20+
public static final String checkForUpdate(final String repo, final Semver currentVersion, final boolean allowSnapshots) {
2121
try {
22-
URL url = new URL("https://api.github.com/repos/" + repo + "/releases");
23-
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
22+
final URL url = new URL("https://api.github.com/repos/" + repo + "/releases");
23+
final HttpURLConnection conn = (HttpURLConnection) url.openConnection();
2424
conn.setRequestMethod("GET");
2525
conn.setConnectTimeout(5000);
2626
conn.setReadTimeout(5000);
27+
conn.setRequestProperty("User-Agent", OriginBlacklist.getUserAgent());
28+
conn.setRequestProperty("Accept", "application/vnd.github+json");
2729
conn.connect();
28-
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
30+
final BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
2931
String ret = null;
3032
Json5Element element = json5.parse(reader);
33+
reader.close();
3134
if (element instanceof Json5Array) {
3235
final Json5Array arr = element.getAsJson5Array();
3336
if (arr.size() > 0) {
34-
element = arr.get(0);
35-
if (element instanceof Json5Object) {
36-
final Json5Object obj = element.getAsJson5Object();
37-
final String tag = obj.get("tag_name").getAsString();
38-
final Semver ver = new Semver(tag.substring(1));
39-
if (ver.isGreaterThan(currentVersion) && (allowPreRelease || currentVersion.diff(ver) != VersionDiff.BUILD)) {
40-
element = obj.get("assets");
41-
if (element instanceof Json5Array) {
42-
final Json5Array aArr = element.getAsJson5Array();
43-
element = aArr.get(0);
44-
if (element instanceof Json5Object) {
45-
final Json5Object vObj = element.getAsJson5Object();
46-
ret = vObj.get("url").getAsString();
37+
for (int i = 0; i < Math.min(2, arr.size()); i++) {
38+
element = arr.get(i);
39+
if (element instanceof Json5Object) {
40+
final Json5Object obj = element.getAsJson5Object();
41+
if (allowSnapshots || !obj.get("prerelease").getAsBoolean()) {
42+
final String tag = obj.get("tag_name").getAsString();
43+
final Semver ver = new Semver(tag.startsWith("v") ? tag.substring(1) : tag);
44+
String comm;
45+
try {
46+
comm = ver.getBuild().get(0).trim();
47+
} catch (Throwable t) {
48+
comm = "";
49+
}
50+
if (ver.isGreaterThan(currentVersion) || (allowSnapshots && currentVersion.diff(ver) == VersionDiff.BUILD && OriginBlacklist.isNonNull(comm) && !BuildInfo.get("git_cm_hash").startsWith(comm))) {
51+
element = obj.get("assets");
52+
if (element instanceof Json5Array) {
53+
final Json5Array aArr = element.getAsJson5Array();
54+
if (aArr.size() > 0) {
55+
element = aArr.get(0);
56+
if (element instanceof Json5Object) {
57+
final Json5Object vObj = element.getAsJson5Object();
58+
ret = vObj.get("browser_download_url").getAsString();
59+
break;
60+
}
61+
}
62+
}
4763
}
4864
}
4965
}
66+
continue;
5067
}
5168
}
5269
}
5370
conn.disconnect();
54-
if (OriginBlacklist.isNonNull(ret)) {
55-
url = new URL(ret);
56-
conn = (HttpURLConnection) url.openConnection();
57-
conn.setRequestMethod("GET");
58-
conn.setConnectTimeout(5000);
59-
conn.setReadTimeout(5000);
60-
conn.connect();
61-
reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
62-
element = json5.parse(reader);
63-
if (element instanceof Json5Object) {
64-
final Json5Object obj = element.getAsJson5Object();
65-
ret = obj.get("browser_download_url").getAsString();
66-
}
67-
}
6871
return ret;
6972
} catch (final Throwable t) {
7073
t.printStackTrace();

src/main/java/xyz/webmc/originblacklist/bukkit/OriginBlacklistBukkit.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ public final void onEnable() {
7676
this.eaglerAPI = EaglerXServerAPI.instance();
7777
this.getCommand("originblacklist").setExecutor(new OriginBlacklistCommandBukkit(this.blacklist));
7878
this.getServer().getPluginManager().registerEvents(this, this);
79-
this.log(EnumLogLevel.INFO, "Initialized Plugin");
79+
this.blacklist.init();
8080
if (this.blacklist.isMetricsEnabled()) {
8181
this.metrics = new Metrics(this, OriginBlacklist.BSTATS_ID);
8282
this.metrics.addCustomChart(new AdvancedPie("player_types", () -> {

0 commit comments

Comments
 (0)