@@ -85,12 +85,16 @@ firebase.getCallbackData = function(type, snapshot) {
8585firebase . init = function ( arg ) {
8686 return new Promise ( function ( resolve , reject ) {
8787 try {
88- var Firebase = com . firebase . client . Firebase ;
89- Firebase . setAndroidContext ( appModule . android . context ) ;
90- if ( arg . persist && ! Firebase . getDefaultConfig ( ) . isPersistenceEnabled ( ) ) {
91- Firebase . getDefaultConfig ( ) . setPersistenceEnabled ( true ) ;
88+ var fDatabase = com . google . firebase . database . FirebaseDatabase ;
89+ // console.log("fDatabase: " + fDatabase );
90+ if ( arg . persist ) {
91+ fDatabase . getInstance ( ) . setPersistenceEnabled ( true ) ;
9292 }
93- instance = new Firebase ( arg . url ) ;
93+ // the URL is picked up from google-services.json, so you can use it like this:
94+ instance = fDatabase . getInstance ( ) . getReference ( ) ;
95+ // it is however still possible to pass the URL programmatically (which we'll do for now):
96+ // instance = fDatabase.getInstance().getReferenceFromUrl(arg.url);
97+
9498 resolve ( instance ) ;
9599 } catch ( ex ) {
96100 console . log ( "Error in firebase.init: " + ex ) ;
@@ -99,10 +103,25 @@ firebase.init = function (arg) {
99103 } ) ;
100104} ;
101105
106+ firebase . logout = function ( arg ) {
107+ return new Promise ( function ( resolve , reject ) {
108+ try {
109+ com . google . firebase . auth . FirebaseAuth . getInstance ( ) . signOut ( ) ;
110+ resolve ( ) ;
111+ } catch ( ex ) {
112+ console . log ( "Error in firebase.logout: " + ex ) ;
113+ reject ( ex ) ;
114+ }
115+ } ) ;
116+ } ;
117+
118+ firebase . authStateListener = null ;
119+
102120firebase . login = function ( arg ) {
103121 return new Promise ( function ( resolve , reject ) {
104122 try {
105- var authorizer = new com . firebase . client . Firebase . AuthResultHandler ( {
123+ /*
124+ var authorizer = new com.google.firebase.database.DatabaseReference.AuthResultHandler({
106125 onAuthenticated: function (authData) {
107126 resolve({
108127 uid: authData.getUid(),
@@ -112,23 +131,67 @@ firebase.login = function (arg) {
112131 token: authData.getToken()
113132 });
114133 },
115- onAuthenticationError : function ( firebaseError ) {
116- reject ( firebaseError . getMessage ( ) ) ;
134+ onAuthenticationError: function (databaseError ) {
135+ reject(databaseError .getMessage());
117136 }
118137 });
138+ */
119139
120- var type = arg . type ;
140+ var firebaseAuth = com . google . firebase . auth . FirebaseAuth . getInstance ( ) ;
121141
122- if ( type === firebase . LoginType . ANONYMOUS ) {
123- instance . authAnonymously ( authorizer ) ;
124- } else if ( type === firebase . LoginType . PASSWORD ) {
142+ if ( firebase . authStateListener !== null ) {
143+ firebaseAuth . removeAuthStateListener ( firebase . authStateListener ) ;
144+ }
145+
146+ firebase . authStateListener = new com . google . firebase . auth . FirebaseAuth . AuthStateListener ( {
147+ onAuthStateChanged : function ( fbAuth ) {
148+ console . log ( "--- auth state changed: " + fbAuth ) ;
149+ var user = fbAuth . getCurrentUser ( ) ;
150+ console . log ( "--- user: " + user ) ;
151+ if ( user !== null ) {
152+ // signed in
153+ resolve ( {
154+ uid : user . getUid ( ) ,
155+ name : user . getDisplayName ( ) ,
156+ email : user . getEmail ( ) ,
157+ // TODO add these properties, see https://firebase.google.com/docs/auth/android/manage-users#get_a_users_profile
158+ // provider: authData.getProvider(),
159+ // expiresAtUnixEpochSeconds: authData.getExpires(),
160+ profileImageURL : user . getPhotoUrl ( )
161+ // token: user.getToken() // can be used to auth with a backend server
162+ } ) ;
163+ } else {
164+ // reject("Logging in the user failed");
165+ }
166+ }
167+ } ) ;
168+
169+ firebaseAuth . addAuthStateListener ( firebase . authStateListener ) ;
170+
171+ if ( arg . type === firebase . LoginType . ANONYMOUS ) {
172+ var onFailureListener = new com . google . android . gms . tasks . OnFailureListener ( {
173+ onFailure : function ( throwable ) {
174+ reject ( "Anonymous login failed with message: " + throwable . getMessage ( ) ) ;
175+ }
176+ } ) ;
177+ firebaseAuth . signInAnonymously ( ) . addOnFailureListener ( onFailureListener ) ;
178+ } else if ( arg . type === firebase . LoginType . PASSWORD ) {
125179 if ( ! arg . email || ! arg . password ) {
126180 reject ( "Auth type emailandpassword requires an email and password argument" ) ;
127181 } else {
128- instance . authWithPassword ( arg . email , arg . password , authorizer ) ;
182+ var onCompleteListener = new com . google . android . gms . tasks . OnCompleteListener ( {
183+ onComplete : function ( task ) {
184+ if ( ! task . isSuccessful ( ) ) {
185+ reject ( "Logging in the user failed" ) ;
186+ } else {
187+ // the AuthStateListener.onAuthStateChanged callback will resolve the promise
188+ }
189+ }
190+ } ) ;
191+ firebaseAuth . signInWithEmailAndPassword ( arg . email , arg . password ) . addOnCompleteListener ( onCompleteListener ) ;
129192 }
130193 } else {
131- reject ( "Unsupported auth type: " + type ) ;
194+ reject ( "Unsupported auth type: " + arg . type ) ;
132195 }
133196 } catch ( ex ) {
134197 console . log ( "Error in firebase.login: " + ex ) ;
@@ -140,19 +203,23 @@ firebase.login = function (arg) {
140203firebase . resetPassword = function ( arg ) {
141204 return new Promise ( function ( resolve , reject ) {
142205 try {
143- var resultHandler = new com . firebase . client . Firebase . ResultHandler ( {
144- onSuccess : function ( ) {
145- resolve ( ) ;
146- } ,
147- onError : function ( firebaseError ) {
148- reject ( firebaseError . getMessage ( ) ) ;
149- }
150- } ) ;
151-
152206 if ( ! arg . email ) {
153207 reject ( "Resetting a password requires an email argument" ) ;
154208 } else {
155- instance . resetPassword ( arg . email , resultHandler ) ;
209+ var onCompleteListener = new com . google . android . gms . tasks . OnCompleteListener ( {
210+ onComplete : function ( task ) {
211+ console . log ( "--- reset pwd: " + task ) ;
212+ if ( task . isSuccessful ( ) ) {
213+ resolve ( ) ;
214+ } else {
215+ // TODO extract error
216+ reject ( "Sending password reset email failed" ) ;
217+ }
218+ }
219+ } ) ;
220+
221+ var firebaseAuth = com . google . firebase . auth . FirebaseAuth . getInstance ( ) ;
222+ firebaseAuth . sendPasswordResetEmail ( arg . email ) . addOnCompleteListener ( onCompleteListener ) ;
156223 }
157224 } catch ( ex ) {
158225 console . log ( "Error in firebase.resetPassword: " + ex ) ;
@@ -164,19 +231,28 @@ firebase.resetPassword = function (arg) {
164231firebase . changePassword = function ( arg ) {
165232 return new Promise ( function ( resolve , reject ) {
166233 try {
167- var resultHandler = new com . firebase . client . Firebase . ResultHandler ( {
168- onSuccess : function ( ) {
169- resolve ( ) ;
170- } ,
171- onError : function ( firebaseError ) {
172- reject ( firebaseError . getMessage ( ) ) ;
173- }
174- } ) ;
175-
176234 if ( ! arg . email || ! arg . oldPassword || ! arg . newPassword ) {
177235 reject ( "Changing a password requires an email and an oldPassword and a newPassword arguments" ) ;
178236 } else {
179- instance . changePassword ( arg . email , arg . oldPassword , arg . newPassword , resultHandler ) ;
237+ var onCompleteListener = new com . google . android . gms . tasks . OnCompleteListener ( {
238+ onComplete : function ( task ) {
239+ console . log ( "--- changed pwd: " + task ) ;
240+ if ( task . isSuccessful ( ) ) {
241+ resolve ( ) ;
242+ } else {
243+ // TODO extract error
244+ reject ( "Updating password failed" ) ;
245+ }
246+ }
247+ } ) ;
248+
249+ var user = com . google . firebase . auth . FirebaseAuth . getInstance ( ) . getCurrentUser ( ) ;
250+
251+ if ( user === null ) {
252+ reject ( "Please log the user in first" ) ;
253+ } else {
254+ user . updatePassword ( arg . newPassword ) . addOnCompleteListener ( onCompleteListener ) ;
255+ }
180256 }
181257 } catch ( ex ) {
182258 console . log ( "Error in firebase.changePassword: " + ex ) ;
@@ -188,22 +264,40 @@ firebase.changePassword = function (arg) {
188264firebase . createUser = function ( arg ) {
189265 return new Promise ( function ( resolve , reject ) {
190266 try {
191- var valueResultHandler = new com . firebase . client . Firebase . ValueResultHandler ( {
192- onSuccess : function ( authData ) {
193- console . log ( "--- created: " + authData ) ;
194- resolve ( {
195- key : firebase . toJsObject ( authData ) . uid
196- } ) ;
197- } ,
198- onError : function ( firebaseError ) {
199- reject ( firebaseError . getMessage ( ) ) ;
200- }
201- } ) ;
202-
203267 if ( ! arg . email || ! arg . password ) {
204268 reject ( "Creating a user requires an email and password argument" ) ;
205269 } else {
206- instance . createUser ( arg . email , arg . password , valueResultHandler ) ;
270+ var firebaseAuth = com . google . firebase . auth . FirebaseAuth . getInstance ( ) ;
271+
272+ var onCompleteListener = new com . google . android . gms . tasks . OnCompleteListener ( {
273+ onComplete : function ( task ) {
274+ if ( ! task . isSuccessful ( ) ) {
275+ reject ( "Creating a user failed" ) ;
276+ } else {
277+ // the AuthStateListener.onAuthStateChanged callback will resolve the promise
278+ }
279+ }
280+ } ) ;
281+
282+ if ( firebase . authStateListener !== null ) {
283+ firebaseAuth . removeAuthStateListener ( firebase . authStateListener ) ;
284+ }
285+
286+ firebase . authStateListener = new com . google . firebase . auth . FirebaseAuth . AuthStateListener ( {
287+ onAuthStateChanged : function ( fbAuth ) {
288+ console . log ( "--- auth state changed: " + fbAuth ) ;
289+ var user = fbAuth . getCurrentUser ( ) ;
290+ if ( user !== null ) {
291+ // signed in
292+ resolve ( {
293+ key : user . getUid ( )
294+ } ) ;
295+ }
296+ }
297+ } ) ;
298+
299+ firebaseAuth . addAuthStateListener ( firebase . authStateListener ) ;
300+ firebaseAuth . createUserWithEmailAndPassword ( arg . email , arg . password ) . addOnCompleteListener ( onCompleteListener ) ;
207301 }
208302 } catch ( ex ) {
209303 console . log ( "Error in firebase.createUser: " + ex ) ;
@@ -213,7 +307,7 @@ firebase.createUser = function (arg) {
213307} ;
214308
215309firebase . _addObservers = function ( to , updateCallback ) {
216- var listener = new com . firebase . client . ChildEventListener ( {
310+ var listener = new com . google . firebase . database . ChildEventListener ( {
217311 onChildAdded : function ( snapshot , previousChildKey ) {
218312 updateCallback ( firebase . getCallbackData ( 'ChildAdded' , snapshot ) ) ;
219313 } ,
@@ -245,13 +339,13 @@ firebase.addChildEventListener = function (updateCallback, path) {
245339firebase . addValueEventListener = function ( updateCallback , path ) {
246340 return new Promise ( function ( resolve , reject ) {
247341 try {
248- var listener = new com . firebase . client . ValueEventListener ( {
342+ var listener = new com . google . firebase . database . ValueEventListener ( {
249343 onDataChange : function ( snapshot ) {
250344 updateCallback ( firebase . getCallbackData ( 'ValueChanged' , snapshot ) ) ;
251345 } ,
252- onCancelled : function ( firebaseError ) {
346+ onCancelled : function ( databaseError ) {
253347 updateCallback ( {
254- error : firebaseError . getMessage ( )
348+ error : databaseError . getMessage ( )
255349 } ) ;
256350 }
257351 } ) ;
@@ -374,13 +468,13 @@ firebase.query = function (updateCallback, path, options) {
374468 }
375469
376470 if ( options . singleEvent ) {
377- var listener = new com . firebase . client . ValueEventListener ( {
471+ var listener = new com . google . firebase . database . ValueEventListener ( {
378472 onDataChange : function ( snapshot ) {
379473 updateCallback ( firebase . getCallbackData ( 'ValueChanged' , snapshot ) ) ;
380474 } ,
381- onCancelled : function ( firebaseError ) {
475+ onCancelled : function ( databaseError ) {
382476 updateCallback ( {
383- error : firebaseError . getMessage ( )
477+ error : databaseError . getMessage ( )
384478 } ) ;
385479 }
386480 } ) ;
0 commit comments