Files
Seewo-HugoAura/src/aura/ui/pages/configSubPages/behaviourCtrl/settings/basic.js
2025-11-25 00:30:45 +08:00

220 lines
7.3 KiB
JavaScript
Executable File

const REQUIRE_BASE = ".";
const path = require("path");
const AIKARI_ROOT_DIR = path.join("C:\\ProgramData", "HugoAura", "Aikari");
const {
updateAikariConfigToRemote,
updateAikariTelemetryConfigToRemote,
} = require(`${REQUIRE_BASE}/../../../../composables/aikariConfigManager`);
const basicSettings = [
{
id: 0,
categoryName: "可访问性",
child: [
{
index: 0,
id: "aikarWsPreferPort",
type: "input",
subType: "number",
name: "Aikari WS 默认监听端口",
description: "Aikari WebSocket 服务器默认监听的端口",
reactive: true,
reactiveVal: ["root.settings"],
restart: false,
reload: false,
aikariRequired: true,
restartAikari: false,
warning: true,
warningContent: "Aikari 仍会在默认端口被占用时, 自动随机端口重试",
associateVal: null,
auraIf: () => true,
defaultValue: "",
placeHolder: "输入端口号 (10000 ~ 65535)",
valueGetter: () => {
if (!global.__HUGO_AURA__.aikariSettings) return "";
return global.__HUGO_AURA__.aikariSettings.wsPreferPort;
},
callbackFn: (newVal) => {
if (newVal === "" || !newVal)
return { valid: false, hint: "请输入端口号" };
const numberNewVal = Number(newVal);
if (
numberNewVal === NaN ||
!(10000 <= numberNewVal) ||
!(newVal <= 65535)
) {
return { valid: false, hint: "请输入合法的端口号 (10000 ~ 65535)" };
}
global.__HUGO_AURA__.aikariSettings.wsPreferPort = numberNewVal;
updateAikariConfigToRemote("wsPreferPort", numberNewVal);
return { valid: true };
},
},
{
index: 1,
id: "aikariForceRegenWsTlsCert",
type: "switch",
name: "重新生成 WS TLS 证书",
description: "Aikari 将在下次启动时重新生成用于 WebSocket 的 TLS 证书",
reactive: true,
reactiveVal: ["root.settings"],
restart: false,
reload: false,
aikariRequired: true,
restartAikari: true,
associateVal: null,
auraIf: () => true,
defaultValue: false,
valueGetter: () => {
if (!global.__HUGO_AURA__.aikariSettings) return "";
return global.__HUGO_AURA__.aikariSettings.tls.regenWsCertNextLaunch;
},
callbackFn: (newVal) => {
if (typeof newVal !== "boolean") return false;
global.__HUGO_AURA__.aikariSettings.tls.regenWsCertNextLaunch =
newVal;
updateAikariConfigToRemote("tls.regenWsCertNextLaunch", newVal);
return true;
},
},
],
},
{
id: 1,
categoryName: "分析",
child: [
{
index: 0,
id: "aikariTelemetryCtrl",
type: "switch",
name: "启用错误收集与分析",
description: "启用后, Aikari 将在发生错误时上报自托管 Sentry",
reactive: true,
reactiveVal: ["root.settings"],
restart: false,
reload: false,
aikariRequired: false,
restartAikari: false,
warning: true,
warningContent:
"我们不会收集您的设备用户名、管家内的学校名等信息, 也不会保存您的 IP 地址, 所有上传的数据仅供调试使用, 不会与任何第三方共享",
associateVal: null,
auraIf: () => true,
defaultValue: false,
valueGetter: () => {
if (
!global.__HUGO_AURA__.aikariSettings ||
!global.__HUGO_AURA__.aikariStats.connected
) {
const fs = require("fs");
return fs.existsSync(
path.join(AIKARI_ROOT_DIR, ".telemetryEnabled")
);
} else {
return global.__HUGO_AURA__.aikariSettings.telemetryEnabled;
}
},
callbackFn: (newVal) => {
if (
!global.__HUGO_AURA__.aikariSettings ||
!global.__HUGO_AURA__.aikariStats.connected
) {
if (newVal) {
const fs = require("fs");
fs.appendFile(
path.join(AIKARI_ROOT_DIR, ".telemetryEnabled"),
"",
(err) => {
if (err) console.warn(err);
}
);
return true;
} else {
const fs = require("fs");
try {
fs.unlinkSync(path.join(AIKARI_ROOT_DIR, ".telemetryEnabled"));
return true;
} catch (err) {
console.error("Error removing telemetry flag: ", err);
}
}
} else {
global.__HUGO_AURA__.aikariSettings.telemetryEnabled = newVal;
updateAikariTelemetryConfigToRemote(newVal);
return true;
}
},
},
{
index: 1,
id: "aikariTelemetryId",
type: "button",
style: "outline",
name: "Aikari Telemetry ID",
reactive: true,
reactiveVal: ["telemetry"],
restart: false,
reload: false,
aikariRequired: true,
restartAikari: false,
warning: true,
warningContent: "此标识符完全在初始化时随机生成, 与设备特征无关",
associateVal: ["telemetry"],
auraIf: () => true,
alwaysEnable: true,
buttonContent: "复制",
valueGetter: async () => {
if (!global.__HUGO_AURA_UI_REACTIVES__.subConfig.behaviourCtrl)
global.__HUGO_AURA_UI_REACTIVES__.subConfig.behaviourCtrl = {};
const getIdPromise = new Promise((resolve) => {
setTimeout(() => {
const fs = require("fs");
const telemetryIdPath = path.join(
AIKARI_ROOT_DIR,
".telemetryId"
);
if (fs.existsSync(telemetryIdPath)) {
const fileContent = fs
.readFileSync(telemetryIdPath, { encoding: "utf-8" })
.trim();
global.__HUGO_AURA_UI_REACTIVES__.subConfig.behaviourCtrl.telemetryId =
fileContent;
resolve("标识符: " + fileContent);
return;
}
global.__HUGO_AURA_UI_REACTIVES__.subConfig.behaviourCtrl.telemetryId =
null;
resolve("未能获取标识符, Aikari 未安装或未初始化");
return;
}, 1000);
});
return await getIdPromise;
},
callbackFn: async (event) => {
if (
global.__HUGO_AURA_UI_REACTIVES__.subConfig.behaviourCtrl
.telemetryId
) {
await navigator.clipboard.writeText(
global.__HUGO_AURA_UI_REACTIVES__.subConfig.behaviourCtrl
.telemetryId
);
event.target.textContent = "已复制";
} else {
event.target.textContent = "复制失败";
}
},
},
],
},
];
module.exports = { basicSettings };