package Ġcom . fight pan dem ics . login . ui Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġcom . auth 0 . android . Auth 0 Ċ import Ġcom . auth 0 . android . authentication . Authentication APIClient Ċ import Ġcom . auth 0 . android . authentication . Authentication Exception Ċ import Ġcom . auth 0 . android . callback . Base Callback Ċ import Ġcom . auth 0 . android . management . Management Exception Ċ import Ġcom . auth 0 . android . management . Users APIClient Ċ import Ġcom . auth 0 . android . provider . ResponseType Ċ import Ġcom . auth 0 . android . provider . Web Auth Provider Ċ import Ġcom . auth 0 . android . result . UserProfile Ċ import Ġcom . fight pan dem ics . core . data . local . AuthToken Local DataSource Ċ import Ġcom . fight pan dem ics . login . R Ċ import Ġjavax . inject . Inject Ċ Ċ open Ġclass ĠAuth 0 Base Fragment Ġ: ĠFragment () Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġauth 0 : ĠAuth 0 ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġauth Token Local DataSource : ĠAuth Token Local DataSource ĊĊĠĠĠ Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠ Ġauth 0 Ġ= ĠAuth 0 ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresources . getString ( R . string . com _ auth 0 _ client _ id ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresources . getString ( R . string . com _ auth 0 _ domain ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġauth 0 . is OID C Con form ant Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdo Social Login ( login Connection : ĠLogin Connection ) Ġ= ĠWeb Auth Provider . login ( auth 0 ) ĊĠĠĠĠĠĠĠ Ġ. with Connection ( login Connection . provider ) ĊĠĠĠĠĠĠĠ Ġ. with Scheme ( SCHEME ) ĊĠĠĠĠĠĠĠ Ġ. with Scope ( SCOPE ) ĊĠĠĠĠĠĠĠ Ġ. with ResponseType ( ResponseType . CODE ) ĊĠĠĠĠĠĠĠ Ġ. with State ( STATE ) ĊĠĠĠĠĠĠĠ Ġ. with Audience ( String . format ( CALLBACK _ PROFILE _ URL , ĠgetString ( R . string . com _ auth 0 _ domain ))) ĊĠĠĠĠĠĠĠ Ġ. start ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Activity (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAuth 0 CallBack ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . unexpected _ error _ login ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġcredentials Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauth 0 Ġ= ĠAuth 0 ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauth 0 . is OID C Con form ant Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠaccessToken Ġ= Ġcredentials . accessToken ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( accessToken Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Profile ( accessToken ) Ġ{ Ġuser Profile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauth Token Local DataSource . set UserId ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Profile ?. app Metadata ?. get ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠM ONGO _ DB _ ID ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġas ĠString ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauth Token Local DataSource . set Token ( credentials . accessToken ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( login Connection ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogin Connection . LINK ED IN _ SIGN UP , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogin Connection . FACE BOOK _ SIGN UP , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogin Connection . GOOGLE _ SIGN UP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( R . id . action _ sign Up Fragment _ to _ complete Profile Fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogin Connection . LINK ED IN _ SIGN IN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogin Connection . FACE BOOK _ SIGN IN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogin Connection . GOOGLE _ SIGN IN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgo Main () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgo Main () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġfun Ġgo Main () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent (). set ClassName ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPACK AGE _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ PACKAGE _ NAME . ui . MainActivity " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠstartActivity ( intent ). apply Ġ{ Ġrequire Activity (). finish () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Profile ( ĊĠĠĠĠĠĠĠ ĠaccessToken : ĠString , ĊĠĠĠĠĠĠĠ Ġlogin Connection : Ġ( user : ĠUser Profile ?) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġauthentication APIClient Ġ= ĠAuthentication APIClient ( auth 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġusers Client Ġ= ĠUsers APIClient ( auth 0 , ĠaccessToken ) ĊĠĠĠĠĠĠĠ Ġauthentication APIClient . userInfo ( accessToken ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. start ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠBase Callback < UserProfile ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAuthentication Exception ?> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( payload : ĠUser Profile ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpayload ?. id ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusers Client . get Profile ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. start ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠBase Callback < UserProfile ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManagement Exception ?> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( profile : ĠUser Profile ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Connection . invoke ( profile ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( error : ĠManagement Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint ( error ) Ġ// ĠTODO Ġerror Ġlogin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( error : ĠAuthentication Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint ( error ) Ġ// ĠTODO Ġerror Ġlogin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCALL BACK _ PROFILE _ URL Ġ= Ġ" https :// % s / api / v 2 /" ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠS CHE ME Ġ= Ġ" demo " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠSCO PE Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" openid Ġprofile Ġemail Ġoffline _ access Ġread : current _ user Ġupdate : current _ user _ metadata " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠSTATE Ġ= Ġ" fight - pan dem ics " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠM ONGO _ DB _ ID Ġ= Ġ" mongo _ id " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠPACK AGE _ NAME Ġ= Ġ" com . fight pan dem ics " ĊĠĠĠ Ġ} Ċ } Ċ