mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-09-21 17:38:10 +00:00
安全修复(客户端鉴权): - remotedevice 服务端移除授权状态存储(authorized map/SetAuthorized/handleDeviceAuth) - DeviceMeta.Authorized 改为设备 hello 自报,服务端仅透传展示 - device_ctl_* 工具移除服务端授权检查,无条件转发,设备端自行决定是否执行 - 共享设备桥库 Bridge 新增本地 authorized 状态,未授权收到 cmd 直接拒绝 - waiter: --device-authorized / device_authorized 配置控制本地授权 - GUI: 授权存 gui-prefs 本地文件;设备页仅本机可切换开关 - webui /device/auth 旧路径返回 410 Gone - 根因:agent 可经 config_set 篡改服务端授权配置自行授权设备 插件管理强化: - 内置插件禁止卸载(IsBuiltinPlugin + 409),外部插件卸载即时生效 - 卸载不存在插件返回 404;移除误导性 reload_required 提示 - webui 插件路由:名称白名单校验防路径穿越、保留字路径保护
57 lines
1.9 KiB
JavaScript
57 lines
1.9 KiB
JavaScript
const { contextBridge, ipcRenderer } = require("electron");
|
|
|
|
contextBridge.exposeInMainWorld("homeagent", {
|
|
win: {
|
|
minimize: () => ipcRenderer.invoke("window:minimize"),
|
|
toggleMaximize: () => ipcRenderer.invoke("window:toggleMaximize"),
|
|
close: () => ipcRenderer.invoke("window:close"),
|
|
},
|
|
connections: {
|
|
list: () => ipcRenderer.invoke("connections:list"),
|
|
add: (conn) => ipcRenderer.invoke("connections:add", conn),
|
|
update: (id, updates) =>
|
|
ipcRenderer.invoke("connections:update", { id, updates }),
|
|
delete: (id) => ipcRenderer.invoke("connections:delete", id),
|
|
setCurrent: (id) => ipcRenderer.invoke("connections:setCurrent", id),
|
|
},
|
|
cli: {
|
|
request: (socketPath, apiKey, line) =>
|
|
ipcRenderer.invoke("cli:request", { socketPath, apiKey, line }),
|
|
},
|
|
webui: {
|
|
setAuth: (url, cookie, headers, username, password) =>
|
|
ipcRenderer.invoke("webui:setAuth", {
|
|
url,
|
|
cookie,
|
|
headers,
|
|
username,
|
|
password,
|
|
}),
|
|
openLogin: (url, username, password) =>
|
|
ipcRenderer.invoke("webui:openLogin", { url, username, password }),
|
|
onLoginResult: (cb) =>
|
|
ipcRenderer.on("webui:login-result", (_e, d) => cb(d)),
|
|
},
|
|
cacheBg: (src) => ipcRenderer.invoke("bg:cache", { src }),
|
|
log: (m) => ipcRenderer.invoke("log:r", m),
|
|
prefs: {
|
|
get: () => ipcRenderer.invoke("prefs:get"),
|
|
set: (p) => ipcRenderer.invoke("prefs:set", p),
|
|
},
|
|
device: {
|
|
identity: () => ipcRenderer.invoke("device:identity"),
|
|
},
|
|
deviceBridge: {
|
|
get: () => ipcRenderer.invoke("device-bridge:get"),
|
|
set: (cfg) => ipcRenderer.invoke("device-bridge:set", cfg),
|
|
setAuthorized: (auth) =>
|
|
ipcRenderer.invoke("device-bridge:setAuthorized", auth),
|
|
},
|
|
displays: {
|
|
list: () => ipcRenderer.invoke("displays:list"),
|
|
},
|
|
audio: {
|
|
list: () => ipcRenderer.invoke("audio:list"),
|
|
},
|
|
});
|