From b40137464ed9cb0d66e4c0f07d93d59d855bb073 Mon Sep 17 00:00:00 2001 From: YouHaveTrouble Date: Sun, 20 Jul 2025 13:27:39 +0200 Subject: [PATCH] serve icon as a resource --- .../inviter/http/endpoints/HandlerKernel.java | 1 + .../inviter/http/endpoints/IconEndpoint.java | 51 ++++++++++++++++++ src/main/resources/asset/icon.png | Bin 0 -> 1593 bytes .../template/guild-not-supported.html | 6 +-- src/main/resources/template/index.html | 6 +-- .../resources/template/invites-paused.html | 6 +-- 6 files changed, 61 insertions(+), 9 deletions(-) create mode 100644 src/main/java/me/youhavetrouble/inviter/http/endpoints/IconEndpoint.java create mode 100644 src/main/resources/asset/icon.png diff --git a/src/main/java/me/youhavetrouble/inviter/http/endpoints/HandlerKernel.java b/src/main/java/me/youhavetrouble/inviter/http/endpoints/HandlerKernel.java index f0b94f1..73accd5 100644 --- a/src/main/java/me/youhavetrouble/inviter/http/endpoints/HandlerKernel.java +++ b/src/main/java/me/youhavetrouble/inviter/http/endpoints/HandlerKernel.java @@ -16,6 +16,7 @@ public class HandlerKernel implements HttpHandler { handlers.add(new GetDiscordInviteByGuildId()); // Static endpoints + handlers.add(new IconEndpoint()); handlers.add(new MainEndpoint()); } diff --git a/src/main/java/me/youhavetrouble/inviter/http/endpoints/IconEndpoint.java b/src/main/java/me/youhavetrouble/inviter/http/endpoints/IconEndpoint.java new file mode 100644 index 0000000..1168027 --- /dev/null +++ b/src/main/java/me/youhavetrouble/inviter/http/endpoints/IconEndpoint.java @@ -0,0 +1,51 @@ +package me.youhavetrouble.inviter.http.endpoints; + +import com.sun.net.httpserver.HttpExchange; +import me.youhavetrouble.inviter.Main; +import org.jetbrains.annotations.NotNull; + +import java.io.IOException; +import java.io.InputStream; +import java.util.regex.Pattern; + +public class IconEndpoint implements EndpointHandler { + + private final Pattern pathPattern = Pattern.compile("^/icon$"); + + private final byte[] imageContent; + + public IconEndpoint() { + byte[] rawTemplate = null; + try (InputStream resource = this.getClass().getResourceAsStream("/asset/icon.png")) { + rawTemplate = resource.readAllBytes(); + } catch (IOException | NullPointerException e) { + Main.LOGGER.warn("Failed to load template for main endpoint", e); + } + this.imageContent = rawTemplate; + } + + @NotNull + @Override + public Pattern pathPattern() { + return pathPattern; + } + + @Override + public void handle(@NotNull HttpExchange exchange) throws IOException { + if (imageContent == null) { + exchange.sendResponseHeaders(404, -1); + return; + } + + if (!exchange.getRequestMethod().equals("GET")) { + exchange.sendResponseHeaders(405, -1); + return; + } + + exchange.getResponseHeaders().set("Content-Type", "image/png"); + exchange.sendResponseHeaders(200, imageContent.length); + exchange.getResponseBody().write(imageContent); + exchange.getResponseBody().close(); + } + +} diff --git a/src/main/resources/asset/icon.png b/src/main/resources/asset/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..11dc4ada9690d0ebe546549955193308652be8d1 GIT binary patch literal 1593 zcmaJ?eM}Q)9DYyOUkqJOL*hbLjmCX~80fTMx38DiL^2N=Bad5FrDwzNn&j=R#k9pNwSvCDIL-^=|z zp7-}Wm#fKF@7=OFX)^#|OZLZE`v8EXEd*kpm6pRNe=S*iLiX*=0Bugi901RZW@ml) zc_lVK`Rc{P`?sR^&;FB?zdhfK{)p}Q<(s8es5YZ~_G03;xO2H^#c1qY$jbs^21_dr8>pxXc$hP9MIB!=*!zEE92qv;a*MD|nE_5z4ad=mEEuRpBp zR8}j;+O2`q^e11g$EGtEI<6?Ir;O@CmKPTOB|fo=-p9B4ye9E`j(-rmI~*E^J}`r) z;c978^;*(H3f(&cznR1bomX*{h4@ZAJw|F5ACZ(sNWh|i^5=*|a|qhewG1!qq6^w} z>cY+@Qp@YbIYqCBACqe&#m9LNVFYHv}_DAh7g@Vx(W&>^n)XKX6@@RN#zH#fuZ zd|UnOYNGr|!!SSuglJ5;rycNMrs5b-v?&7Bc+^f>#VT~gM$&gVC{OixC~g=NClGhG z(HPJ;{;V|W{C}mgQJ^DIY<)W)b%(R+osRKQQd=L)^Ha(l-QrPREM+kCC2;n+2-K!! ztr6v#;RQcM?TW!Mqf^x_UT<RIZ1fL#Z8k~?s-Fhg@rpExo z#R#okiwIOG- zEZXV8yYRV5HtnXw)I!x2^WjlBC%T5IGme|5kxgIYLF@Y=B*EF!Ln>+9B^$g5qy0m4 z^fkB@Uef%Z5ylB9XX2nBiCn`RvFV+v-(}C*;z&l>>-&I&FBe=Q}r%7J84nzDEC0%ez zTrTnw1@Bs@hi=9~a4E79EPLDu - + - + - + Discord Inviter