@tiledesk/tiledesk-server 2.2.23 → 2.2.28

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. package/CHANGELOG.md +22 -1
  2. package/README.md +6 -0
  3. package/app.js +73 -3
  4. package/bin/www +4 -1
  5. package/channels/chat21/chat21WebHook.js +1 -1
  6. package/config/email.js +1 -1
  7. package/config/global.js +2 -0
  8. package/config/labels/widget.json +781 -611
  9. package/event/messageEvent.js +4 -4
  10. package/middleware/has-role.js +1 -1
  11. package/middleware/passport.js +3 -3
  12. package/models/project.js +10 -0
  13. package/models/project_user.js +2 -0
  14. package/models/request.js +1 -1
  15. package/package.json +4 -3
  16. package/pubmodules/emailNotification/requestNotification.js +4 -4
  17. package/pubmodules/messageTransformer/messageHandlebarsTransformerInterceptor.js +3 -3
  18. package/pubmodules/messageTransformer/messageTransformerInterceptor.js +3 -3
  19. package/pubmodules/rules/conciergeBot.js +5 -2
  20. package/pubmodules/scheduler/tasks/closeBotUnresponsiveRequestTask.js +12 -3
  21. package/routes/department.js +1 -1
  22. package/routes/faq_kb.js +2 -3
  23. package/routes/labels.js +2 -0
  24. package/routes/message.js +1 -1
  25. package/routes/project.js +73 -1
  26. package/routes/project_user.js +11 -4
  27. package/routes/request.js +15 -0
  28. package/routes/user-request.js +15 -0
  29. package/routes/widget.js +1 -1
  30. package/services/departmentService.js +5 -4
  31. package/services/faqBotHandler.js +1 -1
  32. package/services/faqService.js +62 -29
  33. package/services/labelService-no-default.js +2 -2
  34. package/services/labelService.js +1 -1
  35. package/services/leadService.js +2 -2
  36. package/services/operatingHoursService.js +1 -1
  37. package/services/requestService.js +3 -3
  38. package/utils/orgUtil.js +74 -0
  39. package/utils/sendMessageUtil.js +2 -2
  40. package/websocket/webSocketServer.js +10 -10
  41. package/services/faqBotSupport copy.js_consplit +0 -453
package/CHANGELOG.md CHANGED
@@ -1,4 +1,25 @@
1
- # 2.2.23 -> PROD
1
+ # untagged
2
+ - Operator.select returns context object that contains the temp request..TEST IT
3
+ - Added Serbian language to the widget
4
+ - Added tag field to the project_user
5
+ - Removed default BCC from email
6
+ - BugFix: Avoid cluster concurrent jobs in multiple nodes
7
+ - Faq template now support blank and example
8
+ - Organizzation support added
9
+ - ipFilter related to the project is now supported
10
+
11
+ # 2.2.26
12
+ - Tag fix for 2.2.25
13
+
14
+ # 2.2.25
15
+ - New label prechat form
16
+ - Updated mongodb-runner from 4.8.1 to 4.8.3 to fix ssh key error
17
+
18
+ # 2.2.24 -> PROD
19
+ - webhook subscription can fetch temmates endpoint
20
+ - Added hasBot and createdAt index to the request model
21
+
22
+ # 2.2.23
2
23
  - Increased list answers limit from 1000 to 3000
3
24
 
4
25
  # 2.2.22
