From 01210d806f74d2dfb7f8dc29485415d6dd7ba96c Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Wed, 10 Jun 2020 22:25:12 +0200
Subject: [PATCH] Fixed #524 - auto backup: reject "0" as interval

---
 src/main/resources/static/js/helpers.js      | 7 ++++---
 src/main/resources/static/js/settings.js     | 8 ++++----
 src/main/resources/static/js/transactions.js | 8 ++++----
 3 files changed, 12 insertions(+), 11 deletions(-)

diff --git a/src/main/resources/static/js/helpers.js b/src/main/resources/static/js/helpers.js
index 369db8140..24aafcf8e 100644
--- a/src/main/resources/static/js/helpers.js
+++ b/src/main/resources/static/js/helpers.js
@@ -1,8 +1,9 @@
-NUMBER_REGEX = new RegExp("^\\d+$");
+REGEX_NUMBER = new RegExp("^\\d+$");
+REGEX_NUMBER_GREATER_ZERO= new RegExp("^[1-9]\\d*$");
 
-function validateNumber(text, ID, hiddenID, message)
+function validateNumber(text, ID, hiddenID, message, regex)
 {
-    if(text.match(NUMBER_REGEX) == null)
+    if(text.match(regex) == null)
     {
         addTooltip(ID, message);
         if(hiddenID != null)
diff --git a/src/main/resources/static/js/settings.js b/src/main/resources/static/js/settings.js
index 4b1047b78..24022a694 100644
--- a/src/main/resources/static/js/settings.js
+++ b/src/main/resources/static/js/settings.js
@@ -22,7 +22,7 @@ $(document).ready(function()
     {
         autoBackupDays.on('change keydown paste input', function()
         {
-            validateNumber(autoBackupDays.val(), 'settings-backup-auto-days', "hidden-settings-backup-auto-days", numberValidationMessage);
+            validateNumber(autoBackupDays.val(), 'settings-backup-auto-days', "hidden-settings-backup-auto-days", numberValidationMessage, REGEX_NUMBER_GREATER_ZERO);
         });
     }
 
@@ -31,7 +31,7 @@ $(document).ready(function()
     {
         autoBackupFilesToKeep.on('change keydown paste input', function()
         {
-            validateNumber(autoBackupFilesToKeep.val(), "settings-backup-auto-files-to-keep", "hidden-settings-backup-auto-files-to-keep", numberValidationMessageZeroAllowed);
+            validateNumber(autoBackupFilesToKeep.val(), "settings-backup-auto-files-to-keep", "hidden-settings-backup-auto-files-to-keep", numberValidationMessageZeroAllowed, REGEX_NUMBER);
         });
     }
 
@@ -45,8 +45,8 @@ function validateForm()
     let autoBackupCheckbox = document.getElementsByName("autoBackupActivated")[0];
     if(autoBackupCheckbox.checked)
     {
-        let autoBackupDaysValid = validateNumber($('#settings-backup-auto-days').val(), "settings-backup-auto-days", "hidden-settings-backup-auto-days", numberValidationMessage);
-        let autoBackupFilesToKeepValid = validateNumber($('#settings-backup-auto-files-to-keep').val(), "settings-backup-auto-files-to-keep", "hidden-settings-backup-auto-files-to-keep", numberValidationMessageZeroAllowed);
+        let autoBackupDaysValid = validateNumber($('#settings-backup-auto-days').val(), "settings-backup-auto-days", "hidden-settings-backup-auto-days", numberValidationMessage, REGEX_NUMBER_GREATER_ZERO);
+        let autoBackupFilesToKeepValid = validateNumber($('#settings-backup-auto-files-to-keep').val(), "settings-backup-auto-files-to-keep", "hidden-settings-backup-auto-files-to-keep", numberValidationMessageZeroAllowed, REGEX_NUMBER);
         return autoBackupDaysValid && autoBackupFilesToKeepValid;
     }
 
diff --git a/src/main/resources/static/js/transactions.js b/src/main/resources/static/js/transactions.js
index b24b599c2..dd01fb940 100644
--- a/src/main/resources/static/js/transactions.js
+++ b/src/main/resources/static/js/transactions.js
@@ -125,7 +125,7 @@ $(document).ready(function()
         $(transactionRepeatingModifierID).on('change keydown paste input', function()
         {
             // substr(1) removes "#" at the beginning
-            validateNumber($(this).val(), transactionRepeatingModifierID.substr(1), "hidden-" + transactionRepeatingModifierID.substr(1), numberValidationMessage);
+            validateNumber($(this).val(), transactionRepeatingModifierID.substr(1), "hidden-" + transactionRepeatingModifierID.substr(1), numberValidationMessage, REGEX_NUMBER);
         });
     }
 
@@ -133,7 +133,7 @@ $(document).ready(function()
     {
         $(transactionRepeatingEndAfterXTimesInputID).on('change keydown paste input', function()
         {
-            validateNumber($(this).val(), transactionRepeatingEndAfterXTimesInputID.substr(1), null, numberValidationMessage);
+            validateNumber($(this).val(), transactionRepeatingEndAfterXTimesInputID.substr(1), null, numberValidationMessage, REGEX_NUMBER);
 
             // select corresponding radio button
             let endAfterXTimes = document.getElementById("repeating-end-after-x-times");
@@ -301,7 +301,7 @@ function validateForm(allowEmptyAmount=false)
 
     if($(transactionRepeatingModifierID).length)
     {
-        if(!validateNumber($(transactionRepeatingModifierID).val(), transactionRepeatingModifierID.substr(1), "hidden-" + transactionRepeatingModifierID.substr(1), numberValidationMessage))
+        if(!validateNumber($(transactionRepeatingModifierID).val(), transactionRepeatingModifierID.substr(1), "hidden-" + transactionRepeatingModifierID.substr(1), numberValidationMessage), REGEX_NUMBER)
         {
             return false;
         }
@@ -319,7 +319,7 @@ function validateForm(allowEmptyAmount=false)
 
         if(endAfterXTimes.checked)
         {
-            if(!validateNumber($(transactionRepeatingEndAfterXTimesInputID).val(), transactionRepeatingEndAfterXTimesInputID.substr(1), null, numberValidationMessage))
+            if(!validateNumber($(transactionRepeatingEndAfterXTimesInputID).val(), transactionRepeatingEndAfterXTimesInputID.substr(1), null, numberValidationMessage), REGEX_NUMBER)
             {
                 return false;
             }
-- 
GitLab