Compare commits

..

No commits in common. "cd29f690b93361faa82da817018bb9890a85583d" and "c61eadd05d7360016ed6918cfecbac48ed0a740e" have entirely different histories.

22 changed files with 86 additions and 196 deletions

View File

@ -8,10 +8,9 @@ module.exports = function(RED) {
this.server = RED.nodes.getNode(n.server); this.server = RED.nodes.getNode(n.server);
if(!this.server) { if(!this.server) {
node.error('Server must be configured on the node.', {}); node.error('Server must be configured on the node.');
return; return;
} }
node.server.register(node);
this.encodeUri = function(pathTemplate, variables) { this.encodeUri = function(pathTemplate, variables) {
for (const key in variables) { for (const key in variables) {
@ -42,7 +41,7 @@ module.exports = function(RED) {
} }
if(!node.server.isConnected()) { if(!node.server.isConnected()) {
node.error("Matrix server connection is currently closed", msg); node.error("Matrix server connection is currently closed");
node.send([null, msg]); node.send([null, msg]);
} }
@ -65,10 +64,6 @@ module.exports = function(RED) {
node.send([null, msg]); node.send([null, msg]);
}); });
}); });
node.on("close", function() {
node.server.deregister(node);
});
} }
RED.nodes.registerType("matrix-create-room", MatrixCreateRoom); RED.nodes.registerType("matrix-create-room", MatrixCreateRoom);
} }

View File

@ -12,22 +12,22 @@ module.exports = function(RED) {
const { got } = await import('got'); const { got } = await import('got');
if(!msg.type) { if(!msg.type) {
node.error('msg.type is required.', msg); node.error('msg.type is required.');
return; return;
} }
if(!msg.content) { if(!msg.content) {
node.error('msg.content is required.', msg); node.error('msg.content is required.');
return; return;
} }
if(!msg.content.file) { if(!msg.content.file) {
node.error('msg.content.file is required.', msg); node.error('msg.content.file is required.');
return; return;
} }
if(!msg.url) { if(!msg.url) {
node.error('msg.url is required.', msg); node.error('msg.url is required.');
return; return;
} }

View File

@ -13,7 +13,6 @@ module.exports = function(RED) {
node.warn("No configuration node"); node.warn("No configuration node");
return; return;
} }
node.server.register(node);
node.status({ fill: "red", shape: "ring", text: "disconnected" }); node.status({ fill: "red", shape: "ring", text: "disconnected" });
@ -28,7 +27,7 @@ module.exports = function(RED) {
node.on('input', function(msg) { node.on('input', function(msg) {
if(!msg.eventId) { if(!msg.eventId) {
node.error("eventId is missing", msg); node.error("eventId is missing");
node.send([null, msg]) node.send([null, msg])
return; return;
} }
@ -39,7 +38,7 @@ module.exports = function(RED) {
} }
if(!node.server.isConnected()) { if(!node.server.isConnected()) {
node.error("Matrix server connection is currently closed", msg); node.error("Matrix server connection is currently closed");
node.send([null, msg]); node.send([null, msg]);
return; return;
} }
@ -71,10 +70,6 @@ module.exports = function(RED) {
node.send([null, msg]); node.send([null, msg]);
}); });
}); });
node.on("close", function() {
node.server.deregister(node);
});
} }
RED.nodes.registerType("matrix-delete-event",MatrixDeleteEvent); RED.nodes.registerType("matrix-delete-event",MatrixDeleteEvent);
} }

View File

@ -9,10 +9,9 @@ module.exports = function(RED) {
this.roomId = n.roomId; this.roomId = n.roomId;
if(!this.server) { if(!this.server) {
node.error('Server must be configured on the node.', {}); node.error('Server must be configured on the node.');
return; return;
} }
node.server.register(node);
this.encodeUri = function(pathTemplate, variables) { this.encodeUri = function(pathTemplate, variables) {
for (const key in variables) { for (const key in variables) {
@ -38,18 +37,18 @@ module.exports = function(RED) {
node.on("input", function (msg) { node.on("input", function (msg) {
if (! node.server || ! node.server.matrixClient) { if (! node.server || ! node.server.matrixClient) {
node.error("No matrix server selected", msg); node.error("No matrix server selected");
return; return;
} }
if(!node.server.isConnected()) { if(!node.server.isConnected()) {
node.error("Matrix server connection is currently closed", msg); node.error("Matrix server connection is currently closed");
node.send([null, msg]); node.send([null, msg]);
} }
msg.topic = node.roomId || msg.topic; msg.topic = node.roomId || msg.topic;
if(!msg.topic) { if(!msg.topic) {
node.error("room must be defined in either msg.topic or in node config", msg); node.error("room must be defined in either msg.topic or in node config");
return; return;
} }
@ -65,10 +64,6 @@ module.exports = function(RED) {
node.send([null, msg]); node.send([null, msg]);
}); });
}); });
node.on("close", function() {
node.server.deregister(node);
});
} }
RED.nodes.registerType("matrix-invite-room", MatrixInviteRoom); RED.nodes.registerType("matrix-invite-room", MatrixInviteRoom);
} }

