/* Ċ Ġ* Ġ ĠCopyright Ġ( c ) Ġ 2 0 0 4 - 2 0 2 1 , ĠUniversity Ġof ĠOs lo Ċ Ġ* Ġ ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* Ġ ĠRedistribution Ġand Ġuse Ġin Ġsource Ġand Ġbinary Ġforms , Ġwith Ġor Ġwithout Ċ Ġ* Ġ Ġmodification , Ġare Ġpermitted Ġprovided Ġthat Ġthe Ġfollowing Ġconditions Ġare Ġmet : Ċ Ġ* Ġ ĠRedistributions Ġof Ġsource Ġcode Ġmust Ġretain Ġthe Ġabove Ġcopyright Ġnotice , Ġthis Ċ Ġ* Ġ Ġlist Ġof Ġconditions Ġand Ġthe Ġfollowing Ġdisclaimer . Ċ Ġ* Ċ Ġ* Ġ ĠRedistributions Ġin Ġbinary Ġform Ġmust Ġreproduce Ġthe Ġabove Ġcopyright Ġnotice , Ċ Ġ* Ġ Ġthis Ġlist Ġof Ġconditions Ġand Ġthe Ġfollowing Ġdisclaimer Ġin Ġthe Ġdocumentation Ċ Ġ* Ġ Ġand / or Ġother Ġmaterials Ġprovided Ġwith Ġthe Ġdistribution . Ċ Ġ* Ġ ĠNeither Ġthe Ġname Ġof Ġthe ĠH ISP Ġproject Ġnor Ġthe Ġnames Ġof Ġits Ġcontributors Ġmay Ċ Ġ* Ġ Ġbe Ġused Ġto Ġendorse Ġor Ġpromote Ġproducts Ġderived Ġfrom Ġthis Ġsoftware Ġwithout Ċ Ġ* Ġ Ġspecific Ġprior Ġwritten Ġpermission . Ċ Ġ* Ċ Ġ* Ġ ĠTHIS ĠSOFTWARE ĠIS ĠPROVIDED ĠBY ĠTHE ĠCOPYRIGHT ĠHOLDERS ĠAND ĠCONTRIBUTORS Ġ" AS ĠIS " ĠAND Ċ Ġ* Ġ ĠANY ĠEXPRESS ĠOR ĠIMPLIED ĠWARRANTIES , ĠINCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠTHE ĠIMPLIED Ċ Ġ* Ġ ĠWARRANTIES ĠOF ĠMERCHANTABILITY ĠAND ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠARE Ċ Ġ* Ġ ĠDISCLAIMED . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE ĠCOPYRIGHT ĠOWNER ĠOR ĠCONTRIBUTORS ĠBE ĠLIABLE ĠFOR Ċ Ġ* Ġ ĠANY ĠDIRECT , ĠINDIRECT , ĠINCIDENTAL , ĠSPECIAL , ĠEXEMPLARY , ĠOR ĠCONSEQUENTIAL ĠDAMAGES Ċ Ġ* Ġ Ġ( INCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠPROCUREMENT ĠOF ĠSUBSTITUTE ĠGOODS ĠOR ĠSERVICES ; Ċ Ġ* Ġ ĠLOSS ĠOF ĠUSE , ĠDATA , ĠOR ĠPROFITS ; ĠOR ĠBUSINESS ĠINTERRUPTION ) ĠHOWEVER ĠCAUSED ĠAND ĠON Ċ Ġ* Ġ ĠANY ĠTHEORY ĠOF ĠLIABILITY , ĠWHETHER ĠIN ĠCONTRACT , ĠSTRICT ĠLIABILITY , ĠOR ĠTORT Ċ Ġ* Ġ Ġ( INCLUDING ĠNEGLIGENCE ĠOR ĠOTHERWISE ) ĠARISING ĠIN ĠANY ĠWAY ĠOUT ĠOF ĠTHE ĠUSE ĠOF ĠTHIS Ċ Ġ* Ġ ĠSOFTWARE , ĠEVEN ĠIF ĠADVISED ĠOF ĠTHE ĠPOSSIBILITY ĠOF ĠSUCH ĠDAMAGE . Ċ Ġ*/ Ċ package Ġorg . h isp . dh is . android . core . user . internal Ċ Ċ import Ġdagger . Re usable Ċ import Ġjavax . inject . Inject Ċ import Ġorg . h isp . dh is . android . core . arch . storage . internal . Credentials Ċ import Ġorg . h isp . dh is . android . core . arch . storage . internal . Object KeyValue Store Ċ import Ġorg . h isp . dh is . android . core . maintenance . D 2 Error Ċ import Ġorg . h isp . dh is . android . core . maintenance . D 2 ErrorCode Ċ import Ġorg . h isp . dh is . android . core . maintenance . D 2 Error Component Ċ Ċ @ Re usable Ċ internal Ġclass ĠLog In Exceptions Ġ@ Inject Ġinternal Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġcredentials Secure Store : ĠObject KeyValue Store < Credentials > Ċ ) Ġ{ ĊĊĠĠĠ Ġ@ Throws ( D 2 Error :: class ) ĊĠĠĠ Ġfun Ġthrow Exception If Username Null ( username : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( username Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠD 2 Error . builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. errorCode ( D 2 ErrorCode . LOGIN _ USERNAME _ NULL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. error Description (" Username Ġis Ġnull ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. error Component ( D 2 Error Component . SDK ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( D 2 Error :: class ) ĊĠĠĠ Ġfun Ġthrow Exception If Password Null ( password : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( password Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠD 2 Error . builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. errorCode ( D 2 ErrorCode . LOGIN _ PASSWORD _ NULL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. error Description (" Password Ġis Ġnull ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. error Component ( D 2 Error Component . SDK ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( D 2 Error :: class ) ĊĠĠĠ Ġfun Ġthrow Exception If Already Authenticated () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcredentials Ġ= Ġcredentials Secure Store . get () ĊĠĠĠĠĠĠĠ Ġif Ġ( credentials Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠD 2 Error . builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. errorCode ( D 2 ErrorCode . AL READY _ AUTHENT IC ATED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. error Description (" A Ġuser Ġis Ġalready Ġauthenticated : Ġ" Ġ+ Ġcredentials . username ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. error Component ( D 2 Error Component . SDK ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġno DH IS 2 Server (): ĠD 2 Error Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠD 2 Error . builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. errorCode ( D 2 ErrorCode . NO _ DH IS 2 _ SERVER ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. error Description (" The ĠURL Ġis Ġno ĠDH IS 2 Ġserver ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. error Component ( D 2 Error Component . SDK ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġno User Offline Error (): ĠD 2 Error Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠD 2 Error . builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. errorCode ( D 2 ErrorCode . NO _ AUTHENT IC ATED _ USER _ OFF LINE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. error Description (" The Ġuser Ġhasn 't Ġbeen Ġpreviously Ġauthenticated . ĠCannot Ġlogin Ġoffline .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. error Component ( D 2 Error Component . SDK ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbad Credentials Error (): ĠD 2 Error Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠD 2 Error . builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. errorCode ( D 2 ErrorCode . BAD _ CRED ENTIAL S ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. error Description (" Credentials Ġdo Ġnot Ġmatch Ġauthenticated Ġuser . ĠCannot Ġlogin Ġoffline .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. error Component ( D 2 Error Component . SDK ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} Ċ } Ċ