diff --git a/api/src/controllers/ChaptersController.kt b/api/src/controllers/ChaptersController.kt index 1fab10d..c42f2eb 100644 --- a/api/src/controllers/ChaptersController.kt +++ b/api/src/controllers/ChaptersController.kt @@ -18,7 +18,7 @@ class ChaptersController(kodein: Kodein) : AuthCrudController("/notes/{noteTitle return this.parameters["chapterNumber"]?.toIntOrNull() } - override fun Routing.registerAuthRoutes() { + override fun Routing.routes() { TODO("Not yet implemented") } } diff --git a/api/src/controllers/NotesController.kt b/api/src/controllers/NotesController.kt index cec3c8d..5fdacb9 100644 --- a/api/src/controllers/NotesController.kt +++ b/api/src/controllers/NotesController.kt @@ -12,7 +12,7 @@ import org.kodein.di.generic.instance class NotesController(kodein: Kodein) : AuthCrudController("/notes", kodein) { private val notesService by kodein.instance() - override fun Routing.registerAuthRoutes() { + override fun Routing.routes() { get { val userId = call.userId() val notes = notesService.getNotes(userId) diff --git a/api/src/controllers/RegisterController.kt b/api/src/controllers/RegisterController.kt index 52d6a23..f0b1b5d 100644 --- a/api/src/controllers/RegisterController.kt +++ b/api/src/controllers/RegisterController.kt @@ -4,8 +4,7 @@ import be.vandewalleh.controllers.base.KodeinController import io.ktor.routing.Routing import org.kodein.di.Kodein -class RegisterController(kodein: Kodein): KodeinController(kodein){ - override fun Routing.registerRoutes() { - +class RegisterController(kodein: Kodein) : KodeinController("", kodein) { + override fun Routing.routes() { } } \ No newline at end of file diff --git a/api/src/controllers/TitleController.kt b/api/src/controllers/TitleController.kt index 3a60f95..0e7d432 100644 --- a/api/src/controllers/TitleController.kt +++ b/api/src/controllers/TitleController.kt @@ -59,7 +59,7 @@ class TitleController(kodein: Kodein) : AuthCrudController("/notes/{noteTitle}", private class PatchRequestBody(val title: String? = null, val tags: List? = null) - override fun Routing.registerAuthRoutes() { + override fun Routing.routes() { post { val title = call.noteTitle() ?: error("") val tags = call.receive().tags diff --git a/api/src/controllers/base/AuthCrudController.kt b/api/src/controllers/base/AuthCrudController.kt index a69d9fc..b778f88 100644 --- a/api/src/controllers/base/AuthCrudController.kt +++ b/api/src/controllers/base/AuthCrudController.kt @@ -3,36 +3,25 @@ package be.vandewalleh.controllers.base import be.vandewalleh.services.UserService import io.ktor.application.ApplicationCall import io.ktor.auth.UserIdPrincipal -import io.ktor.auth.authenticate import io.ktor.auth.principal -import io.ktor.routing.Route -import io.ktor.routing.Routing -import io.ktor.routing.route import org.kodein.di.Kodein import org.kodein.di.generic.instance abstract class AuthCrudController( - private val path: String, + path: String, override val kodein: Kodein ) : - KodeinController(kodein) { + KodeinController(path, kodein, auth = true) { private val userService by instance() + /** + * retrieves the user email from the JWT token + */ fun ApplicationCall.userEmail(): String = this.principal()!!.name fun ApplicationCall.userId(): Int = userService.getUserId(userEmail())!! - abstract fun Routing.registerAuthRoutes() - - override fun Routing.registerRoutes() { - authenticate { - route(path) { - this@registerRoutes.registerAuthRoutes() - } - } - } } - diff --git a/api/src/controllers/base/KodeinController.kt b/api/src/controllers/base/KodeinController.kt index eb8e373..a4c46c4 100644 --- a/api/src/controllers/base/KodeinController.kt +++ b/api/src/controllers/base/KodeinController.kt @@ -1,19 +1,40 @@ package be.vandewalleh.controllers.base import io.ktor.application.ApplicationCall +import io.ktor.auth.authenticate import io.ktor.http.HttpStatusCode import io.ktor.response.respond import io.ktor.routing.Routing +import io.ktor.routing.route import org.kodein.di.Kodein import org.kodein.di.KodeinAware -abstract class KodeinController(override val kodein: Kodein) : KodeinAware { - +abstract class KodeinController( + private val path: String, + override val kodein: Kodein, + private val auth: Boolean = false +) : KodeinAware { /** - * Method that subtypes must override to register the handled [Routing] routes. + * Method that subtypes must override to declare their [Routing] routes. */ - abstract fun Routing.registerRoutes() + abstract fun Routing.routes() + + + fun Routing.registerRoutes() { + if (auth) { + authenticate { + route(path) { + this@registerRoutes.routes() + } + } + } + else { + route(path) { + this@registerRoutes.routes() + } + } + } suspend fun ApplicationCall.respondStatus(status: HttpStatusCode) { this.respond(status, mapOf("message" to status.description))