/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 9 . ĠM ats uda , ĠA ki hit Ġ( ak ih ito 1 0 4 ) Ċ Ġ* Ċ Ġ* Ġ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 Ġcom . fresh digit able . ud on road 2 . data . rest client Ċ Ċ import Ġcom . fresh digit able . ud on road 2 . data . App Setting DataSource Ċ import Ġcom . fresh digit able . ud on road 2 . data . OAuth Token DataSource Ċ import Ġcom . fresh digit able . ud on road 2 . data . rest client . ext . to Entity Ċ import Ġcom . fresh digit able . ud on road 2 . model . AccessToken Entity Ċ import Ġcom . fresh digit able . ud on road 2 . model . Request Token Item Ċ import Ġcom . fresh digit able . ud on road 2 . model . UserId Ċ import Ġcom . fresh digit able . ud on road 2 . model . user . User Entity Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġtwitter 4 j . auth . AccessToken Ċ import Ġtwitter 4 j . auth . Request Token Ċ import Ġjavax . inject . Inject Ċ import Ġjavax . inject . Singleton Ċ Ċ @ Singleton Ċ internal Ġclass ĠOAuth ApiClient Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġtwitter : ĠApp Twitter Ċ ) Ġ: ĠOAuth Token DataSource . Remote , ĠApp Setting DataSource . Remote Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġcurrent UserId : ĠUserId ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġtwitter . oauth Token ?. userId ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġupdate CurrentUser ( accessToken : ĠAccess Token Entity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtwitter . oauth Token Ġ= ĠaccessToken ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġverify Credentials (): ĠUser Entity Ġ= ĊĠĠĠĠĠĠĠ Ġtwitter . fetch Ġ{ Ġverify Credentials (). to Entity () Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Request Token Item (): ĠRequest Token Item Ġ= Ġtwitter . run Ġ{ ĊĠĠĠĠĠĠĠ Ġoauth Token Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġreturn Ġfetch Ġ{ Ġget OAuth Request Token (" oob "). to Item () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget AccessToken ( ĊĠĠĠĠĠĠĠ Ġrequest Token : ĠRequest Token Item , ĊĠĠĠĠĠĠĠ Ġverifier : ĠString ĊĠĠĠ Ġ): ĠAccess Token Entity Ġ= Ġtwitter . fetch Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtoken : ĠRequest Token Ġ= Ġ( request Token Ġas ĠRequest Token Item Impl ). token ĊĠĠĠĠĠĠĠ Ġget OAuth AccessToken ( token , Ġverifier ). to Entity () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠRequest Token . to Item (): ĠRequest Token Item Ġ= ĠRequest Token Item Impl ( this ) ĊĊĠĠĠ Ġprivate Ġfun ĠAccess Token . to Entity (): ĠAccess Token Entity Ġ= ĊĠĠĠĠĠĠĠ ĠAccess Token Entity . create ( UserId ( userId ), Ġtoken , Ġtoken Secret ) ĊĊĠĠĠ Ġoverride Ġval Ġcurrent UserId Source : ĠFlow < UserId > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġthrow ĠNotImplementedError () ĊĠĠĠ Ġoverride Ġval Ġregistered User Ids Source : ĠFlow < Set < UserId >> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġthrow ĠNotImplementedError () ĊĠĠĠ Ġoverride Ġval Ġlogin Account On Launch : ĠUserId ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġthrow ĠNotImplementedError () ĊĠĠĠ Ġoverride Ġval Ġis Po ss ibly Sensitive Hidden : ĠFlow < Boolean > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġthrow ĠNotImplementedError () ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġadd AccessToken Entity ( token : ĠAccess Token Entity ) Ġ= ĊĠĠĠĠĠĠĠ Ġthrow ĠNotImplementedError () ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġfind User AccessToken Entity ( userId : ĠUserId ): ĠAccess Token Entity Ġ= ĊĠĠĠĠĠĠĠ Ġthrow ĠNotImplementedError () Ċ } Ċ Ċ private Ġdata Ġclass ĠRequest Token Item Impl ( override Ġval Ġtoken : ĠRequest Token ) Ġ: ĠRequest Token Item Ġ{ ĊĠĠĠ Ġoverride Ġval Ġauthorization Url : ĠString Ġ= Ġtoken . authorization URL Ċ } Ċ