package Ġcom . meg ical . easy access . example . ui . main Ċ Ċ import Ġandroidx . lifecycle .* Ċ import Ġcom . meg ical . easy access . example . Client Data Ċ import Ġcom . meg ical . easy access . playground . Open Id Client Data Response Ċ import Ġcom . meg ical . easy access . playground . Play ground RestApi Ċ import Ġcom . meg ical . easy access . sdk .* Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . util .* Ċ import Ġcom . meg ical . easy access . sdk . Me g ical Auth Api . Callback Ġas ĠMe g ical Callback Ċ Ċ const Ġval ĠRED I RECT _ URL Ġ= Ġ" com . meg ical . ea . example :/ oauth - callback " Ċ Ċ enum Ġclass ĠView State Ġ{ ĊĠĠĠ ĠRegister Client , ĊĠĠĠ ĠLoading , ĊĠĠĠ ĠAuth enticate , ĊĠĠĠ ĠEasy Access , ĊĠĠĠ ĠLog ged In , Ċ } Ċ Ċ class ĠExample ViewModel Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġplay ground RestApi Ġ= ĠPlay ground RestApi () ĊĠĠĠ Ġprivate Ġval Ġmeg ical Auth Api Ġ= ĠMe g ical Auth Api () ĊĊĠĠĠ Ġprivate Ġval Ġview State : ĠMutable LiveData < ViewState > Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠMutable LiveData < ViewState >( ViewState . Register Client ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġmetadata : ĠMutable LiveData < Metadata > Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠMutable LiveData < Metadata >() ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġlogin State : ĠMutable LiveData < Login State > Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠMutable LiveData < Login State >() ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġclient Data : ĠMutable LiveData < Client Data > Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠMutable LiveData < Client Data >() ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġlogin Data : ĠMutable LiveData < Login Data > Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠMutable LiveData < Login Data >() ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġtoken Set : ĠMutable LiveData < Token Set > Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠMutable LiveData < Token Set >() ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget ViewState (): ĠLive Data < ViewState > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġview State ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Health check () Ġ= Ġlive Data ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( playground RestApi . health check ()) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( error : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( null ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Client ( token : ĠString ) Ġ= ĠviewModel Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview State . post Value ( ViewState . Loading ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuuid Token Ġ= ĠUUID . fromString ( token ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġopen Id Client Data Ġ= Ġplay ground RestApi . open Id Client Data ( uuid Token ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregister Client With Auth Server ( open Id Client Data ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( error : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview State . post Value ( ViewState . Register Client ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġregister Client With Auth Server ( ĊĠĠĠĠĠĠĠ Ġopen Id Client Data : ĠOpen Id Client Data Response , ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! open Id Client Data . redirect Urls . contains ( RE DIRECT _ URL )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e (" Invalid Ġredirect Ġurl ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġview State . post Value ( ViewState . Register Client ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval ĠdeviceId Ġ= ĠUUID . randomUUID (). toString () ĊĠĠĠĠĠĠĠ Ġval Ġ( client Token , Ġauth Env Url , Ġ_, Ġ_, ĠappId , Ġ_) Ġ= Ġopen Id Client Data ĊĠĠĠĠĠĠĠ Ġmeg ical Auth Api . register Client ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauth Env Url , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient Token , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠdeviceId , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Id Ġ= ĠappId , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback Ġ= Ġobject Ġ: ĠMe g ical Callback < Client > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( response : ĠClient ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Client Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClient Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠclientId Ġ= Ġresponse . clientId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠappId Ġ= Ġopen Id Client Data . appId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaudience Ġ= Ġopen Id Client Data . audience , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauth Env Url Ġ= Ġopen Id Client Data . auth Env Url , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauth Env Ġ= Ġopen Id Client Data . auth Env , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( error : ĠMe g ical Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview State . post Value ( ViewState . Register Client ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetClient Data (): ĠLive Data < Client Data > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġclient Data ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Client Data ( value : ĠClient Data ) Ġ{ ĊĠĠĠĠĠĠĠ Ġclient Data . post Value ( value ) ĊĠĠĠĠĠĠĠ Ġview State . post Value ( ViewState . Authenticate ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Authentication (): ĠLive Data < Login Data > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlogin Data ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġauthenticate () Ġ{ ĊĠĠĠĠĠĠĠ ĠgetClient Data (). value !!. let Ġ{ Ġclient Data Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview State . post Value ( ViewState . Loading ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeg ical Auth Api . init Authentication ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient Data . auth Env , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient Data . auth Env Url , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient Data . appId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient Data . clientId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient Data . audience , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRED I RECT _ URL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠMe g ical Callback < Login Data > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( response : ĠLogin Data ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Data . post Value ( response ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( error : ĠMe g ical Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview State . post Value ( ViewState . Authenticate ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Metadata (): ĠLive Data < Metadata > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmetadata ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfetch Metadata () Ġ{ ĊĠĠĠĠĠĠĠ Ġview State . post Value ( ViewState . Loading ) ĊĠĠĠĠĠĠĠ Ġval Ġlogin Code Ġ= Ġlogin Data . value !!. login Code ĊĠĠĠĠĠĠĠ Ġmeg ical Auth Api . metadata ( login Code , Ġobject Ġ: ĠMe g ical Callback < Metadata > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( response : ĠMetadata ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata . post Value ( response ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview State . post Value ( ViewState . Easy Access ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( error : ĠMe g ical Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Login State (): ĠLive Data < Login State > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlogin State ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfetch Login State () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlogin Code Ġ= Ġlogin Data . value !!. login Code ĊĠĠĠĠĠĠĠ Ġmeg ical Auth Api . state ( login Code , Ġobject Ġ: ĠMe g ical Callback < Login State > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( response : ĠLogin State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin State . post Value ( response ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( error : ĠMe g ical Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview State . post Value ( ViewState . Authenticate ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetToken Set (): ĠLive Data < Token Set > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtoken Set ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġverify Login Data () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeg ical Auth Api . verify Authentication ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠMe g ical Callback < Token Set > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( response : ĠToken Set ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoken Set . post Value ( response ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( error : ĠMe g ical Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview State . post Value ( ViewState . Authenticate ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfetch Message From Test Service ( accessToken : ĠString ) Ġ= Ġlive Data ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( playground RestApi . hello ( accessToken )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview State . post Value ( ViewState . LoggedIn ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( error : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview State . post Value ( ViewState . Authenticate ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( null ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlogout () Ġ{ ĊĠĠĠĠĠĠĠ Ġview State . post Value ( ViewState . Authenticate ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdere gister Client () Ġ{ ĊĠĠĠĠĠĠĠ Ġclient Data . value ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeg ical Auth Api . delete Client ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . auth Env Url , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . clientId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . appId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠMe g ical Callback < Unit > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( response : ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . i (" Client Ġdeleted ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( error : ĠMe g ical Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġclient Data . post Value ( null ) ĊĠĠĠĠĠĠĠ Ġview State . post Value ( ViewState . Register Client ) ĊĠĠĠ Ġ} Ċ }