Skip to content

Commit db3b3ac

Browse files
committed
Fix Event Sub Checking and Add Deletion when not a success
1 parent ef5eee7 commit db3b3ac

3 files changed

Lines changed: 57 additions & 20 deletions

File tree

src/me/Logicism/TwitchOverlayServer/TwitchOverlayServer.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,16 @@
33
import com.fasterxml.jackson.databind.ObjectMapper;
44
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
55
import com.sun.net.httpserver.HttpServer;
6-
import me.Logicism.TwitchOverlayServer.http.BrowserClient;
7-
import me.Logicism.TwitchOverlayServer.http.BrowserData;
86
import me.Logicism.TwitchOverlayServer.http.handlers.OverlayHandler;
97
import me.Logicism.TwitchOverlayServer.http.handlers.StaticPageHandler;
108
import me.Logicism.TwitchOverlayServer.http.handlers.TokenHandler;
119
import me.Logicism.TwitchOverlayServer.http.handlers.WebhookHandler;
1210
import me.Logicism.TwitchOverlayServer.http.oauth.TokenHandle;
1311
import me.Logicism.TwitchOverlayServer.logging.TwitchOverlayLogger;
1412
import me.Logicism.TwitchOverlayServer.ws.OverlayWebsocketServer;
15-
import org.json.JSONObject;
1613

1714
import java.io.*;
1815
import java.net.InetSocketAddress;
19-
import java.net.URL;
2016
import java.util.ArrayList;
2117
import java.util.HashMap;
2218
import java.util.List;

src/me/Logicism/TwitchOverlayServer/http/BrowserClient.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,28 @@ public static BrowserData executePOSTRequest(URL url, String data, Map<String, S
5757
c.getInputStream() != null ? c.getInputStream() : c.getErrorStream(), c.getContentType());
5858
}
5959

60+
public static BrowserData executeDELETERequest(URL url, Map<String, String> headers) throws IOException {
61+
HttpURLConnection c = (HttpURLConnection) url.openConnection();
62+
c.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 " +
63+
"(KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36");
64+
c.setConnectTimeout(30000);
65+
c.setReadTimeout(30000);
66+
c.setInstanceFollowRedirects(false);
67+
c.setRequestMethod("DELETE");
68+
69+
if (headers != null) {
70+
for (Map.Entry<String, String> entry : headers.entrySet()) {
71+
c.setRequestProperty(entry.getKey(), entry.getValue());
72+
}
73+
}
74+
75+
int resCode = c.getResponseCode();
76+
int resLength = c.getContentLength();
77+
78+
return new BrowserData(c.getURL().toString(), c.getHeaderFields(), resCode, resLength,
79+
c.getInputStream() != null ? c.getInputStream() : c.getErrorStream(), c.getContentType());
80+
}
81+
6082
public static String requestToString(InputStream is) throws IOException {
6183
BufferedReader br = new BufferedReader(new InputStreamReader(is));
6284
String s;

src/me/Logicism/TwitchOverlayServer/http/handlers/TokenHandler.java

Lines changed: 35 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -150,31 +150,31 @@ public void run() {
150150
JSONObject eventSubObject = new JSONObject(BrowserClient.requestToString(bd.getResponse()));
151151

152152
if (hasEventHandler(eventSubObject, "channel.prediction.begin",
153-
userObject.getString("id"), overlaySubBaseURL)) {
153+
userObject.getString("id"), exchange.getRequestHeaders().get("User-Agent").get(0), overlaySubBaseURL)) {
154154
registerEventSub("channel.prediction.begin", userObject.getString("id"),
155155
exchange.getRequestHeaders().get("User-Agent").get(0),
156156
TwitchOverlayServer.INSTANCE.getAppAccessTokenHandle().getAccessToken(),
157157
overlaySubBaseURL, 1);
158158
}
159159

160160
if (hasEventHandler(eventSubObject, "channel.prediction.progress",
161-
userObject.getString("id"), overlaySubBaseURL)) {
161+
userObject.getString("id"), exchange.getRequestHeaders().get("User-Agent").get(0), overlaySubBaseURL)) {
162162
registerEventSub("channel.prediction.progress", userObject.getString("id"),
163163
exchange.getRequestHeaders().get("User-Agent").get(0),
164164
TwitchOverlayServer.INSTANCE.getAppAccessTokenHandle().getAccessToken(),
165165
overlaySubBaseURL, 1);
166166
}
167167

