diff --git a/frontend-next/src/app/api/login/route.js b/frontend-next/src/app/api/login/route.js
deleted file mode 100644
index 0c8d43c..0000000
--- a/frontend-next/src/app/api/login/route.js
+++ /dev/null
@@ -1,94 +0,0 @@
-import { cookies } from "next/headers";
-import { NextResponse } from "next/server";
-// Firebase Imports
-import { auth } from "firebase-admin";
-import { signInWithEmailAndPassword } from "firebase/auth";
-// Lib Imports
-import { auth as authConfig, database} from "../firebase-config";
-import { customInitApp } from "../firebase-admin";
-import { ref, get as firebaseGet } from "firebase/database";
-
-// Needs to "init" on each call to the API
-customInitApp();
-
-// Login with Email/Password
-async function handleEmailAndPassword(email, password) {
- try {
- var userCredential = await signInWithEmailAndPassword(authConfig,email,password);
- if (userCredential.user.accessToken) {
- var token = await auth().verifyIdToken(userCredential.user.accessToken);
- var expiresIn = 20 * 60 * 1000; // 20 minutes
- var sessionCookie = await auth().createSessionCookie(userCredential.user.accessToken, {expiresIn,});
- if (token) {
- var user = await firebaseGet(ref(database, `users/${userCredential.user.uid}`));
- if (!user.exists()) {
- var userOptions = {
- name: "user",
- value: JSON.stringify({defined: false, uid: userCredential.user.uid}),
- maxAge: expiresIn, // 20 mins
- httpOnly: true,
- secure: true,
- };
- } else {
- var userData = user.val()
- userData.uid = userCredential.user.uid
- userData.defined = true
- var userOptions = {
- name: "user",
- value: JSON.stringify(userData),
- maxAge: expiresIn, // 20 mins
- httpOnly: true,
- secure: true,
- };
- }
- cookies().set(userOptions);
- var options = {
- name: "session",
- value: sessionCookie,
- maxAge: expiresIn, // 20 mins
- httpOnly: true,
- secure: true,
- };
- cookies().set(options);
- cookies().set({
- name: "uid",
- value: userCredential.user.uid,
- maxAge: expiresIn, // 20 mins
- httpOnly: true,
- secure: true,
- });
- return NextResponse.json({ options }, { status: 200 });
- }
- }
- } catch (error) {
- return NextResponse.json({ error: error.code }, { status: 401 });
- }
-}
-
-// Handles POST requests (login requests)
-export async function POST(req, res) {
- try {
- var { email, password } = await req?.json()
- return await handleEmailAndPassword(email, password); // need session token
- } catch (error) {
- return NextResponse.json({ error: "Internal Server Error" },{ status: 500 });
- }
-}
-
-// Handles GET requests (is session still valid requests)
-export async function GET(req) {
- var session = cookies().get("session")?.value || "";
- //Validate if the cookie exist in the request
- if (!session) {
- return NextResponse.json({ isLogged: false }, { status: 401 });
- } else {
- // Validate session cookie
- try {
- var validation = await auth().verifySessionCookie(session, true);
- return NextResponse.json({ isLogged: true, uid: validation.uid, email: validation.email }, { status: 200 });
- } catch (error) {
- return NextResponse.json({ isLogged: false}, { status: 401 });
- }
-
- }
-}
\ No newline at end of file
diff --git a/frontend-next/src/app/api/register/route.js b/frontend-next/src/app/api/register/route.js
deleted file mode 100644
index 9bc7268..0000000
--- a/frontend-next/src/app/api/register/route.js
+++ /dev/null
@@ -1,42 +0,0 @@
-// Import necessary functions
-import { createUserWithEmailAndPassword } from "firebase/auth";
-import { auth } from "../firebase-config";
-import { NextResponse } from "next/server";
-
-// Function to register a new user using Firebase Authentication
-export async function registerUser(email, password) {
- try {
- var userCredential = await createUserWithEmailAndPassword(auth,email,password);
- // You can perform additional actions after successful registration, if needed.
- return { success: true, userCredential };
- } catch (error) {
- return { success: false, error: error.message };
- }
-}
-
-// POST request handler
-export async function POST(req, res) {
- try {
- // Extract email and password from the request body
- var { email, password } = await req?.json();
- // Check if email and password are provided
- if (!email || !password) {
- return NextResponse.json(
- { error: "Email and password are required." },
- { status: 400 }
- );
- }
-
- // Register the user
- try {
- var userCredential = await createUserWithEmailAndPassword(auth,email,password);
- return NextResponse.json({message: "Registration successful.",user: userCredential.user,});
- } catch {
- return NextResponse.json({ error: registrationResult.error },{ status: 500 });
- }
-
- } catch (error) {
- // Handle unexpected errors
- 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
index e107f50..576fe85 100644
--- a/frontend-next/src/app/api/signout/route.js
+++ b/frontend-next/src/app/api/signout/route.js
@@ -1,10 +1,13 @@
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/api/user/route.js b/frontend-next/src/app/api/user/route.js
deleted file mode 100644
index 1efb9e2..0000000
--- a/frontend-next/src/app/api/user/route.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import { NextResponse } from "next/server";
-import { cookies } from "next/headers";
-
-export async function GET(req) {
- var userData = cookies().get("user")?.value || false
- return userData != false? NextResponse.json(JSON.parse(userData)): NextResponse.json({},{status: 203})
-}
\ No newline at end of file
diff --git a/frontend-next/src/app/app/page.js b/frontend-next/src/app/app/page.js
index 585117c..a5081cc 100644
--- a/frontend-next/src/app/app/page.js
+++ b/frontend-next/src/app/app/page.js
@@ -1,10 +1,12 @@
"use client";
// System Imports
import { useState, useEffect } from "react";
-import { database } from "../api/firebase-config";
-import { ref, onValue, set, remove } from "firebase/database";
+import { auth, database } from "../api/firebase-config";
+import { ref, onValue, set, remove, get } from "firebase/database";
import { useBeforeunload } from "react-beforeunload";
+import {useRouter} from "next/router";
import {Marker} from "pigeon-maps";
+import {onAuthStateChanged, signOut} from "firebase/auth"
// Refactored Component Imports
// Data Structure Imports
@@ -41,45 +43,61 @@ function Home() {
const [chatroomUsers, setChatroomUsers] = useState(null); // holds all chatroom users
const [chatroomUsersLoading, setChatroomUsersLoading] = useState(true);
const [markers, setMarkers] = useState([]);
+ const [isAuthenticated, setAuth] = useState(false)
+ const [user, setUser] = useState(null)
+
+ // Authentication
+ useEffect(() => {
+ onAuthStateChanged(auth, (user) => {
+ if (user) {
+ get(ref(database, `users/${user.uid}`))
+ .then((user) => {
+ setUser(user.val())
+ setAuth(true)
+ })
+ } else {
+ setAuth(false)
+ }
+ })
+ }, [])
+
// Grabs user data, saves to user, then lists the users saved rooms
useEffect(() => {
- fetch("/api/user")
- .then((res) => res.json())
- .then((user) => {
- onValue(ref(database, "/users/" + user.uid + "/rooms"), (snapshot) => {
- setRoomLoading(true);
- var rooms = snapshot.val();
- setMyRoomsObj(rooms);
- var roomArr = [];
- var markerArr = markers;
- for (var room in rooms) {
- var newRoom = (
-