aboutsummaryrefslogtreecommitdiffstats
path: root/src/internal-server/app/Controllers/Http/ServiceController.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/internal-server/app/Controllers/Http/ServiceController.js')
-rw-r--r--src/internal-server/app/Controllers/Http/ServiceController.js150
1 files changed, 74 insertions, 76 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 @@
1const Service = use('App/Models/Service'); 1const Service = use('App/Models/Service');
2const { 2const { validateAll } = use('Validator');
3 validateAll,
4} = use('Validator');
5const Env = use('Env'); 3const Env = use('Env');
6 4
7const uuid = require('uuid/v4'); 5const uuid = require('uuid/v4');
@@ -10,10 +8,7 @@ const fs = require('fs-extra');
10 8
11class ServiceController { 9class 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',