package controllers import ( "basic.com/valib/bhomeclient.git" "basic.com/valib/logger.git" "encoding/json" "errors" "fmt" "io/ioutil" "os" "os/exec" "reflect" "strings" "vamicro/extend/util" "vamicro/system-service/vo" ) type WifiController struct { } func (wc *WifiController) GetConfig(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply { r := &bhomeclient.Reply{ Success:true } wifif := util.GetVamicroPath()+"/wifi.config" if util.FileExists(wifif) { b, err := ioutil.ReadFile(wifif) if err == nil { var set vo.WifiConf if err = json.Unmarshal(b, &set);err == nil { r.Data = set } } } return r } func (wc *WifiController) SaveConf (h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply { var reqBody vo.WifiConf err := c.BindJSON(&reqBody) if err != nil { return &bhomeclient.Reply{Msg: err.Error()} } b, err := json.Marshal(reqBody) if err != nil { return &bhomeclient.Reply{Msg:err.Error()} } wifif := util.GetVamicroPath()+"/wifi.config" err = ioutil.WriteFile(wifif, b, os.ModePerm) if err != nil { return &bhomeclient.Reply{Msg:err.Error()} } var cmdArr []string cmdArr = append(cmdArr, "/opt/hostapd/bin/wifi_config.sh") err = reflectObjCmd(&cmdArr, reqBody) if err !=nil { return &bhomeclient.Reply{Msg:err.Error()} } cmd := strings.Join(cmdArr, " ") logger.Debug("WifiConf cmd: ", cmd) b, e := exec.Command(cmd).Output() if e == nil { return &bhomeclient.Reply{Success:true, Msg: "配置成功"} } return &bhomeclient.Reply{ Msg:string(b) } } //严格按照结构体的属性顺序生成sh参数,结构体的参数定义顺序不能变 func reflectObjCmd(cmdArr *[]string, d interface{}) error { v := reflect.ValueOf(d) for i:=0;i