View File

@ -11,7 +11,6 @@ module.exports = function(RED) {
node.warn("No configuration node"); node.warn("No configuration node");
return; return;
} }
node.server.register(node);
node.status({ fill: "red", shape: "ring", text: "disconnected" }); node.status({ fill: "red", shape: "ring", text: "disconnected" });
@ -25,17 +24,17 @@ module.exports = function(RED) {
node.on("input", function (msg) { node.on("input", function (msg) {
if (! node.server || ! node.server.matrixClient) { if (! node.server || ! node.server.matrixClient) {
node.error("No matrix server selected", msg); node.error("No matrix server selected");
return; return;
} }
if(!node.server.isConnected()) { if(!node.server.isConnected()) {
node.error("Matrix server connection is currently closed", msg); node.error("Matrix server connection is currently closed");
node.send([null, msg]); node.send([null, msg]);
} }
if(!msg.topic) { if(!msg.topic) {
node.error("Room must be specified in msg.topic", msg); node.error("Room must be specified in msg.topic");
return; return;
} }
@ -47,15 +46,11 @@ module.exports = function(RED) {
node.send([msg, null]); node.send([msg, null]);
}) })
.catch(function(e){ .catch(function(e){
node.error("Error trying to join room " + msg.topic + ":" + e, msg); node.error("Error trying to join room " + msg.topic + ":" + e);
msg.error = e; msg.error = e;
node.send([null, msg]); node.send([null, msg]);
}); });
}); });
node.on("close", function() {
node.server.deregister(node);
});
} }
RED.nodes.registerType("matrix-join-room", MatrixJoinRoom); RED.nodes.registerType("matrix-join-room", MatrixJoinRoom);
} }

View File

@ -11,10 +11,9 @@ module.exports = function(RED) {
node.status({ fill: "red", shape: "ring", text: "disconnected" }); node.status({ fill: "red", shape: "ring", text: "disconnected" });
if (!node.server) { if (!node.server) {
node.error("No configuration node", {}); node.error("No configuration node");
return; return;
} }
node.server.register(node);
node.server.on("disconnected", function(){ node.server.on("disconnected", function(){
node.status({ fill: "red", shape: "ring", text: "disconnected" }); node.status({ fill: "red", shape: "ring", text: "disconnected" });
@ -26,17 +25,17 @@ module.exports = function(RED) {
node.on('input', function(msg) { node.on('input', function(msg) {
if (! node.server || ! node.server.matrixClient) { if (! node.server || ! node.server.matrixClient) {
node.error("No matrix server selected", msg); node.error("No matrix server selected");
return; return;
} }
if(!msg.topic) { if(!msg.topic) {
node.error('No room provided in msg.topic', msg); node.error('No room provided in msg.topic');
return; return;
} }
if(!node.server.isConnected()) { if(!node.server.isConnected()) {
node.error("Matrix server connection is currently closed", msg); node.error("Matrix server connection is currently closed");
node.send([null, msg]); node.send([null, msg]);
} }
@ -45,15 +44,11 @@ module.exports = function(RED) {
node.server.matrixClient.leave(msg.topic); node.server.matrixClient.leave(msg.topic);
node.send([msg, null]); node.send([msg, null]);
} catch(e) { } catch(e) {
node.error("Failed to leave room " + msg.topic + ": " + e, msg); node.error("Failed to leave room " + msg.topic + ": " + e);
msg.payload = e; msg.payload = e;
node.send([null, msg]); node.send([null, msg]);
} }
}); });
node.on("close", function() {
node.server.deregister(node);
});
} }
RED.nodes.registerType("matrix-leave-room", MatrixLeaveRoom); RED.nodes.registerType("matrix-leave-room", MatrixLeaveRoom);
} }

View File

@ -13,7 +13,6 @@ module.exports = function(RED) {
node.warn("No configuration node"); node.warn("No configuration node");
return; return;
} }
node.server.register(node);
node.status({ fill: "red", shape: "ring", text: "disconnected" }); node.status({ fill: "red", shape: "ring", text: "disconnected" });
@ -27,30 +26,30 @@ module.exports = function(RED) {
node.on("input", function (msg) { node.on("input", function (msg) {
if (!node.server || !node.server.matrixClient) { if (!node.server || !node.server.matrixClient) {
node.error("No matrix server selected", msg); node.error("No matrix server selected");
return; return;
} }
if(!node.server.isConnected()) { if(!node.server.isConnected()) {
node.error("Matrix server connection is currently closed", msg); node.error("Matrix server connection is currently closed");
node.send([null, msg]); node.send([null, msg]);
} }
msg.topic = node.roomId || msg.topic; msg.topic = node.roomId || msg.topic;
if(!msg.topic) { if(!msg.topic) {
node.error("Room must be specified in msg.topic or in configuration", msg); node.error("Room must be specified in msg.topic or in configuration");
return; return;
} }
let payload = n.reaction || msg.payload; let payload = n.reaction || msg.payload;
if(!payload) { if(!payload) {
node.error('msg.payload must be defined or the reaction configured on the node.', msg); node.error('msg.payload must be defined or the reaction configured on the node.');
return; return;
} }
let eventId = msg.referenceEventId || msg.eventId; let eventId = msg.referenceEventId || msg.eventId;
if(!eventId) { if(!eventId) {
node.error('Either msg.referenceEventId or msg.eventId must be defined to react to a message.', msg); node.error('Either msg.referenceEventId or msg.eventId must be defined to react to a message.');
return; return;
} }
@ -76,10 +75,6 @@ module.exports = function(RED) {
node.send([null, msg]); node.send([null, msg]);
}); });
}); });
node.on("close", function() {
node.server.deregister(node);
});
} }
RED.nodes.registerType("matrix-react", MatrixReact); RED.nodes.registerType("matrix-react", MatrixReact);
} }

