diff --git a/console/deploy/console.yaml b/console/deploy/console.yaml index 9d7c815..03fb133 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.67 + image: naeel/fission-console:v1.3.68 imagePullPolicy: Always ports: - containerPort: 8090 diff --git a/console/ui/index.html b/console/ui/index.html index ad7ea03..22a5c30 100644 --- a/console/ui/index.html +++ b/console/ui/index.html @@ -102,7 +102,7 @@
NUBES
FISSION CONSOLE
-
v1.3.67
+
v1.3.68
@@ -485,7 +485,7 @@
- v1.3.67 + v1.3.68
diff --git a/console/ui/js/modals.js b/console/ui/js/modals.js index 3b1673e..f3e28b4 100644 --- a/console/ui/js/modals.js +++ b/console/ui/js/modals.js @@ -193,33 +193,54 @@ function openInfo(name, btn) { return; } + // copyBtn — кнопка копирования конкретного значения в буфер. function copyBtn(val) { - return val && val !== '-' - ? ' ' - : ''; + if (!val || val === '-') return ''; + var safe = val.replace(/\\/g, '\\\\').replace(/'/g, "\\'"); + return ' '; } - var rows = [ - ['Имя', info.name], - ['Окружение', info.env], - ['Пакет', info.pkg], - ['Entrypoint', info.entrypoint], - ['Таймаут', info.timeout ? info.timeout + ' сек' : '-'], - ['Тип источника', info.sourceType === 'archive' ? '📦 archive' : '📝 code'], - ['Маршрут', info.route], - ['Методы', Array.isArray(info.methods) && info.methods.length ? info.methods.join(', ') : '-'], - ['Cron', info.cron || '-'], - ['Создана', info.createdAt], - ['Изменена', info.updatedAt], - ]; + // Строки без кнопки копирования (только отображение). + function plain(val) { + return '' + h(val || '-') + ''; + } - var html = rows.map(function(r) { - var val = r[1] || '-'; - return '' + - '' + h(r[0]) + '' + - '' + h(val) + copyBtn(val) + '' + - ''; - }).join(''); + // Строки с кнопкой копирования (Имя, Пакет, Маршрут — генерируемые или идентификаторы). + function withCopy(val) { + return '' + h(val || '-') + copyBtn(val) + ''; + } + + function labelTd(label) { + return '' + h(label) + ''; + } + + // CURL-строка для внешнего вызова (полная, с токеном из localStorage). + var token = localStorage.getItem('auth_token') || ''; + var method = (Array.isArray(info.methods) && info.methods.length) ? info.methods[0] : 'GET'; + var externalUrl = window.location.origin + '/fn' + (info.route !== '-' ? info.route : ''); + var curlFull = 'curl -H "X-Auth-Token: ' + token + '" -X ' + method + ' "' + externalUrl + '"'; + // В отображении скрываем токен — показываем только метод и URL. + var curlDisplay = 'curl ... -X ' + method + ' "' + externalUrl + '"'; + var curlSafe = curlFull.replace(/\\/g, '\\\\').replace(/'/g, "\\'"); + + var html = [ + '' + labelTd('Имя') + withCopy(info.name) + '', + '' + labelTd('Окружение') + plain(info.env) + '', + '' + labelTd('Пакет') + withCopy(info.pkg) + '', + '' + labelTd('Entrypoint') + plain(info.entrypoint) + '', + '' + labelTd('Таймаут') + plain(info.timeout ? info.timeout + ' сек' : '-') + '', + '' + labelTd('Тип источника') + plain(info.sourceType === 'archive' ? '📦 archive' : '📝 code') + '', + '' + labelTd('Маршрут') + withCopy(info.route) + '', + '' + labelTd('Методы') + plain(Array.isArray(info.methods) && info.methods.length ? info.methods.join(', ') : '-') + '', + '' + labelTd('Cron') + plain(info.cron || '-') + '', + '' + labelTd('Создана') + plain(info.createdAt) + '', + '' + labelTd('Изменена') + plain(info.updatedAt) + '', + '' + labelTd('curl') + + '' + + h(curlDisplay) + + ' ' + + '', + ].join(''); document.getElementById('info-title').textContent = 'Информация: ' + name; document.getElementById('info-rows').innerHTML = html;