{"version":3,"sources":["firebase.js","contexts/AuthContext.js","components/Signup.js","components/Dashboard.js","components/Login.js","components/PrivateRoute.js","components/ForgotPassword.js","components/UpdateProfile.js","components/App.js","index.js"],"names":["app","firebase","initializeApp","apiKey","authDomain","databaseURL","projectId","storageBucket","messagingSenderId","appId","measurementId","auth","AuthContext","React","createContext","useAuth","useContext","AuthProvider","children","useState","currentUser","setCurrentUser","loading","setLoading","useEffect","onAuthStateChanged","user","value","login","email","password","signInWithEmailAndPassword","signup","createUserWithEmailAndPassword","logout","signOut","resetPassword","sendPasswordResetEmail","updateEmail","updatePassword","Provider","Signup","emailRef","useRef","passwordRef","passwordConfirmRef","error","setError","history","useHistory","e","a","preventDefault","current","push","Card","Body","className","Alert","variant","Form","onSubmit","Group","id","Label","Control","type","ref","required","Button","disabled","to","Dashboard","onClick","Login","PrivateRoute","Component","component","rest","render","props","ForgotPassword","message","setMessage","UpdateProfile","promises","Promise","all","then","catch","finally","defaultValue","placeholder","App","Container","style","minHeight","maxWidth","exact","path","ReactDOM","StrictMode","document","getElementById"],"mappings":"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","file":"static/js/main.c5240dff.chunk.js","sourcesContent":["import firebase from \"firebase/app\"\nimport \"firebase/auth\"\n\nconst app = firebase.initializeApp({\n apiKey: \"AIzaSyDrJU-fHkCr63qi4wksLE81s3Atbkn8cq4\",\n authDomain: \"my-auth-bf045.firebaseapp.com\",\n databaseURL: \"https://my-auth-bf045.firebaseio.com\",\n projectId: \"my-auth-bf045\",\n storageBucket: \"my-auth-bf045.appspot.com\",\n messagingSenderId: \"1009634666697\",\n appId: \"1:1009634666697:web:f10ddef6061ff401738518\",\n measurementId: \"G-LHD1X6VYNV\"\n})\n\nexport const auth = app.auth()\nexport default app\n","import React, { useContext, useState, useEffect } from \"react\"\nimport { auth } from \"../firebase\"\n\nconst AuthContext = React.createContext()\n\nexport function useAuth() {\n return useContext(AuthContext)\n}\n\nexport function AuthProvider({ children }) {\n const [currentUser, setCurrentUser] = useState()\n const [loading, setLoading] = useState(true)\n\n function signup(email, password) {\n return auth.createUserWithEmailAndPassword(email, password)\n }\n\n function login(email, password) {\n return auth.signInWithEmailAndPassword(email, password)\n }\n\n function logout() {\n return auth.signOut()\n }\n\n function resetPassword(email) {\n return auth.sendPasswordResetEmail(email)\n }\n\n function updateEmail(email) {\n return currentUser.updateEmail(email)\n }\n\n function updatePassword(password) {\n return currentUser.updatePassword(password)\n }\n\n useEffect(() => {\n const unsubscribe = auth.onAuthStateChanged(user => {\n setCurrentUser(user)\n setLoading(false)\n })\n\n return unsubscribe\n }, [])\n\n const value = {\n currentUser,\n login,\n signup,\n logout,\n resetPassword,\n updateEmail,\n updatePassword\n }\n\n return (\n \n {!loading && children}\n \n )\n}\n","import React, { useRef, useState } from \"react\"\nimport { Form, Button, Card, Alert } from \"react-bootstrap\"\nimport { useAuth } from \"../contexts/AuthContext\"\nimport { Link, useHistory } from \"react-router-dom\"\n\nexport default function Signup() {\n const emailRef = useRef()\n const passwordRef = useRef()\n const passwordConfirmRef = useRef()\n const { signup } = useAuth()\n const [error, setError] = useState(\"\")\n const [loading, setLoading] = useState(false)\n const history = useHistory()\n\n async function handleSubmit(e) {\n e.preventDefault()\n\n if (passwordRef.current.value !== passwordConfirmRef.current.value) {\n return setError(\"Passwords do not match\")\n }\n\n try {\n setError(\"\")\n setLoading(true)\n await signup(emailRef.current.value, passwordRef.current.value)\n history.push(\"/\")\n } catch {\n setError(\"Failed to create an account\")\n }\n\n setLoading(false)\n }\n\n return (\n <>\n \n \n

Sign Up

\n {error && {error}}\n
\n \n Email\n \n \n \n Password\n \n \n \n Password Confirmation\n \n \n \n
\n
\n
\n
\n Already have an account? Log In\n
\n \n )\n}\n","import React, { useState } from \"react\"\nimport { Card, Button, Alert } from \"react-bootstrap\"\nimport { useAuth } from \"../contexts/AuthContext\"\nimport { Link, useHistory } from \"react-router-dom\"\n\nexport default function Dashboard() {\n const [error, setError] = useState(\"\")\n const { currentUser, logout } = useAuth()\n const history = useHistory()\n\n async function handleLogout() {\n setError(\"\")\n\n try {\n await logout()\n history.push(\"/login\")\n } catch {\n setError(\"Failed to log out\")\n }\n }\n\n return (\n <>\n \n \n

