Merge pull request #1 from hl128k/main

增加上传认证和访问域名限制
This commit is contained in:
叁月柒
2024-07-20 20:58:35 +08:00
committed by GitHub
2 changed files with 73 additions and 34 deletions

View File

@@ -1,15 +1,33 @@
export async function onRequest(context) { // Contents of context object
export async function onRequest(context) { // Contents of context object
const {
request, // same as existing Worker API
env, // same as existing Worker API
params, // if filename includes [id] or [[path]]
waitUntil, // same as ctx.waitUntil in existing Worker API
next, // used for middleware or to fetch assets
data, // arbitrary space for passing data between middlewares
request, // same as existing Worker API
env, // same as existing Worker API
params, // if filename includes [id] or [[path]]
waitUntil, // same as ctx.waitUntil in existing Worker API
next, // used for middleware or to fetch assets
data, // arbitrary space for passing data between middlewares
} = context;
const url = new URL(request.url);
let Referer = request.headers.get('Referer')
if (Referer) {
try {
let refererUrl = new URL(Referer);
if (env.ALLOWED_DOMAINS && env.ALLOWED_DOMAINS.trim() !== '') {
let allowedDomains = env.ALLOWED_DOMAINS.split(',');
let isAllowed = allowedDomains.some(domain => {
let domainPattern = new RegExp(`(^|\\.)${domain.replace('.', '\\.')}$`); // Escape dot in domain
return domainPattern.test(refererUrl.hostname);
});
if (!isAllowed) {
return Response.redirect(new URL("/block-img.html", request.url).href, 302); // Ensure URL is correctly formed
}
}
} catch (e) {
return Response.redirect(new URL("/block-img.html", request.url).href, 302); // Ensure URL is correctly formed
}
}
const response = fetch('https://telegra.ph/' + url.pathname + url.search, {
method: request.method,
headers: request.headers,
@@ -85,21 +103,21 @@ export async function onRequest(context) { // Contents of context object
}
} else {
await fetch(`https://api.moderatecontent.com/moderate/?key=` + apikey + `&url=https://telegra.ph/` + url.pathname + url.search).
then(async (response) => {
let moderate_data = await response.json();
console.log(moderate_data)
console.log("---env.img_url---")
console.log(env.img_url == "true")
if (typeof env.img_url == "undefined" || env.img_url == null || env.img_url == "") { } else {
//add image to kv
await env.img_url.put(params.id, "", {
metadata: { ListType: "None", Label: moderate_data.rating_label, TimeStamp: time },
});
}
if (moderate_data.rating_label == "adult") {
return Response.redirect(url.origin + "/block-img.html", 302)
}
});
then(async (response) => {
let moderate_data = await response.json();
console.log(moderate_data)
console.log("---env.img_url---")
console.log(env.img_url == "true")
if (typeof env.img_url == "undefined" || env.img_url == null || env.img_url == "") { } else {
//add image to kv
await env.img_url.put(params.id, "", {
metadata: { ListType: "None", Label: moderate_data.rating_label, TimeStamp: time },
});
}
if (moderate_data.rating_label == "adult") {
return Response.redirect(url.origin + "/block-img.html", 302)
}
});
}
}

View File

@@ -1,18 +1,39 @@
import { errorHandling, telemetryData } from "./utils/middleware";
export async function onRequestPost(context) { // Contents of context object
const {
request, // same as existing Worker API
env, // same as existing Worker API
params, // if filename includes [id] or [[path]]
waitUntil, // same as ctx.waitUntil in existing Worker API
next, // used for middleware or to fetch assets
data, // arbitrary space for passing data between middlewares
} = context;
function UnauthorizedException(reason) {
return new Response(reason, {
status: 401,
statusText: "Unauthorized",
headers: {
"Content-Type": "text/plain;charset=UTF-8",
// Disables caching by default.
"Cache-Control": "no-store",
// Returns the "Content-Length" header for HTTP HEAD requests.
"Content-Length": reason.length,
},
});
}
function isValidAuthCode(envAuthCode, authCode) {
return authCode === envAuthCode;
}
function isAuthCodeDefined(authCode) {
return authCode !== undefined && authCode !== null && authCode.trim() !== '';
}
export async function onRequestPost(context) { // Contents of context object
const { request, env, params, waitUntil, next, data } = context;
const referer = request.headers.get('Referer');
const authCode = new URLSearchParams(new URL(referer).search).get('authcode');
const clonedRequest = request.clone();
if (isAuthCodeDefined(env.AUTH_CODE) && !isValidAuthCode(env.AUTH_CODE, authCode)) {
return new UnauthorizedException("error");
}
await errorHandling(context);
telemetryData(context);
const url = new URL(clonedRequest.url);
const response = fetch('https://telegra.ph/' + url.pathname + url.search, {
const targetUrl = new URL('/upload' + new URL(request.url).search, 'https://telegra.ph');
const response = await fetch(targetUrl.href, {
method: clonedRequest.method,
headers: clonedRequest.headers,
body: clonedRequest.body,