endpoint returning invites based on hostname
This commit is contained in:
@@ -109,4 +109,8 @@ public class Main {
|
|||||||
return discordInviteManager;
|
return discordInviteManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Storage getStorage() {
|
||||||
|
return storage;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package me.youhavetrouble.inviter.discord;
|
|||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
public record GuildSettings(
|
public record GuildSettings(
|
||||||
|
long guildId,
|
||||||
boolean apiEnabled,
|
boolean apiEnabled,
|
||||||
@Nullable String apiHostname
|
@Nullable String apiHostname
|
||||||
) {
|
) {
|
||||||
|
|||||||
+2
-2
@@ -38,8 +38,8 @@ public class GetDiscordInviteByGuildId implements EndpointHandler {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
DiscordInviteManager storage = Main.getDiscordInviteMenager();
|
DiscordInviteManager inviteManager = Main.getDiscordInviteMenager();
|
||||||
DiscordInvite invite = storage.getInvite(guildIdLong);
|
DiscordInvite invite = inviteManager.getInvite(guildIdLong);
|
||||||
|
|
||||||
if (invite == null) {
|
if (invite == null) {
|
||||||
exchange.sendResponseHeaders(404, -1); // Not Found
|
exchange.sendResponseHeaders(404, -1); // Not Found
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ public class HandlerKernel implements HttpHandler {
|
|||||||
private final Set<EndpointHandler> handlers = new HashSet<>();
|
private final Set<EndpointHandler> handlers = new HashSet<>();
|
||||||
|
|
||||||
public HandlerKernel() {
|
public HandlerKernel() {
|
||||||
|
handlers.add(new MainEndpoint());
|
||||||
handlers.add(new GetDiscordInviteByGuildId());
|
handlers.add(new GetDiscordInviteByGuildId());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -20,7 +21,7 @@ public class HandlerKernel implements HttpHandler {
|
|||||||
public void handle(HttpExchange exchange) throws IOException {
|
public void handle(HttpExchange exchange) throws IOException {
|
||||||
|
|
||||||
String path = exchange.getRequestURI().getPath();
|
String path = exchange.getRequestURI().getPath();
|
||||||
if (path.endsWith("/")) path = path.substring(0, path.length() - 1);
|
if (path.endsWith("/") && path.length() > 1) path = path.substring(0, path.length() - 1);
|
||||||
exchange.getResponseHeaders().set("Access-Control-Allow-Origin", "*");
|
exchange.getResponseHeaders().set("Access-Control-Allow-Origin", "*");
|
||||||
exchange.getResponseHeaders().set("Access-Control-Allow-Methods", "*");
|
exchange.getResponseHeaders().set("Access-Control-Allow-Methods", "*");
|
||||||
exchange.getResponseHeaders().set("Access-Control-Allow-Headers", "Content-Type");
|
exchange.getResponseHeaders().set("Access-Control-Allow-Headers", "Content-Type");
|
||||||
|
|||||||
@@ -0,0 +1,49 @@
|
|||||||
|
package me.youhavetrouble.inviter.http.endpoints;
|
||||||
|
|
||||||
|
import com.sun.net.httpserver.HttpExchange;
|
||||||
|
import me.youhavetrouble.inviter.Main;
|
||||||
|
import me.youhavetrouble.inviter.discord.DiscordInvite;
|
||||||
|
import me.youhavetrouble.inviter.discord.DiscordInviteManager;
|
||||||
|
import me.youhavetrouble.inviter.discord.GuildSettings;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
public class MainEndpoint implements EndpointHandler {
|
||||||
|
|
||||||
|
private final Pattern pathPattern = Pattern.compile("^/$");
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public Pattern pathPattern() {
|
||||||
|
return pathPattern;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void handle(@NotNull HttpExchange exchange) throws IOException {
|
||||||
|
if (!exchange.getRequestMethod().equals("GET")) {
|
||||||
|
exchange.sendResponseHeaders(405, -1); // Method Not Allowed
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String host = exchange.getRemoteAddress().getHostName();
|
||||||
|
|
||||||
|
GuildSettings guildSettings = Main.getStorage().getGuildSettings(host);
|
||||||
|
if (guildSettings == null) {
|
||||||
|
exchange.sendResponseHeaders(404, -1); // Not Found
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
DiscordInviteManager inviteManager = Main.getDiscordInviteMenager();
|
||||||
|
DiscordInvite invite = inviteManager.getInvite(guildSettings.guildId());
|
||||||
|
|
||||||
|
if (invite == null) {
|
||||||
|
exchange.sendResponseHeaders(404, -1); // Not Found
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
exchange.getResponseHeaders().set("Location", "https://discord.gg/" + invite.code());
|
||||||
|
exchange.sendResponseHeaders(307, -1);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -64,15 +64,37 @@ public class SqliteStorage implements Storage {
|
|||||||
if (resultSet.next()) {
|
if (resultSet.next()) {
|
||||||
boolean apiEnabled = resultSet.getBoolean("api_enabled");
|
boolean apiEnabled = resultSet.getBoolean("api_enabled");
|
||||||
String apiHostname = resultSet.getString("api_hostname");
|
String apiHostname = resultSet.getString("api_hostname");
|
||||||
return new GuildSettings(apiEnabled, apiHostname);
|
return new GuildSettings(guildId, apiEnabled, apiHostname);
|
||||||
}
|
}
|
||||||
return new GuildSettings(false, null);
|
return new GuildSettings(guildId,false, null);
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
throw new RuntimeException("Failed to retrieve guild settings", e);
|
throw new RuntimeException("Failed to retrieve guild settings", e);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public GuildSettings getGuildSettings(@NotNull String hostname) {
|
||||||
|
|
||||||
|
try (Connection connection = dataSource.getConnection()) {
|
||||||
|
var statement = connection.prepareStatement(
|
||||||
|
"SELECT * FROM guild_settings WHERE api_hostname = ?"
|
||||||
|
);
|
||||||
|
statement.setString(1, hostname);
|
||||||
|
ResultSet resultSet = statement.executeQuery();
|
||||||
|
|
||||||
|
if (resultSet.next()) {
|
||||||
|
long guildId = resultSet.getLong("guild_id");
|
||||||
|
boolean apiEnabled = resultSet.getBoolean("api_enabled");
|
||||||
|
return new GuildSettings(guildId, apiEnabled, hostname);
|
||||||
|
}
|
||||||
|
return null; // No settings found for the given hostname
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new RuntimeException("Failed to retrieve guild settings by hostname", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void saveDefaultGuildSettings(long guildId) {
|
public void saveDefaultGuildSettings(long guildId) {
|
||||||
try (Connection connection = dataSource.getConnection()) {
|
try (Connection connection = dataSource.getConnection()) {
|
||||||
|
|||||||
@@ -9,6 +9,8 @@ public interface Storage {
|
|||||||
|
|
||||||
@NotNull GuildSettings getGuildSettings(long guildId);
|
@NotNull GuildSettings getGuildSettings(long guildId);
|
||||||
|
|
||||||
|
@Nullable GuildSettings getGuildSettings(@NotNull String hostname);
|
||||||
|
|
||||||
void saveDefaultGuildSettings(long guildId);
|
void saveDefaultGuildSettings(long guildId);
|
||||||
|
|
||||||
void updateDiscordApiEnabled(long guildId, boolean enabled);
|
void updateDiscordApiEnabled(long guildId, boolean enabled);
|
||||||
|
|||||||
Reference in New Issue
Block a user