Run Docker runtime stage as non-root user app (UID 65532). Add styled full-page 404/500 error rendering for navigation requests while preserving plain-text responses for HTMX partials. Reuse recent unconsumed OIDC login state to avoid state mismatch on parallel login hits, and merge resource_access in role extraction. Re-level template headings, add autocomplete tokens, and resolve catalog resource display names. Self-label test-stack secrets and document CSRF secret rotation.
34 lines
1.7 KiB
HTML
34 lines
1.7 KiB
HTML
<!-- Workspace create form partial -->
|
|
<div class="card mb-3">
|
|
<div class="card-body">
|
|
<div class="d-flex justify-content-between align-items-center mb-3">
|
|
<h2 class="card-title mb-0 h6">Create Workspace</h2>
|
|
<button class="btn btn-outline-secondary btn-sm"
|
|
hx-get="/partials/workspaces"
|
|
hx-target="#workspaceContent"
|
|
hx-swap="innerHTML">Back</button>
|
|
</div>
|
|
{{ if .Error }}
|
|
<div class="alert alert-danger" role="alert">{{ .Error }}</div>
|
|
{{ end }}
|
|
<form autocomplete="off" hx-post="/partials/workspaces" hx-target="#workspaceContent" hx-swap="innerHTML">
|
|
<div class="row g-3">
|
|
<div class="col-md-6">
|
|
<label for="workspaceName" class="form-label">Workspace Name</label>
|
|
<input autocomplete="off" type="text" class="form-control js-workspace-name" id="workspaceName" name="name" required
|
|
placeholder="My Workspace">
|
|
</div>
|
|
<div class="col-md-6">
|
|
<label for="workspaceSlug" class="form-label">Slug</label>
|
|
<input autocomplete="off" type="text" class="form-control js-workspace-slug" id="workspaceSlug" name="slug" required
|
|
placeholder="my-workspace" pattern="[a-z0-9][a-z0-9-]*[a-z0-9]|[a-z0-9]">
|
|
<div class="form-text">URL-safe identifier. Auto-generated from name.</div>
|
|
</div>
|
|
<div class="col-12">
|
|
<button type="submit" class="btn btn-primary">Create Workspace</button>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|