/* Ċ Ġ* ĠCopyright ĠÂ© Ġ 2 0 2 0 ĠN HS X . ĠAll Ġrights Ġreserved . Ċ Ġ*/ Ċ Ċ package Ġuk . n hs . n hs x . sonar . android . app . http Ċ Ċ import Ġcom . android . vol ley . Network Response Ċ import Ġcom . android . vol ley . Request . Method Ċ import Ġcom . android . vol ley . Response Ċ import Ġcom . android . vol ley . Vol ley Error Ċ import Ġcom . android . vol ley . toolbox . Http Header Parser Ċ import Ġcom . android . vol ley . toolbox . JsonObject Request Ċ import Ġorg . json . JSONObject Ċ import Ġuk . n hs . n hs x . sonar . android . app . functional types . Promise . Deferred Ċ import Ġuk . n hs . n hs x . sonar . android . app . functional types . Promise . State . Explanation Ċ import Ġjavax . crypto . Mac Ċ import Ġjavax . crypto . SecretKey Ċ Ċ class ĠSign able JsonObject Request ( ĊĠĠĠ Ġprivate Ġval ĠhttpRequest : ĠHttpRequest , ĊĠĠĠ Ġdeferred : ĠDeferred < JSONObject >, ĊĠĠĠ Ġprivate Ġval Ġson ar HeaderValue : ĠString , ĊĠĠĠ Ġprivate Ġval Ġapp Version : ĠString , ĊĠĠĠ Ġprivate Ġval Ġut c Clock : ĠUT CC lock Ġ= ĠReal UT CC lock (), ĊĠĠĠ Ġprivate Ġval Ġbase 6 4 enc : Ġ( ByteArray ) Ġ-> ĠString Ċ ) Ġ: ĊĠĠĠ ĠJsonObject Request ( ĊĠĠĠĠĠĠĠ ĠhttpRequest . method . toInt (), ĊĠĠĠĠĠĠĠ ĠhttpRequest . url , ĊĠĠĠĠĠĠĠ ĠhttpRequest . json Body , ĊĠĠĠĠĠĠĠ ĠResponse . Listener Ġ{ Ġdeferred . resolve ( it ) Ġ}, ĊĠĠĠĠĠĠĠ ĠResponse . Error Listener Ġ{ Ġdeferred . fail With Vol ley Error ( it ) Ġ} ĊĠĠĠ Ġ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġparse Network Response ( response : ĠNetwork Response ): ĠResponse < JSONObject > Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( response . data . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . success ( JSONObject (), ĠHttp Header Parser . parse Cache Headers ( response )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . parse Network Response ( response ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Headers (): ĠMap < String , ĠString > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdefault Headers Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Accept " Ġto Ġ" application / json ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" X - Son ar - Foundation " Ġto Ġson ar HeaderValue , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" X - Son ar - App - Version " Ġto Ġapp Version ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( httpRequest . secret Key ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġreturn Ġmap Of (* default Headers ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtimestamp AsString Ġ= Ġut c Clock . now () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toString (" yyyy - MM - dd ' T ' HH : mm : ss ' Z '") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsignature Ġ= Ġgenerate Signature ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠhttpRequest . secret Key , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp AsString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody Ġ?: ĠByteArray ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* default Headers , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Son ar - Request - Timestamp " Ġto Ġtimestamp AsString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Son ar - Message - Signature " Ġto Ġsignature ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate Signature ( ĊĠĠĠĠĠĠĠ Ġsecret Key : ĠSecret Key , ĊĠĠĠĠĠĠĠ Ġtimestamp : ĠString , ĊĠĠĠĠĠĠĠ Ġbody : ĠByteArray ĊĠĠĠ Ġ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmac Ġ= ĠMac . getInstance (" HMAC SHA 2 5 6 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit ( secret Key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate ( timestamp . toByteArray ( Charsets . UTF _ 8 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsignature Ġ= Ġmac . do Final ( body ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbase 6 4 enc ( signature ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġ< T > ĠDeferred < T >. fail With Vol ley Error ( error : ĠVol ley Error ) Ġ= ĊĠĠĠ Ġfail ( Explanation ( error . message Ġ?: Ġ" HttpClient Ġerror ", Ġerror , Ġerror . network Response ?. statusCode )) Ċ Ċ private Ġfun ĠHttpMethod . toInt () Ġ= ĊĠĠĠ Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠ ĠHttpMethod . GET Ġ-> ĠMethod . GET ĊĠĠĠĠĠĠĠ ĠHttpMethod . POST Ġ-> ĠMethod . POST ĊĠĠĠĠĠĠĠ ĠHttpMethod . PATCH Ġ-> ĠMethod . PATCH ĊĠĠĠĠĠĠĠ ĠHttpMethod . PUT Ġ-> ĠMethod . PUT ĊĠĠĠĠĠĠĠ ĠHttpMethod . DELETE Ġ-> ĠMethod . DELETE ĊĠĠĠ Ġ} Ċ