@tiledesk/tiledesk-server 2.2.23 → 2.2.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
  };