package Ġcom . ic apps . n idd ler . lib . debugger . model . rewrite . action Ċ Ċ import Ġcom . ic apps . n idd ler . lib . debugger . model . rewrite . Rewrite Rule Ċ import Ġcom . ic apps . n idd ler . lib . debugger . model . rewrite . Rewrite Type Ċ import Ġjava . util . Locale Ċ Ċ open Ġclass ĠBase Modify Map Action ( protected Ġval Ġrule : ĠRewrite Rule ) Ġ{ ĊĊĠĠĠ Ġfun Ġmatches ( original Values : ĠMap < String , ĠList < String >> ?): ĠMap Match Result Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmatch Header Key Ġ= Ġrule . match Header ?. lowercase ( Locale . getDefault ()) ĊĠĠĠĠĠĠĠ Ġval Ġmatch HeaderValue Ġ= Ġrule . match Value ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( rule . rule Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRewrite Type . ADD _ HEADER , ĠRewrite Type . ADD _ QUERY _ PARAM Ġ-> Ġmatch AddTo Map ( match Header Key , Ġmatch HeaderValue , Ġoriginal Values ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRewrite Type . MO DIFY _ HEADER , ĠRewrite Type . MO DIFY _ QUERY _ PARAM Ġ-> Ġmatch Modify Map ( match Header Key , Ġmatch HeaderValue , Ġoriginal Values ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRewrite Type . REMOVE _ HEADER , ĠRewrite Type . REMOVE _ QUERY _ PARAM Ġ-> Ġmatch Remove From Map ( match Header Key , Ġmatch HeaderValue , Ġoriginal Values ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" Can Ġonly Ġbe Ġused Ġwith Ġmodify Ġheader / query Ġrules ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmatch AddTo Map ( match Header Key : ĠString ?, Ġmatch HeaderValue : ĠString ?, Ġoriginal Headers : ĠMap < String , ĠList < String >> ?): ĠMap Match Result Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( match Header Key . isNull Or Blank () Ġ&& Ġmatch HeaderValue . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMap Match Result ( matches Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( original Headers . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMap Match Result ( matches Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġmatch Headers ( match Header Key , Ġmatch HeaderValue , Ġoriginal Headers ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmatch Remove From Map ( match Header Key : ĠString ?, Ġmatch HeaderValue : ĠString ?, Ġoriginal Headers : ĠMap < String , ĠList < String >> ?): ĠMap Match Result Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(( match Header Key . isNull Or Blank () Ġ&& Ġmatch HeaderValue . isNull Or Blank ()) Ġ|| Ġoriginal Headers . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMap Match Result ( matches Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġmatch Headers ( match Header Key , Ġmatch HeaderValue , Ġoriginal Headers ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmatch Modify Map ( match Header Key : ĠString ?, Ġmatch HeaderValue : ĠString ?, Ġoriginal Headers : ĠMap < String , ĠList < String >> ?): ĠMap Match Result Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(( match Header Key . isNull Or Blank () Ġ&& Ġmatch HeaderValue . isNull Or Blank ()) Ġ|| Ġoriginal Headers . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMap Match Result ( matches Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġmatch Headers ( match Header Key , Ġmatch HeaderValue , Ġoriginal Headers ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmatch Headers ( match Header Key : ĠString ?, Ġmatch HeaderValue : ĠString ?, Ġoriginal Headers : ĠMap < String , ĠList < String >> ): ĠMap Match Result Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmatched Header Key Ġ= Ġif Ġ( match Header Key Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġmatch On Header ( match Header Key , Ġoriginal Headers ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! result . matches ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . matched Header ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġnull ĊĊĠĠĠĠĠĠĠ Ġif Ġ( match HeaderValue . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( matched Header Key Ġ== Ġnull ) Ġreturn ĠMap Match Result ( matches Ġ= Ġtrue ) Ġ// Can 't Ġhappen Ġdue Ġto Ġcheck Ġin Ġbeginning ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMap Match Result ( matches Ġ= Ġtrue , Ġmatched Header Ġ= Ġmatched Header Key ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġmatch HeaderValue ( matched Header Key , Ġmatch HeaderValue , Ġoriginal Headers ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmatch HeaderValue ( matched Header Key : ĠString ?, Ġmatch HeaderValue : ĠString , Ġoriginal Headers : ĠMap < String , ĠList < String >> ): ĠMap Match Result Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( matched Header Key Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġvalue Matches ( match HeaderValue , Ġoriginal Headers . getValue ( matched Header Key ), Ġmatched Header Key ) Ġ?: Ġreturn ĠMap Match Result ( matches Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġoriginal Headers . entries . forEach Ġ{ Ġ( key , Ġvalue ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatch Ġ= Ġvalue Matches ( match HeaderValue , Ġvalue , Ġkey ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( match ?. matches Ġ== Ġtrue ) Ġreturn Ġmatch ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠMap Match Result ( matches Ġ= Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmatch On Header ( match Header Key : ĠString , Ġoriginal Headers : ĠMap < String , ĠList < String >> ?): ĠMap Match Result Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( original Headers Ġ== Ġnull Ġ|| Ġoriginal Headers . isEmpty ()) Ġreturn ĠMap Match Result ( matches Ġ= Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġif Ġ(! rule . match Header Regex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmatch Header Key ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Headers . keys . find Ġ{ Ġit . matches ( Regex ( match Header Key )) Ġ} Ġ?: Ġreturn ĠMap Match Result ( matches Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! original Headers . containsKey ( key )) Ġreturn ĠMap Match Result ( matches Ġ= Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠMap Match Result ( matches Ġ= Ġtrue , Ġmatched Header Ġ= Ġkey ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġvalue Matches ( match HeaderValue : ĠString , Ġvalues : ĠList < String >, Ġkey : ĠString ): ĠMap Match Result ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( values . isEmpty ()) Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! rule . match Value Regex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rule . match Whole Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( values . size Ġ> Ġ 1 ) Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMap Match Result ( match HeaderValue . equals ( values [ 0 ], Ġignore Case Ġ= Ġ! rule . case Sensitive ), Ġkey , Ġmatch HeaderValue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatched Ġ= Ġvalues . find Ġ{ Ġit . contains ( match HeaderValue , Ġignore Case Ġ= Ġ! rule . case Sensitive ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMap Match Result ( matched Ġ!= Ġnull , Ġkey , Ġmatched ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġregex Ġ= Ġif Ġ( rule . case Sensitive ) ĠRegex ( match HeaderValue ) Ġelse ĠRegex ( match HeaderValue , ĠRegex Option . IGNORE _ CASE ) ĊĠĠĠĠĠĠĠ Ġif Ġ( rule . match Whole Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( values . size Ġ> Ġ 1 ) Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMap Match Result ( regex . matches ( values [ 0 ]), Ġkey , Ġvalues [ 0 ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmatched Ġ= Ġvalues . find Ġ{ Ġregex . contains Match In ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠMap Match Result ( matched Ġ!= Ġnull , Ġkey , Ġmatched ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ data Ġclass ĠMap Match Result ( val Ġmatches : ĠBoolean , Ġval Ġmatched Header : ĠString ? Ġ= Ġnull , Ġval Ġmatched Value : ĠString ? Ġ= Ġnull )