aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Jaros <rjaros@finn.pl>2019-02-03 17:02:12 +0100
committerRobert Jaros <rjaros@finn.pl>2019-02-03 17:02:12 +0100
commit072d62ffdc23c1e00160aa257eaf784e1f18e0ab (patch)
treeba6359298c1bcfe087318c847cb7d11a38b97d6e
parent3cc747afb298d297f0bc3680a561ea9f9075114e (diff)
downloadkvision-072d62ffdc23c1e00160aa257eaf784e1f18e0ab.tar.gz
kvision-072d62ffdc23c1e00160aa257eaf784e1f18e0ab.tar.bz2
kvision-072d62ffdc23c1e00160aa257eaf784e1f18e0ab.zip
Ktor server-side interface fixes and refactorings.
-rw-r--r--kvision-modules/kvision-server-ktor/build.gradle1
-rw-r--r--kvision-modules/kvision-server-ktor/src/main/kotlin/pl/treksoft/kvision/remote/KVModules.kt4
-rw-r--r--kvision-modules/kvision-server-ktor/src/main/kotlin/pl/treksoft/kvision/remote/Profile.kt96
3 files changed, 96 insertions, 5 deletions
diff --git a/kvision-modules/kvision-server-ktor/build.gradle b/kvision-modules/kvision-server-ktor/build.gradle
index b38349a0..bdc9c4c1 100644
--- a/kvision-modules/kvision-server-ktor/build.gradle
+++ b/kvision-modules/kvision-server-ktor/build.gradle
@@ -11,7 +11,6 @@ dependencies {
compile "io.ktor:ktor-server-core:$ktorVersion"
compile "io.ktor:ktor-jackson:$ktorVersion"
compile "com.google.inject:guice:$guiceVersion"
- compile "org.pac4j:pac4j-core:$pac4jVersion"
compile "com.github.andrewoma.kwery:mapper:$kweryVersion"
compile "com.fasterxml.jackson.module:jackson-module-kotlin:$jacksonModuleKotlinVersion"
testCompile "org.jetbrains.kotlin:kotlin-test:$kotlinVersion"
diff --git a/kvision-modules/kvision-server-ktor/src/main/kotlin/pl/treksoft/kvision/remote/KVModules.kt b/kvision-modules/kvision-server-ktor/src/main/kotlin/pl/treksoft/kvision/remote/KVModules.kt
index 06018761..e322aec5 100644
--- a/kvision-modules/kvision-server-ktor/src/main/kotlin/pl/treksoft/kvision/remote/KVModules.kt
+++ b/kvision-modules/kvision-server-ktor/src/main/kotlin/pl/treksoft/kvision/remote/KVModules.kt
@@ -31,7 +31,7 @@ import io.ktor.application.ApplicationCallPipeline
import io.ktor.application.call
import io.ktor.application.install
import io.ktor.features.ContentNegotiation
-import io.ktor.http.content.default
+import io.ktor.http.content.defaultResource
import io.ktor.http.content.resources
import io.ktor.http.content.static
import io.ktor.jackson.jackson
@@ -49,7 +49,7 @@ fun Application.kvisionInit(vararg modules: Module) {
routing {
static("/") {
resources("assets")
- default("index.html")
+ defaultResource("assets/index.html")
}
}
diff --git a/kvision-modules/kvision-server-ktor/src/main/kotlin/pl/treksoft/kvision/remote/Profile.kt b/kvision-modules/kvision-server-ktor/src/main/kotlin/pl/treksoft/kvision/remote/Profile.kt
index 77ceb339..693c8e3c 100644
--- a/kvision-modules/kvision-server-ktor/src/main/kotlin/pl/treksoft/kvision/remote/Profile.kt
+++ b/kvision-modules/kvision-server-ktor/src/main/kotlin/pl/treksoft/kvision/remote/Profile.kt
@@ -21,9 +21,101 @@
*/
package pl.treksoft.kvision.remote
-import org.pac4j.core.profile.CommonProfile
+import io.ktor.application.ApplicationCall
+import io.ktor.sessions.get
+import io.ktor.sessions.sessions
+import kotlinx.serialization.Serializable
+import kotlinx.serialization.Transient
/**
* A user profile.
*/
-actual typealias Profile = CommonProfile
+@Serializable
+actual data class Profile(
+ val id: String? = null,
+ val attributes: MutableMap<String, String> = mutableMapOf(),
+ val authenticationAttributes: MutableMap<String, String> = mutableMapOf(),
+ val roles: MutableSet<String> = mutableSetOf(),
+ val permissions: MutableSet<String> = mutableSetOf(),
+ val linkedId: String? = null,
+ val remembered: Boolean = false,
+ val clientName: String? = null
+) {
+ @Transient
+ var username: String?
+ get() = attributes["username"]
+ set(value) {
+ if (value != null) {
+ attributes["username"] = value
+ } else {
+ attributes.remove("username")
+ }
+ }
+ @Transient
+ var firstName: String?
+ get() = attributes["first_name"]
+ set(value) {
+ if (value != null) {
+ attributes["first_name"] = value
+ } else {
+ attributes.remove("first_name")
+ }
+ }
+ @Transient
+ var familyName: String?
+ get() = attributes["family_name"]
+ set(value) {
+ if (value != null) {
+ attributes["family_name"] = value
+ } else {
+ attributes.remove("family_name")
+ }
+ }
+ @Transient
+ var displayName: String?
+ get() = attributes["display_name"]
+ set(value) {
+ if (value != null) {
+ attributes["display_name"] = value
+ } else {
+ attributes.remove("display_name")
+ }
+ }
+ @Transient
+ var email: String?
+ get() = attributes["email"]
+ set(value) {
+ if (value != null) {
+ attributes["email"] = value
+ } else {
+ attributes.remove("email")
+ }
+ }
+ @Transient
+ var pictureUrl: String?
+ get() = attributes["picture_url"]
+ set(value) {
+ if (value != null) {
+ attributes["picture_url"] = value
+ } else {
+ attributes.remove("picture_url")
+ }
+ }
+ @Transient
+ var profileUrl: String?
+ get() = attributes["profile_url"]
+ set(value) {
+ if (value != null) {
+ attributes["profile_url"] = value
+ } else {
+ attributes.remove("profile_url")
+ }
+ }
+}
+
+suspend fun <RESP> ApplicationCall.withProfile(block: suspend (Profile) -> RESP): RESP {
+ val profile = this.sessions.get<Profile>()
+ return profile?.let {
+ block(profile)
+ } ?: throw IllegalStateException("Profile not set!")
+}