@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.
- package/CHANGELOG.md +22 -1
- package/README.md +6 -0
- package/app.js +73 -3
- package/bin/www +4 -1
- package/channels/chat21/chat21WebHook.js +1 -1
- package/config/email.js +1 -1
- package/config/global.js +2 -0
- package/config/labels/widget.json +781 -611
- package/event/messageEvent.js +4 -4
- package/middleware/has-role.js +1 -1
- package/middleware/passport.js +3 -3
- package/models/project.js +10 -0
- package/models/project_user.js +2 -0
- package/models/request.js +1 -1
- package/package.json +4 -3
- package/pubmodules/emailNotification/requestNotification.js +4 -4
- package/pubmodules/messageTransformer/messageHandlebarsTransformerInterceptor.js +3 -3
- package/pubmodules/messageTransformer/messageTransformerInterceptor.js +3 -3
- package/pubmodules/rules/conciergeBot.js +5 -2
- package/pubmodules/scheduler/tasks/closeBotUnresponsiveRequestTask.js +12 -3
- package/routes/department.js +1 -1
- package/routes/faq_kb.js +2 -3
- package/routes/labels.js +2 -0
- package/routes/message.js +1 -1
- package/routes/project.js +73 -1
- package/routes/project_user.js +11 -4
- package/routes/request.js +15 -0
- package/routes/user-request.js +15 -0
- package/routes/widget.js +1 -1
- package/services/departmentService.js +5 -4
- package/services/faqBotHandler.js +1 -1
- package/services/faqService.js +62 -29
- package/services/labelService-no-default.js +2 -2
- package/services/labelService.js +1 -1
- package/services/leadService.js +2 -2
- package/services/operatingHoursService.js +1 -1
- package/services/requestService.js +3 -3
- package/utils/orgUtil.js +74 -0
- package/utils/sendMessageUtil.js +2 -2
- package/websocket/webSocketServer.js +10 -10
- package/services/faqBotSupport copy.js_consplit +0 -453
package/CHANGELOG.md
CHANGED
@@ -1,4 +1,25 @@
|
|
1
|
-
#
|
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
|
-
|
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
|
-
|
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': '
|
5
|
+
'bcc': '',
|
6
6
|
'baseUrl':'https://console.tiledesk.com/v2/dashboard',
|
7
7
|
'replyEnabled' : false,
|
8
8
|
'inboundDomain': 'tickets.tiledesk.com'
|