/* |-------------------------------------------------------------------------- | Routes file |-------------------------------------------------------------------------- | | The routes file is used for defining the HTTP routes. | */ import { middleware } from '#start/kernel' import router from '@adonisjs/core/services/router' import { controllers } from '#generated/controllers' const ReleasesController = () => import('#controllers/releases_controller') const NewznabController = () => import('#controllers/newznab_controller') const SeedController = () => import('#controllers/seed_controller') // Newznab API for Prowlarr / Sonarr / Radarr ("Generic Newznab", API path /api). router.get('/api', [NewznabController, 'handle']) // Web interface: public/index.html is served by the static middleware at "/". router .group(() => { router.get('releases', [ReleasesController, 'index']) router.get('releases/:id', [ReleasesController, 'show']).where('id', router.matchers.number()) router.get('releases/:id/nzb', [ReleasesController, 'nzb']).where('id', router.matchers.number()) router.get('releases/:id/image', [ReleasesController, 'image']).where('id', router.matchers.number()) router.get('stats', [ReleasesController, 'stats']) }) .prefix('/api/v1') router .group(() => { router .group(() => { router.post('signup', [controllers.NewAccount, 'store']) router.post('login', [controllers.AccessTokens, 'store']) }) .prefix('auth') .as('auth') router .group(() => { router.get('profile', [controllers.Profile, 'show']) router.post('logout', [controllers.AccessTokens, 'destroy']) }) .prefix('account') .as('profile') .use(middleware.auth()) }) .prefix('/api/v1') // Seed API for remote seeding nodes (CONCEPT.md D38); the only routes traefik exposes publicly. router .group(() => { router.post('lease', [SeedController, 'lease']) router.post('ranges/:id/batches', [SeedController, 'batch']).where('id', router.matchers.number()) router.get('ranges/:id/chunk', [SeedController, 'chunk']).where('id', router.matchers.number()) router.post('ranges/:id/done', [SeedController, 'done']).where('id', router.matchers.number()) router.post('ranges/:id/release', [SeedController, 'release']).where('id', router.matchers.number()) router.get('status', [SeedController, 'status']) // Content inspection and archive walks on nodes (CONCEPT.md D41). router.post('inspect/lease', [SeedController, 'inspectLease']) router.post('inspect/done', [SeedController, 'inspectDone']) router.post('inspect/failed', [SeedController, 'inspectFailed']) router.post('inspect/release', [SeedController, 'inspectRelease']) router.get('articles', [SeedController, 'article']) }) .prefix('/api/v1/seed') .use(middleware.seedNode())