From 717819effa861c42f6251c31e2b7bff012b24477 Mon Sep 17 00:00:00 2001 From: Mariia Skripchenko <61115099+marychatte@users.noreply.github.com> Date: Tue, 3 Dec 2024 16:51:20 +0100 Subject: [PATCH] KTOR-7876 Fix Sink.writeText corrupts long streams for Jetty server --- .../io/ktor/server/plugins/swagger/Swagger.kt | 5 ++ .../server/plugins/swagger/SwaggerConfig.kt | 5 ++ .../server/plugins/swagger/SwaggerTest.kt | 49 ++++++++++++++++++- 3 files changed, 58 insertions(+), 1 deletion(-) diff --git a/ktor-server/ktor-server-plugins/ktor-server-swagger/jvm/src/io/ktor/server/plugins/swagger/Swagger.kt b/ktor-server/ktor-server-plugins/ktor-server-swagger/jvm/src/io/ktor/server/plugins/swagger/Swagger.kt index 5da6578617d..6412fee95fa 100644 --- a/ktor-server/ktor-server-plugins/ktor-server-swagger/jvm/src/io/ktor/server/plugins/swagger/Swagger.kt +++ b/ktor-server/ktor-server-plugins/ktor-server-swagger/jvm/src/io/ktor/server/plugins/swagger/Swagger.kt @@ -86,6 +86,11 @@ public fun Route.swaggerUI( config.customStyle?.let { link(href = it, rel = "stylesheet") } + link( + href = config.faviconLocation, + rel = "icon", + type = "image/x-icon" + ) } body { div { id = "swagger-ui" } diff --git a/ktor-server/ktor-server-plugins/ktor-server-swagger/jvm/src/io/ktor/server/plugins/swagger/SwaggerConfig.kt b/ktor-server/ktor-server-plugins/ktor-server-swagger/jvm/src/io/ktor/server/plugins/swagger/SwaggerConfig.kt index a69ced719d3..c430fc2c6d6 100644 --- a/ktor-server/ktor-server-plugins/ktor-server-swagger/jvm/src/io/ktor/server/plugins/swagger/SwaggerConfig.kt +++ b/ktor-server/ktor-server-plugins/ktor-server-swagger/jvm/src/io/ktor/server/plugins/swagger/SwaggerConfig.kt @@ -28,4 +28,9 @@ public class SwaggerConfig { * Swagger package location */ public var packageLocation: String = "https://unpkg.com/swagger-ui-dist" + + /** + * Swagger favicon location + */ + public var faviconLocation: String = "https://unpkg.com/swagger-ui-dist@$version/favicon-32x32.png" } diff --git a/ktor-server/ktor-server-plugins/ktor-server-swagger/jvm/test/io/ktor/server/plugins/swagger/SwaggerTest.kt b/ktor-server/ktor-server-plugins/ktor-server-swagger/jvm/test/io/ktor/server/plugins/swagger/SwaggerTest.kt index 473e20d9ff6..e1be3a61d0e 100644 --- a/ktor-server/ktor-server-plugins/ktor-server-swagger/jvm/test/io/ktor/server/plugins/swagger/SwaggerTest.kt +++ b/ktor-server/ktor-server-plugins/ktor-server-swagger/jvm/test/io/ktor/server/plugins/swagger/SwaggerTest.kt @@ -8,7 +8,8 @@ import io.ktor.client.request.* import io.ktor.client.statement.* import io.ktor.http.* import io.ktor.server.testing.* -import kotlin.test.* +import kotlin.test.Test +import kotlin.test.assertEquals class SwaggerTest { @Test @@ -25,6 +26,7 @@ class SwaggerTest { Swagger UI +
@@ -65,6 +67,7 @@ class SwaggerTest { Swagger UI +
@@ -101,4 +104,48 @@ class SwaggerTest { assertEquals("text/yaml; charset=UTF-8", response.contentType().toString()) assertEquals("hello:\n world".filter { it.isLetterOrDigit() }, body.filter { it.isLetterOrDigit() }) } + + @Test + fun testCustomFavicon() = testApplication { + routing { + swaggerUI("swagger") { + faviconLocation = "https://www.google.com/favicon.ico" + } + } + + val response = client.get("/swagger") { + parameter("docExpansion", "list") + }.bodyAsText() + assertEquals( + """ + + + + Swagger UI + + + + +
+ + + + + + + """.trimIndent(), + response + ) + } }