245 lines
8.6 KiB
HTML
245 lines
8.6 KiB
HTML
<!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>
|