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