mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-09-21 09:28:14 +00:00
feat: 设备鉴权迁移至客户端 + 插件卸载保护
安全修复(客户端鉴权): - 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 插件路由:名称白名单校验防路径穿越、保留字路径保护
This commit is contained in:
@ -4,9 +4,9 @@ import (
|
||||
"log"
|
||||
"sync"
|
||||
|
||||
pubsdk "gitcode.com/JianFeeeee/homeagent-sdk/sdk"
|
||||
agentIO "gitcode.com/JianFeeeee/HomeAgent/internal/agent/io"
|
||||
"gitcode.com/JianFeeeee/HomeAgent/internal/events"
|
||||
pubsdk "gitcode.com/JianFeeeee/homeagent-sdk/sdk"
|
||||
)
|
||||
|
||||
// SDKVersion 是对外 SDK 版本号,与核心 meta.Version 保持一致。
|
||||
@ -47,6 +47,7 @@ const (
|
||||
StageScopeGlobal = pubsdk.StageScopeGlobal
|
||||
StageScopeOwnTools = pubsdk.StageScopeOwnTools
|
||||
)
|
||||
|
||||
type APIRegistrar = pubsdk.APIRegistrar
|
||||
type OutputChannelRegistrar = pubsdk.OutputChannelRegistrar
|
||||
type InputChannelRegistrar = pubsdk.InputChannelRegistrar
|
||||
@ -68,6 +69,9 @@ type PluginManager interface {
|
||||
ListLoadedPlugins() []string
|
||||
ListDisabledPlugins() []DisabledPluginInfo
|
||||
IsPluginDisabled(name string) bool
|
||||
// IsBuiltinPlugin 判断插件是否为内置插件(编译期工厂,init() 自注册)。
|
||||
// 内置插件只能禁用/启用,不能卸载。
|
||||
IsBuiltinPlugin(name string) bool
|
||||
DisablePlugin(name, by string) error
|
||||
EnablePlugin(name string) error
|
||||
// RemovePlugin 卸载插件:先停止(stop handlers + Stop),再执行插件注册的
|
||||
@ -253,13 +257,13 @@ func (s *PluginSDK) SelftestReset(scope string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *PluginSDK) Status() StatusAPI { return s.status }
|
||||
func (s *PluginSDK) Status() StatusAPI { return s.status }
|
||||
func (s *PluginSDK) Supervisor() SupervisorAPI { return s.supervisor }
|
||||
func (s *PluginSDK) Adapter() AdapterAPI { return s.adapter }
|
||||
func (s *PluginSDK) Tracker() TrackerAPI { return s.tracker }
|
||||
func (s *PluginSDK) Config() ConfigAPI { return s.config }
|
||||
func (s *PluginSDK) Tool() ToolAPI { return s.tool }
|
||||
func (s *PluginSDK) Indexer() IndexerAPI { return s.indexer }
|
||||
func (s *PluginSDK) Adapter() AdapterAPI { return s.adapter }
|
||||
func (s *PluginSDK) Tracker() TrackerAPI { return s.tracker }
|
||||
func (s *PluginSDK) Config() ConfigAPI { return s.config }
|
||||
func (s *PluginSDK) Tool() ToolAPI { return s.tool }
|
||||
func (s *PluginSDK) Indexer() IndexerAPI { return s.indexer }
|
||||
|
||||
func (s *PluginSDK) InjectInput(source, channel, eventType string, payload map[string]interface{}) {
|
||||
if s.iom != nil {
|
||||
|
||||
Reference in New Issue
Block a user