View File

@ -21,10 +21,9 @@ module.exports = function(RED) {
node.status({ fill: "red", shape: "ring", text: "disconnected" }); node.status({ fill: "red", shape: "ring", text: "disconnected" });
if (!node.server) { if (!node.server) {
node.error("No configuration node", {}); node.error("No configuration node");
return; return;
} }
node.server.register(node);
node.server.on("disconnected", function(){ node.server.on("disconnected", function(){
node.status({ fill: "red", shape: "ring", text: "disconnected" }); node.status({ fill: "red", shape: "ring", text: "disconnected" });
@ -150,10 +149,6 @@ module.exports = function(RED) {
node.send(msg); node.send(msg);
}); });
node.on("close", function() {
node.server.deregister(node);
});
} }
RED.nodes.registerType("matrix-receive", MatrixReceiveMessage); RED.nodes.registerType("matrix-receive", MatrixReceiveMessage);
} }

View File

@ -13,7 +13,6 @@ module.exports = function(RED) {
node.warn("No configuration node"); node.warn("No configuration node");
return; return;
} }
node.server.register(node);
node.status({ fill: "red", shape: "ring", text: "disconnected" }); node.status({ fill: "red", shape: "ring", text: "disconnected" });
@ -27,23 +26,23 @@ module.exports = function(RED) {
node.on("input", function (msg) { node.on("input", function (msg) {
if (! node.server || ! node.server.matrixClient) { if (! node.server || ! node.server.matrixClient) {
node.error("No matrix server selected", msg); node.error("No matrix server selected");
return; return;
} }
if(!node.server.isConnected()) { if(!node.server.isConnected()) {
node.error("Matrix server connection is currently closed", msg); node.error("Matrix server connection is currently closed");
node.send([null, msg]); node.send([null, msg]);
} }
msg.topic = node.roomId || msg.topic; msg.topic = node.roomId || msg.topic;
if(!msg.topic) { if(!msg.topic) {
node.error("Room must be specified in msg.topic or in configuration", msg); node.error("Room must be specified in msg.topic or in configuration");
return; return;
} }
if(!msg.userId) { if(!msg.userId) {
node.error("msg.userId was not set.", msg); node.error("msg.userId was not set.");
return; return;
} }
@ -54,15 +53,11 @@ module.exports = function(RED) {
node.send([msg, null]); node.send([msg, null]);
}) })
.catch(function(e){ .catch(function(e){
node.error("Error trying to ban " + msg.userId + " from " + msg.topic, msg); node.error("Error trying to ban " + msg.userId + " from " + msg.topic);
msg.error = e; msg.error = e;
node.send([null, msg]); node.send([null, msg]);
}); });
}); });
node.on("close", function() {
node.server.deregister(node);
});
} }
RED.nodes.registerType("matrix-room-ban", MatrixBan); RED.nodes.registerType("matrix-room-ban", MatrixBan);
} }

View File

@ -9,10 +9,9 @@ module.exports = function(RED) {
this.roomId = n.roomId; this.roomId = n.roomId;
if(!this.server) { if(!this.server) {
node.error('Server must be configured on the node.', {}); node.error('Server must be configured on the node.');
return; return;
} }
node.server.register(node);
node.status({ fill: "red", shape: "ring", text: "disconnected" }); node.status({ fill: "red", shape: "ring", text: "disconnected" });
@ -27,10 +26,6 @@ module.exports = function(RED) {
node.server.on("Room.invite", async function(msg) { node.server.on("Room.invite", async function(msg) {
node.send(msg); node.send(msg);
}); });
node.on("close", function() {
node.server.deregister(node);
});
} }
RED.nodes.registerType("matrix-room-invite", MatrixRoomInvite); RED.nodes.registerType("matrix-room-invite", MatrixRoomInvite);
} }

View File