Profile

\n {error && {error}}\n Email: {currentUser.email}\n \n Update Profile\n \n
\n
\n
\n \n
\n \n )\n}\n","import React, { useRef, useState } from \"react\"\nimport { Form, Button, Card, Alert } from \"react-bootstrap\"\nimport { useAuth } from \"../contexts/AuthContext\"\nimport { Link, useHistory } from \"react-router-dom\"\n\nexport default function Login() {\n const emailRef = useRef()\n const passwordRef = useRef()\n const { login } = useAuth()\n const [error, setError] = useState(\"\")\n const [loading, setLoading] = useState(false)\n const history = useHistory()\n\n async function handleSubmit(e) {\n e.preventDefault()\n\n try {\n setError(\"\")\n setLoading(true)\n await login(emailRef.current.value, passwordRef.current.value)\n history.push(\"/\")\n } catch {\n setError(\"Failed to log in\")\n }\n\n setLoading(false)\n }\n\n return (\n <>\n \n \n

Log In

\n {error && {error}}\n
\n \n Email\n \n \n \n Password\n \n \n \n
\n
\n Forgot Password?\n
\n
\n
\n
\n Need an account? Sign Up\n
\n \n )\n}\n","import React from \"react\"\nimport { Route, Redirect } from \"react-router-dom\"\nimport { useAuth } from \"../contexts/AuthContext\"\n\nexport default function PrivateRoute({ component: Component, ...rest }) {\n const { currentUser } = useAuth()\n\n return (\n {\n return currentUser ? : \n }}\n >\n )\n}\n","import React, { useRef, useState } from \"react\"\nimport { Form, Button, Card, Alert } from \"react-bootstrap\"\nimport { useAuth } from \"../contexts/AuthContext\"\nimport { Link } from \"react-router-dom\"\n\nexport default function ForgotPassword() {\n const emailRef = useRef()\n const { resetPassword } = useAuth()\n const [error, setError] = useState(\"\")\n const [message, setMessage] = useState(\"\")\n const [loading, setLoading] = useState(false)\n\n async function handleSubmit(e) {\n e.preventDefault()\n\n try {\n setMessage(\"\")\n setError(\"\")\n setLoading(true)\n await resetPassword(emailRef.current.value)\n setMessage(\"Check your inbox for further instructions\")\n } catch {\n setError(\"Failed to reset password\")\n }\n\n setLoading(false)\n }\n\n return (\n <>\n \n \n

Password Reset

\n {error && {error}}\n {message && {message}}\n
\n \n Email\n \n \n \n
\n
\n Login\n
\n
\n
\n
\n Need an account? Sign Up\n
\n \n )\n}\n","import React, { useRef, useState } from \"react\"\nimport { Form, Button, Card, Alert } from \"react-bootstrap\"\nimport { useAuth } from \"../contexts/AuthContext\"\nimport { Link, useHistory } from \"react-router-dom\"\n\nexport default function UpdateProfile() {\n const emailRef = useRef()\n const passwordRef = useRef()\n const passwordConfirmRef = useRef()\n const { currentUser, updatePassword, updateEmail } = useAuth()\n const [error, setError] = useState(\"\")\n const [loading, setLoading] = useState(false)\n const history = useHistory()\n\n function handleSubmit(e) {\n e.preventDefault()\n if (passwordRef.current.value !== passwordConfirmRef.current.value) {\n return setError(\"Passwords do not match\")\n }\n\n const promises = []\n setLoading(true)\n setError(\"\")\n\n if (emailRef.current.value !== currentUser.email) {\n promises.push(updateEmail(emailRef.current.value))\n }\n if (passwordRef.current.value) {\n promises.push(updatePassword(passwordRef.current.value))\n }\n\n Promise.all(promises)\n .then(() => {\n history.push(\"/\")\n })\n .catch(() => {\n setError(\"Failed to update account\")\n })\n .finally(() => {\n setLoading(false)\n })\n }\n\n return (\n <>\n \n \n

Update Profile

\n {error && {error}}\n
\n \n Email\n \n \n \n Password\n \n \n \n Password Confirmation\n \n \n \n
\n
\n
\n
\n Cancel\n
\n \n )\n}\n","import React from \"react\"\nimport Signup from \"./Signup\"\nimport { Container } from \"react-bootstrap\"\nimport { AuthProvider } from \"../contexts/AuthContext\"\nimport { BrowserRouter as Router, Switch, Route } from \"react-router-dom\"\nimport Dashboard from \"./Dashboard\"\nimport Login from \"./Login\"\nimport PrivateRoute from \"./PrivateRoute\"\nimport ForgotPassword from \"./ForgotPassword\"\nimport UpdateProfile from \"./UpdateProfile\"\n\nfunction App() {\n return (\n \n
\n \n \n \n \n \n \n \n \n \n \n \n
\n \n )\n}\n\nexport default App\n","import React from \"react\"\nimport ReactDOM from \"react-dom\"\nimport App from \"./components/App\"\nimport \"bootstrap/dist/css/bootstrap.min.css\"\n\nReactDOM.render(\n \n \n ,\n document.getElementById(\"root\")\n)\n"],"sourceRoot":""}