// BeepDevice triggers a device beep func BeepDevice(w http.ResponseWriter, req *http.Request) { setHeaders(w) var sc model.ServiceCommand if err := json.NewDecoder(req.Body).Decode(&sc); err != nil { writeError(w, model.CommandMalformed) return } if !checkServiceCommand(sc) { w.WriteHeader(http.StatusForbidden) json.NewEncoder(w).Encode(sc) return } cs, err := authenticate(w, sc.Creds) if err != nil { return } d, err := getDevices(w, cs) if err != nil { return } dv, err := d.GetDeviceByName(sc.Name) if err != nil { writeError(w, fmt.Sprintf(model.NoDeviceName, err)) return } if sc.Message == "" { sc.Message = model.DefaultMessage } r := model.ServiceResponse{false, fmt.Sprintf(model.PlayingSound, dv.Name, sc.Message)} w.WriteHeader(http.StatusOK) if err := json.NewEncoder(w).Encode(r); err != nil { panic(err) } commands.PlaySound(cs, dv, sc.Message) return }
// main can either accept every arg as a flag, or you can step through in // an interactive manner. func main() { // console flags uf := flag.String("user", "", model.FlagAppleID) pf := flag.String("pass", "", model.FlagApplePass) nf := flag.String("name", "", model.FlagDeviceName) mf := flag.String("msg", model.DefaultMessage, model.FlagDeviceMessage) sf := flag.Bool("service", false, model.FlagRunService) portf := flag.Int("port", 9443, model.FlagServicePort) certf := flag.String("key", "", model.FlagServiceKey) keyf := flag.String("cert", "", model.FlagServiceCert) var un, pw, dn, msg string flag.Parse() ufVal := *uf pfVal := *pf nfVal := *nf mfVal := *mf sfVal := *sf portVal := *portf keyVal := *keyf certVal := *certf // check for service mode if sfVal { service.StartService(portVal, certVal, keyVal) return } // print welcome! console.PrintWelcomeBanner() // defaults if ufVal == "" { un = console.CollectUsername() } else { un = strings.TrimSpace(ufVal) } if pfVal == "" { pw = console.CollectPassword() } else { pw = strings.TrimSpace(pfVal) } if nfVal == "" { dn = "" // device name } else { dn = strings.TrimSpace(nfVal) } msg = strings.TrimSpace(mfVal) var cr = model.Creds{AppleID: un, Password: pw} var cs model.CloudService cs, err := commands.Authenticate(cr) if err != nil { console.PrintAuthFailed(err) return } d, err := commands.RefreshDeviceList(&cs) if err != nil { fmt.Printf("\n"+model.DeviceRefreshFailed, err) return } var dID int var dv *model.Device if nfVal == "" { console.PrintDevices(&d) dID = console.CollectDeviceSelection(len(d.Devices)) dv, err = d.GetDeviceByIndex(dID - 1) if err != nil { console.PrintNoDeviceFound(string(dID)) return } } else { dv, err = d.GetDeviceByName(dn) if err != nil { console.PrintNoDeviceFound(dn) return } } console.PrintPlayingSound(dv.Name, msg) commands.PlaySound(&cs, dv, msg) }