@ -13,7 +13,6 @@ module.exports = function(RED) {
node.warn("No configuration node"); node.warn("No configuration node");
return; return;
} }
node.server.register(node);
node.status({ fill: "red", shape: "ring", text: "disconnected" }); node.status({ fill: "red", shape: "ring", text: "disconnected" });
@ -27,23 +26,23 @@ module.exports = function(RED) {
node.on("input", function (msg) { node.on("input", function (msg) {
if (! node.server || ! node.server.matrixClient) { if (! node.server || ! node.server.matrixClient) {
node.error("No matrix server selected", msg); node.error("No matrix server selected");
return; return;
} }
if(!node.server.isConnected()) { if(!node.server.isConnected()) {
node.error("Matrix server connection is currently closed", msg); node.error("Matrix server connection is currently closed");
node.send([null, msg]); node.send([null, msg]);
} }
msg.topic = node.roomId || msg.topic; msg.topic = node.roomId || msg.topic;
if(!msg.topic) { if(!msg.topic) {
node.error("Room must be specified in msg.topic or in configuration", msg); node.error("Room must be specified in msg.topic or in configuration");
return; return;
} }
if(!msg.userId) { if(!msg.userId) {
node.error("msg.userId was not set.", msg); node.error("msg.userId was not set.");
return; return;
} }
@ -54,15 +53,11 @@ module.exports = function(RED) {
node.send([msg, null]); node.send([msg, null]);
}) })
.catch(function(e){ .catch(function(e){
node.error("Error trying to kick " + msg.userId + " from " + msg.topic, msg); node.error("Error trying to kick " + msg.userId + " from " + msg.topic);
msg.error = e; msg.error = e;
node.send([null, msg]); node.send([null, msg]);
}); });
}); });
node.on("close", function() {
node.server.deregister(node);
});
} }
RED.nodes.registerType("matrix-room-kick", MatrixKick); RED.nodes.registerType("matrix-room-kick", MatrixKick);
} }

View File

@ -13,7 +13,6 @@ module.exports = function(RED) {
node.warn("No configuration node"); node.warn("No configuration node");
return; return;
} }
node.server.register(node);
node.status({ fill: "red", shape: "ring", text: "disconnected" }); node.status({ fill: "red", shape: "ring", text: "disconnected" });
@ -32,13 +31,13 @@ module.exports = function(RED) {
} }
if(!node.server.isConnected()) { if(!node.server.isConnected()) {
node.error("Matrix server connection is currently closed", msg); node.error("Matrix server connection is currently closed");
node.send([null, msg]); node.send([null, msg]);
} }
let roomId = node.roomId || msg.topic; let roomId = node.roomId || msg.topic;
if(!roomId) { if(!roomId) {
node.error("msg.topic is required. Specify in the input or configure the room ID on the node.", msg); node.error("msg.topic is required. Specify in the input or configure the room ID on the node.");
return; return;
} }
@ -66,10 +65,6 @@ module.exports = function(RED) {
node.send([null, msg]); node.send([null, msg]);
}); });
}); });
node.on("close", function() {
node.server.deregister(node);
});
} }
RED.nodes.registerType("matrix-room-users", MatrixRoomUsers); RED.nodes.registerType("matrix-room-users", MatrixRoomUsers);
} }

View File

@ -13,7 +13,6 @@ module.exports = function(RED) {
node.warn("No configuration node"); node.warn("No configuration node");
return; return;
} }
node.server.register(node);
node.status({ fill: "red", shape: "ring", text: "disconnected" }); node.status({ fill: "red", shape: "ring", text: "disconnected" });
@ -32,7 +31,7 @@ module.exports = function(RED) {
} }
if(!node.server.isConnected()) { if(!node.server.isConnected()) {
node.error("Matrix server connection is currently closed", msg); node.error("Matrix server connection is currently closed");
node.send([null, msg]); node.send([null, msg]);
} }
@ -58,7 +57,7 @@ module.exports = function(RED) {
} }
if(!msg.payload) { if(!msg.payload) {
node.error('msg.payload is required', msg); node.error('msg.payload is required');
return; return;
} }
@ -95,10 +94,6 @@ module.exports = function(RED) {
node.send([null, msg]); node.send([null, msg]);
}); });
}); });
node.on("close", function() {
node.server.deregister(node);
});
} }
RED.nodes.registerType("matrix-send-file", MatrixSendFile); RED.nodes.registerType("matrix-send-file", MatrixSendFile);
} }

View File

@ -13,7 +13,6 @@ module.exports = function(RED) {
node.warn("No configuration node"); node.warn("No configuration node");
return; return;
} }
node.server.register(node);
node.status({ fill: "red", shape: "ring", text: "disconnected" }); node.status({ fill: "red", shape: "ring", text: "disconnected" });
@ -32,7 +31,7 @@ module.exports = function(RED) {
} }
if(!node.server.isConnected()) { if(!node.server.isConnected()) {
node.error("Matrix server connection is currently closed", msg); node.error("Matrix server connection is currently closed");
node.send([null, msg]); node.send([null, msg]);
} }
@ -58,7 +57,7 @@ module.exports = function(RED) {
} }
if(!msg.payload) { if(!msg.payload) {
node.error('msg.payload is required', msg); node.error('msg.payload is required');
return; return;
} }
@ -99,10 +98,6 @@ module.exports = function(RED) {
node.send([null, msg]); node.send([null, msg]);
}); });
}); });
node.on("close", function() {
node.server.deregister(node);
});
} }
RED.nodes.registerType("matrix-send-image", MatrixSendImage); RED.nodes.registerType("matrix-send-image", MatrixSendImage);
} }

