Add test for DI constructability of TrustAjaxPage
[Sone.git] / src / main / kotlin / net / pterodactylus / sone / web / ajax / EditAlbumAjaxPage.kt
1 package net.pterodactylus.sone.web.ajax
2
3 import net.pterodactylus.sone.text.TextFilter
4 import net.pterodactylus.sone.utils.headers
5 import net.pterodactylus.sone.utils.ifTrue
6 import net.pterodactylus.sone.utils.parameters
7 import net.pterodactylus.sone.web.WebInterface
8 import net.pterodactylus.sone.web.page.FreenetRequest
9 import javax.inject.Inject
10
11 /**
12  * Page that stores a user’s album modifications.
13  */
14 class EditAlbumAjaxPage @Inject constructor(webInterface: WebInterface) : JsonPage("editAlbum.ajax", webInterface) {
15
16         override fun createJsonObject(request: FreenetRequest) =
17                         request.parameters["album"]!!
18                                         .let(core::getAlbum)
19                                         ?.let { album ->
20                                                 album.sone.isLocal.ifTrue {
21                                                         when {
22                                                                 request.parameters["moveLeft"] == "true" -> createSuccessJsonObject().apply {
23                                                                         put("sourceAlbumId", album.id)
24                                                                         put("destinationAlbumId", album.parent.moveAlbumUp(album).id)
25                                                                 }
26                                                                 request.parameters["moveRight"] == "true" -> createSuccessJsonObject().apply {
27                                                                         put("sourceAlbumId", album.id)
28                                                                         put("destinationAlbumId", album.parent.moveAlbumDown(album).id)
29                                                                 }
30                                                                 else -> try {
31                                                                         album.modify()
32                                                                                         .setTitle(request.parameters["title"])
33                                                                                         .setDescription(TextFilter.filter(request.headers["Host"], request.parameters["description"]))
34                                                                                         .update()
35                                                                         createSuccessJsonObject()
36                                                                                         .put("albumId", album.id)
37                                                                                         .put("title", album.title)
38                                                                                         .put("description", album.description)
39                                                                 } catch (e: IllegalStateException) {
40                                                                         createErrorJsonObject("invalid-album-title")
41                                                                 }
42                                                         }
43                                                 } ?: createErrorJsonObject("not-authorized")
44                                         } ?: createErrorJsonObject("invalid-album-id")
45
46 }