Add support for custom 404.html pages

This commit is contained in:
hzrd149 2024-10-18 11:29:29 +01:00
parent cb3b694074
commit db172d4d0a
3 changed files with 24 additions and 11 deletions

View File

@ -0,0 +1,5 @@
---
"nsite-ts": minor
---
Add support for custom 404.html pages

View File

@ -75,22 +75,23 @@ app.use(async (ctx, next) => {
} }
if (pubkey) { if (pubkey) {
const npub = npubEncode(pubkey);
ctx.state.pubkey = pubkey; ctx.state.pubkey = pubkey;
let relays = await userRelays.get<string[] | undefined>(pubkey); let relays = await userRelays.get<string[] | undefined>(pubkey);
// fetch relays if not in cache // fetch relays if not in cache
if (!relays) { if (!relays) {
console.log(`${pubkey}: Fetching relays`); console.log(`${npub}: Fetching relays`);
relays = await getUserOutboxes(pubkey); relays = await getUserOutboxes(pubkey);
if (relays) { if (relays) {
await userRelays.set(pubkey, relays); await userRelays.set(pubkey, relays);
console.log(`${pubkey}: Found ${relays.length} relays`); console.log(`${npub}: Found ${relays.length} relays`);
} else { } else {
relays = []; relays = [];
await userServers.set(pubkey, [], 30_000); await userServers.set(pubkey, [], 30_000);
console.log(`${pubkey}: Failed to find relays`); console.log(`${npub}: Failed to find relays`);
} }
} }
@ -98,11 +99,17 @@ app.use(async (ctx, next) => {
if (relays.length === 0) throw new Error("No nostr relays"); if (relays.length === 0) throw new Error("No nostr relays");
console.log(`${pubkey}: Searching for ${ctx.path}`); console.log(`${npub}: Searching for ${ctx.path}`);
const blobs = await getNsiteBlobs(pubkey, ctx.path, relays); let blobs = await getNsiteBlobs(pubkey, ctx.path, relays);
if (blobs.length === 0) { if (blobs.length === 0) {
console.log(`${pubkey}: Found 0 events`); // fallback to custom 404 page
console.log(`${npub}: Looking for custom 404 page`);
blobs = await getNsiteBlobs(pubkey, "/404.html", relays);
}
if (blobs.length === 0) {
console.log(`${npub}: Found 0 events`);
ctx.status = 404; ctx.status = 404;
ctx.body = "Not Found"; ctx.body = "Not Found";
return; return;
@ -112,16 +119,16 @@ app.use(async (ctx, next) => {
// fetch blossom servers if not in cache // fetch blossom servers if not in cache
if (!servers) { if (!servers) {
console.log(`${pubkey}: Fetching blossom servers`); console.log(`${npub}: Fetching blossom servers`);
servers = await getUserBlossomServers(pubkey, relays); servers = await getUserBlossomServers(pubkey, relays);
if (servers) { if (servers) {
await userServers.set(pubkey, servers); await userServers.set(pubkey, servers);
console.log(`${pubkey}: Found ${servers.length} servers`); console.log(`${npub}: Found ${servers.length} servers`);
} else { } else {
servers = []; servers = [];
await userServers.set(pubkey, [], 30_000); await userServers.set(pubkey, [], 30_000);
console.log(`${pubkey}: Failed to find servers`); console.log(`${npub}: Failed to find servers`);
} }
} }

View File

@ -2,6 +2,7 @@ import { nip19 } from "nostr-tools";
import puppeteer, { PuppeteerLaunchOptions } from "puppeteer"; import puppeteer, { PuppeteerLaunchOptions } from "puppeteer";
import { join } from "path"; import { join } from "path";
import pfs from "fs/promises"; import pfs from "fs/promises";
import { npubEncode } from "nostr-tools/nip19";
import { NSITE_PORT, SCREENSHOTS_DIR } from "./env.js"; import { NSITE_PORT, SCREENSHOTS_DIR } from "./env.js";
@ -23,7 +24,7 @@ export async function hasScreenshot(pubkey: string) {
} }
export async function takeScreenshot(pubkey: string) { export async function takeScreenshot(pubkey: string) {
console.log(`${pubkey}: Generating screenshot`); console.log(`${npubEncode(pubkey)}: Generating screenshot`);
const opts: PuppeteerLaunchOptions = { const opts: PuppeteerLaunchOptions = {
args: ["--no-sandbox"], args: ["--no-sandbox"],
@ -41,6 +42,6 @@ export async function takeScreenshot(pubkey: string) {
export async function removeScreenshot(pubkey: string) { export async function removeScreenshot(pubkey: string) {
try { try {
await pfs.rm(getScreenshotPath(pubkey)); await pfs.rm(getScreenshotPath(pubkey));
console.log(`${pubkey}: Removed screenshot`); console.log(`${npubEncode(pubkey)}: Removed screenshot`);
} catch (error) {} } catch (error) {}
} }