View File

@ -54,7 +54,6 @@ module.exports = function(RED) {
node.warn("No configuration node"); node.warn("No configuration node");
return; return;
} }
node.server.register(node);
node.status({ fill: "red", shape: "ring", text: "disconnected" }); node.status({ fill: "red", shape: "ring", text: "disconnected" });
@ -72,7 +71,7 @@ module.exports = function(RED) {
if(msgType === 'msg.type') { if(msgType === 'msg.type') {
if(!msg.type) { if(!msg.type) {
node.error("msg.type type is set to be passed in via msg.type but was not defined", msg); node.error("msg.type type is set to be passed in via msg.type but was not defined");
return; return;
} }
msgType = msg.type; msgType = msg.type;
@ -80,7 +79,7 @@ module.exports = function(RED) {
if(msgFormat === 'msg.format') { if(msgFormat === 'msg.format') {
if(!msg.format) { if(!msg.format) {
node.error("Message format is set to be passed in via msg.format but was not defined", msg); node.error("Message format is set to be passed in via msg.format but was not defined");
return; return;
} }
msgFormat = msg.format; msgFormat = msg.format;
@ -92,7 +91,7 @@ module.exports = function(RED) {
} }
if(!node.server.isConnected()) { if(!node.server.isConnected()) {
node.error("Matrix server connection is currently closed", msg); node.error("Matrix server connection is currently closed");
node.send([null, msg]); node.send([null, msg]);
return; return;
} }
@ -105,7 +104,7 @@ module.exports = function(RED) {
let payload = n.message || msg.payload; let payload = n.message || msg.payload;
if(!payload) { if(!payload) {
node.error('msg.payload must be defined or the message configured on the node.', msg); node.error('msg.payload must be defined or the message configured on the node.');
return; return;
} }
@ -153,10 +152,6 @@ module.exports = function(RED) {
node.send([null, msg]); node.send([null, msg]);
}); });
}); });
node.on("close", function() {
node.server.deregister(node);
});
} }
RED.nodes.registerType("matrix-send-message", MatrixSendImage); RED.nodes.registerType("matrix-send-message", MatrixSendImage);
} }

View File

