cf-worker-api/public/index.html
2025-06-12 15:10:28 +08:00

245 lines
8.6 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html><html lang="zh-CN" data-theme="light">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>OpenList Token 获取工具</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
<style>
:root {
--bg-color-light: #ffffff;
--text-color-light: #000000;
--bg-color-dark: #1e1e2f;
--text-color-dark: #f0f0f0;
--accent-color: #00d1b2;
}[data-theme="light"] body {
background-color: var(--bg-color-light);
color: var(--text-color-light);
}
[data-theme="dark"] body {
background-color: var(--bg-color-dark);
color: var(--text-color-dark);
}
.form-container {
max-width: 800px;
margin: 3rem auto;
padding: 2rem;
border-radius: 1rem;
box-shadow: 0 0 30px rgba(0, 0, 0, 0.1);
background: inherit;
backdrop-filter: blur(10px);
}
label {
font-weight: 600;
}
.form-control:read-only {
background-color: #f5f5f5;
cursor: pointer;
}
.toggle-theme {
position: fixed;
top: 1rem;
right: 1rem;
}
a {
text-decoration: none;
}
</style>
</head>
<body>
<div class="toggle-theme">
<button class="btn btn-outline-secondary" onclick="toggleTheme()">切换主题</button>
</div>
<div class="container form-container">
<h2 class="text-center mb-4">🔐 OpenList Token 获取工具</h2>
<div class="mb-3">
<label for="site-select" class="form-label">网盘名称</label>
<select id="site-select" class="form-select">
<option value="onedrive_go" selected>OneDrive 官方站点</option>
<option value="onedrive_cn">OneDrive 世纪互联</option>
<option value="onedrive_us">OneDrive 美国版本</option>
<option value="onedrive_de">OneDrive 德国版本</option>
</select>
<div class="input-group">
<label for="client-id">客户端ID(Client ID)</label>
<input type="text" id="client-id" name="client-id">
</div>
<div class="input-group">
<label for="app-secret">应用机密(App Secret)</label>
<input type="text" id="app-secret" name="app-secret">
</div>
<div class="input-group">
<label for="callback-url">回调地址(Callback URL)</label>
<input type="text" id="callback-url" name="callback-url" value="https://api.oplist.org/onedrive/callback"
readonly onclick="autoCopy(this)">
</div>
<div class="input-group">
<button class="btn btn-success" onclick="getLogin()">获取Token</button>
</div>
<div class="input-group">
<label for="access-token">访问秘钥(Access Token)</label>
<textarea type="text" id="access-token" name="access-token" readonly onclick="autoCopy(this)"></textarea>
</div>
<div class="input-group">
<label for="refresh-token">刷新秘钥(Refresh Token)</label>
<textarea type="text" id="refresh-token" name="refresh-token" readonly onclick="autoCopy(this)"></textarea>
</div>
<div class="input-group">
本工具所有信息只以Cookie形式存储于浏览器本地开源于<a href="https://github.com/OpenListTeam/cf-worker-api">CF-Worker-API</a>
</div>
</div>
</div>
<div class="mb-3">
<label for="client-id" class="form-label">客户端 ID</label>
<input type="text" id="client-id" class="form-control">
</div>
<div class="mb-3">
<label for="app-secret" class="form-label">应用机密</label>
<input type="text" id="app-secret" class="form-control">
</div>
<div class="mb-3">
<label for="callback-url" class="form-label">回调地址</label>
<input type="text" id="callback-url" class="form-control" value="https://api.oplist.org/onedrive/callback" readonly onclick="autoCopy(this)">
</div>
<div class="d-grid gap-2 mb-3">
<button class="btn btn-primary" onclick="getLogin()">获取 Token</button>
</div>
<div class="mb-3">
<label for="access-token" class="form-label">访问秘钥</label>
<textarea id="access-token" class="form-control" rows="3" readonly onclick="autoCopy(this)"></textarea>
</div>
<div class="mb-3">
<label for="refresh-token" class="form-label">刷新秘钥</label>
<textarea id="refresh-token" class="form-control" rows="3" readonly onclick="autoCopy(this)"></textarea>
</div>
<div class="text-muted text-center">
<p style="text-align:center">
本工具不储存任何用户信息<br>
开源于 <a href=" " target="_blank">GitHub</a > | by <a href="https://github.com/OpenListTeam" target="_blank">OpenListTeam</a >
</p >
</div>
</div>
<script>
let intervalId;
// 获取登录秘钥 #######################################################
async function getLogin() {
let apps_uuid = document.getElementById("client-id").value;
let apps_keys = document.getElementById("app-secret").value;
let apps_type = document.getElementById("site-select").value;
if (apps_uuid === "" || apps_keys === "") {
Swal.fire({
position: 'top',
icon: 'info',
title: '获取失败',
text: '请先填写客户端ID和应用机密',
showConfirmButton: true,
});
return;
}
let post_urls = "/onedrive/requests?client_uid=" + apps_uuid
+ "&client_key=" + apps_keys + "&apps_type=" + apps_type;
try {
const response = await fetch(post_urls, {
method: 'GET', headers: {'Content-Type': 'application/json'}
});
// 解析响应内容 ===============================================
const response_data = await response.json();
if (response.status === 200) {
// window.open(response_data.text)
window.location.href = response_data.text;
} else Swal.fire({
icon: 'error',
title: "获取秘钥失败: " + response_data.text,
showConfirmButton: true,
timer: 1000
});
} catch (error) {
Swal.fire({
icon: 'error',
title: '获取秘钥失败: ' + error,
showConfirmButton: true,
timer: 1000
});
}
}
// 自动复制内容 #####################################################
function autoCopy(on_element) {
// if (on_element.innerText === "") return;
navigator.clipboard.writeText(on_element.value).then(() => {
// 显示复制成功的提示
Swal.fire({
position: 'top',
icon: 'success',
title: '内容已复制',
showConfirmButton: false,
timer: 700
});
}).catch(err => {
// 复制失败时的处理
console.error('无法复制文本:', err);
Swal.fire({
position: 'top',
icon: 'error',
title: '复制失败',
text: '请手动复制',
showConfirmButton: true,
});
})
}
async function getToken() {
const strSearch = window.location.search;
const urlParams = new URLSearchParams(strSearch);
const client_uid = urlParams.get("client_uid");
const client_key = urlParams.get("client_key");
const access_token = urlParams.get("access_token");
const refresh_token = urlParams.get("refresh_token");
document.getElementById("client-id").value = client_uid;
document.getElementById("app-secret").value = client_key;
document.getElementById("access-token").value = access_token;
document.getElementById("refresh-token").value = refresh_token;
}
getToken();
//手动切换主题模式
function toggleTheme() {
const html = document.documentElement;
const current = html.getAttribute("data-theme");
html.setAttribute("data-theme", current === "dark" ? "light" : "dark");
}
// 自动切换暗黑模式
(function () {
const hour = new Date().getHours();
if (hour < 6 || hour >= 18) document.documentElement.setAttribute("data-theme", "dark");
getToken();
})();
</script></body>
</html>