/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 9 ĠThe Ġlg ou 2 w Ġ< lg ou 2 w @ hotmail . com > Ċ Ġ* Ċ Ġ* Ġ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 . lg ou 2 w . y gg dr as il . manager Ċ Ċ import Ġcom . lg ou 2 w . ld k . rsa . RSA Utils Ċ import Ġcom . lg ou 2 w . y gg dr as il . Y gg dr as il Conf Ċ import Ġcom . lg ou 2 w . y gg dr as il . Y gg dr as il Log Ċ import Ġcom . lg ou 2 w . y gg dr as il . dao . Texture Ċ import Ġjava . io . File Ċ import Ġjava . io . IOException Ċ import Ġjava . io . Random Access File Ċ import Ġjava . security . PrivateKey Ċ import Ġjava . security . PublicKey Ċ import Ġjava . security . Signature Ċ import Ġjava . util . Base 6 4 Ċ import Ġkotlin . system . exit Process Ċ Ċ class ĠText ures Manager ( private Ġval Ġconf : ĠY gg dr as il Conf ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠLEN GTH Ġ= Ġ 6 4 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDIR Ġ= Ġ" textures " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSIGN ATURE Ġ= Ġ" SHA 1 With RSA " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġdir Ġ= ĠFile ( conf . work Dir , ĠDIR ) ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠprivateKey Ġ: ĠPrivate Key ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠpublicKey Ġ: ĠPublicKey ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠpublicKey Str Ġ: ĠString ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! dir . exists ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdir . mkdir s () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( dir , Ġ". lock ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! file . exists ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile . createNew File () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRandom Access File ( file , Ġ" rw "). channel . try Lock () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠY gg dr as il Log . error (" Textures Ġlock Ġfailed :", Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġinitialize Key () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinitialize Key () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar ĠprivateKey File Ġ= ĠFile ( conf . user Textures PrivateKey ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar ĠpublicKey File Ġ= ĠFile ( conf . user Textures PublicKey ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! privateKey File . is Absolute ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprivateKey File Ġ= ĠFile ( conf . work Dir , Ġconf . user Textures PrivateKey ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! publicKey File . is Absolute ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠpublicKey File Ġ= ĠFile ( conf . work Dir , Ġconf . user Textures PublicKey ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠY gg dr as il Log . info (" åĬłè½½ æĿĲ è´¨ ç§ģ éĴ¥ æĸĩä»¶ Ġ: Ġ${ privateKey File . absolute Path }") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠY gg dr as il Log . info (" åĬłè½½ æĿĲ è´¨ åħ¬ éĴ¥ æĸĩä»¶ Ġ: Ġ${ publicKey File . absolute Path }") ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠprivateKey Ġ= ĠRSA Utils . decode PrivateKey ( privateKey File . read Text ( Charsets . UTF _ 8 )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠpublicKey Str Ġ= ĠpublicKey File . read Text ( Charsets . UTF _ 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠpublicKey Ġ= ĠRSA Utils . decode PublicKey ( publicKey Str ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠY gg dr as il Log . info (" åĬłè½½ æĪĲåĬŁ , Ġ æĿĲ è´¨ åħ¬ ç§ģ éĴ¥ å·² åı¯çĶ¨ ") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠY gg dr as il Log . error (" åĬłè½½ æĿĲ è´¨ åħ¬ ç§ģ éĴ¥ æĹ¶ å¼Ĥå¸¸ :", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexit Process ( 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġsignature ( texture Value : ĠString ): ĠString Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsignature Ġ= ĠSignature . getInstance ( SIGNATURE ) ĊĠĠĠĠĠĠĠ Ġsignature . init Sign ( privateKey ) ĊĠĠĠĠĠĠĠ Ġsignature . update ( texture Value . toByteArray ( Charsets . UTF _ 8 )) ĊĠĠĠĠĠĠĠ Ġsignature . sign (). let Ġ{ ĠBase 6 4 . get Encoder (). encode ToString ( it ) Ġ} ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠIOException (" æĹłæ³ķ è¿Ľè¡Į æĿĲ è´¨ çŃ¾åĲį æķ°æį® .", Ġe ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfile ( hash : ĠString ): ĠFile Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠFile ( dir , Ġhash ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ åĮħ è£ħ æĿĲ è´¨ çļĦ ĠURL Ġ éĵ¾æİ¥ ĊĠĠĠ Ġ// Ġå¦Ĥæŀľ æĿĲ è´¨ ĠURL Ġæĺ¯ è¿ľç¨ĭ éĵ¾æİ¥ ï¼Į éĤ£ä¹Ī çĽ´æİ¥ è¿ĶåĽŀ ĊĠĠĠ Ġ// Ġ åĲ¦åĪĻ æĿĲ è´¨ æĺ¯ çĽ¸ å¯¹ ï¼Į éĤ£ä¹Ī è¿ĶåĽŀ æĿĲ è´¨ è¯·æ±Ĥ çļĦ éĵ¾æİ¥ çĤ¹ Ġ+ Ġ æĿĲ è´¨ è·¯å¾Ħ ĊĠĠĠ Ġfun Ġwrap Url ( texture : ĠTexture , Ġscheme : ĠString , Ġhost : ĠString , Ġport : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġtexture . url ĊĠĠĠĠĠĠĠ Ġif Ġ( url . startsWith (" http ")) Ġ// Ġ å¤ĸéĥ¨ æĿĲ è´¨ éĵ¾æİ¥ ï¼Į çĽ´æİ¥ è¿ĶåĽŀ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġurl ĊĠĠĠĠĠĠĠ Ġreturn Ġbuild String Ġ{ Ġ// Ġ æľ¬åľ° æĿĲ è´¨ éĵ¾æİ¥ ï¼Į åĮħ è£ħ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( scheme ). append (" :// ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( host ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( port Ġ!= Ġ 8 0 Ġ|| Ġport Ġ!= Ġ 4 4 3 ) Ġ// Ġå¦Ĥæŀľ ç«¯åı£ ä¸į ä¸º Ġ 8 0 ĠæĪĸ Ġ 4 4 3 Ġ ç«¯åı£ éĤ£ä¹Ī è¿½åĬł ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (': '). append ( port ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ('/') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( DIR ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ('/') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( url ) Ġ// Ġ è¿½åĬł æĿĲ è´¨ ĠHash ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġ æľ¬åľ° åĮħ è£ħ åĲİ ï¼ļ http | https :// your . domain : port / textures / hash ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ çĶ¨äºİ å¤ĸéĥ¨ å®¢æĪ·ç«¯ è¿Ľè¡Į æĿĲ è´¨ çŃ¾åĲį çļĦ ĠPEM Ġ æł¼å¼ı åħ¬ éĴ¥ ĊĠĠĠ Ġval Ġexternal PublicKey Ġ: ĠString Ġget () Ġ= ĠpublicKey Str ĊĊĠĠĠ Ġ// Ġèİ·åıĸ å½ĵåīį æĿĲ è´¨ çĽ®å½ķ åĨħ åŃĺåľ¨ çļĦ æĿĲ è´¨ æķ°éĩı ĊĠĠĠ Ġval Ġfiles Ġ: ĠInt Ġget () Ġ= Ġdir . list Ġ{ Ġ_, Ġname Ġ-> Ġname . length Ġ== ĠLEN GTH Ġ}. size ĊĊĠĠĠ Ġ// Ġèİ·åıĸ å½ĵåīį æĿĲ è´¨ çĽ®å½ķ åī © ä½Ļ çļĦ ç©ºéĹ´ å¤§å°ı ĊĠĠĠ Ġval Ġfree Space Ġ: ĠLong Ġget () Ġ= Ġdir . free Space Ċ } Ċ