package Ġorg . w ats i . enrollment . device . managers Ċ Ċ import Ġio . reactivex . Comp letable Ċ import Ġokhttp 3 . Credentials Ċ import Ġorg . w ats i . enrollment . device . api . Coverage Api Ċ import Ġorg . w ats i . enrollment . device . managers . Session Manager . Companion . ALLOWED _ RO LES Ċ import Ġorg . w ats i . enrollment . domain . entities . Authentication Token Ċ Ċ class ĠSession ManagerImpl ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġpreferences Manager : ĠPreferences Manager , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġapi : ĠCoverage Api , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlogger : ĠLogger Ċ ) Ġ: ĠSession Manager Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġtoken : ĠAuthentication Token ? Ġ= Ġpreferences Manager . get Authentication Token () ĊĊĠĠĠ Ġoverride Ġfun Ġlogin ( username : ĠString , Ġpassword : ĠString ): ĠComp letable Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠComp letable . from Action Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapi Authorization Header Ġ= ĠCredentials . basic ( username , Ġpassword ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Token Api Ġ= Ġapi . login ( api Authorization Header ). blocking Get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! ALLOWED _ RO LES . contains ( new Token Api . user . role )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠSession Manager . Permission Exception () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Token Ġ= Ġnew Token Api . to Authentication Token () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreferences Manager . set Authentication Token ( new Token ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . setUser ( new Token . user ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoken Ġ= Ġnew Token ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġlogout () Ġ{ ĊĠĠĠĠĠĠĠ Ġpreferences Manager . set Previous User ( token ?. user ) ĊĠĠĠĠĠĠĠ Ġpreferences Manager . set Authentication Token ( null ) ĊĠĠĠĠĠĠĠ Ġlogger . clear User () ĊĠĠĠĠĠĠĠ Ġtoken Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġshould Clear UserData (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprevious User Ġ= Ġpreferences Manager . get Previous User () ĊĠĠĠĠĠĠĠ Ġval ĠcurrentUser Ġ= Ġtoken ?. user ĊĠĠĠĠĠĠĠ Ġreturn Ġprevious User Ġ!= Ġnull Ġ&& ĠcurrentUser Ġ!= Ġnull Ġ&& Ġprevious User Ġ!= ĠcurrentUser Ġ&& Ġprevious User . administr ative Division Id Ġ!= ĠcurrentUser . administr ative Division Id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcurrent Authentication Token (): ĠAuthentication Token ? Ġ= Ġtoken Ċ } Ċ