Add SSH-managed node registry with connection testing and reauth.

Register hosts under Containers/VMs/Docker with encrypted key storage, and require re-authentication for sensitive account changes.
This commit is contained in:
2026-07-18 16:39:10 +02:00
parent b93b7519ec
commit f4dc8f63d7
31 changed files with 4801 additions and 223 deletions
+19 -1
View File
@@ -7,6 +7,9 @@ describe('pathFor', () => {
expect(pathFor('vms')).toBe('/vms')
expect(pathFor('docker')).toBe('/docker')
expect(pathFor('containers')).toBe('/containers')
expect(pathFor('vms', 'overview', 'security')).toBe('/vms/security')
expect(pathFor('containers', 'overview', 'add')).toBe('/containers/add')
expect(pathFor('docker', 'overview', 'add')).toBe('/docker/add')
expect(pathFor('profile')).toBe('/profile')
expect(pathFor('setup')).toBe('/setup')
expect(pathFor('login')).toBe('/login')
@@ -24,6 +27,9 @@ describe('parseLocation', () => {
'/vms',
'/docker',
'/containers',
'/vms/security',
'/containers/add',
'/docker/overview',
'/profile',
'/setup',
'/login',
@@ -37,7 +43,9 @@ describe('parseLocation', () => {
'/configuration/advanced',
]) {
const location = parseLocation(path)
expect(pathFor(location.section, location.configTab)).toBe(path)
expect(
pathFor(location.section, location.configTab, location.resourceTab),
).toBe(path === '/docker/overview' ? '/docker' : path)
}
})
@@ -45,18 +53,22 @@ describe('parseLocation', () => {
expect(parseLocation('/nope')).toEqual({
section: 'overview',
configTab: 'overview',
resourceTab: 'overview',
})
expect(parseLocation('/configuration/unknown')).toEqual({
section: 'overview',
configTab: 'overview',
resourceTab: 'overview',
})
expect(parseLocation('/vms/extra')).toEqual({
section: 'overview',
configTab: 'overview',
resourceTab: 'overview',
})
expect(parseLocation('/docker/extra')).toEqual({
section: 'overview',
configTab: 'overview',
resourceTab: 'overview',
})
})
@@ -64,6 +76,12 @@ describe('parseLocation', () => {
expect(parseLocation('/configuration/groups/')).toEqual({
section: 'configuration',
configTab: 'groups',
resourceTab: 'overview',
})
expect(parseLocation('/containers/add/')).toEqual({
section: 'containers',
configTab: 'overview',
resourceTab: 'add',
})
})
})