168168
if (hasEventHandler(eventSubObject, "channel.prediction.lock",
169-
userObject.getString("id"), overlaySubBaseURL)) {
169+
userObject.getString("id"), exchange.getRequestHeaders().get("User-Agent").get(0), overlaySubBaseURL)) {
170170
registerEventSub("channel.prediction.lock", userObject.getString("id"),
171171
exchange.getRequestHeaders().get("User-Agent").get(0),
172172
TwitchOverlayServer.INSTANCE.getAppAccessTokenHandle().getAccessToken(),
173173
overlaySubBaseURL, 1);
174174
}
175175

176176
if (hasEventHandler(eventSubObject, "channel.prediction.end",
177-
userObject.getString("id"), overlaySubBaseURL)) {
177+
userObject.getString("id"), exchange.getRequestHeaders().get("User-Agent").get(0), overlaySubBaseURL)) {
178178
registerEventSub("channel.prediction.end", userObject.getString("id"),
179179
exchange.getRequestHeaders().get("User-Agent").get(0),
180180
TwitchOverlayServer.INSTANCE.getAppAccessTokenHandle().getAccessToken(),
@@ -189,23 +189,23 @@ public void run() {
189189
JSONObject eventSubObject = new JSONObject(BrowserClient.requestToString(bd.getResponse()));
190190

191191
if (hasEventHandler(eventSubObject, "channel.poll.begin",
192-
userObject.getString("id"), overlaySubBaseURL)) {
192+
userObject.getString("id"), exchange.getRequestHeaders().get("User-Agent").get(0), overlaySubBaseURL)) {
193193
registerEventSub("channel.poll.begin", userObject.getString("id"),
194194
exchange.getRequestHeaders().get("User-Agent").get(0),
195195
TwitchOverlayServer.INSTANCE.getAppAccessTokenHandle().getAccessToken(),
196196
overlaySubBaseURL, 1);
197197
}
198198

199199
if (hasEventHandler(eventSubObject, "channel.poll.progress",
200-
userObject.getString("id"), overlaySubBaseURL)) {
200+
userObject.getString("id"), exchange.getRequestHeaders().get("User-Agent").get(0), overlaySubBaseURL)) {
201201
registerEventSub("channel.poll.progress", userObject.getString("id"),
202202
exchange.getRequestHeaders().get("User-Agent").get(0),
203203
TwitchOverlayServer.INSTANCE.getAppAccessTokenHandle().getAccessToken(),
204204
overlaySubBaseURL, 1);
205205
}
206206

207207
if (hasEventHandler(eventSubObject, "channel.poll.end",
208-
userObject.getString("id"), overlaySubBaseURL)) {
208+
userObject.getString("id"), exchange.getRequestHeaders().get("User-Agent").get(0), overlaySubBaseURL)) {
209209
registerEventSub("channel.poll.end", userObject.getString("id"),
210210
exchange.getRequestHeaders().get("User-Agent").get(0),
211211
TwitchOverlayServer.INSTANCE.getAppAccessTokenHandle().getAccessToken(),
@@ -220,47 +220,47 @@ public void run() {
220220
JSONObject eventSubObject = new JSONObject(BrowserClient.requestToString(bd.getResponse()));
221221

222222
if (hasEventHandler(eventSubObject, "channel.follow",
223-
userObject.getString("id"), overlaySubBaseURL)) {
223+
userObject.getString("id"), exchange.getRequestHeaders().get("User-Agent").get(0), overlaySubBaseURL)) {
224224
registerEventSub("channel.follow", userObject.getString("id"),
225225
exchange.getRequestHeaders().get("User-Agent").get(0),
226226
TwitchOverlayServer.INSTANCE.getAppAccessTokenHandle().getAccessToken(),
227227
overlaySubBaseURL, 2);
228228
}
229229

230230
if (hasEventHandler(eventSubObject, "channel.subscribe",
231-
userObject.getString("id"), overlaySubBaseURL)) {
231+
userObject.getString("id"), exchange.getRequestHeaders().get("User-Agent").get(0), overlaySubBaseURL)) {
232232
registerEventSub("channel.subscribe", userObject.getString("id"),
233233
exchange.getRequestHeaders().get("User-Agent").get(0),
234234
TwitchOverlayServer.INSTANCE.getAppAccessTokenHandle().getAccessToken(),
235235
overlaySubBaseURL, 1);
236236
}
237237

238238
if (hasEventHandler(eventSubObject, "channel.subscription.gift",
239-
userObject.getString("id"), overlaySubBaseURL)) {
239+
userObject.getString("id"), exchange.getRequestHeaders().get("User-Agent").get(0), overlaySubBaseURL)) {
240240
registerEventSub("channel.subscription.gift", userObject.getString("id"),
241241
exchange.getRequestHeaders().get("User-Agent").get(0),
242242
TwitchOverlayServer.INSTANCE.getAppAccessTokenHandle().getAccessToken(),
243243
overlaySubBaseURL, 1);
244244
}
245245

