From 4a37aa73051f06166c4784c650acbcadcbedead6 Mon Sep 17 00:00:00 2001 From: Kushagra Gour Date: Wed, 10 Jan 2018 03:15:43 +0530 Subject: [PATCH] login flow - first draft --- .eslintrc.json | 2 +- src/auth.js | 66 +++++++++++++++++++++++++++++++++++++++ src/db.js | 11 +++++-- src/index.html | 15 +++++++-- src/itemService.js | 14 +++++++-- src/script.js | 78 +++++++++++++++++++++++++++++++--------------- src/style.css | 5 +++ 7 files changed, 157 insertions(+), 34 deletions(-) create mode 100644 src/auth.js diff --git a/.eslintrc.json b/.eslintrc.json index 5d1307c..8661b65 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -19,7 +19,7 @@ "computed-property-spacing": ["error", "never"], "consistent-return": "error", "consistent-this": "off", - "curly": "error", + "curly": "off", "default-case": "error", "dot-location": ["error", "property"], "dot-notation": "error", diff --git a/src/auth.js b/src/auth.js new file mode 100644 index 0000000..f92b0fa --- /dev/null +++ b/src/auth.js @@ -0,0 +1,66 @@ +window.logout = function logout() { + firebase.auth().signOut(); +}; +function login(providerName) { + var provider; + if (providerName === 'fb') { + provider = new firebase.auth.FacebookAuthProvider(); + } else if (providerName === 'twitter') { + provider = new firebase.auth.TwitterAuthProvider(); + } else if (providerName === 'google') { + provider = new firebase.auth.GoogleAuthProvider(); + provider.addScope('https://www.googleapis.com/auth/userinfo.profile'); + } else { + provider = new firebase.auth.GithubAuthProvider(); + } + + return firebase + .auth() + .signInWithPopup(provider) + .then(function(result) { + return; + // Save this user in the store + firebase + .database() + .ref('users/' + result.user.uid) + .update({ + displayName: result.user.displayName, + email: result.user.email, + photoURL: result.user.providerData[0].photoURL, + signedUpOn: Date.now() + }) + .then(function() { + // Port items in localstorage to user account + if (window.localStorage.prototyp) { + var items = JSON.parse(window.localStorage.prototyp); + var newItemKey; + items.forEach(function(localItem) { + itemService.fetchItem(localItem.id).then(function(item) { + newItemKey = firebase.database().ref('pens').push().key; + item.createdBy = result.user.uid; + delete item.uid; + firebase.database().ref('pens/' + newItemKey).set(item); + firebase + .database() + .ref('users/' + result.user.uid) + .child('items') + .child(newItemKey) + .set(true); + }); + }); + delete localStorage.prototyp; + } + }); + }) + .catch(function(error) { + // Handle Errors here. + var errorCode = error.code; + var errorMessage = error.message; + // The email of the user's account used. + var email = error.email; + // The firebase.auth.AuthCredential type that was used. + var credential = error.credential; + console.log(error); + }); +} +window.login = login; diff --git a/src/db.js b/src/db.js index 1afd0a9..d8e3a0d 100644 --- a/src/db.js +++ b/src/db.js @@ -86,7 +86,7 @@ // Not critical right now. } - async function setUserLastSeenVersion(user, version) { + async function setUserLastSeenVersion(version) { if (window.IS_EXTENSION) { chrome.storage.sync.set( { @@ -99,17 +99,22 @@ // Settings the lastSeenVersion in localStorage also because next time we need // to fetch it irrespective of the user being logged in or out local.set({ lastSeenVersion: version }); - if (user) { + if (window.user) { const remoteDb = await getDb(); - remoteDb.doc(`users/${user.uid}`).update({ lastSeenVersion: version }); + remoteDb + .doc(`users/${window.user.uid}`) + .update({ lastSeenVersion: version }); } } async function getUser(userId) { const remoteDb = await getDb(); return remoteDb.doc(`users/${userId}`).get().then(doc => { + if (!doc.exists) + return remoteDb.doc(`users/${userId}`).set({}, { merge: true }); const user = doc.data(); Object.assign(window.user, user); + return user; }); } diff --git a/src/index.html b/src/index.html index eb21056..52b5ef4 100644 --- a/src/index.html +++ b/src/index.html @@ -73,8 +73,14 @@ Open - - + + + Logout + + + @@ -318,6 +324,10 @@ + +