384 字
2 分钟
Deno Deploy部署Artitalk_SafeMode
Artitalk自带SafeMode,但是需要使用Cloudflare Workers,在某些地区不方便使用
本人修改了原版的Workers脚本,并将其移植到了Deno Deploy
需要设置的环境变量:
APPID
: 字符串
APPKEY
: 字符串
SERVERDOMAIN
: 当前Deno Deploy的域名,不带https://
头
ATCOMMENT
: true或false
CORS
: url1,url2,url3 (url之间用半角逗号隔开 且没有空格)
修改后的脚本如下
async function handleRequest(request: Request): Promise<Response> {
const AppId: string = Deno.env.get('APPID')
const AppKey: string = Deno.env.get('APPKEY')
const ServerDomain: string = Deno.env.get('SERVERDOMAIN')
const atComment: Boolean = Deno.env.get('ATCOMMENT') == 'true'
const CORS: string[] = Deno.env.get('CORS').split(',')
const url: URL = new URL(request.url)
const urlObj: URL = new URL(url)
const path: string = urlObj.href.substr(urlObj.origin.length)
const classac: string = l(rp(path).split('/'))
if (AppId == "" || AppKey == "") { return new Response('Artitalk-Safe异常: 您没有设定appid和appkey') }
if (classac == "atComment" && !atComment) { return new Response('{"code":101,"error":"Artitalk-Safe: 评论功能未开启"}', { headers: { "content-type": "application/json;charset=utf-8" } }) }
if (classac == "_File" || classac == "_Followee" || classac == "_Follower" || classac == "_Installation" || classac == "_Role") { return new Response('{"code":101,"error":"Artitalk-Safe: 操作是禁止的"}', { headers: { "content-type": "application/json;charset=utf-8" } }) }
url.hostname = ServerDomain
const reqHEDNew: Headers = new Headers(request.headers)
if (reqHEDNew.get("X-LC-Id")) {
reqHEDNew.set("X-LC-Id", AppId)
reqHEDNew.set("X-LC-Key", AppKey)
}
if (reqHEDNew.get("x-lc-sign")) {
reqHEDNew.delete("X-LC-Sign")
}
const reqNew: Request = new Request(request, { headers: reqHEDNew })
const responsefetch: Response = await fetch(url.toString(), reqNew)
const resHEDNew: Headers = new Headers(responsefetch.headers)
var flag: Boolean = false
for (let pair of request.headers.entries()) {
if (pair[0] == 'referer') {
for (let url of CORS) {
if (pair[1].indexOf(url) != -1) {
resHEDNew.set("Access-Control-Allow-Origin", url.slice(0, -1))
flag = true
break
}
} break
}
}
if (!flag){
resHEDNew.delete("Access-Control-Allow-Origin")
}
const response: Response = new Response(responsefetch.body, { headers: resHEDNew })
return response
}
function rp(p: string): string {
return p.split("?")[0]
}
function l(p: string[]): string {
return p[getJsonLength(p) - 1]
}
function getJsonLength(jsonData: string[]): number {
var jsonLength = 0
for (var _ in jsonData) {
jsonLength++
}
return jsonLength
}
Deno.serve((req: Request) => {
return handleRequest(req)
});
Deno Deploy部署Artitalk_SafeMode
https://onaniishoujo.github.io/posts/deno-deploy部署artitalk-safemode/