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"]
}