From 2c783bdb703e4ad69c9f3f846c2c9e6a527ccc80 Mon Sep 17 00:00:00 2001 From: Andrew Lee Date: Tue, 25 Mar 2025 17:23:30 -0400 Subject: Implemented admin dashboard --- web/src/app/page.js | 162 ++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 132 insertions(+), 30 deletions(-) (limited to 'web/src/app/page.js') diff --git a/web/src/app/page.js b/web/src/app/page.js index 99556e8..3b6ebd9 100644 --- a/web/src/app/page.js +++ b/web/src/app/page.js @@ -1,33 +1,135 @@ +'use client'; +import { useState, useEffect } from 'react'; +import { useRouter } from 'next/navigation'; +import { fetchWithAuth } from '@/utils/api'; + export default function Home() { + const [formData, setFormData] = useState({ + username: '', + password: '', + url: '' + }); + const [error, setError] = useState(''); + const [loading, setLoading] = useState(true); + const router = useRouter(); + + useEffect(() => { + // Check if token and API URL exist + const token = localStorage.getItem('token'); + const apiUrl = localStorage.getItem('apiUrl'); + + if (token && apiUrl) { + // Verify token is still valid + fetchWithAuth('/api/servers') + .then(response => { + if (response.ok) { + router.push('/guilds'); + } else { + // Clear invalid token + localStorage.removeItem('token'); + localStorage.removeItem('apiUrl'); + setLoading(false); + } + }) + .catch(() => { + // Error means token is invalid or other issue + localStorage.removeItem('token'); + localStorage.removeItem('apiUrl'); + setLoading(false); + }); + } else { + setLoading(false); + } + }, [router]); + + const handleChange = (e) => { + setFormData({ ...formData, [e.target.name]: e.target.value }); + }; + + const handleSubmit = async (e) => { + e.preventDefault(); + setLoading(true); + setError(''); + + try { + const response = await fetch(`${formData.url}/api/login`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + username: formData.username, + password: formData.password + }), + }); + + const data = await response.json(); + + if (!response.ok) { + throw new Error(data.message || 'Login failed'); + } + + // Save token and API URL to localStorage + localStorage.setItem('token', data.token); + localStorage.setItem('apiUrl', formData.url); + + // Redirect to guilds page + router.push('/guilds'); + } catch (err) { + setError(err.message); + } finally { + setLoading(false); + } + }; + + if (loading) { + return ( +
+

Loading...

+
+ ); + } - return ( -
-

AleeBot

-
- - - - -
-
- ); + return ( +
+

AleeBot

+ {error &&

{error}

} +
+ + + + +
+
+ ); } -- cgit v1.2.3