CloudFlare Pages

Content rewrite

$sitedir/root-files/functions/gate.js

const getCookie = (context, name) => (context.request.headers.get("cookie") || "").match(new RegExp(`(^| )${name}=([^;]+)`))?.at(2);
export async function onRequestGet(context) {
	const req = context.request;
}

$sitedir/root-files/functions/[post].js

const getCookie = (context, name) => (context.request.headers.get("cookie") || "").match(new RegExp(`(^| )${name}=([^;]+)`))?.at(2);
const is_logged_in = (context) => {
	const COOKIE_NAME = "paywall_access";
	const cookie = getCookie(context, COOKIE_NAME);
	if (cookie === undefined || cookie === null || cookie === "") return false;
	// ...
}
class RemoveElementRewriter {
	element(element) { element.remove() }
}
class RemoveClassRewriter {
	constructor(className) { this.className = className }
	element(element) { const attr = 'class'; element.setAttribute(attr, element.getAttribute(attr).replaceAll(this.className, '')) }
}
export async function onRequestGet(context) {
	const req = context.request;
	const res = await context.next();
	if (is_logged_in(context) === true) {
		return new HTMLRewriter()
		.on('.paywall-only', new RemoveElementRewriter())
		.on('.paywall', new RemoveClassRewriter('paywall'))
		.transform(res);
	}
	return new HTMLRewriter()
	.on('.paywall', new RemoveElementRewriter())
	.on('.paywall-only', new RemoveClassRewriter('paywall-only'))
	.transform(res);
}

Routing

Um unnötige Aufrufe (=Kosten) zu vermeiden kann festgelegt werden, wann die Funktion aufgerufen werden soll.

$sitedir/root-files/_routes.json

{
	"version": 1,
	"include": ["/*"],
	"exclude": ["/assets/*", "/authors/*", "/tags/*", "/favicon.ico", "/404.html", "/index.html", "/search.html", "/feed.json", "/feed.xml", "/files.publii.json", "/robots.txt", "/sitemap.xml", "/sitemap.xsl"]
}