aboutsummaryrefslogtreecommitdiffstats
path: root/src/internal-server/start/routes.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/internal-server/start/routes.js')
-rw-r--r--src/internal-server/start/routes.js86
1 files changed, 86 insertions, 0 deletions
diff --git a/src/internal-server/start/routes.js b/src/internal-server/start/routes.js
new file mode 100644
index 000000000..6668f3062
--- /dev/null
+++ b/src/internal-server/start/routes.js
@@ -0,0 +1,86 @@
1/*
2|--------------------------------------------------------------------------
3| Routes
4|--------------------------------------------------------------------------
5|
6*/
7
8/** @type {typeof import('@adonisjs/framework/src/Route/Manager')} */
9const Route = use('Route');
10
11// Run latest database migration
12const migrate = require('./migrate');
13
14migrate();
15
16const OnlyAllowFerdi = async ({ request, response }, next) => {
17 const version = request.header('X-Franz-Version');
18 if (!version) {
19 return response.status(403).redirect('/');
20 }
21
22 await next();
23 return true;
24};
25
26// Health: Returning if all systems function correctly
27Route.get('health', ({
28 response,
29}) => response.send({
30 api: 'success',
31 db: 'success',
32})).middleware(OnlyAllowFerdi);
33
34// API is grouped under '/v1/' route
35Route.group(() => {
36 // User authentification
37 Route.post('auth/signup', 'UserController.signup');
38 Route.post('auth/login', 'UserController.login');
39
40 // User info
41 Route.get('me', 'UserController.me');
42 Route.put('me', 'UserController.updateMe');
43
44 // Service info
45 Route.post('service', 'ServiceController.create');
46 Route.put('service/reorder', 'ServiceController.reorder');
47 Route.put('service/:id', 'ServiceController.edit');
48 Route.delete('service/:id', 'ServiceController.delete');
49 Route.get('me/services', 'ServiceController.list');
50
51 // Recipe store
52 Route.get('recipe', 'ServiceController.list');
53 Route.post('recipes/update', 'ServiceController.update');
54 Route.get('recipes', 'RecipeController.list');
55 Route.get('recipes/download/:recipe', 'RecipeController.download');
56 Route.get('recipes/search', 'RecipeController.search');
57 Route.get('recipes/update', 'StaticController.emptyArray');
58
59 // Workspaces
60 Route.put('workspace/:id', 'WorkspaceController.edit');
61 Route.delete('workspace/:id', 'WorkspaceController.delete');
62 Route.post('workspace', 'WorkspaceController.create');
63 Route.get('workspace', 'WorkspaceController.list');
64
65 // Static responses
66 Route.get('features/:mode?', 'StaticController.features');
67 Route.get('services', 'StaticController.emptyArray');
68 Route.get('news', 'StaticController.emptyArray');
69 Route.get('announcements/:version', 'StaticController.announcement');
70}).prefix('v1').middleware(OnlyAllowFerdi);
71
72Route.group(() => {
73 Route.get('icon/:id', 'ServiceController.icon');
74}).prefix('v1');
75
76// Franz account import
77Route.post('import', 'UserController.import');
78Route.get('import', ({ view }) => view.render('import'));
79
80// Account transfer
81Route.get('export', 'UserController.export');
82Route.post('transfer', 'UserController.importFerdi');
83Route.get('transfer', ({ view }) => view.render('transfer'));
84
85// Index
86Route.get('/', ({ view }) => view.render('index'));