diff options
Diffstat (limited to 'kvision-server/src/main/kotlin/pl/treksoft')
-rw-r--r-- | kvision-server/src/main/kotlin/pl/treksoft/kvision/remote/Jooby.kt | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/kvision-server/src/main/kotlin/pl/treksoft/kvision/remote/Jooby.kt b/kvision-server/src/main/kotlin/pl/treksoft/kvision/remote/Jooby.kt index 7d339d04..a529aa27 100644 --- a/kvision-server/src/main/kotlin/pl/treksoft/kvision/remote/Jooby.kt +++ b/kvision-server/src/main/kotlin/pl/treksoft/kvision/remote/Jooby.kt @@ -25,9 +25,11 @@ package pl.treksoft.kvision.remote import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import kotlinx.coroutines.experimental.Deferred +import kotlinx.coroutines.experimental.Unconfined import org.jooby.Kooby import org.jooby.Session import org.jooby.json.Jackson +import org.pac4j.core.profile.CommonProfile import kotlinx.coroutines.experimental.async as coroutinesAsync /** @@ -53,10 +55,15 @@ actual open class JoobyServer(init: JoobyServer.() -> Unit) : Kooby() { actual typealias Request = org.jooby.Request /** + * A user profile. + */ +actual typealias Profile = CommonProfile + +/** * A helper extension function for asynchronous request processing. */ fun <RESP> Request?.async(block: (Request) -> RESP): Deferred<RESP> = this?.let { req -> - coroutinesAsync { + coroutinesAsync(Unconfined) { block(req) } } ?: throw IllegalStateException("Request not set!") @@ -64,9 +71,20 @@ fun <RESP> Request?.async(block: (Request) -> RESP): Deferred<RESP> = this?.let /** * A helper extension function for asynchronous request processing with session. */ -fun <RESP> Request?.asyncSession(block: (Request, Session) -> RESP): Deferred<RESP> = this?.let { req -> +fun <RESP> Request?.async(block: (Request, Session) -> RESP): Deferred<RESP> = this?.let { req -> val session = req.session() - coroutinesAsync { + coroutinesAsync(Unconfined) { block(req, session) } } ?: throw IllegalStateException("Request not set!") + +/** + * A helper extension function for asynchronous request processing with session and user profile. + */ +fun <RESP> Request?.async(block: (Request, Session, Profile) -> RESP): Deferred<RESP> = this?.let { req -> + val session = req.session() + val profile = req.require(CommonProfile::class.java) + coroutinesAsync(Unconfined) { + block(req, session, profile) + } +} ?: throw IllegalStateException("Request not set!") |