/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 - 2 0 2 2 , ĠVal ap he e . Ċ Ġ* Ċ Ġ* Ġ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 Ġcom . val ap he e . blit . source . dav Ċ Ċ import Ġcom . fasterxml . jackson . module . kotlin . readValue Ċ import Ġcom . val ap he e . blit . source . NotFoundError Ċ import Ġcom . val ap he e . blit . source . Source Ċ import Ġio . ktor . client . HttpClient Ċ import Ġio . ktor . client . engine . okhttp . Ok Http Ċ import Ġio . ktor . client . plugins . Http Timeout Ċ import Ġio . ktor . client . plugins . auth . Auth Ċ import Ġio . ktor . client . plugins . auth . providers . Basic Auth Credentials Ċ import Ġio . ktor . client . plugins . auth . providers . basic Ċ import Ġio . ktor . client . plugins . cookies . Http Cookies Ċ import Ġio . ktor . client . plugins . json . Jack son Serializer Ċ import Ġio . ktor . client . plugins . json . Json Plugin Ċ import Ġio . ktor . client . request . request Ċ import Ġio . ktor . client . statement . read Bytes Ċ import Ġio . ktor . client . statement . request Ċ import Ġio . ktor . http . ContentType Ċ import Ġio . ktor . http . HttpStatusCode Ċ import Ġio . ktor . http . URL Builder Ċ import Ġio . ktor . http . encoded Path Ċ import Ġjava . security . KeyStore Ċ import Ġjava . security . Secure Random Ċ import Ġjava . security . cert . X 5 0 9 Certificate Ċ import Ġjavax . net . ssl . SSL Context Ċ import Ġjavax . net . ssl . Trust ManagerFactory Ċ import Ġjavax . net . ssl . X 5 0 9 Trust Manager Ċ Ċ /** Ċ Ġ* Ġ@ author ĠKevin ĠL ud w ig Ċ Ġ*/ Ċ class ĠD av Source ( ĊĠĠĠ Ġinternal Ġval Ġurl : ĠString , ĊĠĠĠ Ġinternal Ġval Ġusername : ĠString , ĊĠĠĠ Ġprivate Ġval Ġpassword : ĠString , ĊĠĠĠ Ġinternal Ġval Ġnext cloud : ĠBoolean , ĊĠĠĠ Ġinternal Ġval Ġnext cloud Upload Chunk Size : ĠLong Ċ ) Ġ: ĠSource < D av Entry > Ġ{ ĊĠĠĠ Ġinternal Ġval ĠhttpClient Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠHttpClient ( Ok Http ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġengine Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġssl Socket Factory ( socket Factory , Ġtrust Managers [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhostname Verifier Ġ{ Ġ_, Ġ_ Ġ-> Ġtrue Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Success Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstall ( Http Timeout ) Ġ{ Ġsocket Timeout Millis Ġ= Ġ 6 0 _ 0 0 0 L Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstall ( Http Cookies ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstall ( Auth ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbasic Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Without Request Ġ{ Ġtrue Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcredentials Ġ{ ĠBasic Auth Credentials ( this @ D av Source . username , Ġthis @ D av Source . password ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstall ( Json Plugin ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġserializer Ġ= ĠJack son Serializer ( xml Mapper ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccept ( ContentType . Application . Xml ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġinternal Ġval Ġ_ url Ġ= Ġif Ġ( next cloud ) Ġ"${ url }/ files /${ username }" Ġelse Ġurl ĊĠĠĠ Ġinternal Ġval Ġpath Ġ= ĠURL Builder (_ url ). encoded Path ĊĊĠĠĠ Ġoverride Ġval Ġhome Ġget () Ġ= Ġ"/" ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget ( path : ĠString ): ĠD av Entry Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġif Ġ( path . startsWith ('/ ')) Ġpath . substring ( 1 ) Ġelse Ġpath Ġ// ĠUnix Ġpath Ġcorrection , Ġ"." Ġ(" ") Ġand Ġ"/" Ġare Ġthe Ġsame ĊĠĠĠĠĠĠĠ Ġval ĠhttpResponse Ġ= ĠhttpClient . request (" $_ url /$ path ") Ġ{ Ġmethod Ġ= Ġhttp Method Prop find Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( httpResponse . status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHttpStatusCode . Multi Status Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhref Ġ= ĠhttpResponse . request . url . encoded Path ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġxml Mapper . readValue < Mult ist atus >( httpResponse . read Bytes ()). response . find Ġ{ Ġit . href . equals ( href , Ġtrue ) Ġ} ?. prop stat ?. find Ġ{ Ġit . status Ġ== Ġ" HTTP / 1 . 1 Ġ 2 0 0 ĠOK " Ġ} ?. prop ?. let Ġ{ ĠD av Entry ( this , Ġpath , Ġit ) Ġ} Ġ?: ĠTODO () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHttpStatusCode . NotFound Ġ-> Ġthrow ĠNotFound Error ( path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠTODO () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠ ĠhttpClient . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġtrust Managers Ġ= ĠarrayOf < X 5 0 9 Trust Manager >( object Ġ: ĠX 5 0 9 Trust Manager Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġparent Ġ= ĠTrust ManagerFactory . getInstance ( Trust ManagerFactory . getDefault Algorithm ()). apply Ġ{ Ġinit ( null Ġas ĠKey Store ?) Ġ}. trust Managers . find Ġ{ Ġit Ġis ĠX 5 0 9 Trust Manager Ġ} Ġas ĠX 5 0 9 Trust Manager ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcheck Client Trusted ( chain : ĠArray < out ĠX 5 0 9 Certificate >, Ġauth Type : ĠString ) Ġ= Ġparent . check Client Trusted ( chain , Ġauth Type ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcheck Server Trusted ( chain : ĠArray < out ĠX 5 0 9 Certificate >, Ġauth Type : ĠString ) Ġ= ĠUnit ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Accepted Iss u ers () Ġ= Ġparent . accepted Iss u ers ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġsocket Factory Ġ= ĠSSL Context . getInstance (" TLS "). apply Ġ{ Ġinit ( null , Ġtrust Managers , ĠSecure Random ()) Ġ}. socket Factory ĊĠĠĠ Ġ} Ċ } Ċ