fix: new status code for op against deleted groupchat
This commit is contained in:
+66
-51
@@ -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'});
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user