add additional config settings to modify

This commit is contained in:
Joerg Lehmann 2021-06-02 17:48:46 +02:00
parent b2a1fd7bd1
commit 81e84baa35
5 changed files with 361 additions and 6 deletions

View File

@ -19,6 +19,11 @@ type OneMetric struct {
DeveuiJS template.JS
Alias string
Readonly bool
Smsalarmactive string
Smsnumber string
Emailalarmactive string
Email string
Greenzone string
Timestamp string
PosTimestamp string
Lat string
@ -458,6 +463,11 @@ func getLastMetrics(deveui string) OneMetric {
res.LonJS = template.JS(res.Lon)
res.Alias = getDevAlias(deveui)
res.Smsalarmactive = getDevSmsalarmactive(deveui)
res.Smsnumber = getDevSmsnumber(deveui)
res.Emailalarmactive = getDevEmailalarmactive(deveui)
res.Email = getDevEmail(deveui)
res.Greenzone = getDevGreenzone(deveui)
res.Readonly = false
res.ActiveUntil = getActiveUntil(deveui)
res.DaysUntilDeactivated = CalcDaysUntil(res.ActiveUntil)

View File

@ -52,9 +52,14 @@ func ping(c redis.Conn) error {
}
type Dev struct {
Deveui string
Alias string
ActiveUntil string // Abo bezahlt bis TT.MM.YYYY
Deveui string
Alias string
SmsAlarmactive string
Smsnumber string
EmailAlarmactive string
Email string
Greenzone string
ActiveUntil string // Abo bezahlt bis TT.MM.YYYY
}
func initDB() {
@ -104,7 +109,13 @@ func updateTrackerSettings(trackerSettings Dev) error {
defer conn.Close()
// SET object
_, err := conn.Do("HMSET", devPrefix+trackerSettings.Deveui, "alias", trackerSettings.Alias)
_, err := conn.Do("HMSET", devPrefix+trackerSettings.Deveui, "alias", trackerSettings.Alias,
"smsalarmactive", trackerSettings.SmsAlarmactive,
"smsnumber", trackerSettings.Smsnumber,
"emailalarmactive", trackerSettings.EmailAlarmactive,
"email", trackerSettings.Email,
"greenzone", trackerSettings.Greenzone)
if err != nil {
return err
}
@ -171,6 +182,116 @@ func getDevAlias(deveui string) string {
return res
}
func getDevSmsalarmactive(deveui string) string {
res := "0"
if deveui == "" {
return res
}
conn := globalPool.Get()
defer conn.Close()
logit("getDevSmslarmactive: Deveui: " + deveui)
smsalarmactive, err := redis.String(conn.Do("HGET", devPrefix+deveui, "smsalarmactive"))
if err == nil {
logit("getDevSmsalarmactive: smsalarmactive: " + smsalarmactive)
res = smsalarmactive
} else {
log.Print(err)
}
return res
}
func getDevSmsnumber(deveui string) string {
res := "+4179XXXXXXX"
if deveui == "" {
return res
}
conn := globalPool.Get()
defer conn.Close()
logit("getDevSmsnumber: Deveui: " + deveui)
smsnumber, err := redis.String(conn.Do("HGET", devPrefix+deveui, "smsnumber"))
if err == nil {
logit("getDevSmsnumber: smsnumber: " + smsnumber)
res = smsnumber
} else {
log.Print(err)
}
return res
}
func getDevEmailalarmactive(deveui string) string {
res := "0"
if deveui == "" {
return res
}
conn := globalPool.Get()
defer conn.Close()
logit("getDevEmailarmactive: Deveui: " + deveui)
emailalarmactive, err := redis.String(conn.Do("HGET", devPrefix+deveui, "emailalarmactive"))
if err == nil {
logit("getDevEmailarmactive: emailalarmactive: " + emailalarmactive)
res = emailalarmactive
} else {
log.Print(err)
}
return res
}
func getDevEmail(deveui string) string {
res := ""
if deveui == "" {
return res
}
conn := globalPool.Get()
defer conn.Close()
logit("getDevEmail: Deveui: " + deveui)
email, err := redis.String(conn.Do("HGET", devPrefix+deveui, "email"))
if err == nil {
logit("getDevEmail: email: " + email)
res = email
} else {
log.Print(err)
}
return res
}
func getDevGreenzone(deveui string) string {
res := ""
if deveui == "" {
return res
}
conn := globalPool.Get()
defer conn.Close()
logit("getDevGreenzone: Deveui: " + deveui)
greenzone, err := redis.String(conn.Do("HGET", devPrefix+deveui, "greenzone"))
if err == nil {
logit("getDevGreenzone: greenzone: " + greenzone)
res = greenzone
} else {
log.Print(err)
}
return res
}
func getActiveUntil(deveui string) string {
res := ""

View File

@ -35,6 +35,48 @@
<p id="alias_errormsg" class="help is-danger"></p>
</div>
<div class="field">
<div class="control checkboxes">
<label for="smscheckbox" class="checkbox"><input id="smscheckbox" type="checkbox" /><span> SMS Alarmierung aktiv</span></label>
</div>
</div>
<div class="field">
<label class="label">Alarmnummer (SMS)</label>
<div class="control has-icons-right">
<input id="smsnumber" class="input" type="text" maxlength="16"> <span id="smsnumber_exclamation" class="icon is-small is-right">
<i class="fas fa-exclamation-triangle"></i>
</span>
</div>
<p id="smsnumber_errormsg" class="help is-danger"></p>
</div>
<div class="field">
<div class="control checkboxes">
<label for="emailcheckbox" class="checkbox"><input id="emailcheckbox" type="checkbox" /><span> E-Mail Alarmierung aktiv</span></label>
</div>
</div>
<div class="field">
<label class="label">Alarm E-Mail (SMS)</label>
<div class="control has-icons-right">
<input id="email" class="input" type="text" maxlength="50"> <span id="email_exclamation" class="icon is-small is-right">
<i class="fas fa-exclamation-triangle"></i>
</span>
</div>
<p id="email_errormsg" class="help is-danger"></p>
</div>
<div class="field">
<label class="label">Koordination Gr&uuml;ne Zone</label>
<div class="control has-icons-right">
<input id="greenzone" class="input" type="text" maxlength="50"> <span id="greenzone_exclamation" class="icon is-small is-right">
<i class="fas fa-exclamation-triangle"></i>
</span>
</div>
<p id="greenzone_errormsg" class="help is-danger"></p>
</div>
<div class="is-size-7">
Device ID: <span id="deveui"></span>
</div>
@ -102,6 +144,11 @@ Sie erhalten eine E-Mail, sobald die Zahlung erfolgreich abgeschlossen ist.
{{range .LastMetrics}}
<div class="column tracker is-full notification is-light">
<p class="is-size-2 is-size-5-mobile has-text-centered has-text-weight-bold" ><span class="alias" id="alias_{{.Deveui}}">{{.Alias}}</span>{{ if not .Readonly }}<a class="show-modal" class="block-link"><span style="float:right;" class="icon is-size-4 is-size-5-mobile"><i class="fa fa-cog"></i></span></a>{{ end }}</p>
<p id="smsalarmactive_{{.Deveui}}" hidden>{{.Smsalarmactive}}</p>
<p id="smsnumber_{{.Deveui}}" hidden>{{.Smsnumber}}</p>
<p id="emailalarmactive_{{.Deveui}}" hidden>{{.Emailalarmactive}}</p>
<p id="email_{{.Deveui}}" hidden>{{.Email}}</p>
<p id="greenzone_{{.Deveui}}" hidden>{{.Greenzone}}</p>
<p id="lastmeasurement_{{.Deveui}}" class="has-text-centered">letzte &uuml;bermittelte Messung: {{.Timestamp}}</p>
<p id="batpercent_{{.Deveui}}" class="has-text-centered">{{.BatteryPercentHTML}}</p>
<div id="{{.Deveui}}" class="columns mt-3">

View File

@ -5,7 +5,14 @@ var stripe_pk = "";
function validate(what, text) {
if (what == 'alias') {
var re = /^[a-zA-Z0-9 ]{1,25}$/;
} else if (what == 'smsnumber') {
var re = /^\+[0-9]{11,11}$/;
} else if (what == 'email') {
var re = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
} else if (what == 'greenzone') {
var re = /^$|^[0-9]+\.[0-9]+,[0-9]+\.[0-9],[0-9]+\.[0-9],[0-9]+\.[0-9]$/;
}
return re.test(text);
}
@ -46,11 +53,37 @@ $(document).ready(function () {
abos_to_buy = {};
$(".show-modal").click(function () {
$("#alias_exclamation").hide();
$("#smsnumber_exclamation").hide();
$("#email_exclamation").hide();
$("#greenzone_exclamation").hide();
var alias = $(this).prev().html();
var deveui = $(this).prev().attr('id').replace("alias_", "");
$('#deveui').html(deveui);
var smsalarmactive = $('#smsalarmactive_'+deveui).html();
var smsnumber = $('#smsnumber_'+deveui).html();
var emailalarmactive = $('#emailalarmactive_'+deveui).html();
var email = $('#email_'+deveui).html();
var greenzone = $('#greenzone_'+deveui).html();
$("#alias").val(alias);
if (smsalarmactive == "1") {
$('#smscheckbox').prop('checked', true);
} else {
$('#smscheckbox').prop('checked', false);
}
$("#smsnumber").val(smsnumber);
if (emailalarmactive == "1") {
$('#emailcheckbox').prop('checked', true);
} else {
$('#emailcheckbox').prop('checked', false);
}
$("#email").val(email);
$("#greenzone").val(greenzone);
$("#modal").addClass("is-active");
});
@ -140,6 +173,15 @@ $(document).ready(function () {
});
$("#modal-save").click(function () {
var smsalarmactive = "0";
if ($('#smscheckbox').prop('checked')) {
smsalarmactive = "1";
}
var emailalarmactive = "0";
if ($('#emailcheckbox').prop('checked')) {
emailalarmactive = "1";
}
// Validation Code
var is_valid = true;
if (!validate('alias', $('#alias').val())) {
@ -153,6 +195,39 @@ $(document).ready(function () {
$("#alias_exclamation").hide();
}
if (!validate('smsnumber',$('#smsnumber').val())) {
$('#smsnumber_errormsg').html('Beispiel einer g&uuml;ltigen SMS Nummer: +41761234567');
$("#smsnumber").addClass("is-danger");
$("#smsnumber_exclamation").show();
is_valid = false;
} else {
$('#smsnumber_errormsg').html('');
$("#smsnumber").removeClass("is-danger");
$("#smsnumber_exclamation").hide();
}
if (!validate('email',$('#email').val())) {
$('#email_errormsg').html('Beispiel einer g&uuml;ltigen E-Mail Adresse: max.mustermann@example.com');
$("#email").addClass("is-danger");
$("#email_exclamation").show();
is_valid = false;
} else {
$('#email_errormsg').html('');
$("#email").removeClass("is-danger");
$("#email_exclamation").hide();
}
if (!validate('greenzone',$('#greenzone').val())) {
$('#greenzone_errormsg').html('Eingabe: lat_min,lon_min,lat_max,lon_max oder aber leeres Feld');
$("#greenzone").addClass("is-danger");
$("#greenzone_exclamation").show();
is_valid = false;
} else {
$('#greenzone_errormsg').html('');
$("#greenzone").removeClass("is-danger");
$("#greenzone_exclamation").hide();
}
if (!(is_valid)) {
return;
}
@ -163,11 +238,30 @@ $(document).ready(function () {
dataType: "json",
data: {
deveui: $('#deveui').html(),
alias: $('#alias').val()
alias: $('#alias').val(),
smsnumber: $("#smsnumber").val(),
smsalarmactive: smsalarmactive,
email: $("#email").val(),
emailalarmactive: emailalarmactive,
greenzone: $("#greenzone").val()
},
success: function (response) {
if (response.rc == 0) {
$('#alias_' + $('#deveui').html()).html($('#alias').val());
$('#alias_'+$('#deveui').html()).html($('#alias').val());
var smsalarmactive = "0";
if ($('#smscheckbox').prop('checked')) {
smsalarmactive = "1";
}
$('#smsalarmactive_'+$('#deveui').html()).html(smsalarmactive);
$('#smsnumber_'+$('#deveui').html()).html($('#smsnumber').val());
var emailalarmactive = "0";
if ($('#emailcheckbox').prop('checked')) {
emailalarmactive = "1";
}
$('#emailalarmactive_'+$('#deveui').html()).html(emailalarmactive);
$('#email_'+$('#deveui').html()).html($('#email').val());
$('#greenzone_'+$('#deveui').html()).html($('#greenzone').val());
}
},
error: function (xhr) {

View File

@ -55,9 +55,92 @@ func save_tracker_settingsHandler(response http.ResponseWriter, request *http.Re
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(`^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$`, 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 'email' is not valid")
fmt.Fprintf(response, "{ \"rc\": 17, \"msg\": \"email is not valid, must be in in format max.mustermann@example.com\" }")
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)