diff --git a/helper.go b/helper.go new file mode 100644 index 0000000..d04795b --- /dev/null +++ b/helper.go @@ -0,0 +1,17 @@ +package main + +import ( + "log" +) + +// Contains tells whether a contains x. +func Contains(a []string, x string) bool { + log.Println("Search for: "+x) + for _, n := range a { + log.Println("Piece of Array: "+n) + if x == n { + return true + } + } + return false +} diff --git a/main.go b/main.go index ce0a002..27ca2f1 100644 --- a/main.go +++ b/main.go @@ -96,6 +96,7 @@ func main() { http.HandleFunc("/confirm", confirmHandler) http.HandleFunc("/metrics", metricsHandler) http.HandleFunc("/lastmetrics", lastmetricsHandler) + http.HandleFunc("/save_scale_settings", save_scale_settingsHandler) logit("Starting Web Application...") http.ListenAndServe("127.0.0.1:4000", nil) diff --git a/metrics.go b/metrics.go index 4b99ebd..29608dd 100644 --- a/metrics.go +++ b/metrics.go @@ -24,19 +24,6 @@ type OneMetric struct { BatteryPercent string } -// Contains tells whether a contains x. -func Contains(a []string, x string) bool { - log.Println("Search for: "+x) - for _, n := range a { - log.Println("Piece of Array: "+n) - if x == n { - return true - } - } - return false -} - - // metrics handler func metricsHandler(response http.ResponseWriter, request *http.Request) { diff --git a/persistence.go b/persistence.go index 8f10e01..d1a38c5 100644 --- a/persistence.go +++ b/persistence.go @@ -4,7 +4,6 @@ import ( "time" "strings" "log" - "encoding/json" "crypto/rand" "golang.org/x/crypto/bcrypt" "github.com/gomodule/redigo/redis" @@ -50,56 +49,11 @@ func ping(c redis.Conn) error { return nil } -// User is a simple user struct for this example -type User struct { - Email string `json:"email"` - Password string `json:"password"` - NewPassword string `json:"new_password"` - ConfirmId string `json:"confirm_id"` - LastLogin string `json:"last_login"` - MyDevs string `json:"my_devs"` - -} - type Dev struct { - Deveui string `json:"deveui"` - Alias string `json:"alias"` - Alarmactive string `json:"alarmactive"` - Smsnumber string `json:"smsnumber"` - -} - -func setStruct(c redis.Conn, usr User) error { - - // serialize User object to JSON - json, err := json.Marshal(usr) - if err != nil { - return err - } - - // SET object - _, err = c.Do("SET", userPrefix+usr.Email, json) - if err != nil { - return err - } - - return nil -} - -func getStruct(c redis.Conn, username string) (User, error) { - - usr := User{} - s, err := redis.String(c.Do("GET", userPrefix+username)) - if err == redis.ErrNil { - logit("User does not exist:"+username) - } else if err != nil { - return usr, err - } - - err = json.Unmarshal([]byte(s), &usr) - - return usr, nil - + Deveui string + Alias string + Alarmactive string + Smsnumber string } func initDB() { @@ -126,6 +80,21 @@ func closeDB() { globalPool.Close() } + +func updateScaleSettings(scaleSettings Dev) error { + conn := globalPool.Get() + defer conn.Close() + + // SET object + _, err := conn.Do("HMSET", devPrefix+scaleSettings.Deveui, "alias", scaleSettings.Alias, "alarmactive", scaleSettings.Alarmactive, "smsnumber", scaleSettings.Smsnumber) + if err != nil { + return err + } + + return nil +} + + func checkUserAvailable(username string) bool { logit("checkUserAvailable: User: "+username) conn := globalPool.Get() @@ -354,3 +323,4 @@ func confirmUser(confirm_id string) { return } } + diff --git a/scales.go b/scales.go new file mode 100644 index 0000000..0829622 --- /dev/null +++ b/scales.go @@ -0,0 +1,80 @@ +package main + +import ( + "fmt" + "log" + "net/http" +) + +// scales handler + +func save_scale_settingsHandler(response http.ResponseWriter, request *http.Request) { + name := getUserName(request) + if name != "" { + + deveui, ok := request.URL.Query()["deveui"] + + if !ok || len(deveui[0]) < 1 { + log.Println("Url Param 'deveui' is missing") + fmt.Fprintf(response, "{ \"rc\": 1, \"msg\": \"deveui must be specified in URL\" }") + return + } + // Query()["deveui"] will return an array of items, + // we only want the single item. + mydeveui := deveui[0] + + if !(Contains(getMyDevs(name),mydeveui)) { + log.Println("specified 'deveui' does not belong to this user") + fmt.Fprintf(response, "{ \"rc\": 2, \"msg\": \"specified deveui does not belong to this user\" }") + return + } + + log.Println("Url Param 'deveui' is: " + string(mydeveui)) + + alias, ok2 := request.URL.Query()["alias"] + + if !ok2 || len(alias[0]) < 1 { + log.Println("Url Param 'alias' is missing") + fmt.Fprintf(response, "{ \"rc\": 3, \"msg\": \"alias must be specified in URL\" }") + return + } + myalias := alias[0] + + alarmactive, ok3 := request.URL.Query()["alarmactive"] + + if !ok3 || len(alarmactive[0]) < 1 { + log.Println("Url Param 'alarmactive' is missing") + fmt.Fprintf(response, "{ \"rc\": 4, \"msg\": \"alarmactive must be specified in URL\" }") + return + } + myalarmactive := alarmactive[0] + + smsnumber, ok4 := request.URL.Query()["smsnumber"] + + if !ok4 || len(smsnumber[0]) < 1 { + log.Println("Url Param 'smsnumber' is missing") + fmt.Fprintf(response, "{ \"rc\": 5, \"msg\": \"smsnumber must be specified in URL\" }") + return + } + mysmsnumber := smsnumber[0] + var mydev Dev + mydev.Deveui = mydeveui + mydev.Alias = myalias + mydev.Alarmactive = myalarmactive + mydev.Smsnumber = mysmsnumber + + // now we try to save the settings + err := updateScaleSettings(mydev) + + if err != nil { + log.Println("Error to Update Device Settings") + fmt.Fprintf(response, "{ \"rc\": 6, \"msg\": \"error with saving device settings\" }") + return + } else { + fmt.Fprintf(response, "{ \"rc\": 0, \"msg\": \"SUCCESS\" }") + } + + } else { + fmt.Fprintf(response, "{ \"rc\": 7, \"msg\": \"Only available for logged in users\" }") + } +} diff --git a/snippets/scales.html b/snippets/scales.html index 869d553..946a71a 100644 --- a/snippets/scales.html +++ b/snippets/scales.html @@ -9,11 +9,16 @@