package Ġio . github . ack eec z . ret ro ceptor Ċ Ċ import Ġio . github . ack eec z . ret ro ceptor . core . Auth Credentials Ċ import Ġio . github . ack eec z . ret ro ceptor . core . Auth Error Checker Ċ import Ġio . github . ack eec z . ret ro ceptor . core . Auth Store Ċ import Ġio . github . ack eec z . ret ro ceptor . core . Default Auth Error Checker Ċ import Ġokhttp 3 . Interceptor Ċ import Ġretrofit 2 . Call Ċ Ċ /** Ċ Ġ* ĠAuth Manager Ġprovides Ġwrapping Ġfor ĠRet rofit Ġ[ Call ] s , Ġwhich Ġautomatically Ġhandles Ċ Ġ* Ġaccess Ġtoken Ġexpiration Ġand Ġperforms Ġrefresh Ġtoken Ġlogic Ġdefined Ġwith Ġ[ refresh Credentials Action ], Ċ Ġ* Ġprovided Ġby Ġuser . Ċ Ġ* ĠIn Ġcase Ġof Ġsuccess , Ġnew Ġcredentials Ġare Ġstored Ġin Ġ[ auth Store ]. Ċ Ġ* Ċ Ġ* ĠThe Ġuser Ġmay Ġprovide Ġfallback Ġfor Ġrefresh Ġtoken Ġexpiration Ġin Ġ[ on Refresh Credentials Failed ]. Ċ Ġ* Ċ Ġ* ĠThe Ġuser Ġmay Ġprovide Ġcustom Ġ[ Auth Error Checker ] Ġcontaining Ġaccess Ġand Ġrefresh Ġtoken Ġexpiration Ċ Ġ* Ġchecking Ġlogic . ĠOtherwise , Ġ[ Default Auth Error Checker ] Ġis Ġapplied . Ċ Ġ*/ Ċ abstract Ġclass ĠAuth Manager < C Ġ: ĠAuth Credentials >( ĊĠĠĠ Ġprotected Ġval Ġauth Store : ĠAuth Store < C >, ĊĠĠĠ Ġprotected Ġval Ġrefresh Credentials Action : Ġsuspend Ġ( C ?) Ġ-> ĠC , ĊĠĠĠ Ġprotected Ġval Ġon Refresh Credentials Failed : Ġ( Throwable ) Ġ-> ĠUnit Ġ= Ġ{}, ĊĠĠĠ Ġprotected Ġval Ġerror Checker : ĠAuth Error Checker Ġ= ĠDefault Auth Error Checker () Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġsingle Call Handler Ġ= ĠSingle Call Handler < C >() ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLatest Ġauth Ġcredentials . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġauth Credentials : ĠC ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġauth Store . auth Credentials ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠStore Ġnew Ġauth Ġ[ credentials ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsave Credentials ( credentials : ĠC ) Ġ{ ĊĠĠĠĠĠĠĠ Ġauth Store . save Credentials ( credentials ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠClear Ġall Ġsaved Ġauth Ġcredentials . ĠThis Ġshould Ġbe Ġperformed Ġon Ġuser Ġlogout Ġor Ġwhen Ġcredentials ĊĠĠĠĠ Ġ* Ġexpire Ġand Ġcannot Ġbe Ġref reshed Ġwithout Ġuser Ġinter vention . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġclear Credentials () Ġ{ ĊĠĠĠĠĠĠĠ Ġauth Store . clear Credentials () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠProvides Ġinternal Ġdependencies Ġfor Ġcredential Ġrefresh Ġinterceptor . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< T > Ġwrap Auth Check ( call : ĠCall < T >): ĠCall < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠAuth Aware Call ( call , Ġ{ Ġsingle Call Handler . call Single Ġ{ Ġrefresh Auth Credentials () Ġ} Ġ}, Ġauth Store , Ġerror Checker ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠProvide ĠOk Http Ġ[ Interceptor ] Ġthat Ġadds Ġauthorization Ġmetadata Ġto Ġall ĠRet rofit Ġrequests ĊĠĠĠĠ Ġ* Ġthat Ġare Ġnot Ġannotated Ġwith Ġ[ Ignore Auth ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġfun Ġprovide Auth Interceptor (): ĠInter ceptor ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġrefresh Auth Credentials (): ĠC Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Credentials Action ( auth Store . auth Credentials ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( error Checker . invalid Refresh Credentials ( e )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear Credentials () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Refresh Credentials Failed ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