Settings Consolidation (37+ pages to 8 hubs): - Asset Type Hub: Unified type management with plugin descriptors - Model Catalog Hub: Vendors, types, models, operating systems - Asset Configuration Hub: Statuses, relationships, fields, identifiers - Security Hub: Authentication, tokens, users, audit - Site Configuration Hub: Site settings, floor map, branding, imports - Integrations Hub: ServiceNow, Zabbix, Dell warranty - Locations Hub: Locations, business units, employees - Network Infrastructure Hub: VLANs, subnets Plugin Descriptor Pattern: - Add get_asset_type_descriptor hook to BasePlugin - Implement descriptors in 6 plugins (printers, computers, machines, network, measuringtools, locations) - Add /api/pluginui/asset-type-descriptors and core-type-descriptors endpoints - Generic SubtypesTab component renders CRUD UI from descriptor schema Security Fixes: - Fix stored XSS via javascript: URIs in Models and Support Teams - Add URL scheme validation (allow only http/https) in create/update endpoints - Fix plugin contract violations in endpoints plugin (use shopdb.api imports) - Add missing requiresAdmin guard to printer model supplies route - Add user-facing error messages to API token load failures Integration Improvements: - Add persistent tab navigation to ServiceNow, Zabbix, and Dell Warranty settings - Standardize integration settings UI across all three pages - Fix tab visibility when navigating between integrations Tested with 94-agent orchestrated review for ADR compliance and security.
77 lines
2.2 KiB
JavaScript
77 lines
2.2 KiB
JavaScript
/**
|
|
* Network plugin routes
|
|
*/
|
|
export default [
|
|
{
|
|
path: 'settings/networktypes',
|
|
name: 'network-types',
|
|
component: () => import('./views/NetworkTypesList.vue'),
|
|
meta: { requiresAuth: true, requiresAdmin: true, plugin: 'network' }
|
|
},
|
|
{
|
|
path: 'network',
|
|
name: 'network',
|
|
component: () => import('./views/NetworkHub.vue'),
|
|
meta: { plugin: 'network' }
|
|
},
|
|
{
|
|
path: 'network/new',
|
|
name: 'network-new',
|
|
component: () => import('./views/NetworkDeviceForm.vue'),
|
|
meta: { requiresAuth: true, plugin: 'network' }
|
|
},
|
|
{
|
|
path: 'network/:id',
|
|
name: 'network-detail',
|
|
component: () => import('./views/NetworkDeviceDetail.vue'),
|
|
meta: { plugin: 'network' }
|
|
},
|
|
{
|
|
path: 'network/:id/edit',
|
|
name: 'network-edit',
|
|
component: () => import('./views/NetworkDeviceForm.vue'),
|
|
meta: { requiresAuth: true, plugin: 'network' }
|
|
},
|
|
{
|
|
// Legacy path -> the Networks tab of the hub.
|
|
path: 'networks',
|
|
redirect: { path: '/network', query: { tab: 'networks' } }
|
|
},
|
|
{
|
|
path: 'networks/:id',
|
|
name: 'network-subnet-detail',
|
|
component: () => import('./views/SubnetDetail.vue'),
|
|
meta: { plugin: 'network' }
|
|
},
|
|
// Network-specific settings
|
|
{
|
|
path: 'settings/vlans',
|
|
name: 'vlans',
|
|
component: () => import('./views/VLANsList.vue'),
|
|
meta: { requiresAuth: true, requiresAdmin: true, plugin: 'network' }
|
|
},
|
|
{
|
|
path: 'settings/subnets',
|
|
name: 'subnets',
|
|
component: () => import('./views/SubnetsList.vue'),
|
|
meta: { requiresAuth: true, requiresAdmin: true, plugin: 'network' }
|
|
},
|
|
{
|
|
path: 'settings/network/vlans',
|
|
name: 'network-hub-vlans',
|
|
component: () => import('./views/VLANsList.vue'),
|
|
meta: { requiresAuth: true, requiresAdmin: true, plugin: 'network' }
|
|
},
|
|
{
|
|
path: 'settings/network/subnets',
|
|
name: 'network-hub-subnets',
|
|
component: () => import('./views/SubnetsList.vue'),
|
|
meta: { requiresAuth: true, requiresAdmin: true, plugin: 'network' }
|
|
}
|
|
]
|
|
|
|
// No full-screen routes: every view in this plugin renders inside
|
|
// AppLayout. Declared so routes.gen.js can read `.toplevel` off the module
|
|
// without Rollup warning about a missing export.
|
|
export const toplevel = []
|