package/README.md CHANGED
@@ -18,6 +18,11 @@ You can find more info here: https://developer.tiledesk.com
18
18
  * [Nodejs](https://www.npmjs.com/) and npm installed. Suggested versions are NodeJS 12.20.2 and NPM 6.14.11
19
19
  * [MongoDb](https://www.mongodb.com) installed
20
20
 
21
+ # Run Tiledesk with Docker Compose
22
+
23
+ Do you want to install all the Tiledesk components on your server with just one click?
24
+ Use [Docker Compose Tiledesk installation guide](https://github.com/Tiledesk/tiledesk-deployment/blob/master/docker-compose/README.md)
25
+
21
26
  # Running Tiledesk Server
22
27
 
23
28
  ## Run locally with npm
@@ -85,3 +90,4 @@ To see how to upgrade tiledesk-server see [here](./docs/upgrading.md)
85
90
  # Testing
86
91
  Run unit test with `npm test` and integration test with `npm run test:int`
87
92
 
93
+
package/app.js CHANGED
@@ -96,6 +96,7 @@ var faqpub = require('./routes/faqpub');
96
96
  var labels = require('./routes/labels');
97
97
  var fetchLabels = require('./middleware/fetchLabels');
98
98
  var cacheUtil = require("./utils/cacheUtil");
99
+ var orgUtil = require("./utils/orgUtil");
99
100
  var images = require('./routes/images');
100
101
  var files = require('./routes/files');
101
102
  var campaigns = require('./routes/campaigns');
@@ -128,6 +129,10 @@ var pubModulesManager = require('./pubmodules/pubModulesManager');
128
129
  var channelManager = require('./channels/channelManager');
129
130
  channelManager.listen();
130
131
 
132
+ const ipfilter = require('express-ipfilter').IpFilter
133
+ // const IpDeniedError = require('express-ipfilter').IpDeniedError;
134
+
135
+
131
136
  var modulesManager = undefined;
132
137
  try {
133
138
  modulesManager = require('./services/modulesManager');
@@ -233,7 +238,10 @@ if (process.env.ROUTELOGGER_ENABLED==="true") {
233
238
 
234
239
  var fullUrl = req.protocol + '://' + req.get('host') + req.originalUrl;
235
240
  winston.debug("fullUrl:"+ fullUrl);
241
+ winston.debug(" req.get('host'):"+ req.get('host'));
242
+
236
243
  winston.debug("req.get('origin'):" + req.get('origin'));
244
+ winston.debug("req.get('referer'):" + req.get('referer'));
237
245
 
238
246
  var routerLogger = new RouterLogger({
239
247
  origin: req.get('origin'),
@@ -286,12 +294,12 @@ var projectSetter = function (req, res, next) {
286
294
 
287
295
  if (projectid) {
288
296
  Project.findOne({_id: projectid, status: 100})
289
- .cache(cacheUtil.defaultTTL, "projects:id:"+projectid)
297
+ //@DISABLED_CACHE .cache(cacheUtil.defaultTTL, "projects:id:"+projectid)
290
298
  .exec(function(err, project){
291
299
  if (err) {
292
300
  winston.warn("Problem getting project with id: " + projectid + " req.originalUrl: " + req.originalUrl);
293
301
  }
294
-
302
+
295
303
  winston.debug("projectSetter project:" + project);
296
304
  if (!project) {
297
305
  winston.warn("ProjectSetter project not found with id: " + projectid);
@@ -311,6 +319,53 @@ var projectSetter = function (req, res, next) {
311
319
  }
312
320
 
313
321
 
322
+ function customDetection (req) {
323
+ const ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
324
+ winston.info("standard ip: "+ip); // ip address of the user
325
+ return ip;
326
+ }
327
+
328
+
329
+ var projectIpFilter = function (req, res, next) {
330
+ // var projectIpFilter = function (err, req, res, next) {
331
+
332
+ // var ip = require('ip');
333
+ // winston.info("projectIpFilter ip2: " + ip.address() );
334
+
335
+
336
+ const nextIp = function(err) {
337
+ winston.info("projectIpFilter next",err);
338
+
339
+ if (err && err.name === "IpDeniedError") {
340
+ winston.info("IpDeniedError");
341
+ return res.status(401).json({ err: "error project ip filter" });
342
+ // next(err)
343
+ }
344
+
345
+ next();
346
+
347
+ }
348
+
349
+
350
+ if (!req.project) {
351
+ return next();
352
+ }
353
+
354
+ var projectIpFilterEnabled = req.project.ipFilterEnabled;
355
+ winston.info("project projectIpFilterEnabled: " +projectIpFilterEnabled)
356
+
357
+ var projectIpFilter = req.project.ipFilter
358
+ winston.info("project ipFilter: " + projectIpFilter)
359
+
360
+ if (projectIpFilterEnabled === true && projectIpFilter && projectIpFilter.length > 0) {
361
+ var ip = ipfilter(projectIpFilter, { detectIp: customDetection, mode: 'allow' })
362
+ // var ip = ipfilter(projectIpFilter, { mode: 'allow' })
363
+ ip(req, res, nextIp);
364
+ } else {
365
+ next();
366
+ }
367
+
368
+ }
314
369
 
315
370
 
316
371
 
@@ -322,6 +377,7 @@ var projectSetter = function (req, res, next) {
322
377
  // app.post('/oauth/token', oauth2.token);
323
378
 
324
379
 
380
+ // const ips = ['::1'];
325
381
 
326
382
  app.use('/auth', auth);
327
383
  app.use('/testauth', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken], authtest);
@@ -355,7 +411,7 @@ if (modulesManager) {
355
411
  }
356
412
 
357
413
 
358
- app.use('/:projectid/', [projectIdSetter, projectSetter]);
414
+ app.use('/:projectid/', [projectIdSetter, projectSetter, projectIpFilter]);
359
415
 
360
416
 
361
417
  app.use('/:projectid/authtestWithRoleCheck', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken], authtestWithRoleCheck);
@@ -447,8 +503,22 @@ app.use(function (err, req, res, next) {
447
503
  });*/
448
504
 
449
505
 
506
+
507
+
508
+
509
+
510
+
511
+
512
+
450
513
  // error handler
451
514
  app.use((err, req, res, next) => {
515
+
516
+ winston.info("err.name", err.name)
517
+ if (err.name === "IpDeniedError") {
518
+ winston.info("IpDeniedError");
519
+ return res.status(401).json({ err: "error ip filter" });
520
+ }
521
+
452
522
  winston.error("General error", err);
453
523
  return res.status(500).json({ err: "error" });
454
524
  });
package/bin/www CHANGED
@@ -32,7 +32,10 @@ webSocketServer.init(httpServer);
32
32
  * Listen on provided port, on all network interfaces.
33
33
  */
34
34
 
35
- var listener = httpServer.listen(port,function(){
35
+ // use ipv4 or ipv6 https://stackoverflow.com/questions/50855419/get-only-ipv4-ips-via-nodejs-express
36
+ // var listener = httpServer.listen(port,'0.0.0.0', function(){
37
+
38
+ var listener = httpServer.listen(port, function(){
36
39
  console.log('Listening tiledesk-server ver:'+version+' on port ' + listener.address().port); //Listening on port 8888
37
40
  });
38
41
 
@@ -375,7 +375,7 @@ router.post('/', function (req, res) {
375
375
  winston.debug('query:'+ projectId);
376
376
 
377
377
  return Request.findOne(query)
378
- .cache(cacheUtil.defaultTTL, projectId+":requests:request_id:"+recipient_id)
378
+ //@DISABLED_CACHE cacheUtil.defaultTTL, projectId+":requests:request_id:"+recipient_id)
379
379
  .exec(function(err, request) {
380
380
 
381
381
  if (err) {
package/config/email.js CHANGED
@@ -2,7 +2,7 @@ module.exports = {
2
2
  'host':'smtp.mailgun.org',
3
3
  'username': 'postmaster@mg.tiledesk.com',
4
4
  'from': 'Tiledesk Notification <postmaster@mg.tiledesk.com>',
5
- 'bcc': 'tiledesknotification@frontiere21.it',
5
+ 'bcc': '',
6
6
  'baseUrl':'https://console.tiledesk.com/v2/dashboard',
7
7
  'replyEnabled' : false,
8
8
  'inboundDomain': 'tickets.tiledesk.com'
package/config/global.js CHANGED
@@ -1,3 +1,5 @@
1
1
  module.exports = {
2
2
  'apiUrl':'http://localhost:3000',
3
+ 'organizationBaseUrl' : 'org.local',
4
+ 'organizationEnabled' : false
3
5
  };