From 089994256ce1b4fb3ba17459ff5217ebc5c5d0ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Sat, 9 May 2026 07:22:35 +0400 Subject: [PATCH] =?UTF-8?q?fix:=20=D0=B2=D0=B0=D0=BB=D0=B8=D0=B4=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D1=8F=20=D0=B8=D0=BC=D1=91=D0=BD=20env=20vars=20?= =?UTF-8?q?=E2=80=94=20=D1=82=D0=BE=D0=BB=D1=8C=D0=BA=D0=BE=20[A-Za-z=5F][?= =?UTF-8?q?A-Za-z0-9=5F]*?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- console/deploy/console.yaml | 2 +- console/ui/index.html | 4 ++-- console/ui/js/functions.js | 16 ++++++++++++---- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/console/deploy/console.yaml b/console/deploy/console.yaml index 6f783ca..9dae285 100644 --- a/console/deploy/console.yaml +++ b/console/deploy/console.yaml @@ -55,7 +55,7 @@ spec: serviceAccountName: fission-console containers: - name: console - image: naeel/fission-console:v1.3.75 + image: naeel/fission-console:v1.3.76 imagePullPolicy: Always ports: - containerPort: 8090 diff --git a/console/ui/index.html b/console/ui/index.html index 45c597b..004818d 100644 --- a/console/ui/index.html +++ b/console/ui/index.html @@ -102,7 +102,7 @@
NUBES
FISSION CONSOLE
-
v1.3.75
+
v1.3.76
@@ -510,7 +510,7 @@
- v1.3.75 + v1.3.76
diff --git a/console/ui/js/functions.js b/console/ui/js/functions.js index 411b7d5..faffffa 100644 --- a/console/ui/js/functions.js +++ b/console/ui/js/functions.js @@ -250,6 +250,11 @@ async function submitEdit() { var isTfFn = /^tf-/.test(name); if (!isTfFn) { var envVars = collectEnvVars('e'); + // Проверка формата ключей + var invalidKeys = envVars.map(function(ev) { return ev.name; }).filter(function(k) { return !ENV_KEY_RE.test(k); }); + if (invalidKeys.length > 0) { + throw new Error('Недопустимые имена переменных: ' + invalidKeys.join(', ') + ' (только латиница, цифры, _, не с цифры)'); + } // Проверка на дубли ключей var keys = envVars.map(function(ev) { return ev.name; }); var dupes = keys.filter(function(k, i) { return keys.indexOf(k) !== i; }); @@ -318,7 +323,7 @@ function makeEnvVarRow(prefix, key, val, readOnly, idx) { row.dataset.envIdx = idx; var kInput = document.createElement('input'); - kInput.placeholder = 'KEY'; + kInput.placeholder = 'KEY (A-Z, a-z, 0-9, _)'; kInput.value = key; kInput.disabled = readOnly; kInput.style.cssText = 'flex:1; font-size:12px; font-family:monospace;'; @@ -354,7 +359,9 @@ function makeEnvVarRow(prefix, key, val, readOnly, idx) { return row; } -// highlightDupeKeys подсвечивает красным все поля KEY с одинаковыми именами +var ENV_KEY_RE = /^[A-Za-z_][A-Za-z0-9_]*$/; + +// highlightDupeKeys подсвечивает красным все поля KEY с одинаковыми именами или невалидным именем function highlightDupeKeys(prefix) { var list = document.getElementById(prefix + '-envvars-list'); if (!list) return; @@ -363,8 +370,9 @@ function highlightDupeKeys(prefix) { inputs.forEach(function(inp) { var k = inp.value.trim(); var isDupe = k !== '' && keys.filter(function(x) { return x === k; }).length > 1; - inp.style.outline = isDupe ? '2px solid #f44' : ''; - inp.title = isDupe ? 'Дублирующийся ключ!' : ''; + var isInvalid = k !== '' && !ENV_KEY_RE.test(k); + inp.style.outline = (isDupe || isInvalid) ? '2px solid #f44' : ''; + inp.title = isDupe ? 'Дублирующийся ключ!' : isInvalid ? 'Только латиница, цифры и _. Не начинается с цифры.' : ''; }); }