From 961e2b4587909cb6774b6d60d740db91c149d3ac Mon Sep 17 00:00:00 2001 From: Nicholas Pease Date: Fri, 22 Mar 2024 05:42:35 +0000 Subject: [PATCH] Polishing Touches, Remove of Unnecessary Files, Register -> Onboard --- frontend-next/src/app/api/firebase-admin.js | 22 ---------- frontend-next/src/app/api/onboard/route.js | 47 --------------------- frontend-next/src/app/api/signout/route.js | 13 ------ frontend-next/src/app/login/page.js | 2 +- frontend-next/src/app/onboarding/page.js | 35 ++++++++++----- frontend-next/src/app/register/page.js | 14 ++++-- frontend-next/src/components/app/header.js | 8 +++- 7 files changed, 43 insertions(+), 98 deletions(-) delete mode 100644 frontend-next/src/app/api/firebase-admin.js delete mode 100644 frontend-next/src/app/api/onboard/route.js delete mode 100644 frontend-next/src/app/api/signout/route.js diff --git a/frontend-next/src/app/api/firebase-admin.js b/frontend-next/src/app/api/firebase-admin.js deleted file mode 100644 index 24223c4..0000000 --- a/frontend-next/src/app/api/firebase-admin.js +++ /dev/null @@ -1,22 +0,0 @@ -import { initializeApp, getApps } from "firebase-admin/app"; -import admin from "firebase-admin"; - -export function customInitApp() { - if (getApps().length <= 0) { - initializeApp({ - credential: admin.credential.cert({ - type: process.env.FIREBASE_ADMIN_TYPE, - projectId: process.env.FIREBASE_ADMIN_PROJECT_ID, - privateKeyId: process.env.FIREBASE_ADMIN_PRIV_KEY_ID, - privateKey: process.env.FIREBASE_ADMIN_PRIV_KEY?.replace(/\\n/g, "\n"), - clientEmail: process.env.FIREBASE_ADMIN_CLIENT_EMAIL, - clientId: process.env.FIREBASE_ADMIN_CLIENT_ID, - authUri: process.env.FIREBASE_ADMIN_AUTH_URI, - tokenUri: process.env.FIREBASE_ADMIN_TOKEN_URL, - authProviderX509CertUrl: process.env.FIREBASE_ADMIN_AUTH_PROVIDER_X509_CERT_URL, - clientC509CertUrl: process.env.FIREBASE_ADMIN_CLIENT_X509_CERT_URL, - universe_domain: process.env.FIREBASE_ADMIN_UNIVERSE_DOMAIN, - }), - }); - } -} \ No newline at end of file diff --git a/frontend-next/src/app/api/onboard/route.js b/frontend-next/src/app/api/onboard/route.js deleted file mode 100644 index 942e316..0000000 --- a/frontend-next/src/app/api/onboard/route.js +++ /dev/null @@ -1,47 +0,0 @@ -import { NextResponse } from "next/server"; -// Lib Imports -import { database } from "../firebase-config"; -import { ref, set as firebaseSet } from "firebase/database"; -import { cookies } from "next/headers"; - - -async function onboard(onboardingJSON, req) { - var session = req.cookies.get("session"); - //Call the authentication endpoint - var res = await fetch(new URL("/api/login", req.url), {headers: {Cookie: `session=${session?.value}`}}) - - // Login if unauthorized - if (res.status !== 200) { - return NextResponse.json({}, { status: 401 }); - } - try { - var expiresIn = 20 * 60 * 1000; // 20 minutes - var { uid, email } = await res.json() - onboardingJSON.email = email - onboardingJSON.uid = uid - onboardingJSON.defined = true - await firebaseSet(ref(database, `users/${uid}`), onboardingJSON); - var userOptions = { - name: "user", - value: JSON.stringify(onboardingJSON), - maxAge: expiresIn, // 20 mins - httpOnly: true, - secure: true, - }; - cookies().set(userOptions); - return NextResponse.json({}, { status: 200 }); - } catch(error) { - return NextResponse.json({ error: "Internal Server Error: "+error },{ status: 500 }); - } -} - - -// Handles POST requests (login requests) -export async function POST(req, res) { - try { - var onboardingJSON = await req?.json() - return await onboard(onboardingJSON, req); - } catch (error) { - return NextResponse.json({ error: "Internal Server Error" },{ status: 500 }); - } -} \ No newline at end of file diff --git a/frontend-next/src/app/api/signout/route.js b/frontend-next/src/app/api/signout/route.js deleted file mode 100644 index 576fe85..0000000 --- a/frontend-next/src/app/api/signout/route.js +++ /dev/null @@ -1,13 +0,0 @@ -import { cookies } from "next/headers"; -import { NextResponse } from "next/server"; -import {signOut} from "firebase/auth"; -import {auth} from "../firebase-config"; - - -export async function GET(req) { - cookies().delete('user') - cookies().delete('session') - cookies().delete('uid') - await signOut(auth) - return NextResponse.redirect(new URL("/",req.url)) -} \ No newline at end of file diff --git a/frontend-next/src/app/login/page.js b/frontend-next/src/app/login/page.js index 713154a..9f1c19e 100644 --- a/frontend-next/src/app/login/page.js +++ b/frontend-next/src/app/login/page.js @@ -30,7 +30,7 @@ function Login() { async function authenticationPush({data}) { if (authenticate(data)) { console.log("Fire") - router.push("/"); + router.push("/app"); } } diff --git a/frontend-next/src/app/onboarding/page.js b/frontend-next/src/app/onboarding/page.js index 4493279..9e0e124 100644 --- a/frontend-next/src/app/onboarding/page.js +++ b/frontend-next/src/app/onboarding/page.js @@ -2,22 +2,35 @@ import "../globals.css" import { useForm } from "react-hook-form"; import { useRouter } from "next/navigation"; +import { ref, set } from "firebase/database"; +import {auth, database} from "../api/firebase-config" +import {onAuthStateChanged} from "firebase/auth" + +function createUser(data) { + onAuthStateChanged(auth, (user) => { + if (user.uid) { + console.log(user) + data.uid = user.uid + data.defined = true + data.email = user.email + set(ref(database, `users/${user.uid}`), data); + return true + } else { + return false + } + }) +} + + function Onboarding() { var router = useRouter(); var { register, handleSubmit } = useForm(); - async function Onboard(data) { - const res = await fetch("/api/onboard", { - method: "POST", - body: JSON.stringify(data ? data : {}), - }); - - if (res.ok) { - router.push("/app"); - } else { - router.push("/login"); - } + function Onboard(data) { + createUser(data) + router.push("/app"); + } return (
diff --git a/frontend-next/src/app/register/page.js b/frontend-next/src/app/register/page.js index c9fa086..9abdf14 100644 --- a/frontend-next/src/app/register/page.js +++ b/frontend-next/src/app/register/page.js @@ -4,13 +4,21 @@ import { useForm, Form } from "react-hook-form"; import "../globals.css" import { useState } from "react"; -import { createUserWithEmailAndPassword } from "firebase/auth"; +import { createUserWithEmailAndPassword, signInWithEmailAndPassword, setPersistence, browserSessionPersistence } from "firebase/auth"; import {auth} from "../api/firebase-config"; async function Signup(data) { var userCredential = await createUserWithEmailAndPassword(auth,data.email,data.password); if (userCredential.user) { - return true + setPersistence(auth, browserSessionPersistence) + .then(() => { + signInWithEmailAndPassword(auth,data.email,data.password) + .then((res) => { + console.log(res) + return true + }) + }) + } else { return false } @@ -29,7 +37,7 @@ function Register() { if (passwordMatch(data)) { setPasswordMismatch(false); if (Signup(data)) { - router.push("/app"); + router.push("/onboarding"); } } else{ diff --git a/frontend-next/src/components/app/header.js b/frontend-next/src/components/app/header.js index 916afe6..6e77650 100644 --- a/frontend-next/src/components/app/header.js +++ b/frontend-next/src/components/app/header.js @@ -2,6 +2,11 @@ import { auth, database } from "../../app/api/firebase-config"; import { ref, set, remove } from "firebase/database"; import {signOut} from "firebase/auth"; + function logout() { + console.log("Fire") + signOut(auth) + } + // Closes chat room function closeChatRoom(roomObj, setChatRoomObj, setMainTab, user) { var path = roomObj.path + "/" + roomObj.name + "-" + roomObj.timestamp; @@ -110,7 +115,8 @@ export function Header({mainTab, isMyRoom, chatRoomObj, setChatRoomObj, setMainT )} Sign Out