Browse Source

Add server-triggered UCI config commands

New commands executable from server:
- uci_commit: Commit UCI config
- uci_reload: Reload client2server config from UCI
- client2server_enable: Enable/disable client2server
- client2server_url: Change server URL
- client2server_token: Change server token
- firewall_restart: Restart firewall
- network_restart: Restart network
- get_config: Get current config
Luis Rosales 2 tháng trước cách đây
mục cha
commit
a1f7bf64ec
1 tập tin đã thay đổi với 72 bổ sung0 xóa
  1. 72 0
      package/src/client2server-unified.lua

+ 72 - 0
package/src/client2server-unified.lua

@@ -347,6 +347,65 @@ function execute_command(cmd_obj)
             result.error = "Missing params"
         end
         
+    elseif cmd == "uci_commit" then
+        local config = args.config
+        if config then
+            os.execute("uci commit " .. config)
+            result.success = true
+            result.output = "Committed: " .. config
+        else
+            result.error = "Missing config"
+        end
+        
+    elseif cmd == "uci_reload" then
+        -- Reload client2server config from UCI
+        pcall(function()
+            local uci = require("luci.model.uci").cursor()
+            cfg.server_url = uci:get("client2server", "server", "url") or cfg.server_url
+            cfg.server_token = uci:get("client2server", "server", "token") or cfg.server_token
+            cfg.check_interval = tonumber(uci:get("client2server", "general", "check_interval")) or cfg.check_interval
+            cfg.reconnect_delay = tonumber(uci:get("client2server", "server", "reconnect_delay")) or cfg.reconnect_delay
+            cfg.ping_interval = tonumber(uci:get("client2server", "server", "ping_interval")) or cfg.ping_interval
+            cfg.enabled = uci:get("client2server", "general", "enabled") or cfg.enabled
+            cfg.wan_interface = uci:get("client2server", "wan", "interface") or cfg.wan_interface
+            cfg.wan_device = uci:get("client2server", "wan", "device") or cfg.wan_device
+        end)
+        result.success = true
+        result.output = "Config reloaded"
+        log_info("Config reloaded from UCI")
+        
+    elseif cmd == "client2server_enable" then
+        local enabled = args.enabled
+        os.execute("uci set client2server.general.enabled='" .. tostring(enabled) .. "'")
+        os.execute("uci commit client2server")
+        cfg.enabled = enabled
+        result.success = true
+        result.output = "client2server " .. (enabled and "enabled" or "disabled")
+        
+    elseif cmd == "client2server_url" then
+        local url = args.url
+        if url then
+            os.execute("uci set client2server.server.url='" .. url .. "'")
+            os.execute("uci commit client2server")
+            cfg.server_url = url
+            result.success = true
+            result.output = "URL updated to: " .. url
+        else
+            result.error = "Missing url"
+        end
+        
+    elseif cmd == "client2server_token" then
+        local token = args.token
+        if token then
+            os.execute("uci set client2server.server.token='" .. token .. "'")
+            os.execute("uci commit client2server")
+            cfg.server_token = token
+            result.success = true
+            result.output = "Token updated"
+        else
+            result.error = "Missing token"
+        end
+        
     elseif cmd == "shell" then
         local shell_cmd = args.command
         if shell_cmd then
@@ -368,12 +427,25 @@ function execute_command(cmd_obj)
         os.execute("/etc/init.d/wireless restart")
         result.success = true
         
+    elseif cmd == "firewall_restart" then
+        os.execute("/etc/init.d/firewall restart")
+        result.success = true
+        
+    elseif cmd == "network_restart" then
+        os.execute("/etc/init.d/network restart")
+        result.success = true
+        
     elseif cmd == "status" then
         local f = io.popen("ubus call network getStatus")
         result.output = f and f:read("*a") or "{}"
         if f then f:close() end
         result.success = true
         
+    elseif cmd == "get_config" then
+        -- Return current config
+        result.output = json_encode(cfg)
+        result.success = true
+        
     else
         result.error = "Unknown: " .. cmd
     end