rewrite website
This commit is contained in:
16
src/pages/admin/admins/index.astro
Normal file
16
src/pages/admin/admins/index.astro
Normal file
@@ -0,0 +1,16 @@
|
||||
---
|
||||
import AdminLayout from '@layouts/admin/AdminLayout.astro';
|
||||
import Admins from '@app/admin/admins/Admins.svelte';
|
||||
import SidebarActions from '@app/admin/admins/SidebarActions.svelte';
|
||||
import { Session } from '@util/session.ts';
|
||||
import { Permissions } from '@util/permissions.ts';
|
||||
import { BASE_PATH } from 'astro:env/server';
|
||||
|
||||
const session = Session.sessionFromCookies(Astro.cookies, Permissions.Admin);
|
||||
if (!session) return Astro.redirect(`${BASE_PATH}/admin`);
|
||||
---
|
||||
|
||||
<AdminLayout title="Website Admins">
|
||||
<SidebarActions slot="actions" client:load />
|
||||
<Admins client:load />
|
||||
</AdminLayout>
|
||||
16
src/pages/admin/admins/strike_reasons.astro
Normal file
16
src/pages/admin/admins/strike_reasons.astro
Normal file
@@ -0,0 +1,16 @@
|
||||
---
|
||||
import { Session } from '@util/session';
|
||||
import { Permissions } from '@util/permissions';
|
||||
import { BASE_PATH } from 'astro:env/server';
|
||||
import AdminLayout from '@layouts/admin/AdminLayout.astro';
|
||||
import SidebarActions from '@app/admin/strikeReasons/SidebarActions.svelte';
|
||||
import StrikeReasons from '@app/admin/strikeReasons/StrikeReasons.svelte';
|
||||
|
||||
const session = Session.sessionFromCookies(Astro.cookies, Permissions.Reports);
|
||||
if (!session) return Astro.redirect(`${BASE_PATH}/admin`);
|
||||
---
|
||||
|
||||
<AdminLayout title="Reports">
|
||||
<SidebarActions slot="actions" client:load />
|
||||
<StrikeReasons client:load />
|
||||
</AdminLayout>
|
||||
14
src/pages/admin/feedback.astro
Normal file
14
src/pages/admin/feedback.astro
Normal file
@@ -0,0 +1,14 @@
|
||||
---
|
||||
import Feedback from '@app/admin/feedback/Feedback.svelte';
|
||||
import AdminLayout from '@layouts/admin/AdminLayout.astro';
|
||||
import { Session } from '@util/session.ts';
|
||||
import { Permissions } from '@util/permissions.ts';
|
||||
import { BASE_PATH } from 'astro:env/server';
|
||||
|
||||
const session = Session.sessionFromCookies(Astro.cookies, Permissions.Feedback);
|
||||
if (!session) return Astro.redirect(`${BASE_PATH}/admin`);
|
||||
---
|
||||
|
||||
<AdminLayout title="Feedback">
|
||||
<Feedback client:load />
|
||||
</AdminLayout>
|
||||
10
src/pages/admin/index.astro
Normal file
10
src/pages/admin/index.astro
Normal file
@@ -0,0 +1,10 @@
|
||||
---
|
||||
import { Session } from '@util/session.ts';
|
||||
import { BASE_PATH } from 'astro:env/server';
|
||||
import AdminLayout from '@layouts/admin/AdminLayout.astro';
|
||||
|
||||
const session = Session.sessionFromCookies(Astro.cookies);
|
||||
if (!session) return Astro.redirect(`${BASE_PATH}/admin/login`);
|
||||
---
|
||||
|
||||
<AdminLayout title="Admin Panel" />
|
||||
49
src/pages/admin/login.astro
Normal file
49
src/pages/admin/login.astro
Normal file
@@ -0,0 +1,49 @@
|
||||
---
|
||||
import AdminLoginLayout from '@layouts/admin/AdminLoginLayout.astro';
|
||||
import Password from '@components/input/Password.svelte';
|
||||
import Input from '@components/input/Input.svelte';
|
||||
import Popup from '@components/popup/Popup.svelte';
|
||||
---
|
||||
|
||||
<AdminLoginLayout title="Login">
|
||||
<div class="flex justify-center items-center w-full h-screen">
|
||||
<div class="card w-96 px-6 py-6 shadow-lg">
|
||||
<h1 class="text-3xl text-center">Admin Login</h1>
|
||||
<div class="divider"></div>
|
||||
<form id="login" class="flex flex-col items-center">
|
||||
<div>
|
||||
<Input id="username" type="text" label="Nutzername" required />
|
||||
<Password id="password" label="Passwort" required />
|
||||
</div>
|
||||
<div class="mt-4">
|
||||
<button class="btn btn-neutral">Login</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</AdminLoginLayout>
|
||||
|
||||
<Popup client:idle />
|
||||
|
||||
<script>
|
||||
import { actions } from 'astro:actions';
|
||||
import { popupState } from '@components/popup/Popup';
|
||||
|
||||
const loginForm = document.getElementById('login') as HTMLFormElement;
|
||||
loginForm.addEventListener('submit', async (e) => {
|
||||
e.preventDefault();
|
||||
|
||||
const usernameInput = document.getElementById('username') as HTMLInputElement;
|
||||
const passwordInput = document.getElementById('password') as HTMLInputElement;
|
||||
|
||||
const { error } = await actions.session.login({
|
||||
username: usernameInput.value,
|
||||
password: passwordInput.value
|
||||
});
|
||||
if (error) {
|
||||
popupState.set({ type: 'error', title: 'Fehler', message: error.message });
|
||||
return;
|
||||
}
|
||||
window.location.href = 'admin';
|
||||
});
|
||||
</script>
|
||||
27
src/pages/admin/reports/attachment/[fileHash].ts
Normal file
27
src/pages/admin/reports/attachment/[fileHash].ts
Normal file
@@ -0,0 +1,27 @@
|
||||
import type { APIRoute } from 'astro';
|
||||
import { Session } from '@util/session.ts';
|
||||
import { Permissions } from '@util/permissions.ts';
|
||||
import fs from 'node:fs';
|
||||
import path from 'node:path';
|
||||
import { UPLOAD_PATH } from 'astro:env/server';
|
||||
|
||||
export const GET: APIRoute = async ({ params, cookies }) => {
|
||||
Session.actionSessionFromCookies(cookies, Permissions.Reports);
|
||||
|
||||
if (!UPLOAD_PATH) return new Response(null, { status: 404 });
|
||||
|
||||
const fileHash = params.fileHash as string;
|
||||
const filePath = path.join(UPLOAD_PATH, fileHash);
|
||||
|
||||
if (!fs.existsSync(filePath)) return new Response(null, { status: 404 });
|
||||
|
||||
const fileStat = fs.statSync(filePath);
|
||||
const fileStream = fs.createReadStream(filePath);
|
||||
|
||||
return new Response(fileStream as any, {
|
||||
status: 200,
|
||||
headers: {
|
||||
'Content-Length': fileStat.size.toString()
|
||||
}
|
||||
});
|
||||
};
|
||||
16
src/pages/admin/reports/index.astro
Normal file
16
src/pages/admin/reports/index.astro
Normal file
@@ -0,0 +1,16 @@
|
||||
---
|
||||
import { Session } from '@util/session';
|
||||
import { Permissions } from '@util/permissions';
|
||||
import { BASE_PATH } from 'astro:env/server';
|
||||
import AdminLayout from '@layouts/admin/AdminLayout.astro';
|
||||
import SidebarActions from '@app/admin/reports/SidebarActions.svelte';
|
||||
import Reports from '@app/admin/reports/Reports.svelte';
|
||||
|
||||
const session = Session.sessionFromCookies(Astro.cookies, Permissions.Reports);
|
||||
if (!session) return Astro.redirect(`${BASE_PATH}/admin`);
|
||||
---
|
||||
|
||||
<AdminLayout title="Reports">
|
||||
<SidebarActions slot="actions" client:load />
|
||||
<Reports client:load />
|
||||
</AdminLayout>
|
||||
17
src/pages/admin/settings.astro
Normal file
17
src/pages/admin/settings.astro
Normal file
@@ -0,0 +1,17 @@
|
||||
---
|
||||
import AdminLayout from '@layouts/admin/AdminLayout.astro';
|
||||
import Settings from '@app/admin/settings/Settings.svelte';
|
||||
import { db } from '@db/database.ts';
|
||||
import { Session } from '@util/session.ts';
|
||||
import { Permissions } from '@util/permissions.ts';
|
||||
import { BASE_PATH } from 'astro:env/server';
|
||||
|
||||
const session = Session.sessionFromCookies(Astro.cookies, Permissions.Settings);
|
||||
if (!session) return Astro.redirect(`${BASE_PATH}/admin`);
|
||||
|
||||
const settings = await db.getSettings({});
|
||||
---
|
||||
|
||||
<AdminLayout title="Einstellungen">
|
||||
<Settings {settings} client:load />
|
||||
</AdminLayout>
|
||||
14
src/pages/admin/tools/index.astro
Normal file
14
src/pages/admin/tools/index.astro
Normal file
@@ -0,0 +1,14 @@
|
||||
---
|
||||
import { Session } from '@util/session';
|
||||
import { Permissions } from '@util/permissions';
|
||||
import { BASE_PATH } from 'astro:env/server';
|
||||
import AdminLayout from '@layouts/admin/AdminLayout.astro';
|
||||
import Tools from '@app/admin/tools/Tools.svelte';
|
||||
|
||||
const session = Session.sessionFromCookies(Astro.cookies, Permissions.Tools);
|
||||
if (!session) return Astro.redirect(`${BASE_PATH}/admin`);
|
||||
---
|
||||
|
||||
<AdminLayout title="Reports">
|
||||
<Tools client:load />
|
||||
</AdminLayout>
|
||||
16
src/pages/admin/users/blocked.astro
Normal file
16
src/pages/admin/users/blocked.astro
Normal file
@@ -0,0 +1,16 @@
|
||||
---
|
||||
import AdminLayout from '@layouts/admin/AdminLayout.astro';
|
||||
import BlockedUsers from '@app/admin/blockedUsers/BlockedUsers.svelte';
|
||||
import SidebarActions from '@app/admin/blockedUsers/SidebarActions.svelte';
|
||||
import { Session } from '@util/session.ts';
|
||||
import { Permissions } from '@util/permissions.ts';
|
||||
import { BASE_PATH } from 'astro:env/server';
|
||||
|
||||
const session = Session.sessionFromCookies(Astro.cookies, Permissions.Users);
|
||||
if (!session) return Astro.redirect(`${BASE_PATH}/admin`);
|
||||
---
|
||||
|
||||
<AdminLayout title="Blockierte Nutzer">
|
||||
<SidebarActions slot="actions" client:load />
|
||||
<BlockedUsers client:load />
|
||||
</AdminLayout>
|
||||
16
src/pages/admin/users/index.astro
Normal file
16
src/pages/admin/users/index.astro
Normal file
@@ -0,0 +1,16 @@
|
||||
---
|
||||
import AdminLayout from '@layouts/admin/AdminLayout.astro';
|
||||
import Users from '@app/admin/users/Users.svelte';
|
||||
import SidebarActions from '@app/admin/users/SidebarActions.svelte';
|
||||
import { Session } from '@util/session.ts';
|
||||
import { Permissions } from '@util/permissions.ts';
|
||||
import { BASE_PATH } from 'astro:env/server';
|
||||
|
||||
const session = Session.sessionFromCookies(Astro.cookies, Permissions.Users);
|
||||
if (!session) return Astro.redirect(`${BASE_PATH}/admin`);
|
||||
---
|
||||
|
||||
<AdminLayout title="Registrierte Nutzer">
|
||||
<SidebarActions slot="actions" client:load />
|
||||
<Users client:load />
|
||||
</AdminLayout>
|
||||
Reference in New Issue
Block a user