Skip to content

Commit db3b080

Browse files
committed
Fixed #265, added time checks for subscriptions disabled over 1 hour ago. Time check disabled when using Client-Id header with value 'debug'
1 parent 50f5244 commit db3b080

File tree

4 files changed

+31
-10
lines changed

4 files changed

+31
-10
lines changed

internal/events/websocket/mock_server/manager.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,12 @@ func subscriptionPageHandlerGet(w http.ResponseWriter, r *http.Request) {
263263

264264
for clientName, clientSubscriptions := range server.Subscriptions {
265265
for _, subscription := range clientSubscriptions {
266-
if clientID == "debug" || subscription.ClientID == clientID {
266+
disabledAndExpired := false // Production EventSub only shows disabled WebSocket subscriptions that were disabled under 1 hour ago
267+
if subscription.DisabledAt != nil && subscription.DisabledAt.Add(time.Minute*2).Before(util.GetTimestamp()) {
268+
disabledAndExpired = true
269+
}
270+
271+
if clientID == "debug" || (subscription.ClientID == clientID && !disabledAndExpired) {
267272
allSubscriptions = append(allSubscriptions, SubscriptionPostSuccessResponseBody{
268273
ID: subscription.ClientID,
269274
Status: subscription.Status,

internal/events/websocket/mock_server/rpc_handler.go

+6
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,12 @@ func RPCSubscriptionHandler(args rpc.RPCArgs) rpc.RPCResponse {
253253
found = true
254254

255255
server.Subscriptions[client][i].Status = args.Variables["SubscriptionStatus"]
256+
if args.Variables["SubscriptionStatus"] == STATUS_ENABLED {
257+
server.Subscriptions[client][i].DisabledAt = nil
258+
} else {
259+
tNow := util.GetTimestamp()
260+
server.Subscriptions[client][i].DisabledAt = &tNow
261+
}
256262
break
257263
}
258264
}

internal/events/websocket/mock_server/server.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -410,6 +410,8 @@ func (ws *WebSocketServer) HandleRPCEventSubForwarding(eventsubBody string, clie
410410
foundClientId = sub.ClientID
411411

412412
ws.Subscriptions[client][i].Status = STATUS_AUTHORIZATION_REVOKED
413+
tNow := util.GetTimestamp()
414+
ws.Subscriptions[client][i].DisabledAt = &tNow
413415
break
414416
}
415417
}
@@ -503,9 +505,12 @@ func (ws *WebSocketServer) handleClientConnectionClose(client *Client, closeReas
503505
subscriptions := ws.Subscriptions[client.clientName]
504506
for i := range subscriptions {
505507
if subscriptions[i].Status == STATUS_ENABLED {
508+
tNow := util.GetTimestamp()
509+
506510
subscriptions[i].Status = getStatusFromCloseMessage(closeReason)
507511
subscriptions[i].ClientConnectedAt = ""
508-
subscriptions[i].ClientDisconnectedAt = time.Now().UTC().Format(time.RFC3339Nano)
512+
subscriptions[i].ClientDisconnectedAt = tNow.Format(time.RFC3339Nano)
513+
subscriptions[i].DisabledAt = &tNow
509514
}
510515
}
511516
ws.Subscriptions[client.clientName] = subscriptions

internal/events/websocket/mock_server/subscription.go

+13-8
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,20 @@
11
package mock_server
22

3-
import "github.com/twitchdev/twitch-cli/internal/models"
3+
import (
4+
"time"
5+
6+
"github.com/twitchdev/twitch-cli/internal/models"
7+
)
48

59
type Subscription struct {
6-
SubscriptionID string // Random GUID for the subscription
7-
ClientID string // Client ID included in headers
8-
Type string // EventSub topic
9-
Version string // EventSub topic version
10-
CreatedAt string // Timestamp of when the subscription was created
11-
Status string // Status of the subscription
12-
SessionClientName string // Client name of the session this is associated with.
10+
SubscriptionID string // Random GUID for the subscription
11+
ClientID string // Client ID included in headers
12+
Type string // EventSub topic
13+
Version string // EventSub topic version
14+
CreatedAt string // Timestamp of when the subscription was created
15+
DisabledAt *time.Time // Not public; Timestamp of when the subscription was disabled
16+
Status string // Status of the subscription
17+
SessionClientName string // Client name of the session this is associated with.
1318

1419
ClientConnectedAt string // Time client connected
1520
ClientDisconnectedAt string // Time client disconnected

0 commit comments

Comments
 (0)