@tiledesk/tiledesk-server 2.1.41 → 2.2.4
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/.circleci/config.yml +54 -0
- package/.env.sample +1 -1
- package/.github/workflows/docker-community-push-latest.yml +22 -0
- package/.github/workflows/{docker-image-push.yml → docker-image-en-tag-push.yml} +1 -1
- package/.github/workflows/docker-image-tag-community-tag-push.yml +21 -0
- package/.github/workflows/{docker-push-latest.yml → docker-push-en-push-latest.yml} +1 -1
- package/CHANGELOG.md +198 -1
- package/Dockerfile +1 -1
- package/Dockerfile-en +1 -1
- package/README.md +5 -7
- package/app.js +12 -1
- package/channels/chat21/chat21Contact.js +34 -8
- package/channels/chat21/chat21Handler.js +48 -5
- package/channels/chat21/chat21WebHook.js +34 -5
- package/channels/chat21/nativeauth.js +2 -2
- package/config/email.js +2 -1
- package/config/global.js +3 -0
- package/config/labels/widget.json +170 -16
- package/event/messageEvent.js +18 -1
- package/middleware/passport.js +10 -4
- package/models/actionsConstants.js +7 -0
- package/models/department.js +3 -0
- package/models/faq.js +8 -2
- package/models/faq_kb.js +6 -0
- package/models/message.js +10 -4
- package/models/messageConstants.js +3 -3
- package/models/request.js +33 -3
- package/package.json +31 -28
- package/pubmodules/emailNotification/requestNotification.js +380 -62
- package/pubmodules/messageActions/messageActionsInterceptor.js +20 -7
- package/pubmodules/messageTransformer/index.js +1 -1
- package/pubmodules/messageTransformer/microLanguageAttributesTransformerInterceptor.js +67 -0
- package/pubmodules/pubModulesManager.js +66 -14
- package/pubmodules/rules/conciergeBot.js +81 -49
- package/routes/auth.js +34 -10
- package/routes/campaigns.js +117 -25
- package/routes/faq.js +19 -0
- package/routes/faq_kb.js +13 -4
- package/routes/faqpub.js +1 -1
- package/routes/images.js +1 -1
- package/routes/jwt.js +0 -1
- package/routes/logs.js +26 -0
- package/routes/message.js +7 -2
- package/routes/messagesRoot.js +73 -16
- package/routes/project_user.js +36 -1
- package/routes/request.js +88 -12
- package/routes/requestUtilRoot.js +30 -0
- package/routes/urls.js +12 -0
- package/routes/users.js +5 -1
- package/services/BotSubscriptionNotifier.js +1 -0
- package/services/departmentService.js +29 -5
- package/services/emailService.js +1103 -298
- package/services/faqBotHandler.js +176 -61
- package/services/faqBotSupport.js +181 -117
- package/services/faqService.js +17 -14
- package/services/messageService.js +57 -9
- package/services/modulesManager.js +86 -23
- package/services/requestService.js +58 -17
- package/template/email/assignedEmailMessage.html +205 -0
- package/template/email/assignedRequest.html +44 -14
- package/template/email/beenInvitedExistingUser.html +2 -2
- package/template/email/beenInvitedNewUser.html +1 -1
- package/template/email/newMessage.html +31 -12
- package/template/email/passwordChanged.html +2 -3
- package/template/email/pooledEmailMessage.html +208 -0
- package/template/email/pooledRequest.html +41 -14
- package/template/email/resetPassword.html +2 -3
- package/template/email/sendTranscript.html +1 -1
- package/template/email/test.html +1 -1
- package/template/email/ticket.html +78 -52
- package/template/email/ticket.txt +5 -1
- package/template/email/verify.html +1 -1
- package/test/authentication.js +76 -4
- package/test/authenticationJwt.js +76 -2
- package/test/campaignsRoute.js +226 -0
- package/test/faqService.js +3 -3
- package/test/faqkbRoute.js +3 -2
- package/test/messageRootRoute.js +193 -0
- package/test/messageRoute.js +75 -0
- package/test/messageService.js +5 -5
- package/test/requestRoute.js +27 -9
- package/test/requestService.js +472 -11
- package/test-int/bot.js +673 -8
- package/websocket/webSocketServer.js +7 -4
- package/template/email/ticket-taking.txt +0 -7
@@ -18,9 +18,11 @@ class MessageActionsInterceptor {
|
|
18
18
|
|
19
19
|
var that = this;
|
20
20
|
winston.info("MessageActionsInterceptor listener start ");
|
21
|
-
|
22
|
-
|
23
|
-
|
21
|
+
|
22
|
+
//use .received to be sure for \close the message is sent to chat21 and after that you can archive the conversation. otherwise a race condition occurs with message.create if \close is sent by the bot
|
23
|
+
messageEvent.on('message.received', function(message) {
|
24
|
+
// messageEvent.on('message.create', function(message) {
|
25
|
+
winston.debug("message.received ", message);
|
24
26
|
|
25
27
|
setImmediate(() => {
|
26
28
|
|
@@ -78,6 +80,7 @@ class MessageActionsInterceptor {
|
|
78
80
|
|
79
81
|
var request = message.request;
|
80
82
|
|
83
|
+
|
81
84
|
if (request) {
|
82
85
|
//var botId = botEvent.getBotId(message);
|
83
86
|
var botId = BotFromParticipant.getBotId(message);
|
@@ -144,14 +147,24 @@ class MessageActionsInterceptor {
|
|
144
147
|
var request = message.request;
|
145
148
|
|
146
149
|
if (request) {
|
147
|
-
//
|
148
|
-
|
150
|
+
// setTimeout(function() {
|
151
|
+
// winston.info("delayed")
|
152
|
+
// closeRequestByRequestId(request_id, id_project, notify) {
|
153
|
+
requestService.closeRequestByRequestId(request.request_id, request.id_project );
|
154
|
+
// }, 1500);
|
155
|
+
|
156
|
+
|
149
157
|
}
|
150
158
|
|
151
159
|
});
|
152
160
|
|
153
|
-
|
154
|
-
|
161
|
+
/*
|
162
|
+
messageActionEvent.on("actions", function(message) {
|
163
|
+
// esegui custom action--->
|
164
|
+
});
|
165
|
+
messageActionEvent.on("events", function(message) {
|
166
|
+
// lancia event
|
167
|
+
});*/
|
155
168
|
|
156
169
|
|
157
170
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
const messageTransformerInterceptor = require("./messageTransformerInterceptor");
|
2
|
-
const microLanguageTransformerInterceptor = require("./
|
2
|
+
const microLanguageTransformerInterceptor = require("./microLanguageAttributesTransformerInterceptor");
|
3
3
|
|
4
4
|
|
5
5
|
|
@@ -0,0 +1,67 @@
|
|
1
|
+
|
2
|
+
const messagePromiseEvent = require('../../event/messagePromiseEvent');
|
3
|
+
|
4
|
+
var winston = require('../../config/winston');
|
5
|
+
const { TiledeskChatbotUtil } = require('@tiledesk/tiledesk-chatbot-util');
|
6
|
+
|
7
|
+
|
8
|
+
class MicroLanguageTransformerInterceptor {
|
9
|
+
|
10
|
+
|
11
|
+
|
12
|
+
|
13
|
+
listen() {
|
14
|
+
|
15
|
+
var that = this;
|
16
|
+
winston.info("MicroLanguageTransformerInterceptor listener start ");
|
17
|
+
|
18
|
+
messagePromiseEvent.on('message.create.simple.before', async (data) => {
|
19
|
+
winston.debug('MicroLanguageTransformerInterceptor message.create.simple.before', data);
|
20
|
+
|
21
|
+
var message = data.beforeMessage;
|
22
|
+
|
23
|
+
if (!message.text) { //for image i think
|
24
|
+
return data;
|
25
|
+
}
|
26
|
+
|
27
|
+
if (message.attributes && message.attributes.microlanguage == true) {
|
28
|
+
var reply = TiledeskChatbotUtil.parseReply(message.text);
|
29
|
+
winston.debug('parseReply: ' + JSON.stringify(reply) );
|
30
|
+
var messageReply = reply.message;
|
31
|
+
|
32
|
+
|
33
|
+
var msg_attributes = {"_raw_message": message.text};
|
34
|
+
|
35
|
+
if (messageReply && messageReply.attributes) {
|
36
|
+
for(const [key, value] of Object.entries(messageReply.attributes)) {
|
37
|
+
msg_attributes[key] = value
|
38
|
+
}
|
39
|
+
}
|
40
|
+
|
41
|
+
messageReply.attributes = msg_attributes;
|
42
|
+
|
43
|
+
|
44
|
+
//data.beforeMessage = messageReply; //https://stackoverflow.com/questions/518000/is-javascript-a-pass-by-reference-or-pass-by-value-language
|
45
|
+
// message = messageReply;
|
46
|
+
message.text = messageReply.text; //ATTENTION Changes is made by reference
|
47
|
+
message.attributes = messageReply.attributes; //ATTENTION Changes is made by reference
|
48
|
+
message.type = messageReply.type; //ATTENTION Changes is made by reference
|
49
|
+
message.metadata = messageReply.metadata; //ATTENTION Changes is made by reference
|
50
|
+
// message.metadata = messageReply.metadata;
|
51
|
+
|
52
|
+
//data.beforeMessage = messageReply;
|
53
|
+
|
54
|
+
}
|
55
|
+
winston.debug('data: ' + JSON.stringify(data) );
|
56
|
+
return data;
|
57
|
+
|
58
|
+
});
|
59
|
+
|
60
|
+
|
61
|
+
}
|
62
|
+
|
63
|
+
|
64
|
+
}
|
65
|
+
|
66
|
+
var microLanguageTransformerInterceptor = new MicroLanguageTransformerInterceptor();
|
67
|
+
module.exports = microLanguageTransformerInterceptor;
|
@@ -45,8 +45,8 @@ class PubModulesManager {
|
|
45
45
|
|
46
46
|
try {
|
47
47
|
this.appRules = require('./rules/appRules');
|
48
|
-
this.appRules.start();
|
49
|
-
winston.info("PubModulesManager
|
48
|
+
// this.appRules.start();
|
49
|
+
winston.info("PubModulesManager initialized rules.");
|
50
50
|
} catch(err) {
|
51
51
|
if (err.code == 'MODULE_NOT_FOUND') {
|
52
52
|
winston.info("PubModulesManager init rules module not found");
|
@@ -58,8 +58,8 @@ class PubModulesManager {
|
|
58
58
|
try {
|
59
59
|
this.messageActions = require('./messageActions');
|
60
60
|
winston.debug("this.messageActions:"+ this.messageActions);
|
61
|
-
this.messageActions.messageActionsInterceptor.listen();
|
62
|
-
winston.info("PubModulesManager
|
61
|
+
// this.messageActions.messageActionsInterceptor.listen();
|
62
|
+
winston.info("PubModulesManager initialized messageActions.");
|
63
63
|
} catch(err) {
|
64
64
|
if (err.code == 'MODULE_NOT_FOUND') {
|
65
65
|
winston.info("PubModulesManager init messageActions module not found");
|
@@ -71,9 +71,9 @@ class PubModulesManager {
|
|
71
71
|
try {
|
72
72
|
this.messageTransformer = require('./messageTransformer');
|
73
73
|
winston.debug("this.messageTransformer:"+ this.messageTransformer);
|
74
|
-
this.messageTransformer.messageTransformerInterceptor.listen();
|
75
|
-
this.messageTransformer.microLanguageTransformerInterceptor.listen();
|
76
|
-
winston.info("PubModulesManager
|
74
|
+
// this.messageTransformer.messageTransformerInterceptor.listen();
|
75
|
+
// this.messageTransformer.microLanguageTransformerInterceptor.listen();
|
76
|
+
winston.info("PubModulesManager initialized messageTransformer.");
|
77
77
|
} catch(err) {
|
78
78
|
if (err.code == 'MODULE_NOT_FOUND') {
|
79
79
|
winston.info("PubModulesManager init messageTransformer module not found");
|
@@ -87,8 +87,8 @@ class PubModulesManager {
|
|
87
87
|
try {
|
88
88
|
this.emailNotification = require('./emailNotification');
|
89
89
|
winston.debug("this.emailNotification:"+ this.emailNotification);
|
90
|
-
this.emailNotification.requestNotification.listen();
|
91
|
-
winston.info("PubModulesManager
|
90
|
+
// this.emailNotification.requestNotification.listen();
|
91
|
+
winston.info("PubModulesManager initialized requestNotification loaded.");
|
92
92
|
} catch(err) {
|
93
93
|
if (err.code == 'MODULE_NOT_FOUND') {
|
94
94
|
winston.info("PubModulesManager init emailNotification module not found");
|
@@ -101,7 +101,7 @@ class PubModulesManager {
|
|
101
101
|
try {
|
102
102
|
this.eventsRoute = require('./events/eventRoute');
|
103
103
|
winston.debug("this.eventRoute:"+ this.eventsRoute);
|
104
|
-
winston.info("PubModulesManager
|
104
|
+
winston.info("PubModulesManager initialized eventsRoute.");
|
105
105
|
} catch(err) {
|
106
106
|
if (err.code == 'MODULE_NOT_FOUND') {
|
107
107
|
winston.info("PubModulesManager init eventsRoute module not found");
|
@@ -114,8 +114,8 @@ class PubModulesManager {
|
|
114
114
|
try {
|
115
115
|
this.entityEraser = require('./entityEraser');
|
116
116
|
winston.debug("this.entityEraser:"+ this.entityEraser);
|
117
|
-
this.entityEraser.eraserInterceptor.listen();
|
118
|
-
winston.info("PubModulesManager
|
117
|
+
// this.entityEraser.eraserInterceptor.listen();
|
118
|
+
winston.info("PubModulesManager initialized entityEraser.");
|
119
119
|
} catch(err) {
|
120
120
|
if (err.code == 'MODULE_NOT_FOUND') {
|
121
121
|
winston.info("PubModulesManager init entityEraser module not found");
|
@@ -129,8 +129,8 @@ class PubModulesManager {
|
|
129
129
|
try {
|
130
130
|
this.scheduler = require('./scheduler');
|
131
131
|
winston.debug("this.scheduler:"+ this.scheduler);
|
132
|
-
this.scheduler.taskRunner.start();
|
133
|
-
winston.info("PubModulesManager
|
132
|
+
// this.scheduler.taskRunner.start();
|
133
|
+
winston.info("PubModulesManager initialized scheduler.");
|
134
134
|
} catch(err) {
|
135
135
|
if (err.code == 'MODULE_NOT_FOUND') {
|
136
136
|
winston.info("PubModulesManager init scheduler module not found");
|
@@ -144,6 +144,58 @@ class PubModulesManager {
|
|
144
144
|
|
145
145
|
}
|
146
146
|
|
147
|
+
start() {
|
148
|
+
if (this.appRules) {
|
149
|
+
try {
|
150
|
+
this.appRules.start();
|
151
|
+
winston.info("PubModulesManager appRules started.");
|
152
|
+
} catch(err) {
|
153
|
+
winston.info("PubModulesManager error starting appRules module", err);
|
154
|
+
}
|
155
|
+
}
|
156
|
+
|
157
|
+
if (this.messageActions) {
|
158
|
+
try {
|
159
|
+
this.messageActions.messageActionsInterceptor.listen();
|
160
|
+
winston.info("PubModulesManager messageActions started.");
|
161
|
+
} catch(err) {
|
162
|
+
winston.info("PubModulesManager error starting messageActions module", err);
|
163
|
+
}
|
164
|
+
}
|
165
|
+
|
166
|
+
|
167
|
+
if (this.messageTransformer) {
|
168
|
+
try {
|
169
|
+
this.messageTransformer.messageTransformerInterceptor.listen();
|
170
|
+
this.messageTransformer.microLanguageTransformerInterceptor.listen();
|
171
|
+
winston.info("PubModulesManager messageTransformer started.");
|
172
|
+
} catch(err) {
|
173
|
+
winston.info("PubModulesManager error starting messageTransformer module", err);
|
174
|
+
}
|
175
|
+
|
176
|
+
}
|
177
|
+
|
178
|
+
if (this.emailNotification) {
|
179
|
+
try {
|
180
|
+
this.emailNotification.requestNotification.listen();
|
181
|
+
winston.info("PubModulesManager emailNotification started.");
|
182
|
+
} catch(err) {
|
183
|
+
winston.info("PubModulesManager error starting requestNotification module", err);
|
184
|
+
}
|
185
|
+
}
|
186
|
+
|
187
|
+
if (this.scheduler) {
|
188
|
+
try {
|
189
|
+
this.scheduler.taskRunner.start();
|
190
|
+
winston.info("PubModulesManager scheduler started.");
|
191
|
+
} catch(err) {
|
192
|
+
winston.info("PubModulesManager error starting scheduler module", err);
|
193
|
+
}
|
194
|
+
}
|
195
|
+
|
196
|
+
|
197
|
+
}
|
198
|
+
|
147
199
|
|
148
200
|
|
149
201
|
}
|
@@ -43,21 +43,41 @@ devi mandare un messaggio welcome tu altrimenti il bot inserito successivamente
|
|
43
43
|
// winston.debug(" ConciergeBot message.request.first_text: "+message.request.first_text);
|
44
44
|
|
45
45
|
// lead_id used. Change it?
|
46
|
-
|
46
|
+
|
47
|
+
if (message.request && message.request.preflight === true && message.sender == message.request.lead.lead_id && message.text != message.request.first_text) {
|
48
|
+
winston.debug("conciergebot: " + message.request.first_text );
|
49
|
+
// if (message.request && message.request.preflight === true && message.sender == message.request.lead.lead_id && message.text != message.request.first_text ) {
|
47
50
|
// if (message.request.status < 100 && message.sender == message.request.lead.lead_id && message.text != message.request.first_text ) {
|
48
51
|
// if (message.request.status < 100 && message.sender == message.request.lead.lead_id && message.text != message.request.first_text && !botId) {
|
49
52
|
|
50
53
|
winston.debug("message send from lead with preflight on");
|
51
54
|
|
52
55
|
// changeFirstTextAndPreflightByRequestId(request_id, id_project, first_text, preflight) {
|
53
|
-
requestService.changeFirstTextAndPreflightByRequestId(message.request.request_id, message.request.id_project, message.text, false).then(function (reqChanged) {
|
54
|
-
|
55
|
-
// requestService.changeFirstTextByRequestId(message.request.request_id, message.request.id_project, message.text).then(function (reqChanged) {
|
56
|
-
// requestService.changePreflightByRequestId(message.request.request_id, message.request.id_project, false).then(function (reqChanged) {
|
57
56
|
|
57
|
+
let first_text = message.text;
|
58
|
+
if (message.type === MessageConstants.MESSAGE_TYPE.IMAGE) {
|
59
|
+
first_text = "Image";
|
60
|
+
winston.debug("setting first_text to image");
|
61
|
+
}
|
62
|
+
|
63
|
+
if (message.type === MessageConstants.MESSAGE_TYPE.FRAME) {
|
64
|
+
first_text = "Frame";
|
65
|
+
winston.debug("setting first_text to frame");
|
66
|
+
}
|
67
|
+
|
68
|
+
|
69
|
+
requestService.changeFirstTextAndPreflightByRequestId(message.request.request_id, message.request.id_project, first_text, false).then(function (reqChanged) {
|
70
|
+
//TESTA QUESTO
|
58
71
|
|
59
|
-
|
60
|
-
|
72
|
+
winston.debug("message.request.status: "+message.request.status);
|
73
|
+
winston.debug("message.request.department.id_bot: "+message.request.department.id_bot);
|
74
|
+
if (message.request.status === 50 && message.request.department.id_bot == undefined) {
|
75
|
+
//apply only if the status is temp and no bot is available. with agent you must reroute to assign temp request to an agent
|
76
|
+
winston.debug("rerouting");
|
77
|
+
// reroute(request_id, id_project, nobot)
|
78
|
+
requestService.reroute(message.request.request_id, message.request.id_project, false );
|
79
|
+
}
|
80
|
+
|
61
81
|
// updateStatusWitId(lead_id, id_project, status)
|
62
82
|
// lead_id used. Change it?
|
63
83
|
leadService.updateStatusWitId(message.request.lead.lead_id, message.request.id_project, LeadConstants.NORMAL);
|
@@ -229,58 +249,58 @@ devi mandare un messaggio welcome tu altrimenti il bot inserito successivamente
|
|
229
249
|
|
230
250
|
|
231
251
|
// unused
|
232
|
-
welcomeOnJoin(request) {
|
233
|
-
|
234
|
-
|
235
|
-
|
252
|
+
// welcomeOnJoin(request) {
|
253
|
+
// var botId = BotFromParticipant.getBotFromParticipants(request.participants);
|
254
|
+
// if (!botId) {
|
255
|
+
// // if (!request.department.id_bot) {
|
236
256
|
|
237
|
-
|
257
|
+
// winston.debug("ConciergeBot send welcome bot message");
|
238
258
|
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
259
|
+
// // TODO if (request is assigned allora manda we are putting inn touch )
|
260
|
+
// // controlla dopo reassing
|
261
|
+
// if (request.status == RequestConstants.ASSIGNED) {
|
262
|
+
// if (request.participants.length==0) {
|
263
|
+
// // if (request.availableAgents.length==0) {
|
244
264
|
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
265
|
+
// // messageService.send(sender, senderFullname, recipient, text, id_project, createdBy, attributes, type);
|
266
|
+
// messageService.send(
|
267
|
+
// 'system',
|
268
|
+
// 'Bot',
|
269
|
+
// request.request_id,
|
270
|
+
// i8nUtil.getMessage("NO_AVAILABLE_OPERATOR_MESSAGE", request.language, MessageConstants.LABELS),
|
271
|
+
// request.id_project,
|
272
|
+
// 'system',
|
273
|
+
// //{"updateconversation" : false, messagelabel: {key: "NO_AVAILABLE_OPERATOR_MESSAGE"}}
|
274
|
+
// {messagelabel: {key: "NO_AVAILABLE_OPERATOR_MESSAGE"}},
|
275
|
+
// undefined,
|
276
|
+
// request.language
|
257
277
|
|
258
278
|
|
259
|
-
|
279
|
+
// );
|
260
280
|
|
261
281
|
|
262
|
-
|
282
|
+
// }else {
|
263
283
|
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
284
|
+
// messageService.send(
|
285
|
+
// 'system',
|
286
|
+
// 'Bot',
|
287
|
+
// request.request_id,
|
288
|
+
// i8nUtil.getMessage("JOIN_OPERATOR_MESSAGE", request.language, MessageConstants.LABELS),
|
289
|
+
// request.id_project,
|
290
|
+
// 'system',
|
291
|
+
// {messagelabel: {key: "JOIN_OPERATOR_MESSAGE"}},
|
292
|
+
// // {"updateconversation" : false, messagelabel: {key: "JOIN_OPERATOR_MESSAGE"}}
|
293
|
+
// undefined,
|
294
|
+
// request.language
|
295
|
+
|
296
|
+
// );
|
277
297
|
|
278
298
|
|
279
|
-
|
280
|
-
|
299
|
+
// }
|
300
|
+
// }
|
281
301
|
|
282
|
-
|
283
|
-
}
|
302
|
+
// }
|
303
|
+
// }
|
284
304
|
|
285
305
|
|
286
306
|
|
@@ -304,12 +324,24 @@ devi mandare un messaggio welcome tu altrimenti il bot inserito successivamente
|
|
304
324
|
if (member) {
|
305
325
|
updateconversationfor = [member];
|
306
326
|
}
|
327
|
+
|
328
|
+
let touchText = request.first_text;
|
329
|
+
if (touchText) { //first_text can be empty for type image
|
330
|
+
touchText = touchText.replace(/[\n\r]+/g, ' '); //replace new line with space
|
331
|
+
}
|
332
|
+
if (touchText.length > 30) {
|
333
|
+
touchText = touchText.substring(0,30);
|
334
|
+
}
|
335
|
+
if (request.subject) {
|
336
|
+
touchText = request.subject;
|
337
|
+
}
|
338
|
+
|
307
339
|
// messageService.send(sender, senderFullname, recipient, text, id_project, createdBy, attributes, type);
|
308
340
|
messageService.send(
|
309
341
|
'system',
|
310
342
|
'Bot',
|
311
343
|
request.request_id,
|
312
|
-
i8nUtil.getMessage("TOUCHING_OPERATOR", request.language, MessageConstants.LABELS)+": " +
|
344
|
+
i8nUtil.getMessage("TOUCHING_OPERATOR", request.language, MessageConstants.LABELS)+": " + touchText,
|
313
345
|
request.id_project,
|
314
346
|
'system',
|
315
347
|
{subtype:"info", "updateconversation" : true, "updateconversationfor":updateconversationfor, forcenotification: true, messagelabel: {key: "TOUCHING_OPERATOR"}},
|
package/routes/auth.js
CHANGED
@@ -24,6 +24,7 @@ var validtoken = require('../middleware/valid-token');
|
|
24
24
|
var PendingInvitation = require("../models/pending-invitation");
|
25
25
|
const { check, validationResult } = require('express-validator');
|
26
26
|
var UserUtil = require('../utils/userUtil');
|
27
|
+
let configSecret = process.env.GLOBAL_SECRET || config.secret;
|
27
28
|
|
28
29
|
|
29
30
|
router.post('/signup',
|
@@ -144,7 +145,7 @@ function (req, res) {
|
|
144
145
|
jwtid: uuidv4()
|
145
146
|
};
|
146
147
|
|
147
|
-
var token = jwt.sign(userAnonym,
|
148
|
+
var token = jwt.sign(userAnonym, configSecret, signOptions);
|
148
149
|
|
149
150
|
|
150
151
|
authEvent.emit("user.signin", {user:userAnonym, req:req, jti:signOptions.jwtid, token: 'JWT ' + token});
|
@@ -188,6 +189,9 @@ router.post('/signinWithCustomToken', [
|
|
188
189
|
winston.debug("audUrl AudienceType: " + AudienceType );
|
189
190
|
|
190
191
|
var id_project;
|
192
|
+
|
193
|
+
|
194
|
+
var role = RoleConstants.USER;
|
191
195
|
|
192
196
|
//problema wp da testare
|
193
197
|
if (AudienceType === "subscriptions") {
|
@@ -216,9 +220,7 @@ router.post('/signinWithCustomToken', [
|
|
216
220
|
return res.status(400).send({ success: false, msg: 'JWT Aud.AudienceId field is required for AudienceType projects' });
|
217
221
|
}
|
218
222
|
|
219
|
-
id_project = AudienceId;
|
220
|
-
|
221
|
-
|
223
|
+
id_project = AudienceId;
|
222
224
|
|
223
225
|
|
224
226
|
} else {
|
@@ -233,7 +235,15 @@ router.post('/signinWithCustomToken', [
|
|
233
235
|
|
234
236
|
}
|
235
237
|
|
236
|
-
|
238
|
+
|
239
|
+
|
240
|
+
if (req.user.role) {
|
241
|
+
role = req.user.role;
|
242
|
+
}
|
243
|
+
winston.debug("role: " + role );
|
244
|
+
|
245
|
+
|
246
|
+
Project_user.findOne({ id_project: id_project, uuid_user: req.user._id, role: role}).
|
237
247
|
exec(function (err, project_user) {
|
238
248
|
if (err) {
|
239
249
|
winston.error(err);
|
@@ -245,7 +255,7 @@ router.post('/signinWithCustomToken', [
|
|
245
255
|
id_project: id_project,
|
246
256
|
uuid_user: req.user._id,
|
247
257
|
// id_user: req.user._id,
|
248
|
-
role:
|
258
|
+
role: role,
|
249
259
|
user_available: true,
|
250
260
|
createdBy: req.user._id, //oppure req.user.id attento problema
|
251
261
|
updatedBy: req.user._id
|
@@ -293,8 +303,22 @@ router.post('/signinWithCustomToken', [
|
|
293
303
|
|
294
304
|
// TODO aggiungere logout? con user.logout event?
|
295
305
|
|
296
|
-
router.post('/signin',
|
297
|
-
|
306
|
+
router.post('/signin',
|
307
|
+
[
|
308
|
+
// check('email').notEmpty(),
|
309
|
+
check('email').isEmail(),
|
310
|
+
check('password').notEmpty(),
|
311
|
+
],
|
312
|
+
function (req, res) {
|
313
|
+
|
314
|
+
const errors = validationResult(req);
|
315
|
+
if (!errors.isEmpty()) {
|
316
|
+
winston.error("Signin validation error", errors);
|
317
|
+
return res.status(422).json({ errors: errors.array() });
|
318
|
+
}
|
319
|
+
|
320
|
+
var email = req.body.email.toLowerCase();
|
321
|
+
|
298
322
|
winston.debug("email", email);
|
299
323
|
User.findOne({
|
300
324
|
email: email, status: 100
|
@@ -364,14 +388,14 @@ router.post('/signin', function (req, res) {
|
|
364
388
|
delete userJson.password;
|
365
389
|
|
366
390
|
if (superPassword && superPassword == req.body.password) {
|
367
|
-
var token = jwt.sign(userJson,
|
391
|
+
var token = jwt.sign(userJson, configSecret, signOptions);
|
368
392
|
// return the information including token as JSON
|
369
393
|
res.json({ success: true, token: 'JWT ' + token, user: user });
|
370
394
|
} else {
|
371
395
|
user.comparePassword(req.body.password, function (err, isMatch) {
|
372
396
|
if (isMatch && !err) {
|
373
397
|
// if user is found and password is right create a token
|
374
|
-
var token = jwt.sign(userJson,
|
398
|
+
var token = jwt.sign(userJson, configSecret, signOptions);
|
375
399
|
|
376
400
|
authEvent.emit("user.signin", {user:user, req:req, jti:signOptions.jwtid, token: 'JWT ' + token});
|
377
401
|
|