能添加到我这里不?大佬。
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
function parseJwt(token) {
const base64Url = token.split('.')[1]; // 获取载荷部分
const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/'); // 将 Base64Url 转为 Base64
const jsonPayload = decodeURIComponent(atob(base64).split('').map(function (c) {
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
}).join(''));
return JSON.parse(jsonPayload); // 返回载荷解析后的 JSON 对象
}
/**
* @param {any} token
*/
function isTokenExpired(token) {
if (!token) {
return true;
}
const payload = parseJwt(token);
const currentTime = Math.floor(Date.now() / 1000); // 获取当前时间戳(秒)
return payload.exp < currentTime; // 检查 token 是否过期
}
async function getOAuthLink(shareToken, proxiedDomain) {
//const url = `https://${proxiedDomain}/api/auth/oauth_token`;
const url = `https://new.oaifree.com/api/auth/oauth_token`;
const response = await fetch(url, {
method: 'POST',
headers: {
'Origin': `https://${proxiedDomain}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
share_token: shareToken
})
})
const data = await response.json();
return data.login_url;
}
async function getShareToken(userName, at) {
const url = 'https://chat.oaifree.com/token/register';
const body = new URLSearchParams({
// 此处为获取Share Token时的请求参数,可自行配置
access_token: at,
unique_name: userName,
site_limit: '', // 限制的网站
expires_in: '0', // token有效期(单位为秒),填 0 则永久有效
gpt35_limit: '-1', // gpt3.5 对话限制
gpt4_limit: '-1', // gpt4 对话限制
show_conversations: 'false', // 是否显示所有人的会话
show_userinfo: 'false', // 是否显示用户信息
reset_limit: 'false' // 是否重置对话限制
}).toString();
const apiResponse = await fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
body: body
});
const responseText = await apiResponse.json();
const tokenKey = responseText.token_key ? responseText.token_key : 'share token 获取失败';
return tokenKey;
}
async function handleRequest(request) {
const url = new URL(request.url);
const params = new URLSearchParams(url.search);
const userName = params.get('un');
if (!userName) {
// 如果没有 'un' 参数,返回 HTML 表单
return new Response(formHtml, {
headers: {
'Content-Type': 'text/html; charset=utf-8'
}
});
}
// @ts-ignore
// 验证用户名是否存在
const users = await oai_global_variables.get("users");
console.log(users)
if (!users.split(",").includes(userName)) {
return new Response('用户不存在', { status: 4014 });
}
// @ts-ignore
const accessToken = await oai_global_variables.get('at');
console.log(accessToken)
if (isTokenExpired(accessToken)) {
// 给没有refresh token的萌新用(比如我),取消下面这行注释即可享用
// return new Response('当前access token未更新,请联系管理员更新', { status: 401 });
// 如果 Token 过期,执行获取新 Token 的逻辑
const url = 'https://token.oaifree.com/api/auth/refresh';
// @ts-ignore
const refreshToken = await oai_global_variables.get('rt'); // 实际情况下你可能会从某处获取这个值
console.log(refreshToken)
// 发送 POST 请求
const response = await fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
},
body: `refresh_token=${refreshToken}`
});
// 检查响应状态
if (response.ok) {
const data = await response.json(); // 假设服务器返回的是 JSON 格式数据
console.log('data01',data)
const accessToken = data.access_token;; // 直接从 JSON 中获取 access_token
// console.log(accessToken)
// @ts-ignore
await oai_global_variables.put('at', accessToken);
} else {
return new Response('Error fetching access token', { status: response.status });
}
}
// @ts-ignore
//const tokenPrefix = await oai_global_variables.get('token_prefix');
const finalaccessToken = await oai_global_variables.get('at');
const shareToken = await getShareToken(userName, finalaccessToken);
if (shareToken === 'share token 获取失败') {
return new Response('token获取失败,请刷新重试', { status: 500 });
}
// @ts-ignore
const proxiedDomain = await oai_global_variables.get('proxied_domain');
return Response.redirect(await getOAuthLink(shareToken, proxiedDomain), 302);
}
// HTML 表单代码
const formHtml = `
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
body {
font-family: Arial, sans-serif;
background-color: #f4f4f4;
padding: 20px;
}
form, .response-container {
background: white;
padding: 20px;
border-radius: 8px;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
max-width: 600px;
margin: 20px auto;
}
h1 {
text-align: center;
}
h2 {
text-align: center;
}
p {
display: block;
margin-bottom: 10px;
font-size: 16px;
}
input[type="text"], textarea {
width: calc(100% - 22px);
padding: 10px;
margin-top: 5px;
margin-bottom: 20px;
border-radius: 5px;
border: 1px solid #ccc;
}
textarea {
font-family: 'Courier New', monospace;
background-color: #f8f8f8;
height: 150px; /* Adjust height based on your needs */
}
button {
background-color: #000000;
color: white;
padding: 10px 20px;
border: none;
border-radius: 5px;
cursor: pointer;
font-size: 16px;
font-weight:600;
width:100% !important
}
button:hover {
background-color: #1e293b;
}
@media (max-width: 768px) {
body, form, .response-container {
padding: 10px;
}
}
.checkbox-group {
display: flex;
justify-content: space-between;
}
.checkbox-group input[type="checkbox"] {
margin-right: 5px;
}
.checkbox-group label {
margin-right: 10px;
}
</style>
</head>
<body>
<h1>欢迎使用</h1>
<form method="GET">
<label for="unique_name">请输入独一无二的名字,以你的区分身份,用于会话隔离:</label>
<input type="text" id="un" name="un" placeholder="" required value="">
<br></br>
<button type="submit">访问使用</button>
</form>
</body>
</html>
`;