diff --git a/src/auth.js b/src/auth.js index 2db7fc415..7458d6fa8 100644 --- a/src/auth.js +++ b/src/auth.js @@ -2,11 +2,38 @@ import { trackEvent } from './analytics'; import firebase from 'firebase/app'; import { log } from './utils'; +const isExtension = typeof chrome !== 'undefined' && !!chrome?.runtime?.id; + +function loginWithGoogleInExtension() { + return new Promise((resolve, reject) => { + chrome.identity.getAuthToken({ interactive: true }, (token) => { + if (chrome.runtime.lastError) { + reject(new Error(chrome.runtime.lastError.message)); + return; + } + const credential = firebase.auth.GoogleAuthProvider.credential(null, token); + firebase.auth().signInWithCredential(credential).then(resolve).catch(reject); + }); + }); +} + export const auth = { logout() { + if (isExtension) { + chrome.identity.clearAllCachedAuthTokens(() => {}); + } firebase.auth().signOut(); }, login(providerName) { + if (isExtension && providerName === 'google') { + return loginWithGoogleInExtension() + .then(() => { + trackEvent('fn', 'loggedIn', providerName); + window.db.local.set({ lastAuthProvider: providerName }); + }) + .catch(log); + } + var provider; if (providerName === 'facebook') { provider = new firebase.auth.FacebookAuthProvider(); @@ -24,10 +51,7 @@ export const auth = { .signInWithPopup(provider) .then(function () { trackEvent('fn', 'loggedIn', providerName); - // Save to recommend next time - window.db.local.set({ - lastAuthProvider: providerName, - }); + window.db.local.set({ lastAuthProvider: providerName }); }) .catch(function (error) { log(error); diff --git a/src/components/LoginModal.jsx b/src/components/LoginModal.jsx index 0cc5ac73a..8cbe5bfb3 100644 --- a/src/components/LoginModal.jsx +++ b/src/components/LoginModal.jsx @@ -3,6 +3,8 @@ import * as Dialog from '@radix-ui/react-dialog'; import { useEffect } from 'preact/hooks'; import mixpanel from '../services/mixpanel'; +const isExtension = typeof chrome !== 'undefined' && !!chrome?.runtime?.id; + export default function LoginModal({ open, onClose }) { const login = (e) => { const provider = e.target.dataset.authProvider; @@ -40,20 +42,22 @@ export default function LoginModal({ open, onClose }) {
Join a community of 50,000+ Developers
diff --git a/src/components/app.jsx b/src/components/app.jsx index 09dccd44a..ed381a5cb 100644 --- a/src/components/app.jsx +++ b/src/components/app.jsx @@ -57,6 +57,7 @@ const LocalStorageKeys = { LOGIN_AND_SAVE_MESSAGE_SEEN: 'loginAndsaveMessageSeen', ASKED_TO_IMPORT_CREATIONS: 'askedToImportCreations', }; + const UNSAVED_WARNING_COUNT = 15; const version = '3.6.1'; @@ -1658,6 +1659,7 @@ BookLibService.Borrow(id) { onUpdateImage={this.onUpdateImage.bind(this)} currentItem={this.state.currentItem} onLogin={this.loginBtnClickHandler.bind(this)} + externalLibCount={this.state.externalLibCount} openBtnHandler={this.openBtnClickHandler.bind(this)} newBtnHandler={this.newBtnClickHandler.bind(this)} diff --git a/static/landing/index.html b/static/landing/index.html index 8a22f708d..1635a04a1 100644 --- a/static/landing/index.html +++ b/static/landing/index.html @@ -391,7 +391,7 @@