package Ġcom . te z ro . api . shop . client . core . client . interceptor Ċ Ċ import Ġcom . te z ro . api . shop . client . core . cryption . Crypto Utils Ċ import Ġcom . te z ro . api . shop . client . core . Shop Http Data Ċ import Ġokhttp 3 . Interceptor Ċ import Ġokhttp 3 . Response Ċ Ċ internal Ġclass ĠShop Secret Auth Interceptor ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġkey Id : ĠString , ĊĠĠĠĠĠĠĠ Ġsecret : ĠString Ċ ) Ġ: ĠInter ceptor { ĊĊĠĠĠ Ġprivate Ġval Ġmac Algorithm Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠCrypto Utils . create HMAC Instance ( secret , ĠShop Http Data . ALGORITHM _ NAME ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġintercept ( chain : ĠInter ceptor . Chain ): ĠResponse Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoriginal Ġ= Ġchain . request () ĊĊĠĠĠĠĠĠĠ Ġval ĠcurrentTime Ġ= ĠSystem . currentTimeMillis (). toString () ĊĠĠĠĠĠĠĠ Ġval Ġendpoint Ġ= Ġoriginal . url (). encoded Path () ĊĊĠĠĠĠĠĠĠ Ġval Ġbody Ġ= Ġoriginal . body () ĊĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= Ġok io . Buffer () ĊĠĠĠĠĠĠĠ Ġbody ?. writeTo ( buffer ) ĊĠĠĠĠĠĠĠ Ġval Ġbody Json String Ġ= Ġbuffer . read Utf 8 () ĊĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠStringBuilder (). append ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcurrentTime , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġendpoint , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody Json String ĊĠĠĠĠĠĠĠ Ġ). toString () ĊĊĠĠĠĠĠĠĠ Ġval Ġsignature Ġ= ĠCrypto Utils . calculate Hex HMAC ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmac Algorithm ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġnew Request Ġ= Ġoriginal . newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. header ( Shop Http Data . KEY _ ID _ HEADER , Ġkey Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. header ( Shop Http Data . ALGORITHM _ HEADER , ĠShop Http Data . ALGORITHM _ NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. header ( Shop Http Data . SIGNATURE _ HEADER , Ġsignature ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. header ( Shop Http Data . TIME ST AM _ HEADER , ĠcurrentTime ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. method ( original . method (), Ġoriginal . body ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġchain . proceed ( new Request ) ĊĠĠĠ Ġ} Ċ Ċ }