diff options
Diffstat (limited to 'src/internal-server')
-rw-r--r-- | src/internal-server/app/Controllers/Http/ServiceController.js | 150 | ||||
-rw-r--r-- | src/internal-server/app/Exceptions/Handler.js | 10 | ||||
-rw-r--r-- | src/internal-server/public/js/transfer.js | 3 | ||||
-rw-r--r-- | src/internal-server/start.js | 17 |
4 files changed, 85 insertions, 95 deletions
diff --git a/src/internal-server/app/Controllers/Http/ServiceController.js b/src/internal-server/app/Controllers/Http/ServiceController.js index 36d20c70c..c30e9e040 100644 --- a/src/internal-server/app/Controllers/Http/ServiceController.js +++ b/src/internal-server/app/Controllers/Http/ServiceController.js | |||
@@ -1,7 +1,5 @@ | |||
1 | const Service = use('App/Models/Service'); | 1 | const Service = use('App/Models/Service'); |
2 | const { | 2 | const { validateAll } = use('Validator'); |
3 | validateAll, | ||
4 | } = use('Validator'); | ||
5 | const Env = use('Env'); | 3 | const Env = use('Env'); |
6 | 4 | ||
7 | const uuid = require('uuid/v4'); | 5 | const uuid = require('uuid/v4'); |
@@ -10,10 +8,7 @@ const fs = require('fs-extra'); | |||
10 | 8 | ||
11 | class ServiceController { | 9 | class ServiceController { |
12 | // Create a new service for user | 10 | // Create a new service for user |
13 | async create({ | 11 | async create({ request, response }) { |
14 | request, | ||
15 | response, | ||
16 | }) { | ||
17 | // Validate user input | 12 | // Validate user input |
18 | const validation = await validateAll(request.all(), { | 13 | const validation = await validateAll(request.all(), { |
19 | name: 'required|string', | 14 | name: 'required|string', |
@@ -33,7 +28,10 @@ class ServiceController { | |||
33 | let serviceId; | 28 | let serviceId; |
34 | do { | 29 | do { |
35 | serviceId = uuid(); | 30 | serviceId = uuid(); |
36 | } while ((await Service.query().where('serviceId', serviceId).fetch()).rows.length > 0); // eslint-disable-line no-await-in-loop | 31 | } while ( |
32 | (await Service.query().where('serviceId', serviceId).fetch()).rows | ||
33 | .length > 0 | ||
34 | ); // eslint-disable-line no-await-in-loop | ||
37 | 35 | ||
38 | await Service.create({ | 36 | await Service.create({ |
39 | serviceId, | 37 | serviceId, |
@@ -64,13 +62,14 @@ class ServiceController { | |||
64 | } | 62 | } |
65 | 63 | ||
66 | // List all services a user has created | 64 | // List all services a user has created |
67 | async list({ | 65 | async list({ response }) { |
68 | response, | ||
69 | }) { | ||
70 | const services = (await Service.all()).rows; | 66 | const services = (await Service.all()).rows; |
71 | // Convert to array with all data Franz wants | 67 | // Convert to array with all data Franz wants |
72 | const servicesArray = services.map((service) => { | 68 | const servicesArray = services.map(service => { |
73 | const settings = typeof service.settings === 'string' ? JSON.parse(service.settings) : service.settings; | 69 | const settings = |
70 | typeof service.settings === 'string' | ||
71 | ? JSON.parse(service.settings) | ||
72 | : service.settings; | ||
74 | 73 | ||
75 | return { | 74 | return { |
76 | customRecipe: false, | 75 | customRecipe: false, |
@@ -84,7 +83,9 @@ class ServiceController { | |||
84 | spellcheckerLanguage: '', | 83 | spellcheckerLanguage: '', |
85 | workspaces: [], | 84 | workspaces: [], |
86 | ...JSON.parse(service.settings), | 85 | ...JSON.parse(service.settings), |
87 | iconUrl: settings.iconId ? `http://127.0.0.1:${Env.get('PORT')}/v1/icon/${settings.iconId}` : null, | 86 | iconUrl: settings.iconId |
87 | ? `http://127.0.0.1:${Env.get('PORT')}/v1/icon/${settings.iconId}` | ||
88 | : null, | ||
88 | id: service.serviceId, | 89 | id: service.serviceId, |
89 | name: service.name, | 90 | name: service.name, |
90 | recipeId: service.recipeId, | 91 | recipeId: service.recipeId, |
@@ -95,11 +96,7 @@ class ServiceController { | |||
95 | return response.send(servicesArray); | 96 | return response.send(servicesArray); |
96 | } | 97 | } |
97 | 98 | ||
98 | async edit({ | 99 | async edit({ request, response, params }) { |
99 | request, | ||
100 | response, | ||
101 | params, | ||
102 | }) { | ||
103 | if (request.file('icon')) { | 100 | if (request.file('icon')) { |
104 | // Upload custom service icon | 101 | // Upload custom service icon |
105 | await fs.ensureDir(path.join(Env.get('USER_PATH'), 'icons')); | 102 | await fs.ensureDir(path.join(Env.get('USER_PATH'), 'icons')); |
@@ -108,19 +105,19 @@ class ServiceController { | |||
108 | types: ['image'], | 105 | types: ['image'], |
109 | size: '2mb', | 106 | size: '2mb', |
110 | }); | 107 | }); |
111 | const { | 108 | const { id } = params; |
112 | id, | 109 | const service = (await Service.query().where('serviceId', id).fetch()) |
113 | } = params; | 110 | .rows[0]; |
114 | const service = (await Service.query() | 111 | const settings = |
115 | .where('serviceId', id).fetch()).rows[0]; | 112 | typeof service.settings === 'string' |
116 | const settings = typeof service.settings === 'string' ? JSON.parse(service.settings) : service.settings; | 113 | ? JSON.parse(service.settings) |
114 | : service.settings; | ||
117 | 115 | ||
118 | // Generate new icon ID | 116 | // Generate new icon ID |
119 | let iconId; | 117 | let iconId; |
120 | do { | 118 | do { |
121 | iconId = uuid() + uuid(); | 119 | iconId = uuid() + uuid(); |
122 | // eslint-disable-next-line no-await-in-loop | 120 | } while (fs.existsSync(path.join(Env.get('USER_PATH'), 'icons', iconId))); |
123 | } while (await fs.exists(path.join(Env.get('USER_PATH'), 'icons', iconId))); | ||
124 | 121 | ||
125 | await icon.move(path.join(Env.get('USER_PATH'), 'icons'), { | 122 | await icon.move(path.join(Env.get('USER_PATH'), 'icons'), { |
126 | name: iconId, | 123 | name: iconId, |
@@ -135,23 +132,29 @@ class ServiceController { | |||
135 | ...settings, | 132 | ...settings, |
136 | ...{ | 133 | ...{ |
137 | iconId, | 134 | iconId, |
138 | customIconVersion: settings && settings.customIconVersion ? settings.customIconVersion + 1 : 1, | 135 | customIconVersion: |
136 | settings && settings.customIconVersion | ||
137 | ? settings.customIconVersion + 1 | ||
138 | : 1, | ||
139 | }, | 139 | }, |
140 | }; | 140 | }; |
141 | 141 | ||
142 | // Update data in database | 142 | // Update data in database |
143 | await (Service.query() | 143 | await Service.query() |
144 | .where('serviceId', id)).update({ | 144 | .where('serviceId', id) |
145 | name: service.name, | 145 | .update({ |
146 | settings: JSON.stringify(newSettings), | 146 | name: service.name, |
147 | }); | 147 | settings: JSON.stringify(newSettings), |
148 | }); | ||
148 | 149 | ||
149 | return response.send({ | 150 | return response.send({ |
150 | data: { | 151 | data: { |
151 | id, | 152 | id, |
152 | name: service.name, | 153 | name: service.name, |
153 | ...newSettings, | 154 | ...newSettings, |
154 | iconUrl: `http://127.0.0.1:${Env.get('PORT')}/v1/icon/${newSettings.iconId}`, | 155 | iconUrl: `http://127.0.0.1:${Env.get('PORT')}/v1/icon/${ |
156 | newSettings.iconId | ||
157 | }`, | ||
155 | userId: 1, | 158 | userId: 1, |
156 | }, | 159 | }, |
157 | status: ['updated'], | 160 | status: ['updated'], |
@@ -159,29 +162,30 @@ class ServiceController { | |||
159 | } | 162 | } |
160 | // Update service info | 163 | // Update service info |
161 | const data = request.all(); | 164 | const data = request.all(); |
162 | const { | 165 | const { id } = params; |
163 | id, | ||
164 | } = params; | ||
165 | 166 | ||
166 | // Get current settings from db | 167 | // Get current settings from db |
167 | const serviceData = (await Service.query() | 168 | const serviceData = (await Service.query().where('serviceId', id).fetch()) |
168 | .where('serviceId', id).fetch()).rows[0]; | 169 | .rows[0]; |
169 | 170 | ||
170 | const settings = { | 171 | const settings = { |
171 | ...typeof serviceData.settings === 'string' ? JSON.parse(serviceData.settings) : serviceData.settings, | 172 | ...(typeof serviceData.settings === 'string' |
173 | ? JSON.parse(serviceData.settings) | ||
174 | : serviceData.settings), | ||
172 | ...data, | 175 | ...data, |
173 | }; | 176 | }; |
174 | 177 | ||
175 | // Update data in database | 178 | // Update data in database |
176 | await (Service.query() | 179 | await Service.query() |
177 | .where('serviceId', id)).update({ | 180 | .where('serviceId', id) |
178 | name: data.name, | 181 | .update({ |
179 | settings: JSON.stringify(settings), | 182 | name: data.name, |
180 | }); | 183 | settings: JSON.stringify(settings), |
184 | }); | ||
181 | 185 | ||
182 | // Get updated row | 186 | // Get updated row |
183 | const service = (await Service.query() | 187 | const service = (await Service.query().where('serviceId', id).fetch()) |
184 | .where('serviceId', id).fetch()).rows[0]; | 188 | .rows[0]; |
185 | 189 | ||
186 | return response.send({ | 190 | return response.send({ |
187 | data: { | 191 | data: { |
@@ -195,34 +199,29 @@ class ServiceController { | |||
195 | }); | 199 | }); |
196 | } | 200 | } |
197 | 201 | ||
198 | async icon({ | 202 | async icon({ params, response }) { |
199 | params, | 203 | const { id } = params; |
200 | response, | ||
201 | }) { | ||
202 | const { | ||
203 | id, | ||
204 | } = params; | ||
205 | 204 | ||
206 | const iconPath = path.join(Env.get('USER_PATH'), 'icons', id); | 205 | const iconPath = path.join(Env.get('USER_PATH'), 'icons', id); |
207 | if (!await fs.exists(iconPath)) { | 206 | if (!fs.existsSync(iconPath)) { |
208 | return response.status(404).send({ | 207 | return response.status(404).send({ |
209 | status: 'Icon doesn\'t exist', | 208 | status: "Icon doesn't exist", |
210 | }); | 209 | }); |
211 | } | 210 | } |
212 | 211 | ||
213 | return response.download(iconPath); | 212 | return response.download(iconPath); |
214 | } | 213 | } |
215 | 214 | ||
216 | async reorder({ | 215 | async reorder({ request, response }) { |
217 | request, | ||
218 | response, | ||
219 | }) { | ||
220 | const data = request.all(); | 216 | const data = request.all(); |
221 | 217 | ||
222 | for (const service of Object.keys(data)) { | 218 | for (const service of Object.keys(data)) { |
223 | // Get current settings from db | 219 | // Get current settings from db |
224 | const serviceData = (await Service.query() // eslint-disable-line no-await-in-loop | 220 | const serviceData = ( |
225 | .where('serviceId', service).fetch()).rows[0]; | 221 | await Service.query() // eslint-disable-line no-await-in-loop |
222 | .where('serviceId', service) | ||
223 | .fetch() | ||
224 | ).rows[0]; | ||
226 | 225 | ||
227 | const settings = { | 226 | const settings = { |
228 | ...JSON.parse(serviceData.settings), | 227 | ...JSON.parse(serviceData.settings), |
@@ -230,8 +229,8 @@ class ServiceController { | |||
230 | }; | 229 | }; |
231 | 230 | ||
232 | // Update data in database | 231 | // Update data in database |
233 | await (Service.query() // eslint-disable-line no-await-in-loop | 232 | await Service.query() // eslint-disable-line no-await-in-loop |
234 | .where('serviceId', service)) | 233 | .where('serviceId', service) |
235 | .update({ | 234 | .update({ |
236 | settings: JSON.stringify(settings), | 235 | settings: JSON.stringify(settings), |
237 | }); | 236 | }); |
@@ -240,8 +239,11 @@ class ServiceController { | |||
240 | // Get new services | 239 | // Get new services |
241 | const services = (await Service.all()).rows; | 240 | const services = (await Service.all()).rows; |
242 | // Convert to array with all data Franz wants | 241 | // Convert to array with all data Franz wants |
243 | const servicesArray = services.map((service) => { | 242 | const servicesArray = services.map(service => { |
244 | const settings = typeof service.settings === 'string' ? JSON.parse(service.settings) : service.settings; | 243 | const settings = |
244 | typeof service.settings === 'string' | ||
245 | ? JSON.parse(service.settings) | ||
246 | : service.settings; | ||
245 | 247 | ||
246 | return { | 248 | return { |
247 | customRecipe: false, | 249 | customRecipe: false, |
@@ -255,7 +257,9 @@ class ServiceController { | |||
255 | spellcheckerLanguage: '', | 257 | spellcheckerLanguage: '', |
256 | workspaces: [], | 258 | workspaces: [], |
257 | ...JSON.parse(service.settings), | 259 | ...JSON.parse(service.settings), |
258 | iconUrl: settings.iconId ? `http://127.0.0.1:${Env.get('PORT')}/v1/icon/${settings.iconId}` : null, | 260 | iconUrl: settings.iconId |
261 | ? `http://127.0.0.1:${Env.get('PORT')}/v1/icon/${settings.iconId}` | ||
262 | : null, | ||
259 | id: service.serviceId, | 263 | id: service.serviceId, |
260 | name: service.name, | 264 | name: service.name, |
261 | recipeId: service.recipeId, | 265 | recipeId: service.recipeId, |
@@ -266,19 +270,13 @@ class ServiceController { | |||
266 | return response.send(servicesArray); | 270 | return response.send(servicesArray); |
267 | } | 271 | } |
268 | 272 | ||
269 | update({ | 273 | update({ response }) { |
270 | response, | ||
271 | }) { | ||
272 | return response.send([]); | 274 | return response.send([]); |
273 | } | 275 | } |
274 | 276 | ||
275 | async delete({ | 277 | async delete({ params, response }) { |
276 | params, | ||
277 | response, | ||
278 | }) { | ||
279 | // Update data in database | 278 | // Update data in database |
280 | await (Service.query() | 279 | await Service.query().where('serviceId', params.id).delete(); |
281 | .where('serviceId', params.id)).delete(); | ||
282 | 280 | ||
283 | return response.send({ | 281 | return response.send({ |
284 | message: 'Sucessfully deleted service', | 282 | message: 'Sucessfully deleted service', |
diff --git a/src/internal-server/app/Exceptions/Handler.js b/src/internal-server/app/Exceptions/Handler.js index 111ef4e0e..ab323fd38 100644 --- a/src/internal-server/app/Exceptions/Handler.js +++ b/src/internal-server/app/Exceptions/Handler.js | |||
@@ -13,10 +13,9 @@ class ExceptionHandler extends BaseExceptionHandler { | |||
13 | * @method handle | 13 | * @method handle |
14 | * | 14 | * |
15 | * @param {Object} error | 15 | * @param {Object} error |
16 | * @param {Object} options.request | 16 | * @param {object} options.response |
17 | * @param {Object} options.response | ||
18 | * | 17 | * |
19 | * @return {void} | 18 | * @return {Promise<void>} |
20 | */ | 19 | */ |
21 | async handle(error, { response }) { | 20 | async handle(error, { response }) { |
22 | if (error.name === 'ValidationException') { | 21 | if (error.name === 'ValidationException') { |
@@ -31,10 +30,7 @@ class ExceptionHandler extends BaseExceptionHandler { | |||
31 | * | 30 | * |
32 | * @method report | 31 | * @method report |
33 | * | 32 | * |
34 | * @param {Object} error | 33 | * @return {Promise<boolean>} |
35 | * @param {Object} options.request | ||
36 | * | ||
37 | * @return {void} | ||
38 | */ | 34 | */ |
39 | async report() { | 35 | async report() { |
40 | return true; | 36 | return true; |
diff --git a/src/internal-server/public/js/transfer.js b/src/internal-server/public/js/transfer.js index c04a6d3b1..8382bba02 100644 --- a/src/internal-server/public/js/transfer.js +++ b/src/internal-server/public/js/transfer.js | |||
@@ -1,11 +1,10 @@ | |||
1 | /* eslint-env browser */ | ||
2 | const submitBtn = document.getElementById('submit'); | 1 | const submitBtn = document.getElementById('submit'); |
3 | const fileInput = document.getElementById('file'); | 2 | const fileInput = document.getElementById('file'); |
4 | const fileOutput = document.getElementById('fileoutput'); | 3 | const fileOutput = document.getElementById('fileoutput'); |
5 | 4 | ||
6 | fileInput.addEventListener('change', () => { | 5 | fileInput.addEventListener('change', () => { |
7 | const reader = new FileReader(); | 6 | const reader = new FileReader(); |
8 | reader.onload = function () { | 7 | reader.onload = () => { |
9 | const text = reader.result; | 8 | const text = reader.result; |
10 | fileOutput.value = text; | 9 | fileOutput.value = text; |
11 | submitBtn.disabled = false; | 10 | submitBtn.disabled = false; |
diff --git a/src/internal-server/start.js b/src/internal-server/start.js index adcac0bec..683f24651 100644 --- a/src/internal-server/start.js +++ b/src/internal-server/start.js | |||
@@ -14,22 +14,22 @@ | |||
14 | | Also you can preload files by calling `preLoad('path/to/file')` method. | 14 | | Also you can preload files by calling `preLoad('path/to/file')` method. |
15 | | Make sure to pass a relative path from the project root. | 15 | | Make sure to pass a relative path from the project root. |
16 | */ | 16 | */ |
17 | process.env.FERDI_VERSION = '5.4.0-beta.5'; | ||
18 | 17 | ||
19 | const path = require('path'); | 18 | const fold = require('@adonisjs/fold'); |
19 | const { Ignitor } = require('@adonisjs/ignitor'); | ||
20 | const fs = require('fs-extra'); | 20 | const fs = require('fs-extra'); |
21 | const os = require('os'); | 21 | const os = require('os'); |
22 | const path = require('path'); | ||
23 | const packageJSON = require('../../package.json'); | ||
22 | 24 | ||
25 | process.env.FERDI_VERSION = packageJSON.version; | ||
23 | process.env.ENV_PATH = path.join(__dirname, 'env.ini'); | 26 | process.env.ENV_PATH = path.join(__dirname, 'env.ini'); |
24 | 27 | ||
25 | const { Ignitor } = require('@adonisjs/ignitor'); | ||
26 | const fold = require('@adonisjs/fold'); | ||
27 | |||
28 | module.exports = async (userPath, port) => { | 28 | module.exports = async (userPath, port) => { |
29 | const dbPath = path.join(userPath, 'server.sqlite'); | 29 | const dbPath = path.join(userPath, 'server.sqlite'); |
30 | const dbTemplatePath = path.join(__dirname, 'database', 'template.sqlite'); | 30 | const dbTemplatePath = path.join(__dirname, 'database', 'template.sqlite'); |
31 | 31 | ||
32 | if (!await fs.exists(dbPath)) { | 32 | if (!fs.existsSync(dbPath)) { |
33 | // Manually copy file | 33 | // Manually copy file |
34 | // We can't use copyFile here as it will cause the file to be readonly on Windows | 34 | // We can't use copyFile here as it will cause the file to be readonly on Windows |
35 | const dbTemplate = await fs.readFile(dbTemplatePath); | 35 | const dbTemplate = await fs.readFile(dbTemplatePath); |
@@ -46,8 +46,5 @@ module.exports = async (userPath, port) => { | |||
46 | process.env.USER_PATH = userPath; | 46 | process.env.USER_PATH = userPath; |
47 | process.env.PORT = port; | 47 | process.env.PORT = port; |
48 | 48 | ||
49 | new Ignitor(fold) | 49 | new Ignitor(fold).appRoot(__dirname).fireHttpServer().catch(console.error); // eslint-disable-line no-console |
50 | .appRoot(__dirname) | ||
51 | .fireHttpServer() | ||
52 | .catch(console.error); // eslint-disable-line no-console | ||
53 | }; | 50 | }; |