| | |
| | | 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 |
| | | 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
|
| | | } |