package wifinetworks import ( "encoding/json" "errors" "io/ioutil" "log" ) type Wifinetwork struct { SSID string `json:"SSID"` PSK string `json:"PSK"` Priority bool `json:"Priority"` } type Wifinetworks struct { Networks []Wifinetwork } func (w *Wifinetworks) Load() { s, err := ioutil.ReadFile("networks.json") if err != nil { log.Println("No saved networks") return } err = json.Unmarshal(s, &w.Networks) if err != nil { log.Println("Error decofing known networks: ", err) return } log.Printf("Loaded %d networks from config\n", len(w.Networks)) } func (w *Wifinetworks) Save() { j, err := json.Marshal(w.Networks) if err != nil { log.Fatal("JSON Marshal: ", err) } err = ioutil.WriteFile("networks.json", j, 0700) } func (w *Wifinetworks) RemoveSSID(s string) { var n Wifinetworks for i := range w.Networks { if w.Networks[i].SSID != s { n.Networks = append(n.Networks, w.Networks[i]) } } w.Networks = n.Networks w.Save() } func (w *Wifinetworks) Find(ssid string) (Wifinetwork, error) { for n := range w.Networks { if w.Networks[n].SSID == ssid { return w.Networks[n], nil } } var bleh Wifinetwork return bleh, errors.New("Not found") } func (w *Wifinetworks) Add(n Wifinetwork) { w.RemoveSSID(n.SSID) w.Networks = append(w.Networks, n) w.Save() }