package Ġio . bk bn . k omp end ium . swagger Ċ Ċ import Ġio . ktor . application . Application Ċ import Ġio . ktor . application . Application Feature Ċ import Ġio . ktor . application . call Ċ import Ġio . ktor . http . HttpStatusCode Ċ import Ġio . ktor . response . respond Ċ import Ġio . ktor . response . respond Redirect Ċ import Ġio . ktor . routing . Routing Ċ import Ġio . ktor . routing . get Ċ import Ġio . ktor . routing . routing Ċ import Ġio . ktor . util . Attribute Key Ċ import Ġjava . net . URI Ċ import Ġorg . web j ars . Web Jar Asset Locator Ċ Ċ @ Suppress (" unused ") Ċ class ĠSwagger UI ( val Ġconfig : ĠConfiguration ) Ġ{ ĊĊĠ Ġclass ĠConfiguration Ġ{ ĊĠĠĠ Ġ// ĠThe Ġprimary ĠSwagger - UI Ġpage Ġ( will Ġredirect Ġto Ġtarget Ġpage ) ĊĠĠĠ Ġvar Ġswagger Url : ĠString Ġ= Ġ"/ swagger - ui " ĊĠĠĠ Ġ// ĠThe ĠRoot Ġpath Ġto ĠSwagger Ġresources Ġ( in Ġmost Ġcases Ġa Ġpath Ġto Ġthe Ġweb jar Ġresources ) ĊĠĠĠ Ġvar Ġswagger BaseUrl : ĠString Ġ= Ġ"/ web j ars / swagger - ui " ĊĠĠĠ Ġ// ĠConfiguration Ġfor ĠSwagger UI ĠJS Ġinitialization ĊĠĠĠ Ġlateinit Ġvar Ġjs Config : ĠJs Config ĊĠĠĠ Ġ// ĠApplication Ġcontext Ġpath Ġ( for Ġexample Ġif Ġapplication Ġhave Ġthe Ġfollowing Ġpath : Ġhttp :// domain . com / app , Ġuse : Ġ"/ app ") ĊĠĠĠ Ġvar Ġcontext Path : ĠString Ġ= Ġ"" ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject ĠFeature : ĠApplication Feature < Application , ĠConfiguration , ĠSwagger UI > Ġ{ ĊĊĠĠĠ Ġprivate Ġfun ĠConfiguration . to Internal (): ĠInternal Configuration Ġ= ĠInternal Configuration ( ĊĠĠĠĠĠ Ġswagger Url Ġ= ĠURI ( swagger Url ), ĊĠĠĠĠĠ Ġswagger BaseUrl Ġ= ĠURI ( swagger BaseUrl ), ĊĠĠĠĠĠ Ġjs Config Ġ= Ġjs Config , ĊĠĠĠĠĠ Ġcontext Path Ġ= Ġcontext Path ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġdata Ġclass ĠInternal Configuration ( ĊĠĠĠĠĠ Ġval Ġswagger Url : ĠURI , ĊĠĠĠĠĠ Ġval Ġswagger BaseUrl : ĠURI , ĊĠĠĠĠĠ Ġval Ġjs Config : ĠJs Config , ĊĠĠĠĠĠ Ġval Ġcontext Path : ĠString ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠ Ġval Ġredirect Index Url : ĠString Ġ= Ġ"${ context Path }${ swagger BaseUrl }/ index . html " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġlocator Ġ= ĠWeb Jar Asset Locator () ĊĊĠĠĠ Ġprivate Ġval Ġinstall Routes : ĠRouting .( Internal Configuration ) Ġ-> ĠUnit Ġ= Ġ{ Ġconfig Ġ-> ĊĊĠĠĠĠĠ Ġget ( config . swagger Url . toString ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġcall . respond Redirect ( config . redirect Index Url ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġget ("${ config . swagger BaseUrl }/{ filename }") Ġ{ ĊĠĠĠĠĠĠĠ Ġcall . parameters [" filename "] !!. let Ġ{ Ġfilename Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġwhen ( filename ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" index . html " Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocator . get Swagger Index Content ( js Config Ġ= Ġconfig . js Config ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocator . get Swagger Resource Content ( path Ġ= Ġfilename ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. let Ġ{ Ġcall . respond ( HttpStatusCode . OK , Ġit ) Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġkey : ĠAttribute Key < Swagger UI > Ġ= ĠAttribute Key (" Swagger UI ") ĊĊĠĠĠ Ġoverride Ġfun Ġinstall ( pipeline : ĠApplication , Ġconfigure : ĠConfiguration . () Ġ-> ĠUnit ): ĠSwagger UI Ġ{ ĊĠĠĠĠĠ Ġpipeline . routing Ġ{ Ġ}. let Ġ{ Ġrouting Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġconfiguration : ĠConfiguration Ġ= ĠConfiguration (). apply ( configure ) ĊĠĠĠĠĠĠĠ Ġinstall Routes ( routing , Ġconfiguration . to Internal ()) ĊĠĠĠĠĠĠĠ Ġreturn ĠSwagger UI ( config Ġ= Ġconfiguration ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