package Ġcom . che ise _ proj . sms _ app . di . module . infrastructure . remote ĊĊ Ċ import Ġcom . che ise _ proj . domain . model . User Ċ import Ġcom . che ise _ proj . domain . repository . Token Repository Ċ import Ġio . reactivex . rx java 3 . core . Observable Ċ import Ġio . reactivex . rx java 3 . core . Single Ċ import Ġokhttp 3 . Interceptor Ċ import Ġokhttp 3 . Request Ċ import Ġokhttp 3 . Response Ċ import Ġjavax . inject . Inject ĊĊ Ċ class ĠAccess Token Interceptor Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġtoken Repository : ĠToken Repository Ċ ) Ġ: ĊĠĠĠ ĠInter ceptor Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠAUTH ENT ICATION _ HEADER Ġ= Ġ" Authorization " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTOKEN _ TYPE Ġ= Ġ" Bearer " ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġintercept ( chain : ĠInter ceptor . Chain ): ĠResponse Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġget UserData () ĊĠĠĠĠĠĠĠ Ġval ĠaccessToken Ġ= Ġuser . accessToken Ġ?: Ġreturn Ġchain . proceed ( chain . request ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġnew Request With AccessToken ( chain . request (), ĠaccessToken ) ĊĠĠĠĠĠĠĠ Ġreturn Ġchain . proceed ( request ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget UserData (): ĠUser Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠSingle . from Observable ( token Repository . getUser ()). onError Return Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUser () ĊĠĠĠĠĠĠĠ Ġ}. blocking Get () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnew Request With AccessToken ( ĊĠĠĠĠĠĠĠ Ġrequest : ĠRequest , ĊĠĠĠĠĠĠĠ ĠaccessToken : ĠString , ĊĠĠĠĠĠĠĠ Ġtoken Type : ĠString ? Ġ= ĠTOKEN _ TYPE ĊĠĠĠ Ġ): ĠRequest Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrequest . newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. header ( AUTHENT ICATION _ HEADER , Ġ"$ token Type Ġ$ accessToken ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} Ċ } ĊĊĊ