@tiledesk/tiledesk-server 2.2.24 → 2.2.29
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.
- 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'
|