/* Ċ Ġ* ĠJ aval in Ġ- Ġhttps :// jav al in . io Ċ Ġ* ĠCopyright Ġ 2 0 1 7 ĠDavid ĠÃ ħ se Ċ Ġ* ĠLicensed Ġunder ĠApache Ġ 2 . 0 : Ġhttps :// github . com / tip sy / jav al in / blob / master / LICENSE Ċ Ġ*/ Ċ Ċ package Ġio . jav al in . core . util Ċ Ċ import Ġio . jav al in . Basic Auth Credentials Ċ import Ġio . jav al in . Context Ċ import Ġio . jav al in . core . Handler Entry Ċ import Ġjava . net . URL Decoder Ċ import Ġjava . util .* Ċ import Ġjavax . servlet . http . HttpServletRequest Ċ import Ġjavax . servlet . http . HttpServletResponse Ċ Ċ object ĠContext Util Ġ{ ĊĊĠĠĠ Ġfun Ġcreate ( response : ĠHttpServletResponse , Ġrequest : ĠHttpServletRequest ): ĠContext Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠContext ( response , Ġrequest , ĠHashMap < String , ĠString >(), ĠArrayList < String >()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate ( ctx : ĠContext , Ġhandler Entry : ĠHandler Entry , Ġrequest Uri : ĠString ): ĠContext Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest List Ġ= ĠUtil . path ToList ( request Uri ) ĊĠĠĠĠĠĠĠ Ġval Ġmatched List Ġ= ĠUtil . path ToList ( handler Entry . path ) ĊĠĠĠĠĠĠĠ Ġctx . param Map Ġ= Ġget Params ( request List , Ġmatched List ) ĊĠĠĠĠĠĠĠ Ġctx . sp lat List Ġ= Ġget Spl at ( request List , Ġmatched List ) ĊĠĠĠĠĠĠĠ Ġreturn Ġctx ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Spl at ( request : ĠList < String >, Ġmatched : ĠList < String >): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnum Request Parts Ġ= Ġrequest . size ĊĠĠĠĠĠĠĠ Ġval Ġnum Handler Parts Ġ= Ġmatched . size ĊĠĠĠĠĠĠĠ Ġval Ġspl at Ġ= ĠArrayList < String >() ĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġnum Request Parts Ġ&& Ġi Ġ< Ġnum Handler Parts ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatched Part Ġ= Ġmatched [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( matched Part Ġ== Ġ"* ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġspl at Param Ġ= ĠStringBuilder ( request [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( num Request Parts Ġ!= Ġnum Handler Parts Ġ&& Ġi Ġ== Ġnum Handler Parts Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġi Ġ+ Ġ 1 .. num Request Parts Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspl at Param . append ("/") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspl at Param . append ( request [ j ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspl at . add ( url Decode ( sp lat Param . toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġspl at ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Params ( request Paths : ĠList < String >, Ġhandler Paths : ĠList < String >): ĠMap < String , ĠString > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparams Ġ= ĠHashMap < String , ĠString >() ĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġrequest Paths . size Ġ&& Ġi Ġ< Ġhandler Paths . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatched Part Ġ= Ġhandler Paths [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( matched Part . startsWith (" :" )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams [ matched Part . toLowerCase ()] Ġ= Ġurl Decode ( request Paths [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġparams ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġurl Decode ( s : ĠString ): ĠString Ġ= ĠURL Decoder . decode ( s . replace ("+ ", Ġ"% 2 B "), Ġ" UTF - 8 "). replace ("% 2 B ", Ġ"+ ") ĊĊĠĠĠ Ġfun Ġmap Keys Or Return Null If Any Null s ( keys : ĠArray < out ĠString >, Ġf : Ġ( s : ĠString ) Ġ-> ĠString ?): ĠList < String >? Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġkeys . map Ġ{ Ġf . invoke ( it ) Ġ}. require No Null s (). toList () ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Basic Auth Credentials ( header : ĠString ?): ĠBasic Auth Credentials ? Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( username , Ġpassword ) Ġ= ĠString ( Base 6 4 . get Decoder (). decode ( header !!. remove Prefix (" Basic Ġ" ))). split (": ") ĊĠĠĠĠĠĠĠ ĠBasic Auth Credentials ( username , Ġpassword ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġnull ĊĠĠĠ Ġ} Ċ Ċ } Ċ