aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKazuki Yamaguchi <k@rhe.jp>2022-02-24 02:57:45 +0900
committerKazuki Yamaguchi <k@rhe.jp>2022-02-24 02:57:45 +0900
commite8514389ce1904e1f73abb6829b5eb78576fdcd6 (patch)
treedc93385ea264d42ca6f3b75208f6e73f27c87dc8
parent651e6d909bded515841bfeb3fa5c851ac1a7fa60 (diff)
downloadsnag-master.tar.gz
server: restrict event data to be jsonHEADmaster
-rw-r--r--server/src/main/kotlin/jp/rhe/snag/server/Event.kt4
-rw-r--r--server/src/main/kotlin/jp/rhe/snag/server/Service.kt22
2 files changed, 14 insertions, 12 deletions
diff --git a/server/src/main/kotlin/jp/rhe/snag/server/Event.kt b/server/src/main/kotlin/jp/rhe/snag/server/Event.kt
index bc42c55..2c66b10 100644
--- a/server/src/main/kotlin/jp/rhe/snag/server/Event.kt
+++ b/server/src/main/kotlin/jp/rhe/snag/server/Event.kt
@@ -1,6 +1,8 @@
package jp.rhe.snag.server
-data class Event(val type: EventType, val content: String) {
+import kotlinx.serialization.json.JsonElement
+
+data class Event(val type: EventType, val content: JsonElement) {
val id = idBase++
companion object {
diff --git a/server/src/main/kotlin/jp/rhe/snag/server/Service.kt b/server/src/main/kotlin/jp/rhe/snag/server/Service.kt
index 49e7f6a..f1d2e38 100644
--- a/server/src/main/kotlin/jp/rhe/snag/server/Service.kt
+++ b/server/src/main/kotlin/jp/rhe/snag/server/Service.kt
@@ -61,9 +61,9 @@ class Service(val account: Account) {
sentEvents += events.size
GlobalScope.launch {
try {
- c.send(Event(EventType.BackfillStart, ""))
+ c.send(Event(EventType.BackfillStart, JsonNull))
events.forEach { c.send(it) }
- c.send(Event(EventType.BackfillFinish, ""))
+ c.send(Event(EventType.BackfillFinish, JsonNull))
} catch (ignored: ChannelWriteException) {
}
}
@@ -86,7 +86,7 @@ class Service(val account: Account) {
private suspend fun doPollingHomeTimeline() {
val path = "/1.1/statuses/home_timeline.json"
val requestInterval = account.minInterval(path).coerceAtLeast(1.0)
- emitEvent(Event(EventType.System, "'home_timeline' polling job started with interval $requestInterval seconds"))
+ emitEvent(Event(EventType.System, JsonPrimitive("'home_timeline' polling job started with interval $requestInterval seconds")))
doPolling(path, requestInterval, EventType.HomeTimelineTweet)
}
@@ -94,7 +94,7 @@ class Service(val account: Account) {
private suspend fun doPollingMentionsTimeline() {
val path = "/1.1/statuses/mentions_timeline.json"
val requestInterval = account.minInterval(path).coerceAtLeast(1.0)
- emitEvent(Event(EventType.System, "'mentions_timeline' polling job started with interval $requestInterval seconds"))
+ emitEvent(Event(EventType.System, JsonPrimitive("'mentions_timeline' polling job started with interval $requestInterval seconds")))
doPolling(path, requestInterval, EventType.MentionsTimelineTweet)
}
@@ -122,12 +122,12 @@ class Service(val account: Account) {
twitterApiErrors += 1
if (httpRes.code == 429 /* Too Many Requests */) {
- val msg = "$path rate limited; another program using the token? " +
+ val msg = "$path rate limited; another program using the token?\n" +
"limit=${httpRes.headers["x-rate-limit-limit"]}; " +
"remaining=${httpRes.headers["x-rate-limit-remaining"]}; " +
- "reset=${httpRes.headers["x-rate-limit-reset"]}" +
- " (current time: ${System.currentTimeMillis() / 1000})"
- emitEvent(Event(EventType.System, msg))
+ "reset=${httpRes.headers["x-rate-limit-reset"]}\n" +
+ "current=${System.currentTimeMillis() / 1000}"
+ emitEvent(Event(EventType.System, JsonPrimitive(msg)))
return@use listOf<JsonObject>()
}
throw Exception(
@@ -154,7 +154,7 @@ class Service(val account: Account) {
// 100 is a random safe value
if (res.size >= 100) {
val msg = "Possible stalled tweets ${lastMax + 1}...$currentMin"
- emitEvent(Event(EventType.System, msg))
+ emitEvent(Event(EventType.System, JsonPrimitive(msg)))
}
}
@@ -179,7 +179,7 @@ class Service(val account: Account) {
// this is probably not worth doing as clients will anyway process
// extended_tweet only so it can support >140 characters tweets.
- emitEvent(Event(into, JsonObject(obj).toString()))
+ emitEvent(Event(into, JsonObject(obj)))
}
lastMax = res.last()["id"]!!.jsonPrimitive.long
} catch (e: Exception) {
@@ -322,7 +322,7 @@ class Service(val account: Account) {
println("feedWebhook: webhook event for unknown user: $forUserId: $body")
return
}
- service.emitEvent(Event(EventType.WebhookEvent, body))
+ service.emitEvent(Event(EventType.WebhookEvent, obj))
}
suspend fun register(params: Parameters) {