merge BASE_URL and BASE_PASH into ROOT_URL
This commit is contained in:
1 parent
e0a0b188ad
commit
e22c664aae
22 files changed
+56
-46
No files matched your search
+1
-1
@@ -14,4 +14,4 @@ DISCORD_LINK=http://example.com
|
|||||||
PAYPAL_LINK=http://example.com
|
PAYPAL_LINK=http://example.com
|
||||||
SERVER_IP=1.1.1.1
|
SERVER_IP=1.1.1.1
|
||||||
|
|
||||||
BASE_PATH=http://localhost:4321
|
ROOT_URL=http://localhost:4321/craftattack
|
||||||
@@ -31,7 +31,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Build website
|
- name: Build website
|
||||||
env:
|
env:
|
||||||
BASE_PATH: ${{ vars.BASE_PATH }}
|
ROOT_URL: ${{ vars.ROOT_URL }}
|
||||||
run: npm run build
|
run: npm run build
|
||||||
|
|
||||||
- name: Deploy
|
- name: Deploy
|
||||||
|
|||||||
+2
-3
@@ -11,7 +11,7 @@ import node from '@astrojs/node';
|
|||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
output: 'server',
|
output: 'server',
|
||||||
prefetch: true,
|
prefetch: true,
|
||||||
base: process.env.BASE_PATH ?? undefined,
|
base: process.env.ROOT_URL ? new URL(process.env.ROOT_URL).pathname.replace(/^\/+/, '') : undefined,
|
||||||
|
|
||||||
security: {
|
security: {
|
||||||
checkOrigin: false
|
checkOrigin: false
|
||||||
@@ -54,8 +54,7 @@ export default defineConfig({
|
|||||||
|
|
||||||
DATABASE_URI: envField.string({ context: 'server', access: 'secret' }),
|
DATABASE_URI: envField.string({ context: 'server', access: 'secret' }),
|
||||||
|
|
||||||
BASE_HOST: envField.string({ context: 'server', access: 'secret', default: 'http://localhost:4321' }),
|
ROOT_URL: envField.string({ context: 'server', access: 'secret', default: 'http://localhost:4321' }),
|
||||||
BASE_PATH: envField.string({ context: 'server', access: 'secret', default: '/' }),
|
|
||||||
|
|
||||||
OPENXBL_API_KEY: envField.string({ context: 'server', access: 'secret', optional: true })
|
OPENXBL_API_KEY: envField.string({ context: 'server', access: 'secret', optional: true })
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,6 +28,7 @@
|
|||||||
let
|
let
|
||||||
dbPort = 3306;
|
dbPort = 3306;
|
||||||
webPort = 4321;
|
webPort = 4321;
|
||||||
|
webBasePath = "/craftattack";
|
||||||
dbName = "website";
|
dbName = "website";
|
||||||
dbUser = "website";
|
dbUser = "website";
|
||||||
dbPassword = "website";
|
dbPassword = "website";
|
||||||
@@ -49,8 +50,7 @@
|
|||||||
PAYPAL_LINK = "http://example.com";
|
PAYPAL_LINK = "http://example.com";
|
||||||
SERVER_IP = "example.com";
|
SERVER_IP = "example.com";
|
||||||
|
|
||||||
BASE_HOST = "http://localhost:4321";
|
ROOT_URL = "http://localhost:${toString webPort}${webBasePath}";
|
||||||
BASE_PATH = "/craftattack";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
webRun = pkgs.writeShellApplication {
|
webRun = pkgs.writeShellApplication {
|
||||||
@@ -114,7 +114,7 @@
|
|||||||
readiness_probe.http_get = {
|
readiness_probe.http_get = {
|
||||||
host = "127.0.0.1";
|
host = "127.0.0.1";
|
||||||
port = webPort;
|
port = webPort;
|
||||||
path = devEnv.BASE_PATH;
|
path = webBasePath;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { int, mysqlTable, varchar } from 'drizzle-orm/mysql-core';
|
|||||||
import { user } from '@db/schema/user.ts';
|
import { user } from '@db/schema/user.ts';
|
||||||
import { eq } from 'drizzle-orm';
|
import { eq } from 'drizzle-orm';
|
||||||
import { generateRandomString } from '@util/random.ts';
|
import { generateRandomString } from '@util/random.ts';
|
||||||
import { BASE_HOST, BASE_PATH } from 'astro:env/server';
|
import { siteUrl } from '@util/url.ts';
|
||||||
|
|
||||||
type Database = MySql2Database<{ directSignup: typeof directSignup }>;
|
type Database = MySql2Database<{ directSignup: typeof directSignup }>;
|
||||||
|
|
||||||
@@ -36,7 +36,7 @@ export async function addDirectSignup(db: Database, _values: AddDirectSignupReq)
|
|||||||
code: code
|
code: code
|
||||||
});
|
});
|
||||||
|
|
||||||
return { code: code, url: `${BASE_HOST}/${BASE_PATH}/signup/${code}` };
|
return { code: code, url: siteUrl(`signup/${code}`) };
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function setDirectSignupUser(db: Database, values: SetDirectSignupUserReq) {
|
export async function setDirectSignupUser(db: Database, values: SetDirectSignupUserReq) {
|
||||||
@@ -61,7 +61,7 @@ export async function getDirectSignups(db: Database, _values: GetDirectSignupsRe
|
|||||||
.from(directSignup)
|
.from(directSignup)
|
||||||
.leftJoin(user, eq(directSignup.userId, user.id));
|
.leftJoin(user, eq(directSignup.userId, user.id));
|
||||||
|
|
||||||
return directSignups.map((d) => ({ ...d, url: `${BASE_PATH}/signup/${d.code}` }));
|
return directSignups.map((d) => ({ ...d, url: siteUrl(`signup/${d.code}`) }));
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getDirectSignupByCode(db: Database, values: GetDirectSignupByCodeReq) {
|
export async function getDirectSignupByCode(db: Database, values: GetDirectSignupByCodeReq) {
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import type { MySql2Database } from 'drizzle-orm/mysql2';
|
|||||||
import { and, desc, eq, isNotNull, like } from 'drizzle-orm';
|
import { and, desc, eq, isNotNull, like } from 'drizzle-orm';
|
||||||
import { reportStatus } from './reportStatus.ts';
|
import { reportStatus } from './reportStatus.ts';
|
||||||
import { generateRandomString } from '@util/random.ts';
|
import { generateRandomString } from '@util/random.ts';
|
||||||
import { BASE_HOST, BASE_PATH } from 'astro:env/server';
|
import { siteUrl } from '@util/url.ts';
|
||||||
import { strikeReason } from '@db/schema/strikeReason.ts';
|
import { strikeReason } from '@db/schema/strikeReason.ts';
|
||||||
import { strike } from '@db/schema/strike.ts';
|
import { strike } from '@db/schema/strike.ts';
|
||||||
import { user } from '@db/schema/user.ts';
|
import { user } from '@db/schema/user.ts';
|
||||||
@@ -70,7 +70,7 @@ export async function addReport(db: Database, values: AddReportReq) {
|
|||||||
})
|
})
|
||||||
.$returningId();
|
.$returningId();
|
||||||
|
|
||||||
return Object.assign(r[0], { url: `${BASE_HOST}/${BASE_PATH}/report/${urlHash}` });
|
return Object.assign(r[0], { url: siteUrl(`report/${urlHash}`) });
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function editReport(db: Database, values: EditReportReq) {
|
export async function editReport(db: Database, values: EditReportReq) {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
---
|
---
|
||||||
import '@styles/global.css';
|
import '@styles/global.css';
|
||||||
import { ClientRouter } from 'astro:transitions';
|
import { ClientRouter } from 'astro:transitions';
|
||||||
import { BASE_PATH } from 'astro:env/server';
|
import { siteBase } from '@util/url.ts';
|
||||||
import logo512 from '@assets/img/logo-512.webp';
|
import logo512 from '@assets/img/logo-512.webp';
|
||||||
import favicon from '@assets/favicon.png';
|
import favicon from '@assets/favicon.png';
|
||||||
|
|
||||||
@@ -36,7 +36,7 @@ const { title, description, keywords, openGraph, viewTransition } = Astro.props;
|
|||||||
<slot name="head" />
|
<slot name="head" />
|
||||||
{description && <meta name="description" content={description} />}
|
{description && <meta name="description" content={description} />}
|
||||||
{keywords && <meta name="keywords" content={keywords.join(', ')} />}
|
{keywords && <meta name="keywords" content={keywords.join(', ')} />}
|
||||||
<base href=`${BASE_PATH}/` />
|
<base href={siteBase()} />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<slot />
|
<slot />
|
||||||
|
|||||||
@@ -4,10 +4,10 @@ import Admins from '@app/admin/admins/Admins.svelte';
|
|||||||
import SidebarActions from '@app/admin/admins/SidebarActions.svelte';
|
import SidebarActions from '@app/admin/admins/SidebarActions.svelte';
|
||||||
import { Session } from '@util/session.ts';
|
import { Session } from '@util/session.ts';
|
||||||
import { Permissions } from '@util/permissions.ts';
|
import { Permissions } from '@util/permissions.ts';
|
||||||
import { BASE_PATH } from 'astro:env/server';
|
import { siteUrl } from '@util/url.ts';
|
||||||
|
|
||||||
const session = Session.sessionFromCookies(Astro.cookies, Permissions.Admin);
|
const session = Session.sessionFromCookies(Astro.cookies, Permissions.Admin);
|
||||||
if (!session) return Astro.redirect(`${BASE_PATH}/admin`);
|
if (!session) return Astro.redirect(siteUrl('admin'));
|
||||||
---
|
---
|
||||||
|
|
||||||
<AdminLayout title="Website Admins">
|
<AdminLayout title="Website Admins">
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
---
|
---
|
||||||
import { Session } from '@util/session';
|
import { Session } from '@util/session';
|
||||||
import { Permissions } from '@util/permissions';
|
import { Permissions } from '@util/permissions';
|
||||||
import { BASE_PATH } from 'astro:env/server';
|
import { siteUrl } from '@util/url.ts';
|
||||||
import AdminLayout from '@layouts/admin/AdminLayout.astro';
|
import AdminLayout from '@layouts/admin/AdminLayout.astro';
|
||||||
import SidebarActions from '@app/admin/strikeReasons/SidebarActions.svelte';
|
import SidebarActions from '@app/admin/strikeReasons/SidebarActions.svelte';
|
||||||
import StrikeReasons from '@app/admin/strikeReasons/StrikeReasons.svelte';
|
import StrikeReasons from '@app/admin/strikeReasons/StrikeReasons.svelte';
|
||||||
|
|
||||||
const session = Session.sessionFromCookies(Astro.cookies, Permissions.Reports);
|
const session = Session.sessionFromCookies(Astro.cookies, Permissions.Reports);
|
||||||
if (!session) return Astro.redirect(`${BASE_PATH}/admin`);
|
if (!session) return Astro.redirect(siteUrl('admin'));
|
||||||
---
|
---
|
||||||
|
|
||||||
<AdminLayout title="Reports">
|
<AdminLayout title="Reports">
|
||||||
|
|||||||
@@ -3,11 +3,11 @@ import Feedback from '@app/admin/feedback/Feedback.svelte';
|
|||||||
import AdminLayout from '@layouts/admin/AdminLayout.astro';
|
import AdminLayout from '@layouts/admin/AdminLayout.astro';
|
||||||
import { Session } from '@util/session.ts';
|
import { Session } from '@util/session.ts';
|
||||||
import { Permissions } from '@util/permissions.ts';
|
import { Permissions } from '@util/permissions.ts';
|
||||||
import { BASE_PATH } from 'astro:env/server';
|
import { siteUrl } from '@util/url.ts';
|
||||||
import SidebarActions from '@app/admin/feedback/SidebarActions.svelte';
|
import SidebarActions from '@app/admin/feedback/SidebarActions.svelte';
|
||||||
|
|
||||||
const session = Session.sessionFromCookies(Astro.cookies, Permissions.Feedback);
|
const session = Session.sessionFromCookies(Astro.cookies, Permissions.Feedback);
|
||||||
if (!session) return Astro.redirect(`${BASE_PATH}/admin`);
|
if (!session) return Astro.redirect(siteUrl('admin'));
|
||||||
---
|
---
|
||||||
|
|
||||||
<AdminLayout title="Feedback">
|
<AdminLayout title="Feedback">
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
---
|
---
|
||||||
import { Session } from '@util/session.ts';
|
import { Session } from '@util/session.ts';
|
||||||
import { BASE_PATH } from 'astro:env/server';
|
import { siteUrl } from '@util/url.ts';
|
||||||
import AdminLayout from '@layouts/admin/AdminLayout.astro';
|
import AdminLayout from '@layouts/admin/AdminLayout.astro';
|
||||||
|
|
||||||
const session = Session.sessionFromCookies(Astro.cookies);
|
const session = Session.sessionFromCookies(Astro.cookies);
|
||||||
if (!session) return Astro.redirect(`${BASE_PATH}/admin/login`);
|
if (!session) return Astro.redirect(siteUrl('admin/login'));
|
||||||
---
|
---
|
||||||
|
|
||||||
<AdminLayout title="Admin Panel" />
|
<AdminLayout title="Admin Panel" />
|
||||||
@@ -1,13 +1,13 @@
|
|||||||
---
|
---
|
||||||
import { Session } from '@util/session';
|
import { Session } from '@util/session';
|
||||||
import { Permissions } from '@util/permissions';
|
import { Permissions } from '@util/permissions';
|
||||||
import { BASE_PATH } from 'astro:env/server';
|
import { siteUrl } from '@util/url.ts';
|
||||||
import AdminLayout from '@layouts/admin/AdminLayout.astro';
|
import AdminLayout from '@layouts/admin/AdminLayout.astro';
|
||||||
import SidebarActions from '@app/admin/reports/SidebarActions.svelte';
|
import SidebarActions from '@app/admin/reports/SidebarActions.svelte';
|
||||||
import Reports from '@app/admin/reports/Reports.svelte';
|
import Reports from '@app/admin/reports/Reports.svelte';
|
||||||
|
|
||||||
const session = Session.sessionFromCookies(Astro.cookies, Permissions.Reports);
|
const session = Session.sessionFromCookies(Astro.cookies, Permissions.Reports);
|
||||||
if (!session) return Astro.redirect(`${BASE_PATH}/admin`);
|
if (!session) return Astro.redirect(siteUrl('admin'));
|
||||||
---
|
---
|
||||||
|
|
||||||
<AdminLayout title="Reports">
|
<AdminLayout title="Reports">
|
||||||
|
|||||||
@@ -4,10 +4,10 @@ import Settings from '@app/admin/settings/Settings.svelte';
|
|||||||
import { db } from '@db/database.ts';
|
import { db } from '@db/database.ts';
|
||||||
import { Session } from '@util/session.ts';
|
import { Session } from '@util/session.ts';
|
||||||
import { Permissions } from '@util/permissions.ts';
|
import { Permissions } from '@util/permissions.ts';
|
||||||
import { BASE_PATH } from 'astro:env/server';
|
import { siteUrl } from '@util/url.ts';
|
||||||
|
|
||||||
const session = Session.sessionFromCookies(Astro.cookies, Permissions.Settings);
|
const session = Session.sessionFromCookies(Astro.cookies, Permissions.Settings);
|
||||||
if (!session) return Astro.redirect(`${BASE_PATH}/admin`);
|
if (!session) return Astro.redirect(siteUrl('admin'));
|
||||||
|
|
||||||
const settings = await db.getSettings({});
|
const settings = await db.getSettings({});
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
---
|
---
|
||||||
import { Session } from '@util/session';
|
import { Session } from '@util/session';
|
||||||
import { Permissions } from '@util/permissions';
|
import { Permissions } from '@util/permissions';
|
||||||
import { BASE_PATH } from 'astro:env/server';
|
import { siteUrl } from '@util/url.ts';
|
||||||
import AdminLayout from '@layouts/admin/AdminLayout.astro';
|
import AdminLayout from '@layouts/admin/AdminLayout.astro';
|
||||||
import Tools from '@app/admin/tools/Tools.svelte';
|
import Tools from '@app/admin/tools/Tools.svelte';
|
||||||
|
|
||||||
const session = Session.sessionFromCookies(Astro.cookies, Permissions.Tools);
|
const session = Session.sessionFromCookies(Astro.cookies, Permissions.Tools);
|
||||||
if (!session) return Astro.redirect(`${BASE_PATH}/admin`);
|
if (!session) return Astro.redirect(siteUrl('admin'));
|
||||||
---
|
---
|
||||||
|
|
||||||
<AdminLayout title="Tools">
|
<AdminLayout title="Tools">
|
||||||
|
|||||||
@@ -4,10 +4,10 @@ import BlockedUsers from '@app/admin/blockedUsers/BlockedUsers.svelte';
|
|||||||
import SidebarActions from '@app/admin/blockedUsers/SidebarActions.svelte';
|
import SidebarActions from '@app/admin/blockedUsers/SidebarActions.svelte';
|
||||||
import { Session } from '@util/session.ts';
|
import { Session } from '@util/session.ts';
|
||||||
import { Permissions } from '@util/permissions.ts';
|
import { Permissions } from '@util/permissions.ts';
|
||||||
import { BASE_PATH } from 'astro:env/server';
|
import { siteUrl } from '@util/url.ts';
|
||||||
|
|
||||||
const session = Session.sessionFromCookies(Astro.cookies, Permissions.Users);
|
const session = Session.sessionFromCookies(Astro.cookies, Permissions.Users);
|
||||||
if (!session) return Astro.redirect(`${BASE_PATH}/admin`);
|
if (!session) return Astro.redirect(siteUrl('admin'));
|
||||||
---
|
---
|
||||||
|
|
||||||
<AdminLayout title="Blockierte Nutzer">
|
<AdminLayout title="Blockierte Nutzer">
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
---
|
---
|
||||||
import { Session } from '@util/session.ts';
|
import { Session } from '@util/session.ts';
|
||||||
import { Permissions } from '@util/permissions.ts';
|
import { Permissions } from '@util/permissions.ts';
|
||||||
import { BASE_PATH } from 'astro:env/server';
|
import { siteUrl } from '@util/url.ts';
|
||||||
import AdminLayout from '@layouts/admin/AdminLayout.astro';
|
import AdminLayout from '@layouts/admin/AdminLayout.astro';
|
||||||
import SidebarActions from '@app/admin/directInvitations/SidebarActions.svelte';
|
import SidebarActions from '@app/admin/directInvitations/SidebarActions.svelte';
|
||||||
import DirectInvitations from '@app/admin/directInvitations/DirectInvitations.svelte';
|
import DirectInvitations from '@app/admin/directInvitations/DirectInvitations.svelte';
|
||||||
|
|
||||||
const session = Session.sessionFromCookies(Astro.cookies, Permissions.Reports);
|
const session = Session.sessionFromCookies(Astro.cookies, Permissions.Reports);
|
||||||
if (!session) return Astro.redirect(`${BASE_PATH}/admin`);
|
if (!session) return Astro.redirect(siteUrl('admin'));
|
||||||
---
|
---
|
||||||
|
|
||||||
<AdminLayout title="Direkte Einladungen">
|
<AdminLayout title="Direkte Einladungen">
|
||||||
|
|||||||
@@ -4,10 +4,10 @@ import Users from '@app/admin/users/Users.svelte';
|
|||||||
import SidebarActions from '@app/admin/users/SidebarActions.svelte';
|
import SidebarActions from '@app/admin/users/SidebarActions.svelte';
|
||||||
import { Session } from '@util/session.ts';
|
import { Session } from '@util/session.ts';
|
||||||
import { Permissions } from '@util/permissions.ts';
|
import { Permissions } from '@util/permissions.ts';
|
||||||
import { BASE_PATH } from 'astro:env/server';
|
import { siteUrl } from '@util/url.ts';
|
||||||
|
|
||||||
const session = Session.sessionFromCookies(Astro.cookies, Permissions.Users);
|
const session = Session.sessionFromCookies(Astro.cookies, Permissions.Users);
|
||||||
if (!session) return Astro.redirect(`${BASE_PATH}/admin`);
|
if (!session) return Astro.redirect(siteUrl('admin'));
|
||||||
---
|
---
|
||||||
|
|
||||||
<AdminLayout title="Registrierte Nutzer">
|
<AdminLayout title="Registrierte Nutzer">
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { externalApi } from '../_api.ts';
|
import { externalApi } from '../_api.ts';
|
||||||
import { z } from 'astro:schema';
|
import { z } from 'astro:schema';
|
||||||
import { db } from '@db/database.ts';
|
import { db } from '@db/database.ts';
|
||||||
import { BASE_HOST, BASE_PATH } from 'astro:env/server';
|
import { siteUrl } from '@util/url.ts';
|
||||||
|
|
||||||
export const POST = externalApi({
|
export const POST = externalApi({
|
||||||
input: z.object({
|
input: z.object({
|
||||||
@@ -19,7 +19,7 @@ export const POST = externalApi({
|
|||||||
|
|
||||||
const response = feedbacks.map((feedback) => ({
|
const response = feedbacks.map((feedback) => ({
|
||||||
uuid: feedback.uuid,
|
uuid: feedback.uuid,
|
||||||
url: `${BASE_HOST}/${BASE_PATH}/feedback/${feedback.urlHash}`
|
url: siteUrl(`feedback/${feedback.urlHash}`)
|
||||||
}));
|
}));
|
||||||
|
|
||||||
return new Response(JSON.stringify({ feedback: response }), { status: 200 });
|
return new Response(JSON.stringify({ feedback: response }), { status: 200 });
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import { externalApi } from '../_api.ts';
|
|||||||
import { z } from 'astro:schema';
|
import { z } from 'astro:schema';
|
||||||
import { db } from '@db/database.ts';
|
import { db } from '@db/database.ts';
|
||||||
import { sendWebhook, WebhookAction } from '@util/webhook.ts';
|
import { sendWebhook, WebhookAction } from '@util/webhook.ts';
|
||||||
import { BASE_HOST, BASE_PATH } from 'astro:env/server';
|
import { siteUrl } from '@util/url.ts';
|
||||||
|
|
||||||
export const GET = externalApi({
|
export const GET = externalApi({
|
||||||
auth: true,
|
auth: true,
|
||||||
@@ -17,7 +17,7 @@ export const GET = externalApi({
|
|||||||
reason: report.reason,
|
reason: report.reason,
|
||||||
created: report.createdAt?.getTime() ?? null,
|
created: report.createdAt?.getTime() ?? null,
|
||||||
status: report.status?.status ?? null,
|
status: report.status?.status ?? null,
|
||||||
url: `${BASE_HOST}/${BASE_PATH}/report/${report.urlHash}`
|
url: siteUrl(`report/${report.urlHash}`)
|
||||||
}))
|
}))
|
||||||
}),
|
}),
|
||||||
{ status: 200 }
|
{ status: 200 }
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { externalApi } from '../../_api.ts';
|
import { externalApi } from '../../_api.ts';
|
||||||
import { db } from '@db/database.ts';
|
import { db } from '@db/database.ts';
|
||||||
import { BASE_HOST, BASE_PATH } from 'astro:env/server';
|
import { siteUrl } from '@util/url.ts';
|
||||||
|
|
||||||
export const GET = externalApi({
|
export const GET = externalApi({
|
||||||
auth: true,
|
auth: true,
|
||||||
@@ -18,14 +18,14 @@ export const GET = externalApi({
|
|||||||
reason: report.reason,
|
reason: report.reason,
|
||||||
created: report.createdAt?.getTime() ?? null,
|
created: report.createdAt?.getTime() ?? null,
|
||||||
status: report.status?.status ?? null,
|
status: report.status?.status ?? null,
|
||||||
url: `${BASE_HOST}/${BASE_PATH}/report/${report.urlHash}`
|
url: siteUrl(`report/${report.urlHash}`)
|
||||||
})),
|
})),
|
||||||
to_self: toSelf.map((report) => ({
|
to_self: toSelf.map((report) => ({
|
||||||
reporter: report.reporter?.uuid ?? null,
|
reporter: report.reporter?.uuid ?? null,
|
||||||
reason: report.reason,
|
reason: report.reason,
|
||||||
created: report.createdAt?.getTime() ?? null,
|
created: report.createdAt?.getTime() ?? null,
|
||||||
status: report.status?.status ?? null,
|
status: report.status?.status ?? null,
|
||||||
url: `${BASE_HOST}/${BASE_PATH}/report/${report.urlHash}`
|
url: siteUrl(`report/${report.urlHash}`)
|
||||||
}))
|
}))
|
||||||
}),
|
}),
|
||||||
{ status: 200 }
|
{ status: 200 }
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
import WebsiteLayout from '@layouts/website/WebsiteLayout.astro';
|
import WebsiteLayout from '@layouts/website/WebsiteLayout.astro';
|
||||||
import VideoPlayer from '@app/website/video/VideoPlayer.svelte';
|
import VideoPlayer from '@app/website/video/VideoPlayer.svelte';
|
||||||
import { getVideoMetadata, resolveVideo } from '@util/video.ts';
|
import { getVideoMetadata, resolveVideo } from '@util/video.ts';
|
||||||
import { BASE_PATH } from 'astro:env/server';
|
import { siteUrl } from '@util/url.ts';
|
||||||
|
|
||||||
const { name } = Astro.params;
|
const { name } = Astro.params;
|
||||||
|
|
||||||
@@ -13,13 +13,13 @@ const metadata = await getVideoMetadata(video);
|
|||||||
if (!metadata) return new Response(null, { status: 404 });
|
if (!metadata) return new Response(null, { status: 404 });
|
||||||
|
|
||||||
const { title, description, width, height, duration } = metadata;
|
const { title, description, width, height, duration } = metadata;
|
||||||
const streamPath = `${BASE_PATH}/video/${encodeURIComponent(video.name)}/stream`;
|
const streamUrl = siteUrl(`video/${encodeURIComponent(video.name)}/stream`);
|
||||||
---
|
---
|
||||||
|
|
||||||
<WebsiteLayout title={`${title} - Video`} description={description ?? undefined} openGraph="minimal">
|
<WebsiteLayout title={`${title} - Video`} description={description ?? undefined} openGraph="minimal">
|
||||||
<Fragment slot="head">
|
<Fragment slot="head">
|
||||||
<meta property="og:type" content="video" />
|
<meta property="og:type" content="video" />
|
||||||
<meta property="og:video" content={streamPath} />
|
<meta property="og:video" content={streamUrl} />
|
||||||
<meta property="og:video:type" content={video.contentType} />
|
<meta property="og:video:type" content={video.contentType} />
|
||||||
{width && <meta property="og:video:width" content={width.toString()} />}
|
{width && <meta property="og:video:width" content={width.toString()} />}
|
||||||
{height && <meta property="og:video:height" content={height.toString()} />}
|
{height && <meta property="og:video:height" content={height.toString()} />}
|
||||||
@@ -32,7 +32,7 @@ const streamPath = `${BASE_PATH}/video/${encodeURIComponent(video.name)}/stream`
|
|||||||
<h1 class="mt-1 text-2xl font-semibold break-words lg:text-4xl">{title}</h1>
|
<h1 class="mt-1 text-2xl font-semibold break-words lg:text-4xl">{title}</h1>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<VideoPlayer client:load src={streamPath} type={video.contentType} title={title} />
|
<VideoPlayer client:load src={streamUrl} type={video.contentType} title={title} />
|
||||||
|
|
||||||
{description && (
|
{description && (
|
||||||
<p class="max-w-3xl text-base leading-relaxed whitespace-pre-line text-base-content/70">{description}</p>
|
<p class="max-w-3xl text-base leading-relaxed whitespace-pre-line text-base-content/70">{description}</p>
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
import { ROOT_URL } from 'astro:env/server';
|
||||||
|
|
||||||
|
const rootUrl = new URL(ROOT_URL.endsWith('/') ? ROOT_URL : `${ROOT_URL}/`);
|
||||||
|
|
||||||
|
export function siteBase(): string {
|
||||||
|
return rootUrl.pathname;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function siteUrl(path: string): string {
|
||||||
|
return new URL(path.replace(/^\/+/, ''), rootUrl).href;
|
||||||
|
}
|
||||||
Reference in new issue
Block a user