diff --git a/CHANGELOG.md b/CHANGELOG.md index 8b17e80b6..c85319f11 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ This release delivers **REST API Passthrough Capabilities**, **API & UI Paginati - **๐Ÿงช Quality & Testing** - Complete build pipeline verification, enhanced linting, mutation testing, and fuzzing - **โšก Performance Optimizations** - Response compression middleware (Brotli, Zstd, GZip) reducing bandwidth by 30-70% + orjson JSON serialization providing 5-6x faster JSON encoding - **๐Ÿฆ€ Rust Plugin Framework** - Optional Rust-accelerated plugins with 5-100x performance improvements +- **๐Ÿ’ป Admin UI** - Quality of life improvements for admins when managing MCP servers ### Added @@ -167,6 +168,10 @@ This release delivers **REST API Passthrough Capabilities**, **API & UI Paginati - **Implementation**: `mcpgateway/utils/orjson_response.py` configured as default FastAPI response class - **Test Coverage**: 29 comprehensive unit tests with 100% code coverage +#### **๐Ÿ’ป Admin UI enhancements** (#1336) +* **Inspectable auth passwords, tokens and headers** (#1336) - Admins can now view and verify passwords, tokens and custom headers they set when creating or editing MCP servers. + + ### Fixed #### **๐Ÿ› Critical Multi-Tenancy & RBAC Bugs** diff --git a/mcpgateway/static/admin.js b/mcpgateway/static/admin.js index a83ccbd36..ae17819d8 100644 --- a/mcpgateway/static/admin.js +++ b/mcpgateway/static/admin.js @@ -10941,6 +10941,35 @@ window.updateAvailableTags = updateAvailableTags; // MULTI-HEADER AUTHENTICATION MANAGEMENT // =================================================================== +/** + * Toggle masking for sensitive text inputs (passwords, tokens, headers) + * @param {HTMLElement|string} inputOrId - Target input element or its ID + * @param {HTMLElement} button - Button triggering the toggle + */ +function toggleInputMask(inputOrId, button) { + const input = + typeof inputOrId === "string" + ? document.getElementById(inputOrId) + : inputOrId; + + if (!input || !button) { + return; + } + + const revealing = input.type === "password"; + input.type = revealing ? "text" : "password"; + + const label = input.getAttribute("data-sensitive-label") || "value"; + button.textContent = revealing ? "Hide" : "Show"; + button.setAttribute("aria-pressed", revealing ? "true" : "false"); + button.setAttribute( + "aria-label", + `${revealing ? "Hide" : "Show"} ${label}`.trim(), + ); +} + +window.toggleInputMask = toggleInputMask; + /** * Global counter for unique header IDs */ @@ -10958,6 +10987,7 @@ function addAuthHeader(containerId) { } const headerId = `auth-header-${++headerCounter}`; + const valueInputId = `${headerId}-value`; const headerRow = document.createElement("div"); headerRow.className = "flex items-center space-x-2"; @@ -10973,12 +11003,25 @@ function addAuthHeader(containerId) { />
- +
+ + +
+ -
- +
+ +
+
-