package Ġcom . github . gr ish berg . tests Ċ Ċ import Ġcom . android . dd m lib . Collect ing Output Receiver Ċ import Ġcom . android . dd m lib . IS hell Output Receiver Ċ import Ġorg . apache . commons . lang 3 . StringUtils Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġjava . util . function . Consumer Ċ import Ġjava . util . function . Function Ċ Ċ /** Ċ Ġ* Ġ[ Shell Command ] Ġimplementation Ġclass Ġfor Ġwide Ġusage . Ċ Ġ* ĠRed uc es Ġthe Ġchance Ġof Ġsecure Ġinformation Ġleak . Ċ Ġ* Ċ Ġ* ĠUse Ġthis Ġclass Ġwith Ġ[ Connected Device Wrapper . execute Shell Command ] Ġmethod Ġin Ġfavor Ġof Ġcalling Ġolder Ċ Ġ* Ġ[ Connected Device Wrapper . execute Shell Command ] Ġmethods . Ċ Ġ* Ċ Ġ* Ġ@ param Ġcommand ĠA DB Ġshell Ġcommand Ġto Ġexecute Ġon Ġdevice Ċ Ġ* Ġ@ param Ġcommand Sanit izer ĠFunction Ġto Ġreturn Ġcommand Ġsuitable Ġfor Ġlogging . Ċ Ġ* Ġ@ param Ġmax Timeout ĠThe Ġmaximum Ġtimeout Ġfor Ġthe Ġcommand Ġto Ġreturn . Ċ Ġ* Ġ@ param Ġmax TimeTo Output Response ĠThe Ġmaximum Ġamount Ġof Ġtime Ġduring Ġwhich Ġthe Ġcommand Ġis Ċ Ġ* Ġallowed Ġto Ġnot Ġoutput Ġany Ġresponse . Ċ Ġ* Ġ@ param Ġmax Time Units ĠUnits Ġfor Ġnon - zero Ġmax Timeout Ġand Ġmax TimeTo Output Response Ġvalues . Ċ Ġ* Ġ@ param Ġreceiver ĠThe ĠIS hell Output Receiver Ġthat Ġwill Ġreceives Ġthe Ġoutput Ġof Ġthe Ġshell Ġcommand . Ċ Ġ*/ Ċ class ĠDefault Shell Command Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcommand : ĠString , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcommand Sanit izer : ĠFunction < String , ĠString > Ġ= ĠCHECK ING _ SAN IT IZER , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmax Timeout : ĠLong Ġ= ĠDEFAULT _ MAX _ TIME , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmax TimeTo Output Response : ĠLong Ġ= ĠDEFAULT _ MAX _ TIME _ TO _ OUTPUT , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmax Time Units : ĠTimeUnit Ġ= ĠDEFAULT _ TIME _ UNITS , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġreceiver : ĠIS hell Output Receiver Ġ= ĠCollect ing Output Receiver ()) Ġ: ĠShell Command Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlogged Command : ĠString ĊĊĠĠĠ Ġoverride Ġfun Ġget Command (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcommand ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Logged Command (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlogged Command ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetMax Timeout (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmax Timeout ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetMax TimeTo Output Response (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmax TimeTo Output Response ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetMax Time Units (): ĠTimeUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmax Time Units ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Receiver (): ĠIS hell Output Receiver Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġreceiver ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠDEFAULT _ TIME _ UNITS Ġ= ĠTimeUnit . MIN UTES ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ MAX _ TIME _ TO _ OUTPUT Ġ= Ġ 5 L ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ MAX _ TIME Ġ= Ġ 0 L ĊĊĠĠĠĠĠĠĠ Ġval ĠSE C URE _ WORDS Ġ= ĠlistOf (" token ", Ġ" password ", Ġ" secret ", Ġ" AQ AD - ") ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠSimple Ġsanit izer Ġfor Ġlogging . ĊĠĠĠĠĠĠĠĠ Ġ* ĠUse Ġit Ġif Ġyou Ġare Ġsure Ġthat Ġcommand Ġhas Ġno Ġsecure Ġinformation . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval ĠUN SECURE _ SAN IT IZER Ġ= ĠFunction Ġ{ Ġcommand : ĠString Ġ-> Ġcommand Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThrows Ġexception Ġif Ġcommand Ġlooks Ġlike Ġcontaining Ġsecure Ġinformation . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval ĠCHECK ING _ SAN IT IZER Ġ= ĠFunction Ġ{ Ġcommand : ĠString Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSE C URE _ WORDS . forEach ( Consumer Ġ{ Ġword : ĠString Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( StringUtils . contains IgnoreCase ( command , Ġword )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException ( String . format (" Your Ġcommand Ġcontains Ġ\"% s \" Ġword . Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" It Ġis Ġprobably Ġunsafe .", Ġword )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġlogged Command Ġ= Ġcommand Sanit izer . apply ( command ) ĊĠĠĠ Ġ} Ċ } Ċ