@tiledesk/tiledesk-server 2.4.100 → 2.4.102

Sign up to get free protection for your applications and to get access to all the features.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,15 @@
5
5
  🚀 IN PRODUCTION 🚀
6
6
  (https://www.npmjs.com/package/@tiledesk/tiledesk-server/v/2.3.77)
7
7
 
8
+ # 2.4.102
9
+ - Updated whatsapp-connector to 0.1.63
10
+ - Updated messenger-connector to 0.1.17
11
+ - Added quote management
12
+
13
+ # 2.4.101
14
+ - Added new route for knowledge base
15
+ - Bug fix: conflicts with old knowledge base
16
+
8
17
  # 2.4.100
9
18
  - Updated tybot-connector to 0.2.50
10
19
  - Added new route for knowledge base
package/app.js CHANGED
@@ -81,6 +81,15 @@ mongoose.set('useFindAndModify', false); // https://mongoosejs.com/docs/deprecat
81
81
  mongoose.set('useCreateIndex', true);
82
82
  mongoose.set('useUnifiedTopology', false);
83
83
 
84
+ // CONNECT REDIS - CHECK IT
85
+ const { TdCache } = require('./utils/TdCache');
86
+ let tdCache = new TdCache({
87
+ host: process.env.CACHE_REDIS_HOST,
88
+ port: process.env.CACHE_REDIS_PORT,
89
+ password: process.env.CACHE_REDIS_PASSWORD
90
+ });
91
+
92
+ tdCache.connect();
84
93
 
85
94
  // ROUTES DECLARATION
86
95
  var troubleshooting = require('./routes/troubleshooting');
@@ -113,6 +122,8 @@ var key = require('./routes/key');
113
122
  var widgets = require('./routes/widget');
114
123
  var widgetsLoader = require('./routes/widgetLoader');
115
124
  var openai = require('./routes/openai');
125
+ var quotes = require('./routes/quotes');
126
+ var integration = require('./routes/integration')
116
127
  var kbsettings = require('./routes/kbsettings');
117
128
  var kb = require('./routes/kb');
118
129
 
@@ -158,7 +169,7 @@ botEvent.listen(); //queued but disabled
158
169
 
159
170
  var trainingService = require('./services/trainingService');
160
171
  trainingService.start();
161
-
172
+
162
173
  // job_here
163
174
 
164
175
  var geoService = require('./services/geoService');
@@ -196,6 +207,10 @@ var IPFilter = require('./middleware/ipFilter');
196
207
  var BanUserNotifier = require('./services/banUserNotifier');
197
208
  BanUserNotifier.listen();
198
209
  const { ChatbotService } = require('./services/chatbotService');
210
+ const { QuoteManager } = require('./services/QuoteManager');
211
+
212
+ let qm = new QuoteManager({ tdCache: tdCache });
213
+ qm.start();
199
214
 
200
215
  var modulesManager = undefined;
201
216
  try {
@@ -224,13 +239,13 @@ if (process.env.CREATE_INITIAL_DATA !== "false") {
224
239
 
225
240
  var app = express();
226
241
 
227
-
228
-
229
242
  // view engine setup
230
243
  app.set('views', path.join(__dirname, 'views'));
231
244
  app.set('view engine', 'jade');
232
245
 
233
246
  app.set('chatbot_service', new ChatbotService())
247
+ app.set('redis_client', tdCache);
248
+ app.set('quote_manager', qm);
234
249
 
235
250
 
236
251
  // TODO DELETE IT IN THE NEXT RELEASE
@@ -255,7 +270,6 @@ if (process.env.ENABLE_ALTERNATIVE_CORS_MIDDLEWARE === "true") {
255
270
  // app.use(morgan('combined'));
256
271
 
257
272
 
258
-
259
273
  // app.use(bodyParser.json());
260
274
 
261
275
  // https://stackoverflow.com/questions/18710225/node-js-get-raw-request-body-using-express
@@ -297,6 +311,7 @@ if (process.env.DISABLE_SESSION_STRATEGY==true || process.env.DISABLE_SESSION_S
297
311
 
298
312
  if (process.env.ENABLE_REDIS_SESSION==true || process.env.ENABLE_REDIS_SESSION=="true" ) {
299
313
 
314
+ console.log("Starting redis...") // errors occurs
300
315
  // Initialize client.
301
316
  // let redisClient = createClient()
302
317
  // redisClient.connect().catch(console.error)
@@ -343,6 +358,24 @@ app.options('*', cors());
343
358
  // const customRedisRateLimiter = require("./rateLimiter").customRedisRateLimiter;
344
359
  // app.use(customRedisRateLimiter);
345
360
 
361
+ // MIDDLEWARE FOR REQUESTS QUOTE
362
+ // app.use('/:projectid/requests', function (req, res, next) {
363
+
364
+ // console.log("MIDDLEWARE FIRED ---> REQUESTS");
365
+ // console.log("(Requests Middleware) method: ", req.method);
366
+ // if (req.method === 'POST') {
367
+
368
+ // let quoteManager = new QuoteManager({ project: mockProject, tdCache: mockTdCache } )
369
+
370
+ // } else {
371
+ // next();
372
+ // }
373
+
374
+
375
+ // });
376
+
377
+
378
+
346
379
  if (process.env.ROUTELOGGER_ENABLED==="true") {
347
380
  winston.info("RouterLogger enabled ");
348
381
  app.use(function (req, res, next) {
@@ -386,10 +419,10 @@ if (process.env.ROUTELOGGER_ENABLED==="true") {
386
419
  app.get('/', function (req, res) {
387
420
  res.send('Hello from Tiledesk server. It\'s UP. See the documentation here http://developer.tiledesk.com');
388
421
  });
389
-
390
422
 
391
423
 
392
424
 
425
+
393
426
  var projectIdSetter = function (req, res, next) {
394
427
  var projectid = req.params.projectid;
395
428
  winston.debug("projectIdSetter projectid: "+ projectid);
@@ -439,8 +472,6 @@ var projectSetter = function (req, res, next) {
439
472
  }
440
473
 
441
474
 
442
-
443
-
444
475
  // app.use('/admin', admin);
445
476
 
446
477
  //oauth2
@@ -560,7 +591,12 @@ app.use('/:projectid/emails',[passport.authenticate(['basic', 'jwt'], { session:
560
591
  app.use('/:projectid/properties',[passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRoleOrTypes('agent', ['bot','subscription'])], property);
561
592
  app.use('/:projectid/segments',[passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRoleOrTypes('agent', ['bot','subscription'])], segment);
562
593
 
563
- app.use('/:projectid/openai', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRoleOrTypes('agent')], openai);
594
+ // app.use('/:projectid/openai', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRoleOrTypes('agent')], openai);
595
+ app.use('/:projectid/openai', openai);
596
+ app.use('/:projectid/quotes', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRoleOrTypes('agent', ['bot','subscription'])], quotes)
597
+
598
+ app.use('/:projectid/integration', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRoleOrTypes('agent', ['bot','subscription'])], integration )
599
+
564
600
  app.use('/:projectid/kbsettings', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRoleOrTypes('agent', ['bot','subscription'])], kbsettings);
565
601
  app.use('/:projectid/kb', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRoleOrTypes('admin', ['bot','subscription'])], kb);
566
602
 
@@ -601,7 +637,7 @@ app.use(function (err, req, res, next) {
601
637
 
602
638
 
603
639
 
604
-
640
+ // mettere middleware qui per le quote
605
641
 
606
642
 
607
643
 
@@ -0,0 +1,13 @@
1
+
2
+ const EventEmitter = require('events');
3
+
4
+ class EmailEvent extends EventEmitter {
5
+ constructor() {
6
+ super();
7
+ this.queueEnabled = false;
8
+ }
9
+ }
10
+
11
+ const emailEvent = new EmailEvent();
12
+
13
+ module.exports = emailEvent;
@@ -0,0 +1,13 @@
1
+ const EventEmitter = require('events');
2
+
3
+ let winston = require('../config/winston');
4
+
5
+ class IntegrationEvent extends EventEmitter {
6
+ constructor() {
7
+ super();
8
+ }
9
+ }
10
+
11
+ const integrationEvent = new IntegrationEvent();
12
+
13
+ module.exports = integrationEvent;
@@ -0,0 +1,23 @@
1
+ var mongoose = require('mongoose');
2
+ var Schema = mongoose.Schema;
3
+ var winston = require('../config/winston');
4
+
5
+ var IntegrationsSchema = new Schema({
6
+ id_project: {
7
+ type: String,
8
+ required: true,
9
+ index: true
10
+ },
11
+ name: {
12
+ type: String,
13
+ required: true
14
+ },
15
+ value: {
16
+ type: Object,
17
+ required: true,
18
+ default: {}
19
+ }
20
+ })
21
+
22
+
23
+ module.exports = mongoose.model('integration', IntegrationsSchema);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tiledesk/tiledesk-server",
3
3
  "description": "The Tiledesk server module",
4
- "version": "2.4.100",
4
+ "version": "2.4.102",
5
5
  "scripts": {
6
6
  "start": "node ./bin/www",
7
7
  "pretest": "mongodb-runner start",
@@ -42,11 +42,11 @@
42
42
  "@tiledesk/tiledesk-dialogflow-connector": "^1.8.4",
43
43
  "@tiledesk/tiledesk-json-rules-engine": "^4.0.3",
44
44
  "@tiledesk/tiledesk-kaleyra-proxy": "^0.1.7",
45
- "@tiledesk/tiledesk-messenger-connector": "^0.1.15",
45
+ "@tiledesk/tiledesk-messenger-connector": "^0.1.17",
46
46
  "@tiledesk/tiledesk-rasa-connector": "^1.0.10",
47
47
  "@tiledesk/tiledesk-telegram-connector": "^0.1.10",
48
48
  "@tiledesk/tiledesk-tybot-connector": "^0.2.50",
49
- "@tiledesk/tiledesk-whatsapp-connector": "^0.1.61",
49
+ "@tiledesk/tiledesk-whatsapp-connector": "^0.1.63",
50
50
  "@tiledesk/tiledesk-whatsapp-jobworker": "^0.0.7",
51
51
  "@tiledesk/tiledesk-chatbot-templates": "^0.1.2",
52
52
  "amqplib": "^0.5.5",
@@ -6,6 +6,7 @@
6
6
  var departmentEvent = require("../../event/departmentEvent");
7
7
  var authEvent = require("../../event/authEvent");
8
8
  var labelEvent = require("../../event/labelEvent");
9
+ var integrationEvent = require("../../event/integrationEvent");
9
10
 
10
11
  var triggerEventEmitter = require("../trigger/event/triggerEventEmitter");
11
12
  var subscriptionEvent = require("../../event/subscriptionEvent");
@@ -725,6 +726,17 @@
725
726
  });
726
727
  });
727
728
 
729
+ // l'evento è relativo a tutte le integrazioni, è sufficiente solo un evento
730
+ // per create, update, delete di una singola creation
731
+ integrationEvent.on("integration.update", (integrations, id_project) => {
732
+ let key = "project:" + id_project + ":integrations";
733
+ winston.verbose("Creating cache for integration.create with key: " + key);
734
+ client.set(key, integrations, cacheUtil.longTTL, (err, reply) => {
735
+ winston.verbose("Created cache for integration.create", {err: err} );
736
+ winston.debug("Created cache for integration.create reply", reply);
737
+ })
738
+ })
739
+
728
740
  // fai cache per subscription.create, .update .delete
729
741
 
730
742
 
@@ -118,6 +118,7 @@ listen() {
118
118
  // send an email only if offline and has an email (send also to followers)
119
119
  return that.sendUserEmail(message.id_project, message);
120
120
  } else { //send email to followers
121
+ winston.debug("send direct email****");
121
122
 
122
123
  that.sendToFollower(message.id_project, message);
123
124
 
package/routes/auth.js CHANGED
@@ -276,7 +276,8 @@ router.post('/signinWithCustomToken', [
276
276
  if (req.user.role) {
277
277
  role = req.user.role;
278
278
  }
279
- winston.debug("role: " + role );
279
+ winston.debug("role1: " + role );
280
+ winston.debug("id_project: " + id_project + " uuid_user " + req.user._id + " role " + role);
280
281
 
281
282
 
282
283
  Project_user.findOne({ id_project: id_project, uuid_user: req.user._id, role: role}).
@@ -285,23 +286,28 @@ router.post('/signinWithCustomToken', [
285
286
  winston.error(err);
286
287
  return res.json({ success: true, token: req.headers["authorization"], user: req.user });
287
288
  }
289
+ winston.debug("project_user: ", project_user );
290
+
291
+
288
292
  if (!project_user) {
289
293
 
290
294
  let createNewUser = false;
291
- winston.debug('role: '+ role)
295
+ winston.debug('role2: '+ role)
292
296
 
293
297
 
294
298
  if (role === RoleConstants.OWNER || role === RoleConstants.ADMIN || role === RoleConstants.AGENT) {
295
299
  createNewUser = true;
296
-
300
+ winston.debug('role owner admin agent');
297
301
  var newUser;
298
302
  try {
299
- newUser = await userService.signup(req.user.email, uuidv4(), req.user.firstname, req.user.lastname, false);
303
+
304
+ // Bug with email in camelcase
305
+ newUser = await userService.signup(req.user.email.toLowerCase(), uuidv4(), req.user.firstname, req.user.lastname, false);
300
306
  } catch(e) {
301
307
  winston.debug('error signup already exists??: ')
302
308
 
303
309
  if (e.code = "E11000") {
304
- newUser = await User.findOne({email: req.user.email , status: 100}).exec();
310
+ newUser = await User.findOne({email: req.user.email.toLowerCase(), status: 100}).exec();
305
311
  winston.debug('signup found')
306
312
 
307
313
  }
@@ -326,6 +332,8 @@ router.post('/signinWithCustomToken', [
326
332
  updatedBy: req.user._id
327
333
  });
328
334
 
335
+ winston.debug('newProject_user', newProject_user);
336
+
329
337
  // testtare qiestp cpm dpcker dev partemdp da ui
330
338
  if (createNewUser===true) {
331
339
  newProject_user.id_user = newUser._id;
@@ -373,7 +381,15 @@ router.post('/signinWithCustomToken', [
373
381
 
374
382
  }
375
383
 
376
- return res.json({ success: true, token: 'JWT ' + returnToken, user: userToReturn });
384
+ winston.debug('returnToken '+returnToken);
385
+
386
+ winston.debug('returnToken.indexOf("JWT") '+returnToken.indexOf("JWT"));
387
+
388
+ if (returnToken.indexOf("JWT")<0) {
389
+ returnToken = "JWT " + returnToken;
390
+ }
391
+
392
+ return res.json({ success: true, token: returnToken, user: userToReturn });
377
393
  });
378
394
  } else {
379
395
  winston.debug('project user already exists ');
@@ -381,7 +397,7 @@ router.post('/signinWithCustomToken', [
381
397
  if (project_user.status==="active") {
382
398
 
383
399
  if (req.user.role && (req.user.role === RoleConstants.OWNER || req.user.role === RoleConstants.ADMIN || req.user.role === RoleConstants.AGENT)) {
384
- let userFromDB = await User.findOne({email: req.user.email , status: 100}).exec();
400
+ let userFromDB = await User.findOne({email: req.user.email.toLowerCase(), status: 100}).exec();
385
401
 
386
402
  var signOptions = {
387
403
  issuer: 'https://tiledesk.com',
@@ -402,11 +418,16 @@ router.post('/signinWithCustomToken', [
402
418
  let returnToken = jwt.sign(userJson, configSecret, signOptions); //priv_jwt pp_jwt
403
419
 
404
420
 
405
- return res.json({ success: true, token: "JWT " + returnToken, user: userFromDB });
421
+ if (returnToken.indexOf("JWT")<0) {
422
+ returnToken = "JWT " + returnToken;
423
+ }
424
+ return res.json({ success: true, token: returnToken, user: userFromDB });
406
425
  // return res.json({ success: true, token: req.headers["authorization"], user: userFromDB });
407
426
 
408
427
 
409
428
  } else {
429
+ winston.debug('req.headers["authorization"]: '+req.headers["authorization"]);
430
+
410
431
  return res.json({ success: true, token: req.headers["authorization"], user: userToReturn });
411
432
  }
412
433
 
package/routes/email.js CHANGED
@@ -327,8 +327,10 @@ router.post('/internal/send',
327
327
 
328
328
  winston.info("Sending an email with text : " + text + " to " + to);
329
329
 
330
- //sendEmailDirect(to, text, project, request_id, subject, tokenQueryString, sourcePage, payload)
331
- emailService.sendEmailDirect(newto, text, req.project, request_id, subject, undefined, undefined, undefined, replyto);
330
+ let quoteManager = req.app.get('quote_manager');
331
+
332
+ //sendEmailDirect(to, text, project, request_id, subject, tokenQueryString, sourcePage, payload)
333
+ emailService.sendEmailDirect(newto, text, req.project, request_id, subject, undefined, undefined, undefined, replyto, quoteManager);
332
334
 
333
335
  res.json({"queued": true});
334
336
 
package/routes/faq_kb.js CHANGED
@@ -639,7 +639,7 @@ router.post('/fork/:id_faq_kb', async (req, res) => {
639
639
 
640
640
  let globals = req.query.globals;
641
641
  winston.debug("export globals " + globals);
642
- console.log("export globals? --> globals ", globals);
642
+
643
643
 
644
644
  let token = req.headers.authorization;
645
645
 
@@ -647,7 +647,7 @@ router.post('/fork/:id_faq_kb', async (req, res) => {
647
647
 
648
648
  let chatbot = await cs.getBotById(id_faq_kb, public, api_url, chatbot_templates_api_url, token, current_project_id, globals);
649
649
  winston.debug("chatbot: ", chatbot)
650
- console.log("/fork chatbot after getBotById: ", chatbot);
650
+
651
651
  if (!chatbot) {
652
652
  return res.status(500).send({ success: false, message: "Unable to get chatbot" });
653
653
  }
@@ -982,8 +982,6 @@ router.post('/importjson/:id_faq_kb', upload.single('uploadFile'), async (req, r
982
982
  router.get('/exportjson/:id_faq_kb', (req, res) => {
983
983
 
984
984
  winston.debug("exporting bot...")
985
- console.log("exportjson req.query.globals: ", req.query.globals);
986
-
987
985
 
988
986
  let id_faq_kb = req.params.id_faq_kb;
989
987
 
@@ -1000,12 +998,10 @@ router.get('/exportjson/:id_faq_kb', (req, res) => {
1000
998
  const intents = faqs.map(({ _id, id_project, topic, status, id_faq_kb, createdBy, createdAt, updatedAt, __v, ...keepAttrs }) => keepAttrs)
1001
999
 
1002
1000
  if (!req.query.globals) {
1003
- console.log("Delete globals from attributes!")
1001
+ winston.verbose("Delete globals from attributes!")
1004
1002
  if (faq_kb.attributes) {
1005
1003
  delete faq_kb.attributes.globals;
1006
1004
  }
1007
- } else {
1008
- console.log("Keep globals")
1009
1005
  }
1010
1006
 
1011
1007
  let json = {
@@ -1033,7 +1029,6 @@ router.get('/exportjson/:id_faq_kb', (req, res) => {
1033
1029
  // return res.status(200).send(json);
1034
1030
  // }
1035
1031
  let json_string = JSON.stringify(json);
1036
- console.log("json_string: ", json_string)
1037
1032
  res.set({ "Content-Disposition": "attachment; filename=\"bot.json\"" });
1038
1033
  return res.send(json_string);
1039
1034
  }
@@ -0,0 +1,199 @@
1
+ let express = require('express');
2
+ let router = express.Router();
3
+ var winston = require('../config/winston');
4
+ let Integration = require('../models/integrations');
5
+ const cacheEnabler = require('../services/cacheEnabler');
6
+ var cacheUtil = require('../utils/cacheUtil');
7
+ const integrationEvent = require('../event/integrationEvent');
8
+
9
+
10
+ // Get all integration for a project id
11
+ router.get('/', async (req, res) => {
12
+
13
+ let id_project = req.projectid;
14
+ winston.debug("Get all integration for the project " + id_project);
15
+
16
+ let i = Integration.find({ id_project: id_project });
17
+ if (cacheEnabler.integrations) {
18
+ // cacheUtil.longTTL is 1 hour (default), evaluate 1 month (2592000 s)
19
+ i.cache(cacheUtil.longTTL, "project:" + id_project + ":integrations");
20
+ winston.debug('integration cache enabled for get all integrations');
21
+ }
22
+ i.exec((err, integrations) => {
23
+ if (err) {
24
+ winston.error("Error getting integrations: ", err);
25
+ return res.status(500).send({ success: false, message: "Error getting integrations "});
26
+ }
27
+ res.status(200).send(integrations);
28
+ })
29
+ // without cache
30
+ // Integration.find({ id_project: id_project }, (err, integrations) => {
31
+ // if (err) {
32
+ // console.error("Error finding all integrations for the project " + id_project + " - err: " + err);
33
+ // return res.status(404).send({ success: false, err: err })
34
+ // }
35
+ // console.log("Integrations found: ", integrations);
36
+ // res.status(200).send(integrations);
37
+ // })
38
+ })
39
+
40
+ // Get one integration
41
+ router.get('/:integration_id', async (req, res) => {
42
+
43
+ let integration_id = req.params.integration_id;
44
+ winston.debug("Get integration with id " + integration_id);
45
+
46
+ Integration.findById(integration_id, (err, integration) => {
47
+ if (err) {
48
+ winston.error("Error find integration by id: ", err);
49
+ return res.status(404).send({ success: false, err: err });
50
+ }
51
+ res.status(200).send(integration);
52
+ })
53
+
54
+ })
55
+
56
+ router.get('/name/:integration_name', async (req, res) => {
57
+
58
+ let id_project = req.projectid;
59
+ winston.debug("Get all integration for the project " + id_project);
60
+
61
+ let integration_name = req.params.integration_name;
62
+ winston.debug("Get integration with id " + integration_name);
63
+
64
+ Integration.findOne({ id_project: id_project, name: integration_name }, (err, integration) => {
65
+ if (err) {
66
+ winston.error("Error find integration by name: ", err);
67
+ return res.status(404).send({ success: false, err: err });
68
+ }
69
+
70
+ if (!integration) {
71
+ winston.debug("Integration not found");
72
+ return res.status(200).send("Integration not found");
73
+ }
74
+
75
+ res.status(200).send(integration);
76
+ })
77
+ })
78
+
79
+ // Add new integration
80
+ router.post('/', async (req, res) => {
81
+
82
+ let id_project = req.projectid;
83
+ winston.debug("Add new integration ", req.body);
84
+
85
+
86
+ let newIntegration = {
87
+ id_project: id_project,
88
+ name: req.body.name
89
+ }
90
+ if (req.body.value) {
91
+ newIntegration.value = req.body.value;
92
+ }
93
+
94
+ Integration.findOneAndUpdate({ id_project: id_project, name: req.body.name }, newIntegration, { new: true, upsert: true, setDefaultsOnInsert: false}, (err, savedIntegration) => {
95
+ if (err) {
96
+ winston.error("Error creating new integration ", err);
97
+ return res.status(404).send({ success: false, err: err })
98
+ }
99
+
100
+ winston.debug("New integration created: ", savedIntegration);
101
+
102
+ Integration.find({ id_project: id_project }, (err, integrations) => {
103
+ if (err) {
104
+ winston.error("Error getting all integrations");
105
+ } else {
106
+ integrationEvent.emit('integration.update', integrations, id_project);
107
+ }
108
+ })
109
+
110
+ res.status(200).send(savedIntegration);
111
+ })
112
+
113
+ // let newIntegration = new Integration({
114
+ // id_project: id_project,
115
+ // name: req.body.name,
116
+ // value: req.body.value
117
+ // })
118
+
119
+ // newIntegration.save((err, savedIntegration) => {
120
+ // if (err) {
121
+ // console.error("Error creating new integration ", err);
122
+ // return res.status(404).send({ success: false, err: err })
123
+ // }
124
+
125
+ // console.log("New integration created: ", savedIntegration);
126
+
127
+ // Integration.find({ id_project: id_project }, (err, integrations) => {
128
+ // if (err) {
129
+ // console.error("Error getting all integrations");
130
+ // } else {
131
+ // console.log("emit integration.create event")
132
+ // integrationEvent.emit('integration.create', integrations, id_project);
133
+ // }
134
+
135
+ // })
136
+
137
+ // res.status(200).send(savedIntegration);
138
+
139
+ // })
140
+
141
+ })
142
+
143
+ router.put('/:integration_id', async (req, res) => {
144
+
145
+ let id_project = req.projectid;
146
+ let integration_id = req.params.integration_id;
147
+
148
+ let update = {};
149
+ if (req.body.name != undefined) {
150
+ update.name = req.body.name;
151
+ }
152
+ if (req.body.value != undefined) {
153
+ update.value = req.body.value
154
+ }
155
+
156
+ Integration.findByIdAndUpdate(integration_id, update, { new: true, upsert: true }, (err, savedIntegration) => {
157
+ if (err) {
158
+ winston.error("Error find by id and update integration: ", err);
159
+ return res.status({ success: false, error: err })
160
+ }
161
+
162
+ Integration.find({ id_project: id_project }, (err, integrations) => {
163
+ if (err) {
164
+ winston.error("Error getting all integrations");
165
+ } else {
166
+ integrationEvent.emit('integration.update', integrations, id_project);
167
+ }
168
+ })
169
+
170
+ res.status(200).send(savedIntegration);
171
+ })
172
+ })
173
+
174
+ router.delete('/:integration_id', async (req, res) => {
175
+
176
+ let id_project = req.projectid;
177
+ let integration_id = req.params.integration_id;
178
+
179
+ Integration.findByIdAndDelete(integration_id, (err, result) => {
180
+ if (err) {
181
+ winston.error("Error find by id and delete integration: ", err);
182
+ return res.status({ success: false, error: err })
183
+ }
184
+
185
+ Integration.find({ id_project: id_project }, (err, integrations) => {
186
+ if (err) {
187
+ winston.error("Error getting all integrations");
188
+ } else {
189
+ integrationEvent.emit('integration.update', integrations, id_project);
190
+ }
191
+ })
192
+
193
+ res.status(200).send({ success: true, messages: "Integration deleted successfully"});
194
+
195
+ })
196
+ })
197
+
198
+
199
+ module.exports = router;
package/routes/kb.js CHANGED
@@ -39,8 +39,6 @@ router.post('/', async (req, res) => {
39
39
 
40
40
  let project_id = req.projectid;
41
41
  let body = req.body;
42
- console.log("create new kb project_id " + project_id);
43
- console.log("create new kb body ", body);
44
42
 
45
43
  let new_kb = {
46
44
  id_project: project_id,