1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
/*
|--------------------------------------------------------------------------
| Routes
|--------------------------------------------------------------------------
|
*/
/** @type {typeof import('@adonisjs/framework/src/Route/Manager')} */
const Route = use('Route');
const { API_VERSION } = require('../../environment-remote');
// Run latest database migration
const migrate = require('./migrate');
migrate();
const OnlyAllowFerdi = async ({ request, response }, next) => {
const version = request.header('X-Franz-Version');
if (!version) {
return response.status(403).redirect('/');
}
await next();
return true;
};
// Health: Returning if all systems function correctly
Route.get('health', ({ response }) =>
response.send({
api: 'success',
db: 'success',
}),
).middleware(OnlyAllowFerdi);
// API is grouped under '/v1/' route
Route.group(() => {
// User authentification
Route.post('auth/signup', 'UserController.signup');
Route.post('auth/login', 'UserController.login');
// User info
Route.get('me', 'UserController.me');
Route.put('me', 'UserController.updateMe');
// Service info
Route.post('service', 'ServiceController.create');
Route.put('service/reorder', 'ServiceController.reorder');
Route.put('service/:id', 'ServiceController.edit');
Route.delete('service/:id', 'ServiceController.delete');
Route.get('me/services', 'ServiceController.list');
// Recipe store
Route.get('recipes', 'RecipeController.list');
Route.get('recipes/search', 'RecipeController.search');
Route.get('recipes/popular', 'RecipeController.popularRecipes');
Route.get('recipes/download/:recipe', 'RecipeController.download');
Route.post('recipes/update', 'RecipeController.update');
// Workspaces
Route.put('workspace/:id', 'WorkspaceController.edit');
Route.delete('workspace/:id', 'WorkspaceController.delete');
Route.post('workspace', 'WorkspaceController.create');
Route.get('workspace', 'WorkspaceController.list');
})
.prefix(API_VERSION)
.middleware(OnlyAllowFerdi);
Route.group(() => {
Route.get('icon/:id', 'ServiceController.icon');
}).prefix(API_VERSION);
// Franz account import
Route.post('import', 'UserController.import');
Route.get('import', ({ view }) => view.render('import'));
// Account transfer
Route.get('export', 'UserController.export');
Route.post('transfer', 'UserController.importFerdi');
Route.get('transfer', ({ view }) => view.render('transfer'));
// Index
Route.get('/', ({ view }) => view.render('index'));
|