@ -44,7 +44,6 @@ module.exports = function(RED) {
this.credentials = {}; this.credentials = {};
} }
this.users = {};
this.connected = null; this.connected = null;
this.name = n.name; this.name = n.name;
this.userId = this.credentials.userId; this.userId = this.credentials.userId;
@ -69,9 +68,9 @@ module.exports = function(RED) {
let retryStartTimeout = null; let retryStartTimeout = null;
if(!this.credentials.accessToken) { if(!this.credentials.accessToken) {
node.error("Matrix connection failed: missing access token in configuration.", {}); node.error("Matrix connection failed: missing access token in configuration.");
} else if(!this.url) { } else if(!this.url) {
node.error("Matrix connection failed: missing server URL in configuration.", {}); node.error("Matrix connection failed: missing server URL in configuration.");
} else { } else {
node.setConnected = async function(connected, cb) { node.setConnected = async function(connected, cb) {
if (node.connected !== connected) { if (node.connected !== connected) {
@ -89,7 +88,7 @@ module.exports = function(RED) {
device_id = this.matrixClient.getDeviceId(); device_id = this.matrixClient.getDeviceId();
if(!device_id && node.enableE2ee) { if(!device_id && node.enableE2ee) {
node.error("Failed to auto detect deviceId for this auth token. You will need to manually specify one. You may need to login to create a new deviceId.", {}) node.error("Failed to auto detect deviceId for this auth token. You will need to manually specify one. You may need to login to create a new deviceId.")
} else { } else {
if(!stored_device_id || stored_device_id !== device_id) { if(!stored_device_id || stored_device_id !== device_id) {
node.log(`Saving Device ID (old:${stored_device_id} new:${device_id})`); node.log(`Saving Device ID (old:${stored_device_id} new:${device_id})`);
@ -108,13 +107,13 @@ module.exports = function(RED) {
}).then( }).then(
function(response) {}, function(response) {},
function(error) { function(error) {
node.error("Failed to set device label: " + error, {}); node.error("Failed to set device label: " + error);
} }
); );
} }
}, },
function(error) { function(error) {
node.error("Failed to fetch device: " + error, {}); node.error("Failed to fetch device: " + error);
} }
); );
} }
@ -190,7 +189,7 @@ module.exports = function(RED) {
try { try {
await node.matrixClient.decryptEventIfNeeded(event); await node.matrixClient.decryptEventIfNeeded(event);
} catch (error) { } catch (error) {
node.error(error, {}); node.error(error);
return; return;
} }
@ -293,7 +292,7 @@ module.exports = function(RED) {
} else if(prevState === null && state === "ERROR") { } else if(prevState === null && state === "ERROR") {
// Occurs when the initial sync failed first time. // Occurs when the initial sync failed first time.
node.setConnected(false, function(){ node.setConnected(false, function(){
node.error("Failed to connect to Matrix server", {}); node.error("Failed to connect to Matrix server");
}); });
} else if(prevState === "ERROR" && state === "PREPARED") { } else if(prevState === "ERROR" && state === "PREPARED") {
// Occurs when the initial sync succeeds // Occurs when the initial sync succeeds
@ -310,18 +309,18 @@ module.exports = function(RED) {
} else if(prevState === "SYNCING" && state === "RECONNECTING") { } else if(prevState === "SYNCING" && state === "RECONNECTING") {
// Occurs when the live update fails. // Occurs when the live update fails.
node.setConnected(false, function(){ node.setConnected(false, function(){
node.error("Connection to Matrix server lost", {}); node.error("Connection to Matrix server lost");
}); });
} else if(prevState === "RECONNECTING" && state === "RECONNECTING") { } else if(prevState === "RECONNECTING" && state === "RECONNECTING") {
// Can occur if the update calls continue to fail, // Can occur if the update calls continue to fail,
// but the keepalive calls (to /versions) succeed. // but the keepalive calls (to /versions) succeed.
node.setConnected(false, function(){ node.setConnected(false, function(){
node.error("Connection to Matrix server lost", {}); node.error("Connection to Matrix server lost");
}); });
} else if(prevState === "RECONNECTING" && state === "ERROR") { } else if(prevState === "RECONNECTING" && state === "ERROR") {
// Occurs when the keepalive call also fails // Occurs when the keepalive call also fails
node.setConnected(false, function(){ node.setConnected(false, function(){
node.error("Connection to Matrix server lost", {}); node.error("Connection to Matrix server lost");
}); });
} else if(prevState === "ERROR" && state === "SYNCING") { } else if(prevState === "ERROR" && state === "SYNCING") {
// Occurs when the client has performed a // Occurs when the client has performed a
@ -333,7 +332,7 @@ module.exports = function(RED) {
// Occurs when the client has failed to // Occurs when the client has failed to
// keepalive for a second time or more. // keepalive for a second time or more.
node.setConnected(false, function(){ node.setConnected(false, function(){
node.error("Connection to Matrix server lost", {}); node.error("Connection to Matrix server lost");
}); });
} else if(prevState === "SYNCING" && state === "SYNCING") { } else if(prevState === "SYNCING" && state === "SYNCING") {
// Occurs when the client has performed a live update. // Occurs when the client has performed a live update.
@ -345,7 +344,7 @@ module.exports = function(RED) {
// Occurs once the client has stopped syncing or // Occurs once the client has stopped syncing or
// trying to sync after stopClient has been called. // trying to sync after stopClient has been called.
node.setConnected(false, function(){ node.setConnected(false, function(){
node.error("Connection to Matrix server lost", {}); node.error("Connection to Matrix server lost");
}); });
} }
}); });
@ -363,7 +362,7 @@ module.exports = function(RED) {
// httpStatus: 401 // httpStatus: 401
// } // }
node.error("Authentication failure: " + errorObj, {}); node.error("Authentication failure: " + errorObj);
stopClient(); stopClient();
}); });
@ -379,7 +378,7 @@ module.exports = function(RED) {
initialSyncLimit: 8 initialSyncLimit: 8
}); });
} catch(error) { } catch(error) {
node.error(error, {}); node.error(error);
} }
} }
@ -400,7 +399,7 @@ module.exports = function(RED) {
.then( .then(
function(data) { function(data) {
if((typeof data['device_id'] === undefined || !data['device_id']) && !node.deviceId && !getStoredDeviceId(localStorage)) { if((typeof data['device_id'] === undefined || !data['device_id']) && !node.deviceId && !getStoredDeviceId(localStorage)) {
node.error("/whoami request did not return device_id. You will need to manually set one in your configuration because this cannot be automatically fetched.", {}); node.error("/whoami request did not return device_id. You will need to manually set one in your configuration because this cannot be automatically fetched.");
} }
if('device_id' in data && data['device_id'] && !node.deviceId) { if('device_id' in data && data['device_id'] && !node.deviceId) {
// if we have no device_id configured lets use the one // if we have no device_id configured lets use the one
@ -410,7 +409,7 @@ module.exports = function(RED) {
// make sure our userId matches the access token's // make sure our userId matches the access token's
if(data['user_id'].toLowerCase() !== node.userId.toLowerCase()) { if(data['user_id'].toLowerCase() !== node.userId.toLowerCase()) {
node.error(`User ID provided is ${node.userId} but token belongs to ${data['user_id']}`, {}); node.error(`User ID provided is ${node.userId} but token belongs to ${data['user_id']}`);
return; return;
} }
run().catch((error) => node.error(error)); run().catch((error) => node.error(error));
@ -419,19 +418,11 @@ module.exports = function(RED) {
// if the error isn't authentication related retry in a little bit // if the error isn't authentication related retry in a little bit
if(err.code !== "M_UNKNOWN_TOKEN") { if(err.code !== "M_UNKNOWN_TOKEN") {
retryStartTimeout = setTimeout(checkAuthTokenThenStart, 15000); retryStartTimeout = setTimeout(checkAuthTokenThenStart, 15000);
node.error("Auth check failed: " + err, {}); node.error("Auth check failed: " + err);
} }
} }
) )
})(); })();
// Keep track of all consumers of this node to be able to catch errors
node.register = function(consumerNode) {
node.users[consumerNode.id] = consumerNode;
};
node.deregister = function(consumerNode) {
delete node.users[consumerNode.id];
};
} }
} }
@ -503,7 +494,7 @@ module.exports = function(RED) {
fs.copySync(oldStorageDir, dir); fs.copySync(oldStorageDir, dir);
} }
} catch (err) { } catch (err) {
node.error(err, {}); node.error(err);
} }
}); });

