Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 13 additions & 10 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,19 +1,22 @@
group 'org.discordbots'
plugins {
id "java"
}

apply plugin: 'java'
apply plugin: 'maven'
group = 'org.discordbots'

repositories {
mavenCentral()
}

dependencies {

//Logger
compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.25'
implementation "org.slf4j:slf4j-api:2.0.17"

compile group: 'org.json', name: 'json', version: '20180130'
compile group: 'com.squareup.okhttp3', name: 'okhttp', version: '3.11.0'
compile group: 'com.google.code.gson', name: 'gson', version: '2.8.5'
compile group: 'com.fatboyindustrial.gson-javatime-serialisers', name: 'gson-javatime-serialisers', version: '1.1.1'
}
implementation "org.json:json:20250517"
implementation "com.squareup.okhttp3:okhttp:5.2.0"
implementation "com.google.code.gson:gson:2.13.2"
implementation "com.fatboyindustrial.gson-javatime-serialisers:gson-javatime-serialisers:1.1.2"
implementation "org.springframework.boot:spring-boot-starter-web:3.5.6"
implementation "jakarta.servlet:jakarta.servlet-api:6.1.0"
implementation "jakarta.ws.rs:jakarta.ws.rs-api:4.0.0"
}
45 changes: 45 additions & 0 deletions src/main/java/org/discordbots/api/client/Dropwizard.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package org.discordbots.api.client.webhooks;

import java.io.IOException;
import java.io.InputStreamReader;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonIOException;
import com.google.gson.JsonSyntaxException;

import jakarta.servlet.http.HttpServletRequest;
import jakarta.ws.rs.POST;
import jakarta.ws.rs.core.Context;
import jakarta.ws.rs.core.Response;

public abstract class Dropwizard<T> {
private final Class<T> aClass;
private final String authorization;
private final Gson gson;

public Dropwizard(final Class<T> aClass, final String authorization) {
this.aClass = aClass;
this.authorization = authorization;
this.gson = new GsonBuilder().create();
}

@POST
public Response handle(@Context HttpServletRequest request) {
final String authorizationHeader = request.getHeader("Authorization");

if (authorizationHeader == null || !authorizationHeader.equals(this.authorization)) {
return Response.status(Response.Status.UNAUTHORIZED).entity("Unauthorized").build();
}

try {
callback(gson.fromJson(new InputStreamReader(request.getInputStream()), aClass));

return Response.noContent().build();
} catch (final JsonSyntaxException | JsonIOException | IOException ignored) {}

return Response.status(Response.Status.BAD_REQUEST).entity("Bad request").build();
}

public abstract void callback(T data);
}
51 changes: 51 additions & 0 deletions src/main/java/org/discordbots/api/client/EclipseJetty.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package org.discordbots.api.client.webhooks;

import java.io.IOException;
import java.io.InputStreamReader;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonIOException;
import com.google.gson.JsonSyntaxException;

import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

public abstract class EclipseJetty<T> extends HttpServlet {
private final Class<T> aClass;
private final String authorization;
private final Gson gson;

public EclipseJetty(final Class<T> aClass, final String authorization) {
this.aClass = aClass;
this.authorization = authorization;
this.gson = new GsonBuilder().create();
}

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
final String authorizationHeader = request.getHeader("Authorization");

if (authorizationHeader == null || !authorizationHeader.equals(this.authorization)) {
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
response.getWriter().write("Unauthorized");

return;
}

try {
callback(gson.fromJson(new InputStreamReader(request.getInputStream()), aClass));

response.setStatus(HttpServletResponse.SC_NO_CONTENT);
response.getWriter().write("");

return;
} catch (final JsonSyntaxException | JsonIOException | IOException ignored) {}

response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
response.getWriter().write("Bad request");
}

public abstract void callback(T data);
}
58 changes: 58 additions & 0 deletions src/main/java/org/discordbots/api/client/SpringBoot.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package org.discordbots.api.client.webhooks;

import java.io.IOException;
import java.io.InputStreamReader;

import org.springframework.web.filter.OncePerRequestFilter;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonIOException;
import com.google.gson.JsonSyntaxException;

import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

public abstract class SpringBoot<T> extends OncePerRequestFilter {
private final Class<T> aClass;
private final String authorization;
private final Gson gson;

public SpringBoot(final Class<T> aClass, final String authorization) {
this.aClass = aClass;
this.authorization = authorization;
this.gson = new GsonBuilder().create();
}

@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
if (request.getMethod().equalsIgnoreCase("POST")) {
final String authorizationHeader = request.getHeader("Authorization");

if (authorizationHeader == null || !authorizationHeader.equals(this.authorization)) {
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
response.getWriter().write("Unauthorized");

return;
}

try {
callback(gson.fromJson(new InputStreamReader(request.getInputStream()), aClass));

response.setStatus(HttpServletResponse.SC_NO_CONTENT);
response.getWriter().write("");

return;
} catch (final JsonSyntaxException | JsonIOException | IOException ignored) {}

response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
response.getWriter().write("Bad request");
} else {
filterChain.doFilter(request, response);
}
}

public abstract void callback(T data);
}