diff --git a/frontend/memoree_client/lib/app/models/user.dart b/frontend/memoree_client/lib/app/models/user.dart new file mode 100755 index 0000000..3d1f23b --- /dev/null +++ b/frontend/memoree_client/lib/app/models/user.dart @@ -0,0 +1,16 @@ +import 'package:meta/meta.dart'; + +@immutable +class User { + final String uid; + final String email; + final String photoUrl; + final String displayName; + + const User({ + @required this.uid, + this.email, + this.photoUrl, + this.displayName + }); +} \ No newline at end of file diff --git a/frontend/memoree_client/lib/app/services/firebase_auth.dart b/frontend/memoree_client/lib/app/services/firebase_auth.dart new file mode 100755 index 0000000..6f1efb3 --- /dev/null +++ b/frontend/memoree_client/lib/app/services/firebase_auth.dart @@ -0,0 +1,52 @@ +import 'package:firebase_auth/firebase_auth.dart' as auth; +import 'package:firebase_core/firebase_core.dart'; +import 'package:google_sign_in/google_sign_in.dart'; +import 'package:memoree_client/app/models/user.dart'; + +class FirebaseAuthService { + final auth.FirebaseAuth _firebaseAuth; + final GoogleSignIn _googleSignIn; + + FirebaseAuthService({auth.FirebaseAuth firebaseAuth, GoogleSignIn googleSignin}) + : _firebaseAuth = firebaseAuth ?? auth.FirebaseAuth.instance, + _googleSignIn = googleSignin ?? GoogleSignIn(); + + User _userFromFirebase(auth.User user) { + if (user == null) { + return null; + } + return User( + uid: user.uid, + email: user.email, + displayName: user.displayName, + photoUrl: user.photoURL, + ); + } + + Stream get onAuthStateChanged { + return _firebaseAuth.authStateChanges().map(_userFromFirebase); + } + + Future signInWithGoogle() async { + await Firebase.initializeApp(); + + final googleUser = await _googleSignIn.signIn(); + final googleAuth = await googleUser.authentication; + final credential = auth.GoogleAuthProvider.credential( + accessToken: googleAuth.accessToken, + idToken: googleAuth.idToken, + ); + final authResult = await _firebaseAuth.signInWithCredential(credential); + return _userFromFirebase(authResult.user); + } + + Future signOut() async { + await _googleSignIn.disconnect(); + return _firebaseAuth.signOut(); + } + + Future currentUser() async { + final user = _firebaseAuth.currentUser; + return _userFromFirebase(user); + } +} \ No newline at end of file diff --git a/frontend/memoree_client/logos/google_logo.png b/frontend/memoree_client/logos/google_logo.png new file mode 100755 index 0000000..371a6ae Binary files /dev/null and b/frontend/memoree_client/logos/google_logo.png differ