2525import com .google .firebase .auth .UserProfileChangeRequest ;
2626import com .google .firebase .auth .FacebookAuthProvider ;
2727import com .google .firebase .auth .FirebaseAuth ;
28+ import com .google .firebase .auth .FirebaseAuthException ;
2829import com .google .firebase .auth .FirebaseUser ;
2930import com .google .firebase .auth .GetTokenResult ;
3031import com .google .firebase .auth .GoogleAuthProvider ;
32+ import com .google .firebase .auth .EmailAuthProvider ;
33+
3134
3235import io .fullstack .firestack .Utils ;
3336
@@ -50,7 +53,7 @@ public FirestackAuth(ReactApplicationContext reactContext) {
5053 mReactContext = reactContext ;
5154 mAuth = FirebaseAuth .getInstance ();
5255
53- Log .d (TAG , "New FirestackAuth instance" );
56+ Log .d (TAG , "New FirestackAuth instance" );
5457 }
5558
5659 @ Override
@@ -165,6 +168,43 @@ public void signInWithProvider(final String provider, final String authToken, fi
165168 Utils .todoNote (TAG , "signInWithProvider" , callback );
166169 }
167170
171+ @ ReactMethod
172+ public void linkPassword (final String email , final String password , final Callback callback ) {
173+ FirebaseUser user = mAuth .getCurrentUser ();
174+
175+ if (user != null ) {
176+ AuthCredential credential = EmailAuthProvider .getCredential (email , password );
177+ user
178+ .linkWithCredential (credential )
179+ .addOnCompleteListener (new OnCompleteListener <AuthResult >() {
180+ @ Override
181+ public void onComplete (@ NonNull Task <AuthResult > task ) {
182+ try {
183+ if (task .isSuccessful ()) {
184+ Log .d (TAG , "user linked with password credential" );
185+ userCallback (mAuth .getCurrentUser (), callback );
186+ } else {
187+ userErrorCallback (task , callback );
188+ }
189+ } catch (Exception ex ) {
190+ userExceptionCallback (ex , callback );
191+ }
192+ }
193+ });
194+ } else {
195+ callbackNoUser (callback , true );
196+ }
197+ }
198+
199+ @ ReactMethod
200+ public void link (final String provider , final String authToken , final String authSecret , final Callback callback ) {
201+ if (provider .equals ("password" )) {
202+ linkPassword (authToken , authSecret , callback );
203+ } else
204+ // TODO other providers
205+ Utils .todoNote (TAG , "linkWithProvider" , callback );
206+ }
207+
168208 @ ReactMethod
169209 public void signInAnonymously (final Callback callback ) {
170210 Log .d (TAG , "signInAnonymously:called:" );
@@ -435,9 +475,32 @@ public void signOut(final Callback callback) {
435475 callback .invoke (null , resp );
436476 }
437477
478+ @ ReactMethod
479+ public void reloadUser (final Callback callback ) {
480+ FirebaseUser user = mAuth .getCurrentUser ();
481+
482+ if (user == null ) {
483+ callbackNoUser (callback , false );
484+ } else {
485+ user .reload ()
486+ .addOnCompleteListener (new OnCompleteListener <Void >() {
487+ @ Override
488+ public void onComplete (@ NonNull Task <Void > task ) {
489+ if (task .isSuccessful ()) {
490+ Log .d (TAG , "user reloaded" );
491+ userCallback (mAuth .getCurrentUser (), callback );
492+ } else {
493+ userErrorCallback (task , callback );
494+ }
495+ }
496+ });
497+ }
498+ }
499+
438500 @ ReactMethod
439501 public void getCurrentUser (final Callback callback ) {
440502 FirebaseUser user = mAuth .getCurrentUser ();
503+
441504 if (user == null ) {
442505 callbackNoUser (callback , false );
443506 } else {
@@ -513,19 +576,15 @@ public void onComplete(@NonNull Task<GetTokenResult> task) {
513576
514577 private void userErrorCallback (Task task , final Callback onFail ) {
515578 WritableMap error = Arguments .createMap ();
516- error .putInt ("errorCode" , task .getException ().hashCode ());
517- error .putString ("errorMessage" , task .getException ().getMessage ());
518- error .putString ("allErrorMessage" , task .getException ().toString ());
519-
579+ error .putString ("code" , ((FirebaseAuthException ) task .getException ()).getErrorCode ());
580+ error .putString ("message" , task .getException ().getMessage ());
520581 onFail .invoke (error );
521582 }
522583
523584 private void userExceptionCallback (Exception ex , final Callback onFail ) {
524585 WritableMap error = Arguments .createMap ();
525- error .putInt ("errorCode" , ex .hashCode ());
526- error .putString ("errorMessage" , ex .getMessage ());
527- error .putString ("allErrorMessage" , ex .toString ());
528-
586+ error .putInt ("code" , ex .hashCode ());
587+ error .putString ("message" , ex .getMessage ());
529588 onFail .invoke (error );
530589 }
531590
0 commit comments