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