/* Ċ Ġ* ĠCopyright ĠÂ© Ġ 2 0 1 7 - 2 0 2 0 ĠWire Guard ĠLLC . Ċ Ġ* ĠCopyright ĠÂ© Ġ 2 0 1 8 - 2 0 2 0 ĠHar sh ĠSh and ily a Ġ< ms f jar vis @ gmail . com >. ĠAll ĠRights ĠReserved . Ċ Ġ* ĠSPDX - License - Identifier : ĠApache - 2 . 0 Ċ Ġ*/ Ċ package Ġcom . wire guard . android . config Store Ċ Ċ import Ġjava . io . File Ċ import Ġjava . io . FileInputStream Ċ import Ġjava . io . FileNotFoundException Ċ import Ġjava . io . File OutputStream Ċ import Ġjava . io . IOException Ċ import Ġjava . nio . charset . StandardCharsets Ċ import Ġme . ms f jar vis . vis cer ion . config . Config Ċ Ċ class ĠFake Config Store ( private Ġval Ġfiles Dir : ĠFile ) Ġ: ĠConfig Store Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġcreate ( name : ĠString , Ġconfig : ĠConfig ): ĠConfig Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġfile For ( name ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! file . createNew File ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIOException ("${ file . name } Ġalready Ġexists !") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠFileOutputStream ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ). use Ġ{ Ġstream Ġ-> Ġstream . write ( config . to Wg Quick String (). toByteArray ( StandardCharsets . UTF _ 8 )) Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġconfig ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete ( name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġfile For ( name ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! file . delete ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIOException (" Failed Ġto Ġdelete Ġ$ name ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġenumerate (): ĠSet < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( files Dir . list () Ġ?: Ġempty Array ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . endsWith (" conf ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . substring ( 0 , Ġit . length Ġ- Ġ" conf ". length ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toSet () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġload ( name : ĠString ): ĠConfig Ġ{ ĊĠĠĠĠĠĠĠ ĠFileInputStream ( file For ( name )). use Ġ{ Ġstream Ġ-> Ġreturn ĠConfig . parse ( stream ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrename ( name : ĠString , Ġreplacement : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġfile For ( name ) ĊĠĠĠĠĠĠĠ Ġval Ġreplacement File Ġ= Ġfile For ( replacement ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! replacement File . createNew File ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIOException ("$ replacement Ġalready Ġexists !") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! file . rename To ( replacement File )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! replacement File . delete ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Couldn 't Ġdelete Ġmarker Ġfile Ġfor Ġnew Ġname Ġ$ replacement ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIOException (" Failed Ġto Ġrename Ġ${ file . name }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsave ( name : ĠString , Ġconfig : ĠConfig ): ĠConfig Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġfile For ( name ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! file . isFile ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠFileNotFoundException (" Configuration Ġfile Ġ\" ${ file . name }\" Ġnot Ġfound Ġ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠFileOutputStream ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ). use Ġ{ Ġstream Ġ-> Ġstream . write ( config . to Wg Quick String (). toByteArray ( StandardCharsets . UTF _ 8 )) Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġconfig ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfile For ( name : ĠString ): ĠFile Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠFile ( files Dir , Ġ"$ name . conf ") ĊĠĠĠ Ġ} Ċ } Ċ