mirror of
https://github.com/Skylar-Tech/node-red-contrib-matrix-chat.git
synced 2026-05-23 07:33:37 -06:00
ebcb1eab81
Upgrades matrix-js-sdk from 34.13.0 to 41.5.0. This crosses the v37 removal of the legacy libolm crypto stack, so E2EE is migrated to the Rust crypto implementation. Also adds device verification, cross-signing setup, and authenticated media support. Dependencies - Bump matrix-js-sdk ^34.13.0 -> ^41.5.0; require Node.js >= 22. - Drop the `olm` dependency (legacy crypto only); add `fake-indexeddb`. Rust crypto - Replace initCrypto() with initRustCrypto(); the legacy crypto stack was removed upstream in v37. - Add src/matrix-crypto-store.js: the Rust crypto store requires IndexedDB, absent in Node.js, so it is backed by fake-indexeddb and snapshotted to disk (rust-crypto-store.v8) to survive restarts. - Migrate existing libolm crypto state into the Rust store on first run, and discard the stored crypto state when the device ID changes. Homeserver discovery - Resolve the homeserver via .well-known, so a delegating domain (e.g. example.org) works as the configured server URL. Cross-signing & secure backup - Add a secured /matrix-chat/secure-backup admin endpoint and a modal dialog on the server config node: check status, unlock an existing secure backup with its recovery key, or reset and create a new one. Device verification (new nodes) - matrix-verification: event source emitting verification requests and phase changes, with on-node filters (phase, initiated by, type, self-verification, user allowlist, room). - matrix-verification-action: request, accept, start SAS, confirm, mismatch, or cancel an in-flight verification. Authenticated media - matrix-receive and matrix-crypt-file use the authenticated media endpoints, send a bearer token via msg.headers, and fall back between the v3 and v1 media endpoints on a 404. Fixes - Surface connection/auth errors in the log; node.error() calls were passed an empty msg object, which routed the error and suppressed console logging. - matrix-get-user: await getProfileInfo()/getPresence(). - matrix-invite-room: pass the reason as the third invite() argument (the removed callback parameter was shifting it out). - Guard the verification handlers so a throwing SDK getter cannot crash Node-RED. Docs - Add the device-verification example flow; update the READMEs and node help, correcting stale claims that device verification, secure backup, and encrypted file uploads were unsupported.
88 lines
3.3 KiB
HTML
88 lines
3.3 KiB
HTML
<script type="text/javascript">
|
|
RED.nodes.registerType('matrix-decrypt-file',{
|
|
category: 'matrix',
|
|
color: '#00b7ca',
|
|
icon: "matrix.png",
|
|
outputLabels: ["success", "error"],
|
|
inputs:1,
|
|
outputs:2,
|
|
defaults: {
|
|
name: { value: null }
|
|
},
|
|
label: function() {
|
|
return this.name || "Decrypt File";
|
|
},
|
|
paletteLabel: 'Decrypt File'
|
|
});
|
|
</script>
|
|
|
|
<script type="text/html" data-template-name="matrix-decrypt-file">
|
|
<div class="form-row">
|
|
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
|
|
<input type="text" id="node-input-name" placeholder="Name">
|
|
</div>
|
|
</script>
|
|
|
|
<script type="text/html" data-help-name="matrix-decrypt-file">
|
|
<h3>Details</h3>
|
|
<p>Files sent in an encrypted room are themselves encrypted. Use this node to decrypt files. Note: This node will download the encrypted file so be cautious of large downloads.</p>
|
|
|
|
<h3>Inputs</h3>
|
|
<dl class="message-properties">
|
|
<dt>msg.content
|
|
<span class="property-type">object</span>
|
|
</dt>
|
|
<dd> content of the decrypted message</dd>
|
|
|
|
<dt>msg.content.file
|
|
<span class="property-type">object</span>
|
|
</dt>
|
|
<dd> the information needed to decode the file</dd>
|
|
|
|
<dt>msg.url
|
|
<span class="property-type">string | null</span>
|
|
</dt>
|
|
<dd> the decoded mxc url.</dd>
|
|
|
|
<dt class="optional">msg.headers
|
|
<span class="property-type">object</span>
|
|
</dt>
|
|
<dd>optional HTTP headers. If provided, they are used when downloading media (for example authenticated media bearer tokens).</dd>
|
|
|
|
<dt class="optional">msg.access_token
|
|
<span class="property-type">string</span>
|
|
</dt>
|
|
<dd>optional Matrix access token. Used as a bearer token if <code>msg.headers.Authorization</code> is not present.</dd>
|
|
</dl>
|
|
|
|
<h3>Outputs</h3>
|
|
<ol class="node-ports">
|
|
<li>Success
|
|
<dl class="message-properties">
|
|
<dt>msg.type <span class="property-type">string</span></dt>
|
|
<dd>The message type (ex: <code>m.file</code>, <code>m.image</code>, <code>m.video</code>, etc)</dd>
|
|
|
|
<dt>msg.payload <span class="property-type">buffer</span></dt>
|
|
<dd>decoded file contents.</dd>
|
|
|
|
<dt>msg.filename <span class="property-type">string</span></dt>
|
|
<dd>filename of the decoded file (if content.filename isn't defined on the message we fallback to content.body).</dd>
|
|
|
|
<dt>msg.thumbnail_payload <span class="property-type">buffer</span></dt>
|
|
<dd>If the file is an image then this property is set to the buffer of the thumbnail. If not an image this is left off.</dd>
|
|
</dl>
|
|
</li>
|
|
<li>Error
|
|
<dl class="message-properties">
|
|
<dt>msg.error <span class="property-type">string</span></dt>
|
|
<dd>the error that occurred.</dd>
|
|
</dl>
|
|
</li>
|
|
</ol>
|
|
|
|
<h3>References</h3>
|
|
<ul>
|
|
<li><a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types">MIME Types</a> - description of <code>msg.contentType</code> format</li>
|
|
</ul>
|
|
</script>
|