View File

@ -8,10 +8,9 @@ module.exports = function(RED) {
this.server = RED.nodes.getNode(n.server); this.server = RED.nodes.getNode(n.server);
if(!this.server) { if(!this.server) {
node.error('Server must be configured on the node.', {}); node.error('Server must be configured on the node.');
return; return;
} }
node.server.register(node);
this.encodeUri = function(pathTemplate, variables) { this.encodeUri = function(pathTemplate, variables) {
for (const key in variables) { for (const key in variables) {
@ -42,12 +41,12 @@ module.exports = function(RED) {
} }
if(!node.server.isConnected()) { if(!node.server.isConnected()) {
node.error("Matrix server connection is currently closed", msg); node.error("Matrix server connection is currently closed");
node.send([null, msg]); node.send([null, msg]);
} }
if(!msg.userId) { if(!msg.userId) {
node.error("msg.userId must be set to edit/create a user (ex: @user:server.com)", msg); node.error("msg.userId must be set to edit/create a user (ex: @user:server.com)");
return; return;
} }
@ -70,10 +69,6 @@ module.exports = function(RED) {
node.send([null, msg]); node.send([null, msg]);
}); });
}); });
node.on("close", function() {
node.server.deregister(node);
});
} }
RED.nodes.registerType("matrix-synapse-create-edit-user", MatrixSynapseCreateEditUser); RED.nodes.registerType("matrix-synapse-create-edit-user", MatrixSynapseCreateEditUser);
} }

View File

@ -8,10 +8,9 @@ module.exports = function(RED) {
this.server = RED.nodes.getNode(n.server); this.server = RED.nodes.getNode(n.server);
if(!this.server) { if(!this.server) {
node.error('Server must be configured on the node.', {}); node.error('Server must be configured on the node.');
return; return;
} }
node.server.register(node);
this.encodeUri = function(pathTemplate, variables) { this.encodeUri = function(pathTemplate, variables) {
for (const key in variables) { for (const key in variables) {
@ -42,12 +41,12 @@ module.exports = function(RED) {
} }
if(!node.server.isConnected()) { if(!node.server.isConnected()) {
node.error("Matrix server connection is currently closed", msg); node.error("Matrix server connection is currently closed");
node.send([null, msg]); node.send([null, msg]);
} }
if(!msg.userId) { if(!msg.userId) {
node.error("msg.userId must be set to edit/create a user (ex: @user:server.com)", msg); node.error("msg.userId must be set to edit/create a user (ex: @user:server.com)");
return; return;
} }
@ -71,10 +70,6 @@ module.exports = function(RED) {
node.send([null, msg]); node.send([null, msg]);
}); });
}); });
node.on("close", function() {
node.server.deregister(node);
});
} }
RED.nodes.registerType("matrix-synapse-deactivate-user", MatrixSynapseDeactivateUser); RED.nodes.registerType("matrix-synapse-deactivate-user", MatrixSynapseDeactivateUser);
} }

View File

@ -9,9 +9,10 @@ module.exports = function(RED) {
this.roomId = n.roomId; this.roomId = n.roomId;
if(!this.server) { if(!this.server) {
node.error('Server must be configured on the node.', {}); node.error('Server must be configured on the node.');
return; return;
} }
this.encodeUri = function(pathTemplate, variables) { this.encodeUri = function(pathTemplate, variables) {
for (const key in variables) { for (const key in variables) {
if (!variables.hasOwnProperty(key)) { if (!variables.hasOwnProperty(key)) {
@ -41,18 +42,18 @@ module.exports = function(RED) {
} }
if(!node.server.isConnected()) { if(!node.server.isConnected()) {
node.error("Matrix server connection is currently closed", msg); node.error("Matrix server connection is currently closed");
node.send([null, msg]); node.send([null, msg]);
} }
msg.topic = node.roomId || msg.topic; msg.topic = node.roomId || msg.topic;
if(!msg.topic) { if(!msg.topic) {
node.error("room must be defined in either msg.topic or in node config", msg); node.error("room must be defined in either msg.topic or in node config");
return; return;
} }
if(!msg.userId) { if(!msg.userId) {
node.error("msg.userId is required to set user into a room", msg); node.error("msg.userId is required to set user into a room");
return; return;
} }
@ -76,10 +77,6 @@ module.exports = function(RED) {
node.send([null, msg]); node.send([null, msg]);
}); });
}); });
node.on("close", function() {
node.server.deregister(node);
});
} }
RED.nodes.registerType("matrix-synapse-join-room", MatrixJoinRoom); RED.nodes.registerType("matrix-synapse-join-room", MatrixJoinRoom);
} }

