@tiledesk/tiledesk-server 2.2.24 → 2.2.29
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG.md +30 -2
- package/README.md +6 -0
- package/app.js +72 -2
- package/bin/www +4 -1
- package/config/email.js +1 -1
- package/config/global.js +2 -0
- package/config/labels/widget.json +781 -611
- package/models/project.js +10 -0
- package/models/project_user.js +2 -0
- package/package.json +4 -3
- package/pubmodules/rules/conciergeBot.js +5 -2
- package/pubmodules/scheduler/tasks/closeBotUnresponsiveRequestTask.js +12 -3
- package/routes/faq_kb.js +2 -3
- package/routes/labels.js +2 -0
- package/routes/project.js +72 -0
- package/routes/project_user.js +9 -2
- package/routes/request.js +15 -0
- package/routes/user-request.js +326 -0
- package/routes/widget.js +1 -1
- package/services/departmentService.js +5 -4
- package/services/emailService.js +2 -2
- package/services/faqService.js +62 -29
- package/utils/orgUtil.js +74 -0
- package/config/labels/widget copy.json +0 -624
- package/services/faqBotSupport copy.js_consplit +0 -453
package/CHANGELOG.md
CHANGED
@@ -1,9 +1,37 @@
|
|
1
1
|
|
2
|
-
# 2.2.
|
2
|
+
# 2.2.29
|
3
|
+
- Added endpoint to find requests created by users and guests
|
4
|
+
- Log fix
|
5
|
+
|
6
|
+
# 2.2.28 (compatible with dasboard ver. 2.2.36)
|
7
|
+
- Operator.select returns context object that contains the temp request
|
8
|
+
- Added Serbian language to the widget
|
9
|
+
- Added tag field to the project_user
|
10
|
+
- Removed default BCC from email
|
11
|
+
- BugFix: Avoid cluster concurrent jobs in multiple nodes
|
12
|
+
- Faq template now support blank and example
|
13
|
+
- Organizzation support added
|
14
|
+
- ipFilter related to the project is now supported
|
15
|
+
- Added filter channel name for the request
|
16
|
+
- Added edit card for payment
|
17
|
+
- Fix concierge concierge bot for department selection
|
18
|
+
- Added filter to find a request by ticket_id
|
19
|
+
- Added filter to snap_lead_lead_id for request
|
20
|
+
- Added endpoint to close a request by guest
|
21
|
+
|
22
|
+
|
23
|
+
# 2.2.26 -> PROD (compatible with dasboard ver. 2.2.35)
|
24
|
+
- Tag fix for 2.2.25
|
25
|
+
|
26
|
+
# 2.2.25
|
27
|
+
- New label prechat form
|
28
|
+
- Updated mongodb-runner from 4.8.1 to 4.8.3 to fix ssh key error
|
29
|
+
|
30
|
+
# 2.2.24
|
3
31
|
- webhook subscription can fetch temmates endpoint
|
4
32
|
- Added hasBot and createdAt index to the request model
|
5
33
|
|
6
|
-
# 2.2.23
|
34
|
+
# 2.2.23
|
7
35
|
- Increased list answers limit from 1000 to 3000
|
8
36
|
|
9
37
|
# 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'),
|
@@ -291,7 +299,7 @@ var projectSetter = function (req, res, next) {
|
|
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.debug("project projectIpFilterEnabled: " +projectIpFilterEnabled)
|
356
|
+
|
357
|
+
var projectIpFilter = req.project.ipFilter
|
358
|
+
winston.debug("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
|
|
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'
|