171 lines
10 KiB
TypeScript
171 lines
10 KiB
TypeScript
import router from '@adonisjs/core/services/router'
|
|
|
|
import { middleware } from '#start/kernel'
|
|
|
|
const DevicesController = () => import('#controllers/devices_controller')
|
|
const CommandsController = () => import('#controllers/commands_controller')
|
|
const ConfigurationsV1Controller = () => import('#controllers/configurations_v1_controller')
|
|
const FirmwareCatalogController = () => import('#controllers/firmware_catalog_controller')
|
|
const HealthController = () => import('#controllers/health_controller')
|
|
const PagesController = () => import('#controllers/pages_controller')
|
|
const CwmpController = () => import('#controllers/cwmp_controller')
|
|
const Tr069TraceController = () => import('#controllers/tr069_trace_controller')
|
|
const ExchangeController = () => import('#controllers/exchange_controller')
|
|
const AuthController = () => import('#controllers/auth_controller')
|
|
|
|
// CWMP/TR-069 endpoint (SOAP/XML) - uses dedicated middleware for XML parsing
|
|
router.post('/cwmp10', [CwmpController, 'handle']).use([middleware.cwmpLogger(), middleware.cwmp()])
|
|
|
|
// Health checks
|
|
router.get('/api/v1/checklife', [HealthController, 'checklife'])
|
|
router.get('/api/v1/checkservice', [HealthController, 'checkservice'])
|
|
router.get('/api/v1/health/tr069-exchanges', [HealthController, 'checkTr069Exchanges'])
|
|
|
|
// REST API routes — protected by API key (X-Api-Key header)
|
|
router
|
|
.group(() => {
|
|
// Devices
|
|
router.get('/devices', [DevicesController, 'index'])
|
|
router.get('/devices/criteria-values', [DevicesController, 'criteriaValues'])
|
|
router.get('/devices/:identifier', [DevicesController, 'show'])
|
|
router.delete('/devices/:identifier', [DevicesController, 'destroy'])
|
|
router.post('/devices/:identifier/command', [DevicesController, 'executeCommand'])
|
|
router.post('/devices/:identifier/refresh', [DevicesController, 'refresh'])
|
|
|
|
// References
|
|
const ReferencesController = () => import('#controllers/references_controller')
|
|
router.get('/devices/:identifier/references', [ReferencesController, 'index'])
|
|
router.get('/devices/:identifier/references/:provider', [ReferencesController, 'show'])
|
|
router.post('/devices/:identifier/references/resolve', [ReferencesController, 'resolveAll'])
|
|
router.post('/devices/:identifier/references/resolve/:provider', [ReferencesController, 'resolveOne'])
|
|
|
|
// Commands
|
|
router.get('/commands', [CommandsController, 'index'])
|
|
router.get('/commands/:id', [CommandsController, 'show'])
|
|
router.post('/commands', [CommandsController, 'store'])
|
|
|
|
router.get('/tr069-trace', [Tr069TraceController, 'index'])
|
|
router.post('/tr069-trace', [Tr069TraceController, 'store'])
|
|
router.get('/tr069-trace/config', [Tr069TraceController, 'rawConfig'])
|
|
router.put('/tr069-trace/config', [Tr069TraceController, 'saveRawConfig'])
|
|
router.delete('/tr069-trace/:id', [Tr069TraceController, 'destroy'])
|
|
router.get('/tr069-trace/:id/log', [Tr069TraceController, 'showLog'])
|
|
|
|
// Exchange API (TR-069 Exchange Viewer)
|
|
router.get('/tr069-trace/:deviceId/exchanges', [ExchangeController, 'index'])
|
|
router.delete('/tr069-trace/:deviceId/exchanges', [ExchangeController, 'destroy'])
|
|
router.get('/tr069-trace/:deviceId/exchanges/stream', [ExchangeController, 'stream'])
|
|
|
|
// Unified Configuration API (v1)
|
|
router.get('/configurations', [ConfigurationsV1Controller, 'index'])
|
|
router.get('/configurations/tags', [ConfigurationsV1Controller, 'listTags'])
|
|
router.post('/configurations', [ConfigurationsV1Controller, 'store'])
|
|
router.get('/configurations/:id', [ConfigurationsV1Controller, 'show'])
|
|
router.put('/configurations/:id', [ConfigurationsV1Controller, 'update'])
|
|
router.delete('/configurations/:id', [ConfigurationsV1Controller, 'destroy'])
|
|
router.patch('/configurations/:id/toggle', [ConfigurationsV1Controller, 'toggleEnabled'])
|
|
router.patch('/configurations/:id/tags', [ConfigurationsV1Controller, 'manageTags'])
|
|
router.get('/configurations/:id/history', [ConfigurationsV1Controller, 'history'])
|
|
router.post('/configurations/:id/dry-run', [ConfigurationsV1Controller, 'dryRun'])
|
|
router.get('/configurations/:id/compliance', [ConfigurationsV1Controller, 'compliance'])
|
|
|
|
// Firmware Catalog API (v1)
|
|
router.get('/firmware-catalog', [FirmwareCatalogController, 'index'])
|
|
router.get('/firmware-catalog/entries', [FirmwareCatalogController, 'listEntries'])
|
|
router.get('/firmware-catalog/entries/:id', [FirmwareCatalogController, 'showEntry'])
|
|
router.get('/firmware-catalog/routes', [FirmwareCatalogController, 'listRoutes'])
|
|
router.post('/firmware-catalog/entries', [FirmwareCatalogController, 'createEntry'])
|
|
router.put('/firmware-catalog/entries/:id', [FirmwareCatalogController, 'updateEntry'])
|
|
router.delete('/firmware-catalog/entries/:id', [FirmwareCatalogController, 'deleteEntry'])
|
|
router.post('/firmware-catalog/routes', [FirmwareCatalogController, 'createRoute'])
|
|
router.put('/firmware-catalog/routes/:id', [FirmwareCatalogController, 'updateRoute'])
|
|
router.delete('/firmware-catalog/routes/:id', [FirmwareCatalogController, 'deleteRoute'])
|
|
})
|
|
.prefix('/api/v1')
|
|
.use([middleware.apiKey()])
|
|
|
|
// Internal routes — called by the Vue frontend (session-protected, no API key needed)
|
|
// Mirrors /api/v1 but authenticated via session cookie instead of X-Api-Key
|
|
router
|
|
.group(() => {
|
|
// Devices
|
|
router.get('/devices', [DevicesController, 'index'])
|
|
router.get('/devices/criteria-values', [DevicesController, 'criteriaValues'])
|
|
router.get('/devices/:identifier', [DevicesController, 'show'])
|
|
router.delete('/devices/:identifier', [DevicesController, 'destroy'])
|
|
router.post('/devices/:identifier/command', [DevicesController, 'executeCommand'])
|
|
router.post('/devices/:identifier/refresh', [DevicesController, 'refresh'])
|
|
|
|
// Commands
|
|
router.get('/commands', [CommandsController, 'index'])
|
|
router.get('/commands/:id', [CommandsController, 'show'])
|
|
router.post('/commands', [CommandsController, 'store'])
|
|
|
|
// TR-069 Trace
|
|
router.get('/tr069-trace', [Tr069TraceController, 'index'])
|
|
router.post('/tr069-trace', [Tr069TraceController, 'store'])
|
|
router.get('/tr069-trace/config', [Tr069TraceController, 'rawConfig'])
|
|
router.put('/tr069-trace/config', [Tr069TraceController, 'saveRawConfig'])
|
|
router.delete('/tr069-trace/:id', [Tr069TraceController, 'destroy'])
|
|
router.get('/tr069-trace/:id/log', [Tr069TraceController, 'showLog'])
|
|
router.get('/tr069-trace/:deviceId/exchanges', [ExchangeController, 'index'])
|
|
router.delete('/tr069-trace/:deviceId/exchanges', [ExchangeController, 'destroy'])
|
|
router.get('/tr069-trace/:deviceId/exchanges/stream', [ExchangeController, 'stream'])
|
|
|
|
// Configurations
|
|
router.get('/configurations', [ConfigurationsV1Controller, 'index'])
|
|
router.get('/configurations/tags', [ConfigurationsV1Controller, 'listTags'])
|
|
router.post('/configurations', [ConfigurationsV1Controller, 'store'])
|
|
router.get('/configurations/:id', [ConfigurationsV1Controller, 'show'])
|
|
router.put('/configurations/:id', [ConfigurationsV1Controller, 'update'])
|
|
router.delete('/configurations/:id', [ConfigurationsV1Controller, 'destroy'])
|
|
router.patch('/configurations/:id/toggle', [ConfigurationsV1Controller, 'toggleEnabled'])
|
|
router.patch('/configurations/:id/tags', [ConfigurationsV1Controller, 'manageTags'])
|
|
router.get('/configurations/:id/history', [ConfigurationsV1Controller, 'history'])
|
|
router.post('/configurations/:id/dry-run', [ConfigurationsV1Controller, 'dryRun'])
|
|
router.get('/configurations/:id/compliance', [ConfigurationsV1Controller, 'compliance'])
|
|
|
|
// Firmware Catalog
|
|
router.get('/firmware-catalog/entries', [FirmwareCatalogController, 'listEntries'])
|
|
router.get('/firmware-catalog/entries/:id', [FirmwareCatalogController, 'showEntry'])
|
|
router.get('/firmware-catalog/routes', [FirmwareCatalogController, 'listRoutes'])
|
|
router.post('/firmware-catalog/entries', [FirmwareCatalogController, 'createEntry'])
|
|
router.put('/firmware-catalog/entries/:id', [FirmwareCatalogController, 'updateEntry'])
|
|
router.delete('/firmware-catalog/entries/:id', [FirmwareCatalogController, 'deleteEntry'])
|
|
router.post('/firmware-catalog/routes', [FirmwareCatalogController, 'createRoute'])
|
|
router.put('/firmware-catalog/routes/:id', [FirmwareCatalogController, 'updateRoute'])
|
|
router.delete('/firmware-catalog/routes/:id', [FirmwareCatalogController, 'deleteRoute'])
|
|
})
|
|
.prefix('/internal')
|
|
.as('internal')
|
|
.use([middleware.authSession()])
|
|
|
|
// Auth routes — public (no session guard)
|
|
router.get('/login', [AuthController, 'showLogin']).as('login')
|
|
router.post('/login', [AuthController, 'login'])
|
|
router.post('/logout', [AuthController, 'logout']).as('logout')
|
|
|
|
// Inertia page routes — protected by session authentication
|
|
router
|
|
.group(() => {
|
|
router.get('/', [PagesController, 'home'])
|
|
router.get('/devices/:identifier', [PagesController, 'deviceDetail'])
|
|
router.post('/devices/:identifier/refresh', [PagesController, 'refreshDevice'])
|
|
router.post('/devices/:identifier/get-model', [PagesController, 'getModel'])
|
|
router.get('/commands', [PagesController, 'commands']).as('commands.page')
|
|
router.get('/commands/fleet', [PagesController, 'commandsFleet'])
|
|
router.get('/tr069-trace', [PagesController, 'tr069Trace'])
|
|
router.post('/commands/fleet', [PagesController, 'storeFleetDevices'])
|
|
router.post('/commands/fleet/command', [PagesController, 'storeFleetCommand'])
|
|
|
|
// Unified Configuration System Inertia routes
|
|
router.get('/configurations', [PagesController, 'configurationsList'])
|
|
router.get('/configurations/create', [PagesController, 'configurationCreate'])
|
|
router.get('/configurations/:id/edit', [PagesController, 'configurationEdit'])
|
|
router.get('/configurations/:id/detail', [PagesController, 'configurationDetail'])
|
|
router.get('/firmware-catalog', [PagesController, 'firmwareCatalog'])
|
|
router.get('/firmware-catalog/create', [PagesController, 'firmwareCatalogCreate'])
|
|
router.get('/firmware-catalog/:id/edit', [PagesController, 'firmwareCatalogEdit'])
|
|
})
|
|
.use([middleware.authSession()])
|