Merge pull request '4155-close_tickets_fix2' (!1092) from 4155-close_tickets_fix2 into dev
gitea/salix/pipeline/head This commit looks good Details

Reviewed-on: #1092
Reviewed-by: Joan Sanchez <joan@verdnatura.es>
This commit is contained in:
Vicent Llopis 2022-11-02 11:59:21 +00:00
commit bf21467125
6 changed files with 58 additions and 21 deletions

View File

@ -1,12 +1,13 @@
const jsdom = require('jsdom'); const jsdom = require('jsdom');
const mysql = require('mysql'); const mysql = require('mysql');
const FormData = require('form-data');
module.exports = Self => { module.exports = Self => {
Self.remoteMethodCtx('closeTicket', { Self.remoteMethodCtx('closeTicket', {
description: 'Close tickets without response from the user', description: 'Close tickets without response from the user',
accessType: 'READ', accessType: 'READ',
returns: { returns: {
type: 'Object', type: 'object',
root: true root: true
}, },
http: { http: {
@ -54,9 +55,9 @@ module.exports = Self => {
}); });
}); });
await requestToken(); await getRequestToken();
async function requestToken() { async function getRequestToken() {
const response = await fetch(ostUri); const response = await fetch(ostUri);
const result = response.headers.get('set-cookie'); const result = response.headers.get('set-cookie');
@ -93,24 +94,45 @@ module.exports = Self => {
await close(token, secondCookie); await close(token, secondCookie);
} }
async function getLockCode(token, secondCookie, ticketId) {
const ostUri = `${config.host}/ajax.php/lock/ticket/${ticketId}`;
const params = {
method: 'POST',
headers: {
'X-CSRFToken': token,
'Cookie': secondCookie
}
};
const response = await fetch(ostUri, params);
const body = await response.text();
const json = JSON.parse(body);
return json.code;
}
async function close(token, secondCookie) { async function close(token, secondCookie) {
for (const ticketId of ticketsId) { for (const ticketId of ticketsId) {
const ostUri = `${config.host}/ajax.php/tickets/${ticketId}/status`; const lockCode = await getLockCode(token, secondCookie, ticketId);
const data = { let form = new FormData();
status_id: config.newStatusId, form.append('__CSRFToken__', token);
comments: config.comment, form.append('id', ticketId);
undefined: config.action form.append('a', config.responseType);
}; form.append('lockCode', lockCode);
form.append('from_email_id', config.fromEmailId);
form.append('reply-to', config.replyTo);
form.append('cannedResp', 0);
form.append('response', config.comment);
form.append('signature', 'none');
form.append('reply_status_id', config.newStatusId);
const ostUri = `${config.host}/tickets.php?id=${ticketId}`;
const params = { const params = {
method: 'POST', method: 'POST',
body: new URLSearchParams(data), body: form,
headers: { headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'X-CSRFToken': token,
'Cookie': secondCookie 'Cookie': secondCookie
} }
}; };
return fetch(ostUri, params); return fetch(ostUri, params);
} }
} }

View File

@ -27,9 +27,6 @@
"newStatusId": { "newStatusId": {
"type": "number" "type": "number"
}, },
"action": {
"type": "string"
},
"day": { "day": {
"type": "number" "type": "number"
}, },
@ -47,6 +44,15 @@
}, },
"portDb": { "portDb": {
"type": "number" "type": "number"
},
"responseType": {
"type": "string"
},
"fromEmailId": {
"type": "number"
},
"replyTo": {
"type": "string"
} }
} }
} }

View File

@ -14,7 +14,3 @@ CREATE TABLE `vn`.`osTicketConfig` (
`portDb` int(11) DEFAULT NULL, `portDb` int(11) DEFAULT NULL,
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
INSERT INTO `vn`.`osTicketConfig`(`id`, `host`, `user`, `password`, `oldStatus`, `newStatusId`, `action`, `day`, `comment`, `hostDb`, `userDb`, `passwordDb`, `portDb`)
VALUES
(0, 'https://cau.verdnatura.es/scp', NULL, NULL, 'open', 3, 'Cerrar', 60, 'Este CAU se ha cerrado automáticamente', NULL, NULL, NULL, NULL);

View File

@ -0,0 +1,8 @@
ALTER TABLE `vn`.`osTicketConfig` DROP COLUMN `action`;
ALTER TABLE `vn`.`osTicketConfig` ADD responseType varchar(100) NULL;
ALTER TABLE `vn`.`osTicketConfig` ADD fromEmailId INT NULL;
ALTER TABLE `vn`.`osTicketConfig` ADD replyTo varchar(100) NULL;
UPDATE `vn`.`osTicketConfig`
SET responseType='reply', fromEmailId=5, replyTo='all'
WHERE id=0;

View File

@ -2710,3 +2710,7 @@ INSERT INTO `vn`.`ticketCollection` (`ticketFk`, `collectionFk`, `created`, `lev
UPDATE `account`.`user` UPDATE `account`.`user`
SET `hasGrant` = 1 SET `hasGrant` = 1
WHERE `id` = 66; WHERE `id` = 66;
INSERT INTO `vn`.`osTicketConfig` (`id`, `host`, `user`, `password`, `oldStatus`, `newStatusId`, `day`, `comment`, `hostDb`, `userDb`, `passwordDb`, `portDb`, `responseType`, `fromEmailId`, `replyTo`)
VALUES
(0, 'http://localhost:56596/scp', 'ostadmin', 'Admin1', 'open', 3, 60, 'Este CAU se ha cerrado automáticamente. Si el problema persiste responda a este mensaje.', 'localhost', 'osticket', 'osticket', 40003, 'reply', 1, 'all');

View File

@ -16,6 +16,7 @@
"bcrypt": "^5.0.1", "bcrypt": "^5.0.1",
"bmp-js": "^0.1.0", "bmp-js": "^0.1.0",
"compression": "^1.7.3", "compression": "^1.7.3",
"form-data": "^4.0.0",
"fs-extra": "^5.0.0", "fs-extra": "^5.0.0",
"ftps": "^1.2.0", "ftps": "^1.2.0",
"got": "^10.7.0", "got": "^10.7.0",