aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lib/Home/HeadTitle.svelte6
-rw-r--r--src/lib/Utility/appOrigin.ts10
-rw-r--r--src/routes/api/badges/+server.ts5
-rw-r--r--src/routes/api/birthdays/primary/+server.ts6
-rw-r--r--src/routes/api/birthdays/secondary/+server.ts6
-rw-r--r--src/routes/api/configuration/+server.ts13
-rw-r--r--src/routes/api/preferences/+server.ts33
-rw-r--r--src/routes/api/preferences/pin/+server.ts6
-rw-r--r--src/routes/api/subsplease/+server.ts7
-rw-r--r--src/routes/api/updates/all-novels/+server.ts6
-rw-r--r--src/routes/api/updates/manga/+server.ts5
-rw-r--r--src/routes/api/updates/novels/+server.ts5
-rw-r--r--src/routes/feeds/activity-notifications/+server.ts13
13 files changed, 58 insertions, 63 deletions
diff --git a/src/lib/Home/HeadTitle.svelte b/src/lib/Home/HeadTitle.svelte
index 9ac1ea71..0759943f 100644
--- a/src/lib/Home/HeadTitle.svelte
+++ b/src/lib/Home/HeadTitle.svelte
@@ -1,4 +1,6 @@
<script lang="ts">
+import { siteUrl } from "$lib/Utility/appOrigin";
+
let { route = undefined, path = "/" }: { route?: string; path?: string } =
$props();
const title = $derived((route ? `${route} • ` : "") + "due.moe");
@@ -6,11 +8,11 @@ const title = $derived((route ? `${route} • ` : "") + "due.moe");
<svelte:head>
<!-- Facebook -->
- <meta name="og:url" property="og:url" content={`https://due.moe${path}`} />
+ <meta name="og:url" property="og:url" content={siteUrl(path)} />
<meta name="og:title" property="og:title" content={title} />
<!-- Twitter -->
- <meta name="twitter:url" property="twitter:url" content={`https://due.moe${path}`} />
+ <meta name="twitter:url" property="twitter:url" content={siteUrl(path)} />
<meta name="twitter:title" property="twitter:title" content={title} />
<title>{title}</title>
diff --git a/src/lib/Utility/appOrigin.ts b/src/lib/Utility/appOrigin.ts
index 8d534d81..cdc53995 100644
--- a/src/lib/Utility/appOrigin.ts
+++ b/src/lib/Utility/appOrigin.ts
@@ -23,10 +23,20 @@ export const appOrigin = () => {
return dev ? LOCAL_ORIGIN : PRODUCTION_ORIGIN;
};
+export const siteUrl = (path = "/") =>
+ `${appOrigin()}${path.startsWith("/") ? path : `/${path}`}`;
+
export const isLocalApp = () => {
const { hostname } = new URL(appOrigin());
return dev || isPrivateHostname(hostname);
};
+export const appOriginHeaders = (
+ headers: Record<string, string> = {},
+): Record<string, string> => ({
+ ...headers,
+ "Access-Control-Allow-Origin": appOrigin(),
+});
+
export { LOCAL_ORIGIN, PRODUCTION_ORIGIN };
diff --git a/src/routes/api/badges/+server.ts b/src/routes/api/badges/+server.ts
index 912782dd..8a86b468 100644
--- a/src/routes/api/badges/+server.ts
+++ b/src/routes/api/badges/+server.ts
@@ -15,6 +15,7 @@ import {
incrementClickCount,
} from "$lib/Database/SB/User/badges";
import { Schema } from "effect";
+import { appOriginHeaders } from "$lib/Utility/appOrigin";
import privilegedUser from "$lib/Utility/privilegedUser";
const unauthorised = new Response("Unauthorised", { status: 401 });
@@ -22,9 +23,7 @@ const importedBadgeSchema = Schema.Record(Schema.String, Schema.Unknown);
const badges = async (id: number) =>
Response.json(await getUserBadges(id), {
- headers: {
- "Access-Control-Allow-Origin": "https://due.moe",
- },
+ headers: appOriginHeaders(),
});
export const GET = async ({ url }) => {
diff --git a/src/routes/api/birthdays/primary/+server.ts b/src/routes/api/birthdays/primary/+server.ts
index 888baa60..109961f8 100644
--- a/src/routes/api/birthdays/primary/+server.ts
+++ b/src/routes/api/birthdays/primary/+server.ts
@@ -1,4 +1,5 @@
import { JSDOM } from "jsdom";
+import { appOriginHeaders } from "$lib/Utility/appOrigin";
export const GET = async ({ url }: { url: URL }) => {
const document = new JSDOM(
@@ -31,10 +32,9 @@ export const GET = async ({ url }: { url: URL }) => {
};
}),
{
- headers: {
+ headers: appOriginHeaders({
"Cache-Control": "max-age=10800, s-maxage=10800",
- "Access-Control-Allow-Origin": "https://due.moe",
- },
+ }),
},
);
};
diff --git a/src/routes/api/birthdays/secondary/+server.ts b/src/routes/api/birthdays/secondary/+server.ts
index b471a32b..4619828f 100644
--- a/src/routes/api/birthdays/secondary/+server.ts
+++ b/src/routes/api/birthdays/secondary/+server.ts
@@ -1,4 +1,5 @@
import { env } from "$env/dynamic/private";
+import { appOriginHeaders } from "$lib/Utility/appOrigin";
export const GET = async ({ url }: { url: URL }) => {
return Response.json(
@@ -20,10 +21,9 @@ export const GET = async ({ url }: { url: URL }) => {
)
).json(),
{
- headers: {
+ headers: appOriginHeaders({
"Cache-Control": "max-age=10800, s-maxage=10800",
- "Access-Control-Allow-Origin": "https://due.moe",
- },
+ }),
},
);
};
diff --git a/src/routes/api/configuration/+server.ts b/src/routes/api/configuration/+server.ts
index 14c49766..aa1b0bcf 100644
--- a/src/routes/api/configuration/+server.ts
+++ b/src/routes/api/configuration/+server.ts
@@ -6,6 +6,7 @@ import {
getUserConfiguration,
setUserConfiguration,
} from "$lib/Database/SB/User/configuration";
+import { appOriginHeaders } from "$lib/Utility/appOrigin";
import { Schema } from "effect";
const unauthorised = new Response("Unauthorised", { status: 401 });
@@ -14,9 +15,7 @@ export const GET = async ({ url }) =>
Response.json(
await getUserConfiguration(Number(url.searchParams.get("id") || 0)),
{
- headers: {
- "Access-Control-Allow-Origin": "https://due.moe",
- },
+ headers: appOriginHeaders(),
},
);
@@ -35,9 +34,7 @@ export const PUT = async ({ cookies, request }) => {
),
}),
{
- headers: {
- "Access-Control-Allow-Origin": "https://due.moe",
- },
+ headers: appOriginHeaders(),
},
);
};
@@ -52,9 +49,7 @@ export const DELETE = async ({ cookies }) => {
return Response.json(
await deleteUserConfiguration((await userIdentity(user)).id),
{
- headers: {
- "Access-Control-Allow-Origin": "https://due.moe",
- },
+ headers: appOriginHeaders(),
},
);
};
diff --git a/src/routes/api/preferences/+server.ts b/src/routes/api/preferences/+server.ts
index 0f62fb76..d6db364f 100644
--- a/src/routes/api/preferences/+server.ts
+++ b/src/routes/api/preferences/+server.ts
@@ -10,6 +10,7 @@ import {
togglePinnedBadgeWallCategory,
setPinnedBadgeWallCategories,
} from "$lib/Database/SB/User/preferences";
+import { appOriginHeaders } from "$lib/Utility/appOrigin";
import { Schema } from "effect";
const unauthorised = new Response("Unauthorised", { status: 401 });
@@ -20,9 +21,7 @@ export const GET = async ({ url }) => {
);
return Response.json(preferences ? preferences : {}, {
- headers: {
- "Access-Control-Allow-Origin": "https://due.moe",
- },
+ headers: appOriginHeaders(),
});
};
@@ -36,23 +35,17 @@ export const PUT = async ({ url, cookies, request }) => {
if (url.searchParams.get("toggleHideMissingBadges") !== null)
return Response.json(await toggleHideMissingBadges(userId), {
- headers: {
- "Access-Control-Allow-Origin": "https://due.moe",
- },
+ headers: appOriginHeaders(),
});
if (url.searchParams.get("toggleHideAWCBadges") !== null)
return Response.json(await toggleHideAWCBadges(userId), {
- headers: {
- "Access-Control-Allow-Origin": "https://due.moe",
- },
+ headers: appOriginHeaders(),
});
if (url.searchParams.get("badgeWallCSS") !== null)
return Response.json(await setCSS(userId, await request.text()), {
- headers: {
- "Access-Control-Allow-Origin": "https://due.moe",
- },
+ headers: appOriginHeaders(),
});
if (url.searchParams.get("toggleCategory") !== null)
@@ -62,9 +55,7 @@ export const PUT = async ({ url, cookies, request }) => {
url.searchParams.get("toggleCategory") || "",
),
{
- headers: {
- "Access-Control-Allow-Origin": "https://due.moe",
- },
+ headers: appOriginHeaders(),
},
);
@@ -77,9 +68,7 @@ export const PUT = async ({ url, cookies, request }) => {
)),
]),
{
- headers: {
- "Access-Control-Allow-Origin": "https://due.moe",
- },
+ headers: appOriginHeaders(),
},
);
@@ -87,18 +76,14 @@ export const PUT = async ({ url, cookies, request }) => {
return Response.json(
await setBiography(userId, (await request.text()).slice(0, 3000)),
{
- headers: {
- "Access-Control-Allow-Origin": "https://due.moe",
- },
+ headers: appOriginHeaders(),
},
);
return Response.json(
await getUserPreferences(Number(url.searchParams.get("id") || 0)),
{
- headers: {
- "Access-Control-Allow-Origin": "https://due.moe",
- },
+ headers: appOriginHeaders(),
},
);
};
diff --git a/src/routes/api/preferences/pin/+server.ts b/src/routes/api/preferences/pin/+server.ts
index 045d0187..45a231fd 100644
--- a/src/routes/api/preferences/pin/+server.ts
+++ b/src/routes/api/preferences/pin/+server.ts
@@ -1,6 +1,7 @@
import { userIdentity } from "$lib/Data/AniList/identity";
import { decodeAuthCookieOrThrow } from "$lib/Effect/authCookie";
import { toggleHololiveStreamPinning } from "$lib/Database/SB/User/preferences";
+import { appOriginHeaders } from "$lib/Utility/appOrigin";
const unauthorised = new Response("Unauthorised", { status: 401 });
@@ -17,10 +18,9 @@ export const PUT = async ({ cookies, url }) => {
url.searchParams.get("stream") || "",
),
{
- headers: {
+ headers: appOriginHeaders({
method: "PUT",
- "Access-Control-Allow-Origin": "https://due.moe",
- },
+ }),
},
);
};
diff --git a/src/routes/api/subsplease/+server.ts b/src/routes/api/subsplease/+server.ts
index 93b91609..6ef2d832 100644
--- a/src/routes/api/subsplease/+server.ts
+++ b/src/routes/api/subsplease/+server.ts
@@ -1,3 +1,5 @@
+import { appOriginHeaders } from "$lib/Utility/appOrigin";
+
export const GET = async ({ url }) =>
Response.json(
await (
@@ -8,9 +10,8 @@ export const GET = async ({ url }) =>
)
).json(),
{
- headers: {
+ headers: appOriginHeaders({
"Cache-Control": "max-age=86400, s-maxage=86400",
- "Access-Control-Allow-Origin": "https://due.moe",
- },
+ }),
},
);
diff --git a/src/routes/api/updates/all-novels/+server.ts b/src/routes/api/updates/all-novels/+server.ts
index f90656bf..10a0a436 100644
--- a/src/routes/api/updates/all-novels/+server.ts
+++ b/src/routes/api/updates/all-novels/+server.ts
@@ -1,3 +1,5 @@
+import { appOriginHeaders } from "$lib/Utility/appOrigin";
+
export const GET = async ({ setHeaders }) => {
setHeaders({
"Cache-Control": "public, max-age=600, s-maxage=600",
@@ -9,12 +11,14 @@ export const GET = async ({ setHeaders }) => {
method: "POST",
headers: {
"Content-Type": "application/json",
- "Access-Control-Allow-Origin": "https://due.moe",
},
body: JSON.stringify({
mode: "get-releases",
}),
})
).json(),
+ {
+ headers: appOriginHeaders(),
+ },
);
};
diff --git a/src/routes/api/updates/manga/+server.ts b/src/routes/api/updates/manga/+server.ts
index c794d7b3..f8f90c91 100644
--- a/src/routes/api/updates/manga/+server.ts
+++ b/src/routes/api/updates/manga/+server.ts
@@ -1,4 +1,5 @@
import Parser from "rss-parser";
+import { appOriginHeaders } from "$lib/Utility/appOrigin";
export const GET = async ({ setHeaders }) => {
setHeaders({
@@ -10,9 +11,7 @@ export const GET = async ({ setHeaders }) => {
await (await fetch("https://www.mangaupdates.com/rss.php")).text(),
),
{
- headers: {
- "Access-Control-Allow-Origin": "https://due.moe",
- },
+ headers: appOriginHeaders(),
},
);
};
diff --git a/src/routes/api/updates/novels/+server.ts b/src/routes/api/updates/novels/+server.ts
index 7258b966..5e33a2ff 100644
--- a/src/routes/api/updates/novels/+server.ts
+++ b/src/routes/api/updates/novels/+server.ts
@@ -1,4 +1,5 @@
import Parser from "rss-parser";
+import { appOriginHeaders } from "$lib/Utility/appOrigin";
export const GET = async ({ setHeaders }) => {
setHeaders({
@@ -10,9 +11,7 @@ export const GET = async ({ setHeaders }) => {
await (await fetch("https://api.syosetu.com/allnovel.Atom")).text(),
),
{
- headers: {
- "Access-Control-Allow-Origin": "https://due.moe",
- },
+ headers: appOriginHeaders(),
},
);
};
diff --git a/src/routes/feeds/activity-notifications/+server.ts b/src/routes/feeds/activity-notifications/+server.ts
index e4725a5b..70b24a20 100644
--- a/src/routes/feeds/activity-notifications/+server.ts
+++ b/src/routes/feeds/activity-notifications/+server.ts
@@ -2,6 +2,7 @@ import {
notifications,
type Notification,
} from "$lib/Data/AniList/notifications";
+import { siteUrl } from "$lib/Utility/appOrigin";
import root from "$lib/Utility/root";
const htmlEncode = (input: string) => {
@@ -17,18 +18,18 @@ const render = (
<rss
version="2.0"
xmlns:atom="http://www.w3.org/2005/Atom"
- xmlns:content="http://purl.org/rss/1.0/modules/content/"
- xmlns:snf="http://www.smartnews.be/snf"
- xmlns:media="http://search.yahoo.com/mrss/">
+xmlns:content="http://purl.org/rss/1.0/modules/content/"
+xmlns:snf="http://www.smartnews.be/snf"
+xmlns:media="http://search.yahoo.com/mrss/">
<channel>
- <atom:link href="https://due.moe/feeds/activity-notifications" rel="self" type="application/rss+xml" />
+ <atom:link href="${siteUrl("/feeds/activity-notifications")}" rel="self" type="application/rss+xml" />
<title>AniList Notifications • due.moe</title>
- <link>https://due.moe</link>
+ <link>${siteUrl("/")}</link>
<description>Instantly view your AniList notifications via RSS!</description>
<pubDate>${new Date().toUTCString()}</pubDate>
<lastBuildDate>${new Date().toUTCString()}</lastBuildDate>
<language>en-US</language>
- <snf:logo><url>https://due.moe/favicon-196x196.png</url></snf:logo>
+ <snf:logo><url>${siteUrl("/favicon-196x196.png")}</url></snf:logo>
${posts
.filter((notification: Notification) => notification.type !== undefined)
.map((notification: Notification) => {