246246
if (hasEventHandler(eventSubObject, "channel.subscription.message",
247-
userObject.getString("id"), overlaySubBaseURL)) {
247+
userObject.getString("id"), exchange.getRequestHeaders().get("User-Agent").get(0), overlaySubBaseURL)) {
248248
registerEventSub("channel.subscription.message", userObject.getString("id"),
249249
exchange.getRequestHeaders().get("User-Agent").get(0),
250250
TwitchOverlayServer.INSTANCE.getAppAccessTokenHandle().getAccessToken(),
251251
overlaySubBaseURL, 1);
252252
}
253253

254254
if (hasEventHandler(eventSubObject, "channel.cheer",
255-
userObject.getString("id"), overlaySubBaseURL)) {
255+
userObject.getString("id"), exchange.getRequestHeaders().get("User-Agent").get(0), overlaySubBaseURL)) {
256256
registerEventSub("channel.cheer", userObject.getString("id"),
257257
exchange.getRequestHeaders().get("User-Agent").get(0),
258258
TwitchOverlayServer.INSTANCE.getAppAccessTokenHandle().getAccessToken(),
259259
overlaySubBaseURL, 1);
260260
}
261261

262262
if (hasEventHandler(eventSubObject, "channel.raid",
263-
userObject.getString("id"), overlaySubBaseURL)) {
263+
userObject.getString("id"), exchange.getRequestHeaders().get("User-Agent").get(0), overlaySubBaseURL)) {
264264
registerEventSub("channel.raid", userObject.getString("id"),
265265
exchange.getRequestHeaders().get("User-Agent").get(0),
266266
TwitchOverlayServer.INSTANCE.getAppAccessTokenHandle().getAccessToken(),
@@ -287,21 +287,30 @@ public void run() {
287287
}
288288
}
289289

290-
public boolean hasEventHandler(JSONObject eventSubObject, String subType, String userId, String overlaySubBaseURL) {
290+
public boolean hasEventHandler(JSONObject eventSubObject, String subType, String userId, String userAgent, String overlaySubBaseURL) throws IOException {
291291
for (int i = 0; i < eventSubObject.getJSONArray("data").length(); i++) {
292292
JSONObject eventSubObj = eventSubObject.getJSONArray("data").getJSONObject(i);
293293

294294
if (eventSubObj.getString("type").equals(subType)) {
295295
if (eventSubObj.getJSONObject("transport").getString("method").equals("webhook") &&
296296
eventSubObj.getJSONObject("transport").getString("callback")
297297
.equals(TwitchOverlayServer.INSTANCE.getConfig().getOverlayBaseURL()
298-
+ "/webhook" + overlaySubBaseURL + "/" + userId)) {
298+
+ "/webhook" + overlaySubBaseURL + "/" + userId) &&
299+
eventSubObj.getString("status").equals("enabled")) {
300+
return true;
301+
} else if (eventSubObj.getJSONObject("transport").getString("method").equals("webhook") &&
302+
eventSubObj.getJSONObject("transport").getString("callback")
303+
.equals(TwitchOverlayServer.INSTANCE.getConfig().getOverlayBaseURL()
304+
+ "/webhook" + overlaySubBaseURL + "/" + userId) &&
305+
eventSubObj.getString("status").equals("enabled")) {
306+
deleteEventSub(eventSubObject.getString("id"), userAgent, overlaySubBaseURL);
307+
299308
return false;
300309
}
301310
}
302311
}
303312

304-
return true;
313+
return false;
305314
}
306315

307316
public void registerEventSub(String subType, String userId, String userAgent, String accessToken
@@ -332,4 +341,14 @@ public void registerEventSub(String subType, String userId, String userAgent, St
332341
payload.toString(), headers);
333342
}
334343

344+
public void deleteEventSub(String eventId, String userAgent, String accessToken) throws IOException {
345+
Map<String, String> headers = new HashMap<>();
346+
headers.put("User-Agent", userAgent);
347+
headers.put("Authorization", "Bearer " + accessToken);
348+
headers.put("Client-Id", TwitchOverlayServer.INSTANCE.getConfig().getClientID());
349+
headers.put("Content-Type", "application/json");
350+
351+
BrowserClient.executeDELETERequest(new URL("https://api.twitch.tv/helix/eventsub/subscriptions?id=" + eventId), headers);
352+
}
353+
335354
}

0 commit comments

Comments
 (0)