This commit is contained in:
我若为王 2024-09-02 15:15:59 +08:00
parent 2dd4e7bdb3
commit f06209f8da
3 changed files with 6 additions and 131 deletions

View File

@ -1,5 +1,5 @@
const md5 = require('js-md5'); import md5 from "js-md5";
const crypto = require("crypto-js"); import crypto from "crypto-js";
const decrypt = function (ciphertext, iv, t) { const decrypt = function (ciphertext, iv, t) {
try { try {
const key = generateKey(t); const key = generateKey(t);

View File

@ -1,3 +1,4 @@
export const html = `
<!DOCTYPE html> <!DOCTYPE html>
<html lang="zh-CN"> <html lang="zh-CN">
<head> <head>
@ -67,7 +68,7 @@
async function checkStatus(sid) { async function checkStatus(sid) {
const interval = setInterval(async () => { const interval = setInterval(async () => {
const response = await fetch(`/check_status/${sid}`); const response = await fetch("/check_status/" + sid);
const data = await response.json(); const data = await response.json();
if (data.status === "LoginSuccess") { if (data.status === "LoginSuccess") {
clearInterval(interval); clearInterval(interval);
@ -123,4 +124,4 @@
</div> </div>
</div> </div>
</body> </body>
</html> </html>`

View File

@ -8,133 +8,7 @@
* Learn more at https://developers.cloudflare.com/workers/ * Learn more at https://developers.cloudflare.com/workers/
*/ */
import { decrypt, getParams } from './decode.js'; import { decrypt, getParams } from './decode.js';
const html = ` import {html} from './html.js';
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>二维码登录</title>
<style>
body {
font-family: Arial, sans-serif;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 100vh;
margin: 0;
background-color: #f0f0f0;
}
h1 {
color: #333;
}
#qrCodeContainer {
margin: 20px 0;
}
#tokens {
display: none;
margin-top: 20px;
}
.token-container {
display: flex;
align-items: center;
margin-bottom: 10px;
}
.token-container label {
margin-right: 10px;
font-weight: bold;
}
.token-container input {
width: 300px;
padding: 5px;
margin-right: 10px;
border: 1px solid #ccc;
border-radius: 4px;
}
.token-container button {
padding: 5px 10px;
border: none;
background-color: #007bff;
color: white;
border-radius: 4px;
cursor: pointer;
}
.token-container button:hover {
background-color: #0056b3;
}
</style>
<script>
async function generateQR() {
const response = await fetch("/generate_qr", {
method: "POST",
});
const data = await response.json();
const qrCode = document.getElementById("qrCode");
qrCode.src = data.qr_link;
qrCode.style.display = "block";
checkStatus(data.sid);
}
async function checkStatus(sid) {
const interval = setInterval(async () => {
const response = await fetch("/check_status/" + sid);
const data = await response.json();
if (data.status === "LoginSuccess") {
clearInterval(interval);
document.querySelector("h1").innerText = "获取成功";
document.getElementById("accessToken").value = data.access_token;
document.getElementById("refreshToken").value = data.refresh_token;
document.getElementById("tokens").style.display = "block";
document.getElementById("copyAccessTokenButton").style.display =
"inline-block";
document.getElementById("copyRefreshTokenButton").style.display =
"inline-block";
document.getElementById("qrCodeContainer").style.display = "none";
} else {
if (data.status === "ScanSuccess") {
document.querySelector("h1").innerText =
"扫码成功,等待手机端授权";
}
if (data.status === "LoginFailed") {
document.querySelector("h1").innerText =
"登录失败,请刷新页面重试";
clearInterval(interval);
alert("登录失败,请刷新页面重试");
location.reload();
}
}
}, 2000);
}
function copyToClipboard(elementId) {
const copyText = document.getElementById(elementId);
copyText.select();
copyText.setSelectionRange(0, 99999);
document.execCommand("copy");
alert("已复制: " + copyText.value);
}
</script>
</head>
<body onload="generateQR()">
<h1>扫描二维码登录</h1>
<div id="qrCodeContainer">
<img id="qrCode" alt="二维码加载中..." />
</div>
<div id="tokens">
<div class="token-container">
<label for="accessToken">访问令牌:</label>
<input type="text" id="accessToken" readonly />
<button id="copyAccessTokenButton" onclick="copyToClipboard('accessToken')">复制</button>
</div>
<div class="token-container">
<label for="refreshToken">刷新令牌:</label>
<input type="text" id="refreshToken" readonly />
<button id="copyRefreshTokenButton" onclick="copyToClipboard('refreshToken')">复制</button>
</div>
</div>
</body>
</html>`
async function handleRequest(request) { async function handleRequest(request) {
const url = new URL(request.url); const url = new URL(request.url);
if (request.method === 'POST' && url.pathname === '/generate_qr') { if (request.method === 'POST' && url.pathname === '/generate_qr') {