- main
- manifest
- deps
- main
- Install
- Run
import cookie from "cookie";
addEventListener('fetch', (event) => event.respondWith(handleRequest(event)));
async function handleRequest(event) {
let req = event.request;
let url = new URL(req.url);
const targetMethod = ['GET', 'HEAD'];
var cookies = cookie.parse(req.headers.get("cookie"));
if (cookies.sessionid) {
req.headers.set('auth-sessionid',cookies.sessionid);
}
req.headers.delete('cookie');
const backendResponseInit = await fetch(req, {
backend: 'origin_0',
});
const payWall = backendResponseInit.headers.get('paywall');
console.log("paywall:" + payWall);
if (payWall || targetMethod.includes(req.method)) {
if (!isValidUrl(payWall)) {
return new Response("Invalid paywall check URL", { status: 403 });
}
const payWallCheckPending = new URL(payWall);
if (payWallCheckPending.hostname = "fiddle-paywall.glitch.me") {
let reqCheck = new Request(payWallCheckPending.toString());
const backendResponseCheck = await fetch(reqCheck, {
backend: 'origin_1',
});
const payWallResult = backendResponseCheck.headers.get('Paywall-Result');
const payWallMeta = backendResponseCheck.headers.get('Paywall-Meta');
console.log("paywall-result:" + payWallResult);
console.log("paywall-meta:" + payWallMeta);
if (payWallResult) {
if (payWallResult == "BLOCK") {
return new Response("This content is only available to premium subscribers", { status: 403 });
}
if (payWallMeta) {
backendResponseInit.headers.set('set-cookie', "paywall-meta=" + payWallMeta + "; path=/; max-age=10");
}
}
}
}
return backendResponseInit;
}
function isValidUrl(string) {
try {
new URL(string);
return true;
} catch (err) {
return false;
}
}