package Ġcom . example . hack for cr isis . query . token Ċ Ċ import Ġandroid . util . Log Ċ import Ġcom . example . hack for cr isis . model . Login Request Ċ import Ġio . reactivex . Single Ċ import Ġretrofit 2 . Call Ċ import Ġretrofit 2 . Callback Ċ import Ġretrofit 2 . Response Ċ import Ġretrofit 2 . Ret rofit Ċ import Ġjava . lang . Exception ĊĊ Ċ class ĠToken Handler Ġ{ ĊĠĠĠ Ġfun ĠgetToken ( ret rofit : ĠRet rofit , Ġlogin Request : ĠLogin Request ): ĠSingle < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠSingle . create Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemitter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtoken Retriever Ġ= Ġretrofit . create ( Token Retriever :: class . java ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoken Retriever . request Token ( login Request ). enqueue ( object : ĠCallback < Token Response > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall < Token Response >, Ġt : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemitter . onError ( t ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall : ĠCall < Token Response >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse : ĠResponse < Token Response > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠaccessToken Ġ= Ġget AccessToken ( response ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( accessToken Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemitter . on Success ( accessToken ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemitter . onError ( Token Exception (" Invalid Ġtoken Ġresponse ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget AccessToken ( response : ĠResponse < Token Response >): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d (" Response :" Ġ, Ġresponse . message ()) ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . body ()?. accessToken ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠToken Exception ( msg : ĠString ): ĠException ( msg )