diff --git a/src/app/jams/admin/page.tsx b/src/app/jams/admin/page.tsx new file mode 100644 index 0000000..dd66de5 --- /dev/null +++ b/src/app/jams/admin/page.tsx @@ -0,0 +1,124 @@ +import { MainLayout } from "@/layout/MainLayout/MainLayout"; +import { cookies } from "next/headers"; +import { db, JamTable, UserTable } from "@/lib/mastoauth/kysely"; +import { ConditionalNull } from "@/components/utility/Conditional"; +import Link from "next/link"; +import Markdown from "react-markdown"; +import rehypeRaw from "rehype-raw"; +import { JSONJamTable, JSONUserTable } from "@/lib/mastoauth/realtypes"; +import { notFound } from "next/navigation"; + +export default async function Home({ + searchParams +}: { + searchParams: { + until: string + } +}) { + const curDate = Date.now(); + const curPage = parseInt(searchParams?.until) || curDate; + + const cookieStore = cookies(); + const token = cookieStore.get('token')?.value; + let existingUser; + if (token != null) { + let existingToken = await db + .selectFrom('tokens') + .where('tokens.id', '=', token) + .select('owner') + .executeTakeFirst(); + + if (existingToken != null) { + existingUser = await db + .selectFrom('users') + .where('users.id', '=', existingToken.owner) + .selectAll() + .executeTakeFirst(); + } + } + + if (existingUser != null && !existingUser.admin) return notFound(); + + // It's a JSONJamTable. I don't know why TS hates `number` => `string` conversion. + let users = await db + .selectFrom('users') + .where('users.joined', '<=', curPage) + .limit(20) + .orderBy('users.joined', 'asc') + .selectAll() + .execute() as unknown[] as JSONUserTable[]; + + // It's a JSONJamTable. I don't know why TS hates `number` => `string` conversion. + let apps = await db + .selectFrom('apps') + .selectAll() + .execute(); + + return ( + +

cool admin panel !!! :3

+

contact me@abtmtr.link for help

+ +

Logged in as {existingUser?.username}@{existingUser?.instance}

+

Create Jam

+
+

Users

+

use this to ban or promote users

+

PLEASE DO NOT PROMOTE USERS WITHOUT MEOWCATHEORANGE'S PERMISSION

+ {users.map(async (user:JSONUserTable) => { + let jams = await db + .selectFrom('jams') + .where('jams.author_id', '=', user.id) + .select('id') + .orderBy('jams.created', 'asc') + .execute(); + let content = await db + .selectFrom('content') + .where('content.author_id', '=', user.id) + .select('id') + .orderBy('content.submitted', 'asc') + .execute(); + let judgements = await db + .selectFrom('judgements') + .where('judgements.author_id', '=', user.id) + .select('id') + .orderBy('judgements.published', 'asc') + .execute(); + + return (
+

{user.username}@{user.instance}

+

{user.url}

+

{user.banned ? <>BANNED - : <>}{user.admin ? <>ADMIN - : <>}Joined {new Date(parseInt(user.joined)).toDateString()}

+

{jams.length} jam{jams.length != 1 && "s"}, {content.length} submission{content.length != 1 && "s"}, {judgements.length} judgement{judgements.length != 1 && "s"}

+

Edit user - Delete user

+
); + })} +
+ + Later + + {/* */} + Earlier + {/* */} +
+

Apps

+

apps stored in the database

+

if sign-in breaks, it might be one of these

+

contact me@abtmtr.link if sign-in breaks

+ {apps.map(async (app) => { + + return (
+

{app.instance_domain}

+

Client ID: {app.client_id}

+

Client Secret: {app.client_secret}

+

Redirect URI: {app.redirect_uri}

+

Scopes: read

+
); + })} +
+ ) +} \ No newline at end of file diff --git a/src/app/jams/api/content/[content]/judgements/route.ts b/src/app/jams/api/content/[content]/judgements/route.ts index 41c3c6f..adbcadc 100644 --- a/src/app/jams/api/content/[content]/judgements/route.ts +++ b/src/app/jams/api/content/[content]/judgements/route.ts @@ -24,6 +24,7 @@ export async function GET(request: NextRequest, {params}: {params: {content: str .where('judgements.content_id', '=', id) .where('judgements.published', '<', until) .limit(20) + .orderBy('judgements.published', 'asc') .selectAll() .execute(); diff --git a/src/app/jams/api/content/route.ts b/src/app/jams/api/content/route.ts index 65a07ea..005958f 100644 --- a/src/app/jams/api/content/route.ts +++ b/src/app/jams/api/content/route.ts @@ -9,6 +9,7 @@ export async function GET(request: NextRequest) { .selectFrom('content') .where('content.submitted', '<', until) .limit(20) + .orderBy('content.submitted', 'asc') .selectAll() .execute(); diff --git a/src/app/jams/api/jams/[jam]/content/route.ts b/src/app/jams/api/jams/[jam]/content/route.ts index 3730592..3017ee0 100644 --- a/src/app/jams/api/jams/[jam]/content/route.ts +++ b/src/app/jams/api/jams/[jam]/content/route.ts @@ -23,6 +23,7 @@ export async function GET(request: NextRequest, {params}: {params: {jam: string} .selectFrom('content') .where('content.submitted', '<', until) .limit(20) + .orderBy('content.submitted', 'asc') .selectAll() .execute(); diff --git a/src/app/jams/api/jams/route.ts b/src/app/jams/api/jams/route.ts index 21fcef2..670b5ca 100644 --- a/src/app/jams/api/jams/route.ts +++ b/src/app/jams/api/jams/route.ts @@ -9,6 +9,7 @@ export async function GET(request: NextRequest) { .selectFrom('jams') .where('jams.created', '<', until) .limit(20) + .orderBy('jams.created', 'asc') .selectAll() .execute(); diff --git a/src/app/jams/api/users/[user]/content/route.ts b/src/app/jams/api/users/[user]/content/route.ts index 89dd568..0b2ee38 100644 --- a/src/app/jams/api/users/[user]/content/route.ts +++ b/src/app/jams/api/users/[user]/content/route.ts @@ -23,6 +23,7 @@ export async function GET(request: NextRequest, {params}: {params: {user: string .selectFrom('content') .where('content.submitted', '<', until) .limit(20) + .orderBy('content.submitted', 'asc') .selectAll() .execute(); diff --git a/src/app/jams/api/users/[user]/jams/route.ts b/src/app/jams/api/users/[user]/jams/route.ts index 128a871..033b15f 100644 --- a/src/app/jams/api/users/[user]/jams/route.ts +++ b/src/app/jams/api/users/[user]/jams/route.ts @@ -22,6 +22,7 @@ export async function GET(request: NextRequest, {params}: { params: {user: strin .where('jams.created', '<', until) .where('jams.author_id', '=', id) .limit(20) + .orderBy('jams.created', 'asc') .selectAll() .execute(); diff --git a/src/app/jams/api/users/[user]/judgements/route.ts b/src/app/jams/api/users/[user]/judgements/route.ts index fca7946..32d0980 100644 --- a/src/app/jams/api/users/[user]/judgements/route.ts +++ b/src/app/jams/api/users/[user]/judgements/route.ts @@ -24,6 +24,7 @@ export async function GET(request: NextRequest, {params}: {params: {user: string .where('judgements.author_id', '=', id) .where('judgements.published', '<', until) .limit(20) + .orderBy('judgements.published', 'asc') .selectAll() .execute(); diff --git a/src/app/jams/api/users/route.ts b/src/app/jams/api/users/route.ts index e719c47..b3f4ef3 100644 --- a/src/app/jams/api/users/route.ts +++ b/src/app/jams/api/users/route.ts @@ -7,6 +7,7 @@ export async function GET(request: NextRequest) { .selectFrom('users') .where('users.joined', '<', until) .limit(20) + .orderBy('users.joined', 'asc') .selectAll() .execute(); diff --git a/src/app/jams/content/[content]/page.tsx b/src/app/jams/content/[content]/page.tsx index 09ff06a..54360bd 100644 --- a/src/app/jams/content/[content]/page.tsx +++ b/src/app/jams/content/[content]/page.tsx @@ -77,6 +77,7 @@ export default async function Home({ .where('judgements.content_id', '=', content.id) .where('judgements.published', '<=', curPage) .limit(20) + .orderBy('judgements.published', 'asc') .selectAll() .execute() as unknown[] as JSONJudgementTable[]; diff --git a/src/app/jams/jam/[jam]/page.tsx b/src/app/jams/jam/[jam]/page.tsx index 1d385b5..2b7678e 100644 --- a/src/app/jams/jam/[jam]/page.tsx +++ b/src/app/jams/jam/[jam]/page.tsx @@ -69,6 +69,7 @@ export default async function Home({ .where('content.jam_id', '=', jam.id) .where('content.submitted', '<=', curPage) .limit(20) + .orderBy('content.submitted', 'asc') .selectAll() .execute() as unknown[] as JSONContentTable[]; diff --git a/src/app/jams/page.tsx b/src/app/jams/page.tsx index 8cdc4c2..6bdcbd1 100644 --- a/src/app/jams/page.tsx +++ b/src/app/jams/page.tsx @@ -41,6 +41,7 @@ export default async function Home({ .selectFrom('jams') .where('jams.created', '<=', curPage) .limit(20) + .orderBy('jams.created', 'asc') .selectAll() .execute() as unknown[] as JSONJamTable[]; @@ -53,7 +54,7 @@ export default async function Home({

Log in with the Fediverse

- +

Tested on Mastodon, GoToSocial, Pleroma, and Misskey

diff --git a/src/app/jams/user/[user]/page.tsx b/src/app/jams/user/[user]/page.tsx index 187ab7f..e8e30f4 100644 --- a/src/app/jams/user/[user]/page.tsx +++ b/src/app/jams/user/[user]/page.tsx @@ -59,6 +59,7 @@ export default async function Home({ .where('content.author_id', '=', user.id) .where('content.submitted', '<=', curPage) .limit(20) + .orderBy('content.submitted', 'asc') .selectAll() .execute() as unknown[] as JSONContentTable[]; @@ -67,6 +68,7 @@ export default async function Home({ .where('jams.author_id', '=', user.id) .where('jams.created', '<=', curPage) .limit(20) + .orderBy('jams.created', 'asc') .selectAll() .execute() as unknown[] as JSONJamTable[]; @@ -75,6 +77,7 @@ export default async function Home({ .where('judgements.author_id', '=', user.id) .where('judgements.published', '<=', curPage) .limit(20) + .orderBy('judgements.published', 'asc') .selectAll() .execute() as unknown[] as JSONJudgementTable[];