diff --git a/kotlin-oauth2-server-core/src/main/java/nl/myndocs/oauth2/CallRouter.kt b/kotlin-oauth2-server-core/src/main/java/nl/myndocs/oauth2/CallRouter.kt
index 7a109ba..6a7e332 100644
--- a/kotlin-oauth2-server-core/src/main/java/nl/myndocs/oauth2/CallRouter.kt
+++ b/kotlin-oauth2-server-core/src/main/java/nl/myndocs/oauth2/CallRouter.kt
@@ -125,8 +125,8 @@ class CallRouter(
callContext.redirect(queryParameters["redirect_uri"] + "?code=${redirect.codeToken}$stateQueryParameter")
} catch (unverifiedIdentityException: InvalidIdentityException) {
- authorizer.failedAuthentication()
callContext.respondStatus(STATUS_UNAUTHORIZED)
+ authorizer.failedAuthentication()
}
}
diff --git a/kotlin-oauth2-server-sparkjava/pom.xml b/kotlin-oauth2-server-sparkjava/pom.xml
new file mode 100644
index 0000000..e737886
--- /dev/null
+++ b/kotlin-oauth2-server-sparkjava/pom.xml
@@ -0,0 +1,34 @@
+
+
+
+ kotlin-oauth2-server
+ nl.myndocs
+ 0.1.1
+
+ 4.0.0
+
+ kotlin-oauth2-server-sparkjava
+
+
+
+ com.sparkjava
+ spark-core
+ 2.5.4
+ provided
+
+
+ nl.myndocs
+ kotlin-oauth2-server-core
+ ${project.version}
+ provided
+
+
+ com.google.code.gson
+ gson
+ 2.8.5
+ provided
+
+
+
\ No newline at end of file
diff --git a/kotlin-oauth2-server-sparkjava/src/main/java/nl/myndocs/oauth2/sparkjava/Oauth2Server.kt b/kotlin-oauth2-server-sparkjava/src/main/java/nl/myndocs/oauth2/sparkjava/Oauth2Server.kt
new file mode 100644
index 0000000..e8606c0
--- /dev/null
+++ b/kotlin-oauth2-server-sparkjava/src/main/java/nl/myndocs/oauth2/sparkjava/Oauth2Server.kt
@@ -0,0 +1,36 @@
+package nl.myndocs.oauth2.sparkjava
+
+import nl.myndocs.oauth2.config.ConfigurationBuilder
+import nl.myndocs.oauth2.sparkjava.request.SparkjavaCallContext
+import spark.Spark.get
+import spark.Spark.post
+
+object Oauth2Server {
+ fun configureOauth2Server(configurationCallback: ConfigurationBuilder.Configuration.() -> Unit) {
+ val configuration = ConfigurationBuilder.build(configurationCallback)
+
+ val callRouter = configuration.callRouter
+
+ post(callRouter.tokenEndpoint) { req, res ->
+ val sparkjavaCallContext = SparkjavaCallContext(req, res)
+ callRouter.route(sparkjavaCallContext, configuration.authorizerFactory(sparkjavaCallContext))
+
+ res.body()
+ }
+
+
+ get(callRouter.authorizeEndpoint) { req, res ->
+ val sparkjavaCallContext = SparkjavaCallContext(req, res)
+ callRouter.route(sparkjavaCallContext, configuration.authorizerFactory(sparkjavaCallContext))
+
+ res.body()
+ }
+
+ get(callRouter.userInfoEndpoint) { req, res ->
+ val sparkjavaCallContext = SparkjavaCallContext(req, res)
+ callRouter.route(sparkjavaCallContext, configuration.authorizerFactory(sparkjavaCallContext))
+
+ res.body()
+ }
+ }
+}
\ No newline at end of file
diff --git a/kotlin-oauth2-server-sparkjava/src/main/java/nl/myndocs/oauth2/sparkjava/json/JsonMapper.kt b/kotlin-oauth2-server-sparkjava/src/main/java/nl/myndocs/oauth2/sparkjava/json/JsonMapper.kt
new file mode 100644
index 0000000..5286b4e
--- /dev/null
+++ b/kotlin-oauth2-server-sparkjava/src/main/java/nl/myndocs/oauth2/sparkjava/json/JsonMapper.kt
@@ -0,0 +1,9 @@
+package nl.myndocs.oauth2.sparkjava.json
+
+import com.google.gson.Gson
+
+object JsonMapper {
+ private val gson = Gson()
+
+ fun toJson(content: Any) = gson.toJson(content)
+}
\ No newline at end of file
diff --git a/kotlin-oauth2-server-sparkjava/src/main/java/nl/myndocs/oauth2/sparkjava/request/SparkjavaCallContext.kt b/kotlin-oauth2-server-sparkjava/src/main/java/nl/myndocs/oauth2/sparkjava/request/SparkjavaCallContext.kt
new file mode 100644
index 0000000..f47d713
--- /dev/null
+++ b/kotlin-oauth2-server-sparkjava/src/main/java/nl/myndocs/oauth2/sparkjava/request/SparkjavaCallContext.kt
@@ -0,0 +1,37 @@
+package nl.myndocs.oauth2.sparkjava.request
+
+import nl.myndocs.oauth2.request.CallContext
+import nl.myndocs.oauth2.sparkjava.json.JsonMapper
+import spark.Request
+import spark.Response
+
+class SparkjavaCallContext(val request: Request, val response: Response) : CallContext {
+ override val path: String = request.pathInfo()
+ override val method: String = request.requestMethod()
+ override val headers: Map = request.headers()
+ .map { it.toLowerCase() to request.headers(it) }
+ .toMap()
+
+ override val queryParameters: Map = request.queryParams()
+ .map { it.toLowerCase() to request.queryParams(it) }
+ .toMap()
+
+ override val formParameters: Map = queryParameters
+
+ override fun respondStatus(statusCode: Int) {
+ response.status(statusCode)
+ response.body("")
+ }
+
+ override fun respondHeader(name: String, value: String) {
+ response.header(name, value)
+ }
+
+ override fun respondJson(content: Any) {
+ response.body(JsonMapper.toJson(content))
+ }
+
+ override fun redirect(uri: String) {
+ response.redirect(uri)
+ }
+}
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 19cd8cc..91ce3eb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -22,6 +22,7 @@
kotlin-oauth2-server-identity-inmemory
kotlin-oauth2-server-token-store-inmemory
kotlin-oauth2-server-javalin
+ kotlin-oauth2-server-sparkjava