fix: new status code for op against deleted groupchat

This commit is contained in:
2022-04-06 11:31:59 +02:00
parent e635a55f3f
commit 28ea8b6b0d
+66 -51
View File
@@ -265,9 +265,6 @@ router.put('/groupchats/:target', async function (req, res) {
queryparams[0] = target.split("@")[0];
queryparams[1] = target.split("@")[1];
queryparams[2] = '_affiliations';
// queryparams[3] = '":"owner';
// queryparams[4] = '"';
// queryparams[5] = '":"admin';
var actor = "";
var query = "select prosody.value as actor from prosody where prosody.user=$1 and prosody.host=$2 and prosody.key=$3";
// query += "union select split_part(split_part(prosody.value, $6, 1), $5, 2) as actor from prosody where prosody.user=$1 and prosody.host=$2 and prosody.key=$3";
@@ -275,30 +272,30 @@ router.put('/groupchats/:target', async function (req, res) {
dbpool.query(query, queryparams, function (derr, dres) {
if (derr == null) {
if (dres.rowCount > 0) {
let nAct = {};
let nKeys = [];
try {
nAct = JSON.parse(dres.rows[0].actor);
nKeys = Object.keys(nAct);
} catch (e) {
console.log("error parsing actor... ", e);
}
if (nKeys.length > 0) {
for (var i = 0; i < nKeys.length; i++) {
if (nAct[nKeys[i]] === "owner") {
actor = nKeys[i];
}
}
}
// actor = dres.rows[0].actor;
console.log("actor1: ", actor);
console.log("actor1: ", Object.keys(nAct));
let nAct = {};
let nKeys = [];
try {
nAct = JSON.parse(dres.rows[0].actor);
nKeys = Object.keys(nAct);
} catch (e) {
console.log("error parsing actor... ", e);
}
if (nKeys.length > 0) {
for (var i = 0; i < nKeys.length; i++) {
if (nAct[nKeys[i]] === "owner") {
actor = nKeys[i];
}
}
}
console.log("actor1: ", actor);
console.log("actor1: ", Object.keys(nAct));
setMucData(actor, req.params.target, req.body.data);
res.status(200).json(null);
} else {
res.status(404).json({err: "target not found"});
res.status(410).json({err: "target does not exist - probably deleted"});
}
} else {
res.status(500).json(derr);
@@ -379,38 +376,56 @@ router.post('/affiliations/:target', async function (req, res) {
if (user == null || user == "") {
res.status(500).json({message: '500 empty user'});
} else {
if ( connection && connection.socket) {
// try to re-establish connection
if (!connection.socket.writable) {
console.log("connection not writable - trying to reconnect");
await connection.connect(params).catch(error => {
console.log("connection error: ", error);
});
console.log("reconnect result: ", connection.socket.writable);
}
if ( connection.socket.writable === false ) {
res.status(500).json({message: 'telnet connection is not established.'});
} else {
let response = await connection.send('muc:room(\"'+ target +'\"):set_affiliation(true, \"'+ user +'\", \"' + affiliation +'\");\n');
if ((response.indexOf("nil value") > -1) || (response.indexOf("Fatal ") > -1)) {
res.status(500).json(response);
} else {
let rawresults = response.split("\n");
let mucresults = [];
for (var i = 0; i < rawresults.length - 1 ; i++) {
if ((rawresults[i].startsWith("\u0000| ") || rawresults[i].startsWith("\| ")) && !rawresults[i].startsWith("| OK") && !rawresults[i].startsWith("\u0000| Result") ) {
console.log("adding: ", rawresults[i].split("| ")[1].split("\r")[0]);
mucresults.push(rawresults[i].split("| ")[1].split("\r")[0]);
var queryparams = [];
queryparams[0] = target.split("@")[0];
queryparams[1] = target.split("@")[1];
var sqlquery="select value from prosody where prosody.store='config' and prosody.key='_affiliations' and prosody.user=$1 and prosody.host=$2";
dbpool.query(sqlquery, queryparams, function (derr, dres) {
if (derr == null) {
if (dres.rowCount > 0) {
// groupchat is found and exists
if ( connection && connection.socket) {
// try to re-establish connection
if (!connection.socket.writable) {
console.log("connection not writable - trying to reconnect");
await connection.connect(params).catch(error => {
console.log("connection error: ", error);
});
console.log("reconnect result: ", connection.socket.writable);
}
if ( connection.socket.writable === false ) {
res.status(500).json({message: 'telnet connection is not established.'});
} else {
let response = await connection.send('muc:room(\"'+ target +'\"):set_affiliation(true, \"'+ user +'\", \"' + affiliation +'\");\n');
if ((response.indexOf("nil value") > -1) || (response.indexOf("Fatal ") > -1)) {
res.status(500).json(response);
} else {
let rawresults = response.split("\n");
let mucresults = [];
for (var i = 0; i < rawresults.length - 1 ; i++) {
if ((rawresults[i].startsWith("\u0000| ") || rawresults[i].startsWith("\| ")) && !rawresults[i].startsWith("| OK") && !rawresults[i].startsWith("\u0000| Result") ) {
console.log("adding: ", rawresults[i].split("| ")[1].split("\r")[0]);
mucresults.push(rawresults[i].split("| ")[1].split("\r")[0]);
}
}
console.log('async rawresult:', rawresults);
console.log('async result:', mucresults);
res.status(200).json(mucresults);
}
}
} else {
res.status(404).json({message: 'connection not available'});
}
console.log('async rawresult:', rawresults);
console.log('async result:', mucresults);
res.status(200).json(mucresults);
} else {
// no groupchat found for requested operation - send 410 gone
res.status(410).json({status: "requested groupchat not found, probably deleted"});
}
} else {
res.status(500).json(derr);
}
} else {
res.status(404).json({message: 'connection not available'});
}
});
}
}
});