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<v.NumField();i++ {
|
field := v.Field(i)
|
switch field.Type().Kind().String() {
|
case "string":
|
*cmdArr = append(*cmdArr, fmt.Sprintf("'%s'",field.String()))
|
case "int":
|
*cmdArr = append(*cmdArr, fmt.Sprintf("%d",field.Int()))
|
case "bool":
|
bv := 0
|
if field.Bool() {
|
bv = 1
|
}
|
*cmdArr = append(*cmdArr, fmt.Sprintf("%d", bv))
|
default:
|
logger.Error("unknown field type:", field.Type().Kind().String())
|
return errors.New("unknown field")
|
}
|
}
|
return nil
|
}
|