package Ġs late kit . server . ktor Ċ Ċ import Ġio . ktor . http . HttpMethod Ċ import Ġio . ktor . http . content . Part Data Ċ import Ġio . ktor . request .* Ċ import Ġorg . json . simple . JSONObject Ċ import Ġorg . json . simple . parser . JSONParser Ċ import Ġs late kit . common . ext . to Id Ċ import Ġs late kit . common . types .* Ċ import Ġjava . io . Buffered InputStream Ċ import Ġjava . io . ByteArray OutputStream Ċ import Ġjava . io . InputStream Ċ Ċ object ĠK tor Utils Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLoad Ġjson Ġfrom Ġthe Ġpost / put Ġbody Ġusing Ġjson - simple ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġload Json ( body : ĠString , Ġreq : ĠApplication Request , Ġadd QueryParams : ĠBoolean Ġ= Ġfalse ): ĠJSONObject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġis Multi Part Ġ= Ġreq . is Multipart () ĊĠĠĠĠĠĠĠ Ġval Ġis Body Allowed Ġ= Ġis Body Allowed ( req . http Method ) ĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġif Ġ( is Body Allowed Ġ&& Ġ! is Multi Part Ġ&& Ġ! body . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparser Ġ= ĠJSON Parser () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroot Ġ= Ġparser . parse ( body ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot Ġas ĠJSONObject ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġquery Ġparams ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( add QueryParams Ġ&& Ġ! req . query Parameters . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreq . query Parameters . names (). forEach Ġ{ Ġkey Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot . put ( key , Ġreq . query Parameters . get ( key )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠJSONObject () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġjson ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġbuild Doc ( part : ĠPart Data . File Item , Ġstream : ĠInputStream ): Content File Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbis Ġ= ĠBuffered InputStream ( stream ) ĊĠĠĠĠĠĠĠ Ġval Ġbuf Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠ Ġvar Ġris Ġ= Ġbis . read () ĊĠĠĠĠĠĠĠ Ġwhile Ġ( ris Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuf . write ( ris . to Byte (). toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġris Ġ= Ġbis . read () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdefault Name Ġ= Ġpart . name Ġ?: Ġ" file " ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġclean Name ( part . original FileName , Ġdefault Name ) ĊĠĠĠĠĠĠĠ Ġval ĠcontentType Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpart . contentType ?. contentType Ġ== Ġnull Ġ-> ĠContent Types . Oct et ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpart . contentType ?. content Subtype Ġ== Ġnull Ġ-> ĠContent Types . Oct et ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ ĠContentType ( part . contentType ?. contentType Ġ+ Ġ"/" Ġ+ Ġpart . contentType ?. content Subtype , Ġpart . contentType ?. content Subtype Ġ?: Ġ"") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdoc Ġ= ĠContent File ( name , Ġbuf . toByteArray (), Ġnull , ĠcontentType ) ĊĠĠĠĠĠĠĠ Ġreturn Ġdoc ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġis Body Allowed ( method : ĠHttpMethod ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen ( method ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHttpMethod . Post , ĠHttpMethod . Put , ĠHttpMethod . Patch , ĠHttpMethod . Delete Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġclean Name ( supp lied Name : String ?, ĠfileName : String ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfullname Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsupplied Name Ġ== Ġnull Ġ-> ĠfileName ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsupplied Name . isNull OrEmpty () Ġ-> ĠfileName ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsupplied Name ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġinfo Ġ= Ġextract Info ( fullname ) ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġinfo . first . to Id () ĊĠĠĠĠĠĠĠ Ġreturn Ġname ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRemove Ġthis Ġin Ġplace Ġof Ġsome Ġfile Ġutilities Ġor ĠPath ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġextract Info ( fullName : String ): Pair < String , ĠString > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġn dx Dot Ġ= ĠfullName . lastIndexOf (".") ĊĠĠĠĠĠĠĠ Ġval Ġext Ġ= ĠfullName . substring ( nd xD ot Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= ĠfullName . substring ( 0 , Ġn dx Dot ) ĊĠĠĠĠĠĠĠ Ġreturn ĠPair ( name , Ġext ) ĊĠĠĠ Ġ} Ċ }