From 20e6b22d0dfb16b9735d25d73cb4bacb87109a67 Mon Sep 17 00:00:00 2001
From: adrien <adrien@malingrey.fr>
Date: Tue, 8 Oct 2024 11:14:31 +0200
Subject: [PATCH] tag validation

---
 scan-options.php | 27 ++++++++++++++++-----------
 1 file changed, 16 insertions(+), 11 deletions(-)

diff --git a/scan-options.php b/scan-options.php
index 2cfe325..5fd489d 100755
--- a/scan-options.php
+++ b/scan-options.php
@@ -41,7 +41,7 @@ Exemples: <?=$_SERVER['REMOTE_ADDR']; ?>/24 <?=$_SERVER['SERVER_NAME']; ?>" />
         </div>
 
         <fieldset class="ui segment">
-          <legend class="ui header">Découverte des hôtes</legend>
+          <h3 class="ui header">Découverte des hôtes</h3>
           <div class="inline field">
             <div class="ui checkbox">
               <input type="checkbox" id="PnInput" name="Pn"/>
@@ -56,7 +56,7 @@ Exemples: <?=$_SERVER['REMOTE_ADDR']; ?>/24 <?=$_SERVER['SERVER_NAME']; ?>" />
         </fieldset>
 
         <fieldset class="ui segment">
-          <legend class="ui header">Techniques de scan</legend>
+          <h3 class="ui header">Techniques de scan</h3>
           <div class="field">
             <label>Ne scanner que les ports</label>
             <input type="text" id="pInput" name="p" placeholder="Ports" list="servicesList" pattern="(([TU]:)?[0-9\-]+|[a-z\-]+)(,([TU]:)?[0-9\-]+|,[a-z\-]+)*"
@@ -89,25 +89,30 @@ foreach ($services as $name => $port) {
       </datalist>
     </main>
     <script>
+      const hostPattern = /^[a-zA-Z\d._\/\-]+$/
+      const portPattern = /^([\d-]+|[a-z\-]+)$/
+      const protocolePortPattern = /^(([TU]:)?[\d\-]+|[a-z\-]+)$/
+
+      const targetsWhitelist = Array.from(targetsList.options).map(option => option.value)
+      const servicesWhitelist = Array.from(servicesList.options).map(option => option.value)
+
       new Tagify(targetsInput, {
-        pattern: /^[a-zA-Z\d._/-]+$/,
-        delimiters: ",| ",
+        validate: (data) => hostPattern.test(data.value),
+        delimiters: " ",
         originalInputValueFormat: tags => tags.map(tag => tag.value).join(' '),
-        whitelist: Array.from(targetsList.options).map(option => option.value),
+        whitelist: targetsWhitelist,
       })
 
       new Tagify(PSInput, {
-        pattern: /^([\d-]+|[a-z-]+)$/,
-        delimiters: ",| ",
+        validate: (data) => portPattern.test(data.value),
         originalInputValueFormat: tags => tags.map(tag => tag.value).join(','),
-        whitelist: Array.from(servicesList.options).map(option => option.value),
+        whitelist: servicesWhitelist,
       })
 
       new Tagify(pInput, {
-        pattern: /^(([TU]:)?[\d-]+|[a-z-]+)$/,
-        delimiters: ",| ",
+        validate: (data) => protocolePortPattern.test(data.value),
         originalInputValueFormat: tags => tags.map(tag => tag.value).join(','),
-        whitelist: Array.from(servicesList.options).map(option => option.value),
+        whitelist: servicesWhitelist,
       })
 
       newScanForm.onsubmit = function (event) {