2025-06-16 21:36:25 +08:00

217 lines
8.7 KiB
JavaScript
Raw Permalink 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.

// 获取登录秘钥 #######################################################
async function getLogin() {
let server_use = document.getElementById("server_use").checked;
let apps_uuid = document.getElementById("client-id").value;
let apps_keys = document.getElementById("app-secret").value;
let apps_type = document.getElementById("site-select").value;
let secret_key = document.getElementById("secret-key").value;
if (!server_use && (apps_uuid === "" || apps_keys === "")) {
Swal.fire({
position: 'top',
icon: 'info',
title: '获取失败',
text: '请先填写客户端ID和应用机密',
showConfirmButton: true,
});
return;
}
let apps_subs = apps_type.split("_")[0]
let post_urls = "/" + apps_subs + "/requests?client_uid=" + apps_uuid
+ "&client_key=" + apps_keys + "&apps_types=" + apps_type
+ "&server_use=" + server_use
if (apps_subs === "baiduyun") post_urls += "&secret_key=" + secret_key
try {
const response = await fetch(post_urls, {
method: 'GET', headers: {'Content-Type': 'application/json'}
});
// 解析响应内容 ===============================================
const response_data = await response.json();
if (response.status === 200) {
if (apps_subs === "onedrive" || apps_subs === "115cloud"
|| apps_subs === "baiduyun" || apps_subs === "googleui") {
window.location.href = response_data.text;
}
if (apps_subs === "123cloud") {
document.getElementById("access-token").value = response_data.text;
return;
}
if (apps_type === "alicloud_qr") {
let sid = response_data.sid;
await Swal.fire({
position: 'top',
icon: 'info',
title: '扫码登录',
html: `<div>请扫码登录,完成后点确定</div>` +
`<img src="${response_data.text}" alt="">`,
showConfirmButton: true
});
post_urls = "/alicloud/callback" +
"?client_id=" + apps_uuid +
"&client_secret=" + apps_keys +
"&grant_type=" + "authorization_code" +
"&code=" + sid
let auth_post = await fetch(post_urls, {method: 'GET'});
let auth_data = await auth_post.json();
if (auth_post.status === 200) {
const callbackData = {
access_token: auth_data.access_token,
refresh_token: auth_data.refresh_token,
client_uid: apps_uuid,
client_key: apps_keys
};
window.location.hash = "#" + encodeCallbackData(callbackData);
getToken();
}
}
} 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 hash = window.location.hash.substring(1); // 去掉#号
let message_err = '';
if (hash) {
try {
const callbackData = JSON.parse(atob(hash));
const server_use = callbackData.server_use;
const client_uid = callbackData.client_uid;
const secret_key = callbackData.secret_key;
const driver_txt = callbackData.driver_txt;
const client_key = callbackData.client_key;
const access_token = callbackData.access_token;
const refresh_token = callbackData.refresh_token;
// 从历史记录清除#号部分,避免隐私信息泄漏
// 这只会在正常解析JSON后执行其他的hash不会被清除
// window.history.replaceState(null, null, window.location.pathname + window.location.search);
// 在Chrome 136测试发现通过History API操作不但不会修改记录反而还会多出一条记录。
// Chrome浏览器可以使用location.replace修改记录Firefox浏览器上此方法无效。
// 参见https://stackoverflow.com/questions/61711130/removing-sensitive-url-data-from-borwser-history
window.location.replace('#');
if (server_use == "true") {
document.getElementById("server_use").checked = true;
}
message_err = callbackData.message_err;
document.getElementById("site-select").value = driver_txt;
if (!driver_txt || driver_txt === "") {
document.getElementById("site-select").value = "onedrive_go";
}
document.getElementById("app-secret").value = client_key;
document.getElementById("client-id").value = client_uid;
document.getElementById("access-token").value = access_token;
document.getElementById("refresh-token").value = refresh_token;
if (secret_key) {
document.getElementById("secret-key").value = secret_key;
}
} catch (e) {
console.error('parse callback data error', e);
}
}
// 获取select元素和输入框元素
const siteSelect = document.getElementById('site-select');
const callbackUrlInput = document.getElementById('callback-url');
// 监听select的变化
siteSelect.addEventListener('change', function () {
const selectedValue = this.value.split("_")[0]; // 获取选中的value
// 更新输入框的值
callbackUrlInput.value = `https://api.oplist.org/${selectedValue}/callback`;
document.getElementById('secret-key-view').hidden = true;
if (siteSelect.value === "baiduyun_go") {
document.getElementById('secret-key-view').hidden = false;
}
});
document.getElementById('server_use').addEventListener('change', function () {
const clientIdInput = document.getElementById('client-id');
const appSecretInput = document.getElementById('app-secret');
const secretKeyInput = document.getElementById('secret-key');
const server_flag = document.getElementById('server_use');
if ((siteSelect.value === "alicloud_qr"
|| siteSelect.value === "123cloud_go"
|| siteSelect.value === "onedrive_cn"
|| siteSelect.value === "onedrive_us"
|| siteSelect.value === "onedrive_de"
) && server_flag.checked) {
server_flag.checked = false;
Swal.fire({
position: 'top',
icon: 'error',
title: '暂不支持',
html: "阿里云、123云盘、OneDrive非官方区域暂不支持使用官方密钥",
showConfirmButton: true,
});
return;
}
if (this.checked) {
// 禁用输入框并清空内容
clientIdInput.disabled = true;
clientIdInput.value = '';
appSecretInput.disabled = true;
appSecretInput.value = '';
secretKeyInput.disabled = true;
secretKeyInput.value = '';
} else {
// 启用输入框
clientIdInput.disabled = false;
appSecretInput.disabled = false;
secretKeyInput.disabled = false;
}
});
// 页面加载时初始化回调地址
window.onload = function () {
siteSelect.dispatchEvent(new Event('change'));
};
if (message_err !== '') {
Swal.fire({
position: 'top',
icon: 'error',
title: '授权失败',
html: message_err,
showConfirmButton: true,
});
}
}