make local
All checks were successful
Deploy KubeViz / deploy (push) Successful in 11s

This commit is contained in:
2026-03-01 11:37:20 +01:00
parent 1db5805c47
commit 58a10625c3
3 changed files with 14 additions and 10 deletions

View File

@@ -74,7 +74,7 @@ func (s *Server) middleware(next http.Handler) http.Handler {
w.Header().Set("X-Content-Type-Options", "nosniff") w.Header().Set("X-Content-Type-Options", "nosniff")
w.Header().Set("Referrer-Policy", "same-origin") w.Header().Set("Referrer-Policy", "same-origin")
w.Header().Set("Content-Security-Policy", "default-src 'self'; script-src 'self' https://unpkg.com https://cdn.jsdelivr.net; style-src 'self' 'unsafe-inline'; img-src 'self' data:; connect-src 'self';") w.Header().Set("Content-Security-Policy", "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; connect-src 'self';")
if r.TLS != nil || strings.EqualFold(r.Header.Get("X-Forwarded-Proto"), "https") { if r.TLS != nil || strings.EqualFold(r.Header.Get("X-Forwarded-Proto"), "https") {
w.Header().Set("Strict-Transport-Security", "max-age=31536000; includeSubDomains") w.Header().Set("Strict-Transport-Security", "max-age=31536000; includeSubDomains")
} }

View File

@@ -83,17 +83,22 @@ document.addEventListener("DOMContentLoaded", () => {
fileCount.textContent = count === 1 ? fileInput.files[0].name : `${count} files selected`; fileCount.textContent = count === 1 ? fileInput.files[0].name : `${count} files selected`;
}); });
parseForm.addEventListener("htmx:afterRequest", async (event) => { parseForm.addEventListener("submit", async (event) => {
const xhr = event.detail.xhr; event.preventDefault();
if (xhr.status < 200 || xhr.status >= 300) { const formData = new FormData(parseForm);
const detail = (xhr.responseText || "").trim(); const res = await fetch("/api/manifests/parse", {
method: "POST",
body: formData,
});
if (!res.ok) {
const detail = (await res.text()).trim();
const suffix = detail ? ` ${detail}` : " Check YAML syntax and try again."; const suffix = detail ? ` ${detail}` : " Check YAML syntax and try again.";
setStatus(`Parse failed (${xhr.status}).${suffix}`, "error"); setStatus(`Parse failed (${res.status}).${suffix}`, "error");
renderParseIssues([]); renderParseIssues([]);
return; return;
} }
const payload = JSON.parse(xhr.responseText); const payload = await res.json();
const parseIssues = payload.summary?.issues || []; const parseIssues = payload.summary?.issues || [];
const issues = parseIssues.length; const issues = parseIssues.length;
window.KubeViz.lastParsedResources = payload.summary?.resources || 0; window.KubeViz.lastParsedResources = payload.summary?.resources || 0;

View File

@@ -5,7 +5,6 @@
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<title>{{ .Title }}</title> <title>{{ .Title }}</title>
<link rel="stylesheet" href="/static/styles.css"> <link rel="stylesheet" href="/static/styles.css">
<script defer src="https://unpkg.com/htmx.org@1.9.12"></script>
<script defer src="/static/app.js"></script> <script defer src="/static/app.js"></script>
</head> </head>
<body> <body>
@@ -28,7 +27,7 @@
</nav> </nav>
<section id="tab-data" class="tab-pane active"> <section id="tab-data" class="tab-pane active">
<form id="manifest-form" hx-post="/api/manifests/parse" hx-encoding="multipart/form-data" hx-swap="none"> <form id="manifest-form">
<label for="manifestText">Paste YAML</label> <label for="manifestText">Paste YAML</label>
<textarea id="manifestText" name="manifestText" rows="10" placeholder="apiVersion: apps/v1&#10;kind: Deployment&#10;..."></textarea> <textarea id="manifestText" name="manifestText" rows="10" placeholder="apiVersion: apps/v1&#10;kind: Deployment&#10;..."></textarea>
@@ -97,7 +96,7 @@
</section> </section>
<section id="tab-filter" class="tab-pane"> <section id="tab-filter" class="tab-pane">
<form id="filter-form" hx-get="/api/graph" hx-swap="none"> <form id="filter-form">
<h3>Quick Filters</h3> <h3>Quick Filters</h3>
<label for="query">Search</label> <label for="query">Search</label>
<input id="query" name="q" type="text" placeholder="name, kind, namespace or id"> <input id="query" name="q" type="text" placeholder="name, kind, namespace or id">