221 lines
6.9 KiB
Go
221 lines
6.9 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"net/http"
|
|
"regexp"
|
|
)
|
|
|
|
// tracker handler
|
|
|
|
func save_tracker_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 len(mydeveui) != 16 {
|
|
log.Println("specified 'deveui' has invalid length")
|
|
fmt.Fprintf(response, "{ \"rc\": 8, \"msg\": \"specified deveui has invalid length\" }")
|
|
return
|
|
}
|
|
|
|
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]
|
|
|
|
// validate alias
|
|
match, _ := regexp.MatchString("^[a-zA-Z0-9 ]{1,25}$", myalias)
|
|
if !(match) {
|
|
log.Println("Url Param 'alias' is not valid")
|
|
fmt.Fprintf(response, "{ \"rc\": 9, \"msg\": \"alias is not valid\" }")
|
|
return
|
|
}
|
|
|
|
smsalarmactive, ok3 := request.URL.Query()["smsalarmactive"]
|
|
|
|
if !ok3 || len(smsalarmactive[0]) < 1 {
|
|
log.Println("Url Param 'smsalarmactive' is missing")
|
|
fmt.Fprintf(response, "{ \"rc\": 4, \"msg\": \"smsalarmactive must be specified in URL\" }")
|
|
return
|
|
}
|
|
mysmsalarmactive := smsalarmactive[0]
|
|
|
|
if !((mysmsalarmactive == "0") || (mysmsalarmactive == "1")) {
|
|
log.Println("Url Param 'smsalarmactive' is not valid")
|
|
fmt.Fprintf(response, "{ \"rc\": 10, \"msg\": \"smsalarmactive is not valid\" }")
|
|
return
|
|
}
|
|
|
|
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]
|
|
|
|
match1, _ := regexp.MatchString(`^\+[0-9]{11,11}$`, mysmsnumber)
|
|
if !(match1) {
|
|
log.Println("Url Param 'smsnumber' is not valid")
|
|
fmt.Fprintf(response, "{ \"rc\": 11, \"msg\": \"smsnumber is not valid, must be in in format +41791234567\" }")
|
|
return
|
|
}
|
|
|
|
emailalarmactive, ok5 := request.URL.Query()["emailalarmactive"]
|
|
|
|
if !ok5 || len(emailalarmactive[0]) < 1 {
|
|
log.Println("Url Param 'emailalarmactive' is missing")
|
|
fmt.Fprintf(response, "{ \"rc\": 12, \"msg\": \"emailalarmactive must be specified in URL\" }")
|
|
return
|
|
}
|
|
myemailalarmactive := emailalarmactive[0]
|
|
|
|
if !((myemailalarmactive == "0") || (myemailalarmactive == "1")) {
|
|
log.Println("Url Param 'emailalarmactive' is not valid")
|
|
fmt.Fprintf(response, "{ \"rc\": 13, \"msg\": \"emailalarmactive is not valid\" }")
|
|
return
|
|
}
|
|
|
|
email, ok6 := request.URL.Query()["email"]
|
|
|
|
if !ok6 {
|
|
log.Println("Url Param 'email' is missing")
|
|
fmt.Fprintf(response, "{ \"rc\": 14, \"msg\": \"email must be specified in URL\" }")
|
|
return
|
|
}
|
|
myemail := email[0]
|
|
|
|
match2, _ := regexp.MatchString(`^(([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5}){1,25})+([,.](([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5}){1,25})+)*$`, myemail)
|
|
if !(match2) {
|
|
log.Println("Url Param 'email' is not valid")
|
|
fmt.Fprintf(response, "{ \"rc\": 15, \"msg\": \"email is not valid, must be in in format max.mustermann@example.com\" }")
|
|
return
|
|
}
|
|
|
|
greenzone, ok7 := request.URL.Query()["greenzone"]
|
|
|
|
if !ok7 {
|
|
log.Println("Url Param 'greenzone' is missing")
|
|
fmt.Fprintf(response, "{ \"rc\": 16, \"msg\": \"greenzone must be specified in URL\" }")
|
|
return
|
|
}
|
|
mygreenzone := greenzone[0]
|
|
|
|
match3, _ := regexp.MatchString(`^$|^[0-9]+\.[0-9]+,[0-9]+\.[0-9]+,[0-9]+\.[0-9]+,[0-9]+\.[0-9]+$`, mygreenzone)
|
|
if !(match3) {
|
|
log.Println("Url Param 'greenzone' is not valid")
|
|
fmt.Fprintf(response, "{ \"rc\": 17, \"msg\": \"greenzone is not valid, must be in in 123.45,123.45,123.45,123.45\" }")
|
|
return
|
|
}
|
|
|
|
var mydev Dev
|
|
mydev.Deveui = mydeveui
|
|
mydev.Alias = myalias
|
|
mydev.SmsAlarmactive = mysmsalarmactive
|
|
mydev.Smsnumber = mysmsnumber
|
|
mydev.EmailAlarmactive = myemailalarmactive
|
|
mydev.Email = myemail
|
|
mydev.Greenzone = mygreenzone
|
|
|
|
// now we try to save the settings
|
|
err := updateTrackerSettings(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\" }")
|
|
}
|
|
}
|
|
|
|
func save_tracker_greenzoneHandler(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 len(mydeveui) != 16 {
|
|
log.Println("specified 'deveui' has invalid length")
|
|
fmt.Fprintf(response, "{ \"rc\": 8, \"msg\": \"specified deveui has invalid length\" }")
|
|
return
|
|
}
|
|
|
|
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))
|
|
|
|
greenzone, ok1 := request.URL.Query()["greenzone"]
|
|
|
|
if !ok1 {
|
|
log.Println("Url Param 'greenzone' is missing")
|
|
fmt.Fprintf(response, "{ \"rc\": 3, \"msg\": \"greenzone must be specified in URL\" }")
|
|
return
|
|
}
|
|
mygreenzone := greenzone[0]
|
|
|
|
match, _ := regexp.MatchString(`^$|^[0-9]+\.[0-9]+,[0-9]+\.[0-9]+,[0-9]+\.[0-9]+,[0-9]+\.[0-9]+$`, mygreenzone)
|
|
if !(match) {
|
|
log.Println("Url Param 'greenzone' is not valid")
|
|
fmt.Fprintf(response, "{ \"rc\": 17, \"msg\": \"greenzone is not valid, must be in in 123.45,123.45,123.45,123.45\" }")
|
|
return
|
|
}
|
|
|
|
// now we try to save the settings
|
|
err := updateTrackerGreenzone(mydeveui, mygreenzone)
|
|
|
|
if err != nil {
|
|
log.Println("Error to Update Greenzone")
|
|
fmt.Fprintf(response, "{ \"rc\": 6, \"msg\": \"error with updating greenzone\" }")
|
|
return
|
|
} else {
|
|
fmt.Fprintf(response, "{ \"rc\": 0, \"msg\": \"SUCCESS\" }")
|
|
}
|
|
|
|
} else {
|
|
fmt.Fprintf(response, "{ \"rc\": 7, \"msg\": \"Only available for logged in users\" }")
|
|
}
|
|
}
|