View File

@ -12,27 +12,25 @@ module.exports = function(RED) {
this.sharedSecret = this.credentials.sharedSecret; this.sharedSecret = this.credentials.sharedSecret;
if(!this.server) { if(!this.server) {
node.error('Server URL must be configured on the node.', {}); node.error('Server URL must be configured on the node.');
return; return;
} }
if(!this.sharedSecret) { if(!this.sharedSecret) {
node.error('Shared registration secret must be configured on the node.', {}); node.error('Shared registration secret must be configured on the node.');
return; return;
} }
node.server.register(node);
node.on("input", async function (msg) { node.on("input", async function (msg) {
const { got } = await import('got'); const { got } = await import('got');
if(!msg.payload.username) { if(!msg.payload.username) {
node.error("msg.payload.username is required", msg); node.error("msg.payload.username is required");
return; return;
} }
if(!msg.payload.password) { if(!msg.payload.password) {
node.error("msg.payload.password is required", msg); node.error("msg.payload.password is required");
return; return;
} }
@ -52,7 +50,7 @@ module.exports = function(RED) {
var nonce = response.body.nonce; var nonce = response.body.nonce;
if(!nonce) { if(!nonce) {
node.error('Could not get nonce from /_synapse/admin/v1/register', msg); node.error('Could not get nonce from /_synapse/admin/v1/register');
return; return;
} }
@ -98,10 +96,6 @@ module.exports = function(RED) {
node.send(msg); node.send(msg);
})(); })();
}); });
node.on("close", function() {
node.server.deregister(node);
});
} }
RED.nodes.registerType("matrix-synapse-register", MatrixSynapseRegister, { RED.nodes.registerType("matrix-synapse-register", MatrixSynapseRegister, {
credentials: { credentials: {

View File

@ -12,8 +12,6 @@ module.exports = function(RED) {
return; return;
} }
node.server.register(node);
node.status({ fill: "red", shape: "ring", text: "disconnected" }); node.status({ fill: "red", shape: "ring", text: "disconnected" });
node.server.on("disconnected", function(){ node.server.on("disconnected", function(){
@ -31,7 +29,7 @@ module.exports = function(RED) {
} }
if(!node.server.isConnected()) { if(!node.server.isConnected()) {
node.error("Matrix server connection is currently closed", msg); node.error("Matrix server connection is currently closed");
node.send([null, msg]); node.send([null, msg]);
} }
@ -64,10 +62,6 @@ module.exports = function(RED) {
node.send([null, msg]); node.send([null, msg]);
}); });
}); });
node.on("close", function() {
node.server.deregister(node);
});
} }
RED.nodes.registerType("matrix-synapse-users", MatrixSynapseUsers); RED.nodes.registerType("matrix-synapse-users", MatrixSynapseUsers);
} }

View File

@ -8,12 +8,10 @@ module.exports = function(RED) {
this.server = RED.nodes.getNode(n.server); this.server = RED.nodes.getNode(n.server);
if(!this.server) { if(!this.server) {
node.error('Server must be configured on the node.', {}); node.error('Server must be configured on the node.');
return; return;
} }
node.server.register(node);
this.encodeUri = function(pathTemplate, variables) { this.encodeUri = function(pathTemplate, variables) {
for (const key in variables) { for (const key in variables) {
if (!variables.hasOwnProperty(key)) { if (!variables.hasOwnProperty(key)) {
@ -43,12 +41,12 @@ module.exports = function(RED) {
} }
if(!node.server.isConnected()) { if(!node.server.isConnected()) {
node.error("Matrix server connection is currently closed", msg); node.error("Matrix server connection is currently closed");
node.send([null, msg]); node.send([null, msg]);
} }
if(!msg.userId) { if(!msg.userId) {
node.error("msg.userId must be set to get user whois data", msg); node.error("msg.userId must be set to get user whois data");
return; return;
} }
@ -72,10 +70,6 @@ module.exports = function(RED) {
node.send([null, msg]); node.send([null, msg]);
}); });
}); });
node.on("close", function() {
node.server.deregister(node);
});
} }
RED.nodes.registerType("matrix-whois-user", MatrixWhoIsUser); RED.nodes.registerType("matrix-whois-user", MatrixWhoIsUser);
} }