aboutsummaryrefslogtreecommitdiff
path: root/web/src/app
diff options
context:
space:
mode:
authorAndrew Lee <andrew@alee14.me>2025-03-25 14:13:06 -0400
committerAndrew Lee <andrew@alee14.me>2025-03-25 14:13:06 -0400
commit1c12d378d66b92b1674acd17640f2bac752da289 (patch)
treebc8a1ef5047be1ed2400f2204a0222a840375851 /web/src/app
parentad768e2b25b58d62a44aa2daeb1429a651d488e5 (diff)
downloadAleeBot-1c12d378d66b92b1674acd17640f2bac752da289.tar.gz
AleeBot-1c12d378d66b92b1674acd17640f2bac752da289.tar.bz2
AleeBot-1c12d378d66b92b1674acd17640f2bac752da289.zip
Converted public dashboard to admin dashboard; Made API have a consistent output message
Diffstat (limited to 'web/src/app')
-rw-r--r--web/src/app/api/auth/[...nextauth]/route.js2
-rw-r--r--web/src/app/components/Guilds.jsx25
-rw-r--r--web/src/app/components/Navbar.jsx25
-rw-r--r--web/src/app/components/sign-in.jsx14
-rw-r--r--web/src/app/components/sign-out.jsx11
-rw-r--r--web/src/app/dashboard/page.js65
-rw-r--r--web/src/app/page.js42
7 files changed, 89 insertions, 95 deletions
diff --git a/web/src/app/api/auth/[...nextauth]/route.js b/web/src/app/api/auth/[...nextauth]/route.js
deleted file mode 100644
index 5951f83..0000000
--- a/web/src/app/api/auth/[...nextauth]/route.js
+++ /dev/null
@@ -1,2 +0,0 @@
-import { handlers } from "@/lib/auth"
-export const { GET, POST } = handlers
diff --git a/web/src/app/components/Guilds.jsx b/web/src/app/components/Guilds.jsx
deleted file mode 100644
index 38626e4..0000000
--- a/web/src/app/components/Guilds.jsx
+++ /dev/null
@@ -1,25 +0,0 @@
-
-export default async function Guilds({session}) {
-
- const response = await fetch("https://discord.com/api/users/@me/guilds", {
- headers: {
- Authorization: `Bearer ${session.accessToken}`,
- },
- });
- const guilds = await response.json();
-
- const ADMINISTRATOR = 0x0000000000000008;
- const MANAGE_GUILD = 0x00000020;
-
- const filteredGuilds = guilds.filter((guild) => {
- // Convert permissions string to a BigInt for bitwise operations
- const permissions = BigInt(guild.permissions);
- // Check if user is owner, has ADMINISTRATOR or MANAGE_GUILD permissions
- return guild.owner ||
- (permissions & BigInt(ADMINISTRATOR)) === BigInt(ADMINISTRATOR) ||
- (permissions & BigInt(MANAGE_GUILD)) === BigInt(MANAGE_GUILD); });
-
- return filteredGuilds.map((guild) => (
- <div key={guild.id} className="p-1">{guild.name}</div>
- ))
-}
diff --git a/web/src/app/components/Navbar.jsx b/web/src/app/components/Navbar.jsx
new file mode 100644
index 0000000..242175c
--- /dev/null
+++ b/web/src/app/components/Navbar.jsx
@@ -0,0 +1,25 @@
+import SignOut from "@/app/components/sign-out";
+
+export default function Navbar() {
+ return (
+ <nav className="bg-gray-900 text-white">
+ <div className="max-w-screen-xl flex items-center justify-between mx-auto p-4">
+ <div className="flex items-center space-x-4">
+ <h1 className="text-xl font-medium">AleeBot</h1>
+ <ul>
+ <li className="inline-block mx-2">Guilds</li>
+ <li className="inline-block mx-2">Quotes</li>
+ <li className="inline-block mx-2">Settings</li>
+ </ul>
+ </div>
+
+ <div className="flex items-center space-x-4">
+ <span>Uptime: 1 day</span>
+ <span>API v(version)</span>
+ <span>4.0.0 Beta</span>
+ <SignOut />
+ </div>
+ </div>
+ </nav>
+ )
+}
diff --git a/web/src/app/components/sign-in.jsx b/web/src/app/components/sign-in.jsx
deleted file mode 100644
index 3d7142f..0000000
--- a/web/src/app/components/sign-in.jsx
+++ /dev/null
@@ -1,14 +0,0 @@
-import { signIn } from "@/lib/auth"
-
-export default function SignIn() {
- return (
- <form
- action={async () => {
- "use server"
- await signIn("discord")
- }}
- >
- <button type="submit" className="bg-discord-blurple p-3 rounded-md hover:bg-discord-blurple">Login with Discord</button>
- </form>
- )
-}
diff --git a/web/src/app/components/sign-out.jsx b/web/src/app/components/sign-out.jsx
index 69162a4..dd6693d 100644
--- a/web/src/app/components/sign-out.jsx
+++ b/web/src/app/components/sign-out.jsx
@@ -1,14 +1,5 @@
-import { signOut } from "@/lib/auth"
-
export default function SignOut() {
return (
- <form
- action={async () => {
- "use server"
- await signOut("discord")
- }}
- >
- <button type="submit">Log out</button>
- </form>
+ <button type="submit" className="py-2 px-4 rounded-md text-md bg-red-700 hover:bg-red-500">Sign out</button>
)
}
diff --git a/web/src/app/dashboard/page.js b/web/src/app/dashboard/page.js
index bab3bd8..a252958 100644
--- a/web/src/app/dashboard/page.js
+++ b/web/src/app/dashboard/page.js
@@ -1,39 +1,44 @@
-import { redirect } from "next/navigation";
-import { auth } from "@/lib/auth";
-import SignOut from "@/app/components/sign-out";
-import Guilds from "@/app/components/Guilds";
-
-export default async function Home() {
- const session = await auth();
- if (!session) redirect("/");
+import Navbar from "@/app/components/Navbar";
+export default function Dashboard() {
return (
<>
- <nav className="bg-gray-900 text-white">
- <div className="max-w-screen-xl flex items-center justify-between mx-auto p-4">
- <div className="flex items-center">
- <h1 className="text-xl font-medium">AleeBot</h1>
+ <Navbar />
+ <div className="flex flex-col gap-4 p-12">
+ <h1 className="text-3xl">Guilds</h1>
+ <div className="grid grid-cols-2 md:grid-cols-4 gap-4">
+ <div className="p-4 bg-gray-900 rounded-md">
+ <h2 className="text-lg font-medium">Server 1</h2>
+ <p>ID: 23893249843983489 - Members: 30</p>
+ <span>Leave</span> {/* Add an "are you sure prompt" */}
</div>
-
- <div className="flex items-center space-x-4">
- <p className="text-sm md:text-base">Welcome {session.user?.username}!</p>
- <SignOut />
+ <div className="p-4 bg-gray-900 rounded-md">
+ <h2 className="text-lg font-medium">Server 2</h2>
+ <p>ID: 23893249843983489 - Members: 30</p>
+ <span>Leave</span>
+ </div>
+ <div className="p-4 bg-gray-900 rounded-md">
+ <h2 className="text-lg font-medium">Server 3</h2>
+ <p>ID: 23893249843983489 - Members: 30</p>
+ <span>Leave</span>
+ </div>
+ <div className="p-4 bg-gray-900 rounded-md">
+ <h2 className="text-lg font-medium">Server 4</h2>
+ <p>ID: 23893249843983489 - Members: 30</p>
+ <span>Leave</span>
+ </div>
+ <div className="p-4 bg-gray-900 rounded-md">
+ <h2 className="text-lg font-medium">Server 5</h2>
+ <p>ID: 23893249843983489 - Members: 30</p>
+ <span>Leave</span>
+ </div>
+ <div className="p-4 bg-gray-900 rounded-md">
+ <h2 className="text-lg font-medium">Server 6</h2>
+ <p>ID: 23893249843983489 - Members: 30</p>
+ <span>Leave</span>
</div>
- </div>
- </nav>
- <div className="flex">
- <div>
- <div>Settings</div>
- <Guilds session={session} />
- </div>
- <div>
- <h1 className="text-2xl">Logging</h1>
- <h2>Channel 1</h2>
- <h2>Channel 2</h2>
- <h1 className="text-2xl">Quote of the Day</h1>
- <h1 className="text-2xl">LLM Chatbot</h1>
</div>
</div>
</>
- )
+ );
}
diff --git a/web/src/app/page.js b/web/src/app/page.js
index 76e5d27..99556e8 100644
--- a/web/src/app/page.js
+++ b/web/src/app/page.js
@@ -1,19 +1,33 @@
-import { redirect } from "next/navigation";
-import { auth } from "@/lib/auth";
+export default function Home() {
-export default async function Home() {
- const session = await auth();
- if (session) redirect("/dashboard");
- return (
- <>
- <main className="flex justify-center items-center h-screen">
- <form className="flex flex-col gap-4 w-80">
- <input for='username' type='text' placeholder='Username' />
- <input for='password' type='password' placeholder='Password' />
- <input for='api' type='url' placeholder='API URL' />
- <input type="submit" value="Login" />
+ return (
+ <main className="flex flex-col space-y-5 justify-center items-center h-screen">
+ <h1 className="text-4xl font-medium">AleeBot</h1>
+ <form className="flex flex-col gap-4 w-80">
+ <input
+ name="username"
+ type="text"
+ placeholder="Username"
+ required
+ />
+ <input
+ name="password"
+ type="password"
+ placeholder="Password"
+ required
+ />
+ <input
+ name="apiUrl"
+ type="url"
+ placeholder="API URL"
+ required
+ />
+ <button
+ type="submit"
+ className="bg-blue-500 hover:bg-blue-700 text-white py-2 px-4 rounded"
+ >Login
+ </button>
</form>
</main>
- </>
);
}