Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
# Changelog

## [v0.6.1] - 2026-09-21

### Changed

- User and admin interfaces now label **Live ACL** as **ACL**.
- ACL lists now show only Super Admin entries returned by the API.

Requires vtafarm-api 0.6.1.

## [v0.6.0] - 2026-09-21

### Added
Expand Down
4 changes: 2 additions & 2 deletions helm/vtafarm/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@ name: vtafarm
description: VTA Farm — React frontend served by nginx
type: application
# Kept equal; one release bumps both.
version: 0.6.0
appVersion: "0.6.0"
version: 0.6.1
appVersion: "0.6.1"
2 changes: 1 addition & 1 deletion src/lib/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -822,7 +822,7 @@ export const api = {
// domain row, DNS, session — by one action; this is the only route that can
// mint a domains row for our own zone.
getPlatformStack: () => req<PlatformStack>('GET', '/api/v1/admin/platform-stack'),
/** Last complete `vta acl list` snapshot. Reading it causes no downtime. */
/** Super Admin entries from the last complete ACL snapshot. Reading causes no downtime. */
getPlatformStackAdmins: (force = false) =>
req<SessionAcl>('GET', `/api/v1/admin/platform-stack/admins${force ? `?refresh=${Date.now()}` : ''}`),
/**
Expand Down
8 changes: 4 additions & 4 deletions src/pages/admin/PlatformStackAdmins.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ export function PlatformStackAdmins() {
try {
const result = await api.refreshPlatformStackAdmins()
setAcl(result)
setNotice({ area: 'acl', message: 'Live ACL refreshed.' })
setNotice({ area: 'acl', message: 'ACL refreshed.' })
if (result.warning) setWarning(result.warning)
} catch (err) {
setError(err instanceof Error ? err.message : 'Failed to refresh the ACL')
Expand Down Expand Up @@ -119,7 +119,7 @@ export function PlatformStackAdmins() {

<div className="p-row between center">
<div>
<div className="text-sm fw-600">Live ACL</div>
<div className="text-sm fw-600">ACL</div>
<div className="p-muted text-xs" style={{ marginTop: 3 }}>
{acl?.synced_at ? `Synced ${new Date(acl.synced_at).toLocaleString()}` : 'Not synced yet'}
</div>
Expand All @@ -129,13 +129,13 @@ export function PlatformStackAdmins() {
</div>
<button className="btn btn-outline btn-sm" type="button" onClick={handleRefresh}
disabled={busy || refreshing}>
{refreshing ? 'Refreshing…' : 'Refresh live ACL'}
{refreshing ? 'Refreshing…' : 'Refresh ACL'}
</button>
</div>
<p className="p-muted text-xs" style={{ margin: 0 }}>Refreshing temporarily stops and restarts the VTA.</p>

{!loadingAcl && acl?.synced_at && acl.entries.length === 0 && (
<p className="p-muted text-sm" style={{ margin: 0 }}>No ACL entries.</p>
<p className="p-muted text-sm" style={{ margin: 0 }}>No Super Admin entries.</p>
)}
{acl && acl.entries.length > 0 && (
<div className="p-col gap-8">
Expand Down
8 changes: 4 additions & 4 deletions src/pages/portal/SessionPnmCard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ export function SessionPnmCard({ sessionId, onVtaRestarted }: SessionPnmCardProp
const result = await api.refreshSessionAcl(sessionId)
onVtaRestarted()
setAcl(result)
setNotice('Live ACL refreshed.')
setNotice('ACL refreshed.')
if (result.warning) setWarning(result.warning)
} catch (err) {
setError(err instanceof Error ? err.message : 'Failed to refresh the ACL')
Expand Down Expand Up @@ -134,7 +134,7 @@ export function SessionPnmCard({ sessionId, onVtaRestarted }: SessionPnmCardProp

<div className="p-row between center">
<div>
<div className="text-sm fw-600">Live ACL</div>
<div className="text-sm fw-600">ACL</div>
<div className="p-muted text-xs" style={{ marginTop: 3 }}>
{acl?.synced_at ? `Synced ${new Date(acl.synced_at).toLocaleString()}` : 'Not synced yet'}
</div>
Expand All @@ -143,13 +143,13 @@ export function SessionPnmCard({ sessionId, onVtaRestarted }: SessionPnmCardProp
disabled={linking || refreshingAcl}>
{refreshingAcl
? <><svg className="spin" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth={2.5} style={{ width: 14, height: 14 }}><path d="M21 12a9 9 0 1 1-6.219-8.56"/></svg>Refreshing…</>
: 'Refresh live ACL'}
: 'Refresh ACL'}
</button>
</div>
<p className="p-muted text-xs" style={{ margin: 0 }}>Refreshing temporarily stops and restarts the VTA.</p>

{!loadingAcl && acl?.synced_at && acl.entries.length === 0 && (
<p className="p-muted text-sm" style={{ margin: 0 }}>No ACL entries.</p>
<p className="p-muted text-sm" style={{ margin: 0 }}>No Super Admin entries.</p>
)}
{acl && acl.entries.length > 0 && (
<div className="p-col gap-8">
Expand Down
Loading