Replace create post ajax page with Kotlin version
[Sone.git] / src / main / kotlin / net / pterodactylus / sone / web / ajax / CreatePostAjaxPage.kt
diff --git a/src/main/kotlin/net/pterodactylus/sone/web/ajax/CreatePostAjaxPage.kt b/src/main/kotlin/net/pterodactylus/sone/web/ajax/CreatePostAjaxPage.kt
new file mode 100644 (file)
index 0000000..c9bcf48
--- /dev/null
@@ -0,0 +1,34 @@
+package net.pterodactylus.sone.web.ajax
+
+import net.pterodactylus.sone.data.Sone
+import net.pterodactylus.sone.text.TextFilter
+import net.pterodactylus.sone.utils.emptyToNull
+import net.pterodactylus.sone.utils.headers
+import net.pterodactylus.sone.utils.let
+import net.pterodactylus.sone.utils.parameters
+import net.pterodactylus.sone.web.WebInterface
+import net.pterodactylus.sone.web.page.FreenetRequest
+
+/**
+ * AJAX handler that creates a new post.
+ */
+class CreatePostAjaxPage(webInterface: WebInterface) : JsonPage("createPost.ajax", webInterface) {
+
+       override fun createJsonObject(request: FreenetRequest) =
+                       getCurrentSone(request.toadletContext)?.let { sone ->
+                               request.parameters["text"].emptyToNull
+                                               ?.let { TextFilter.filter(request.headers["Host"], it) }
+                                               ?.let { text ->
+                                                       val sender = request.parameters["sender"].emptyToNull?.let(webInterface.core::getSone)?.orNull() ?: sone
+                                                       val recipient = request.parameters["recipient"].let(webInterface.core::getSone)
+                                                       webInterface.core.createPost(sender, recipient, text).let { post ->
+                                                               createSuccessJsonObject().apply {
+                                                                       put("postId", post.id)
+                                                                       put("sone", sender.id)
+                                                                       put("recipient", recipient.let(Sone::getId))
+                                                               }
+                                                       }
+                                               } ?: createErrorJsonObject("text-required")
+                       } ?: createErrorJsonObject("auth-required")
+
+}