🔥 Remove templates from FreenetTemplatePages
[Sone.git] / src / main / kotlin / net / pterodactylus / sone / web / pages / ReloadingPage.kt
1 package net.pterodactylus.sone.web.pages
2
3 import net.pterodactylus.util.web.Page
4 import net.pterodactylus.util.web.Request
5 import net.pterodactylus.util.web.Response
6 import java.io.File
7 import javax.inject.Inject
8
9 /**
10  * [Page] implementation that delivers static files from the filesystem.
11  */
12 class ReloadingPage<R: Request> @Inject constructor(private val prefix: String, private val path: String, private val mimeType: String): Page<R> {
13
14         override fun isPrefixPage() = true
15
16         override fun getPath() = prefix
17
18         override fun handleRequest(request: R, response: Response): Response {
19                 val filename = request.uri.path.split("/").last()
20                 File(path, filename).also { file ->
21                         if (file.exists()) {
22                                 response.content.use { output ->
23                                         file.forEachBlock { buffer, bytesRead ->
24                                                 output.write(buffer, 0, bytesRead)
25                                         }
26                                 }
27                                 response.statusCode = 200
28                                 response.contentType = mimeType
29                         } else {
30                                 response.statusCode = 404
31                                 response.statusText = "Not found"
32                         }
33                 }
34                 return response
35         }
36
37 }