/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠOn a ĠSystems , ĠInc Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġorg . smart register . fhir core . engine . auth Ċ Ċ import Ġandroid . accounts . Account Ċ import Ġandroid . accounts . Account Manager Ċ import Ġandroid . content . Context Ċ import Ġdagger . h ilt . android . qual ifiers . ApplicationContext Ċ import Ġio . json web token . Expired Jwt Exception Ċ import Ġio . json web token . Jw ts Ċ import Ġio . json web token . Malformed Jwt Exception Ċ import Ġio . json web token . Unsupported Jwt Exception Ċ import Ġjava . util . Date Ċ import Ġjavax . inject . Inject Ċ import Ġjavax . inject . Singleton Ċ import Ġorg . smart register . fhir core . engine . configuration . app . Config Service Ċ import Ġorg . smart register . fhir core . engine . util . Secure Shared Preference Ċ import Ġtim ber . log . Tim ber Ċ Ċ @ Singleton Ċ class ĠToken Manager Service Ċ @ Inject Ċ constructor ( ĊĠ Ġ@ ApplicationContext Ġval Ġcontext : ĠContext , ĊĠ Ġval Ġaccount Manager : ĠAccount Manager , ĊĠ Ġval Ġconfig Service : ĠConfig Service , ĊĠ Ġval Ġsecure Shared Preference : ĠSecure Shared Preference Ċ ) Ġ{ ĊĊĠ Ġfun Ġget Blocking Active AuthToken (): ĠString ? Ġ{ ĊĠĠĠ Ġget Local Session Token ()?. let Ġ{ ĊĠĠĠĠĠ Ġreturn Ġit ĊĠĠĠ Ġ} ĊĠĠĠ ĠTim ber . v (" Trying Ġto Ġget Ġblocking Ġauth Ġtoken Ġfrom Ġaccount Ġmanager ") ĊĠĠĠ Ġreturn Ġget Active Account ()?. let Ġ{ ĊĠĠĠĠĠ Ġaccount Manager . blocking Get AuthToken ( it , ĠAccount Authenticator . AUTH _ TOKEN _ TYPE , Ġfalse ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġget Active Account (): ĠAccount ? Ġ{ ĊĠĠĠ ĠTim ber . v (" Checking Ġfor Ġan Ġactive Ġaccount Ġstored ") ĊĠĠĠ Ġreturn Ġsecure Shared Preference . retrieve Session Username ()?. let Ġ{ Ġusername Ġ-> ĊĠĠĠĠĠ Ġaccount Manager . get Account sBy Type ( config Service . provide Auth Configuration (). account Type ). find Ġ{ ĊĠĠĠĠĠĠĠ Ġit . name . equals ( username ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġget Local Session Token (): ĠString ? Ġ{ ĊĠĠĠ ĠTim ber . v (" Checking Ġlocal Ġstorage Ġfor Ġaccess Ġtoken ") ĊĠĠĠ Ġval Ġtoken Ġ= Ġsecure Shared Preference . retrieve Session Token () ĊĠĠĠ Ġreturn Ġif Ġ( is Token Active ( token )) Ġtoken Ġelse Ġnull ĊĠ Ġ} ĊĊĠ Ġfun Ġis Token Active ( token : ĠString ?): ĠBoolean Ġ{ ĊĠĠĠ Ġif Ġ( token . isNull OrEmpty ()) Ġreturn Ġfalse ĊĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠ Ġval Ġtoken Only Ġ= Ġtoken . substring ( 0 , Ġtoken . lastIndexOf ('.') Ġ+ Ġ 1 ) ĊĠĠĠĠĠ ĠJ w ts . parser (). parse Claims Jwt ( token Only ). body . expiration . after ( Date ()) ĊĠĠĠ Ġ} Ġcatch Ġ( expired Jwt Exception : ĠExp ired Jwt Exception ) Ġ{ ĊĠĠĠĠĠ ĠTim ber . w (" Token Ġis Ġexpired ", Ġexpired Jwt Exception ) ĊĠĠĠĠĠ Ġfalse ĊĠĠĠ Ġ} Ġcatch Ġ( unsupported Jwt Exception : ĠUnsupported Jwt Exception ) Ġ{ ĊĠĠĠĠĠ ĠTim ber . w (" JWT Ġformat Ġnot Ġrecognized ", Ġunsupported Jwt Exception ) ĊĠĠĠĠĠ Ġfalse ĊĠĠĠ Ġ} Ġcatch Ġ( mal formed Jwt Exception : ĠMal formed Jwt Exception ) Ġ{ ĊĠĠĠĠĠ ĠTim ber . w ( mal formed Jwt Exception ) ĊĠĠĠĠĠ Ġfalse ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