/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 7 / 2 0 2 1 Ġe - voy age urs Ġtechnologies Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġai . to ck . bot . engine . config Ċ Ċ import Ġai . to ck . bot . connector . media . Media FileDescriptor Ċ import Ġai . to ck . bot . engine . Bot Bus Ċ import Ġai . to ck . bot . engine . To ck Bot Bus Ċ import Ġai . to ck . bot . engine . action . Send Attachment . Attachment Type Ċ import Ġai . to ck . bot . engine . action . Send Attachment . Attachment Type . file Ċ import Ġai . to ck . shared . cache . get From Cache Ċ import Ġai . to ck . shared . cache . put In Cache Ċ import Ġai . to ck . shared . property Ċ import Ġai . to ck . shared . vertx . blocking Ċ import Ġio . vertx . core . buffer . Buffer Ċ import Ġio . vertx . ext . web . Router Ċ import Ġio . vertx . ext . web . Routing Context Ċ import Ġorg . lit ote . km ongo . to Id Ċ import Ġjava . util . UUID Ċ Ċ /** Ċ Ġ* ĠTo Ġmanage Ġuploaded Ġfiles . Ċ Ġ*/ Ċ object ĠU plo aded Files Service Ġ{ ĊĊĠĠĠ Ġprivate Ġconst Ġval ĠUP LOADED _ TYPE Ġ= Ġ"_ uploaded " ĊĠĠĠ Ġprivate Ġval ĠbasePath Ġ= Ġproperty (" to ck _ bot _ serve _ files _ path ", Ġ"/ f /") ĊĠĠĠ Ġprivate Ġval Ġimages Types Ġ= Ġset Of (" png ", Ġ" jpg ", Ġ" jpeg ", Ġ" svg ", Ġ" gif ") ĊĠĠĠ Ġprivate Ġval Ġaudio Types Ġ= Ġset Of (" ogg ", Ġ" mp 3 ", Ġ" oga ") ĊĠĠĠ Ġprivate Ġval Ġvideo Types Ġ= Ġset Of (" og v ", Ġ" mp 4 ") ĊĊĠĠĠ Ġfun Ġattachment Type ( url : ĠString ): ĠAttachment Type Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( url . length Ġ> Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl . substring ( url . length Ġ- Ġ 3 ). toLowerCase (). let Ġ{ Ġsuffix Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimages Types . contains ( suffix ) Ġ-> ĠAttachment Type . image ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaudio Types . contains ( suffix ) Ġ-> ĠAttachment Type . audio ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Types . contains ( suffix ) Ġ-> ĠAttachment Type . video ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfile ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupload File ( namespace : ĠString , ĠfileName : ĠString , Ġbytes : ĠByteArray ): ĠMedia FileDescriptor ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ( namespace Ġ+ ĠUUID . randomUUID (). toString ()). toLowerCase () ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= ĠfileName . trim (). toLowerCase () ĊĠĠĠĠĠĠĠ Ġval Ġlast Dot Ġ= Ġname . lastIndexOf (".") ĊĠĠĠĠĠĠĠ Ġif Ġ( last Dot Ġ== Ġ- 1 Ġ|| Ġlast Dot Ġ== Ġname . length Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsuffix Ġ= Ġname . substring ( last Dot Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġfile Id Ġ= Ġ"$ id .$ suffix " ĊĠĠĠĠĠĠĠ Ġput In Cache ( file Id . to Id (), ĠUP LOADED _ TYPE , Ġbytes ) ĊĠĠĠĠĠĠĠ Ġreturn ĠMedia FileDescriptor ( suffix , ĠfileName , Ġid ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdownload File ( context : ĠRouting Context , Ġid : ĠString , Ġsuffix : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdownload File ( context , Ġ"$ id .$ suffix ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġfile Id ( id : ĠString , Ġsuffix : ĠString ): ĠString Ġ= Ġ"$ id .$ suffix " ĊĊĠĠĠ Ġinternal Ġfun Ġbot FilePath ( bus : ĠBot Bus , Ġid : ĠString , Ġsuffix : ĠString ): ĠString Ġ= ĊĠĠĠĠĠĠĠ Ġ( bus Ġas ? ĠT ock Bot Bus )?. connector ?. get BaseUrl () Ġ+ ĠbasePath Ġ+ Ġfile Id ( id , Ġsuffix ) ĊĊĠĠĠ Ġfun ĠgetFile Content From Url ( url : ĠString ): ĠByteArray ? Ġ= ĊĠĠĠĠĠĠĠ Ġurl . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Ġ= Ġurl . lastIndexOf ('/') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( start Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetFile Content From Id ( url . substring ( start Ġ+ Ġ 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun ĠgetFile Content From Id ( id : ĠString ): ĠByteArray ? Ġ= Ġget From Cache ( id . to Id (), ĠUP LOADED _ TYPE ) Ġas ? ĠByteArray ĊĊĠĠĠ Ġprivate Ġfun Ġdownload File ( context : ĠRouting Context , Ġid : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbytes : ĠByteArray ? Ġ= ĠgetFile Content From Id ( id ) ĊĠĠĠĠĠĠĠ Ġif Ġ( bytes Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . response (). put Header (" Content - Type ", Ġguess ContentType ( id )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. end ( Buffer . buffer ( bytes )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . response (). set StatusCode ( 4 0 4 ). end () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġguess ContentType ( fileName : ĠString ): ĠString Ġ= ĊĠĠĠĠĠĠĠ ĠfileName . toLowerCase (). let Ġ{ Ġid Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid . endsWith (". png ") Ġ-> Ġ" image / png " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid . endsWith (". jpg ") Ġ|| Ġid . endsWith (". jpeg ") Ġ-> Ġ" image / jpeg " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid . endsWith (". gif ") Ġ-> Ġ" image / gif " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid . endsWith (". svg ") Ġ-> Ġ" image / svg + xml " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid . endsWith (". ogg ") Ġ|| Ġid . endsWith (". oga ") Ġ-> Ġ" audio / ogg " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid . endsWith (". og v ") Ġ-> Ġ" video / ogg " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid . endsWith (". mp 3 ") Ġ-> Ġ" audio / mpeg " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid . endsWith (". mp 4 ") Ġ-> Ġ" video / mp 4 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid . endsWith (". pdf ") Ġ-> Ġ" application / pdf " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid . endsWith (". zip ") Ġ-> Ġ" application / zip " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ" application / octet - stream " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġconfigure (): Ġ( Router ) Ġ-> ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ{ Ġrouter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrouter . get ("$ basePath * "). blocking Ġ{ Ġcontext Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġcontext . request (). uri (). substring ( basePath . length ). toLowerCase () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdownload File ( context , Ġid ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