Bläddra i källkod

New config setting: `muc_show_ogp_unfurls`

JC Brand 4 år sedan
förälder
incheckning
16e1f95790
5 ändrade filer med 60 tillägg och 16 borttagningar
  1. 1 0
      CHANGES.md
  2. 14 0
      docs/source/configuration.rst
  3. 41 16
      spec/unfurls.js
  4. 1 0
      src/headless/plugins/muc/index.js
  5. 3 0
      src/headless/plugins/muc/muc.js

+ 1 - 0
CHANGES.md

@@ -16,6 +16,7 @@
 - New configuration setting: [show_tab_notifications](https://conversejs.org/docs/html/configuration.html#show-tab-notifications)
 - New configuration setting: [muc_clear_messages_on_leave](https://conversejs.org/docs/html/configuration.html#muc-clear-messages-on-leave)
 - New configuration setting: [send_chat_markers](https://conversejs.org/docs/html/configuration.html#send-chat-markers)
+- New configuration setting: [muc_show_ogp_unfurls](https://conversejs.org/docs/html/configuration.html#muc-show-ogp-unfurls)
 - #1823: New config options [mam_request_all_pages](https://conversejs.org/docs/html/configuration.html#mam-request-all-pages)
 - Use the MUC stanza id when sending XEP-0333 markers
 - Add support for rendering unfurls via [mod_ogp](https://modules.prosody.im/mod_ogp.html)

+ 14 - 0
docs/source/configuration.rst

@@ -1471,6 +1471,20 @@ a nickname configured for it), you'll see the message history (if the
 server supports `XEP-0313 Message Archive Management <https://xmpp.org/extensions/xep-0313.html>`_)
 and the nickname form at the bottom.
 
+muc_show_ogp_unfurls
+--------------------
+
+* Default: ``true``
+
+Supports showing extra metadata (picture and description) for URLs contained in
+groupchat messages.
+
+The metadat must come from the MUC itself, metadata sent from participants
+themselves will not be shown.
+
+For Prosody XMPP server, `mod_ogp <https://modules.prosody.im/mod_ogp.html>`_ can be used.
+
+
 muc_subscribe_to_rai
 --------------------
 

+ 41 - 16
spec/unfurls.js

@@ -129,15 +129,7 @@ describe("A Groupchat Message", function () {
                     <meta xmlns="http://www.w3.org/1999/xhtml" property="og:url" content="https://www.youtube.com/watch?v=tmY-G6sngk8" />
                     <meta xmlns="http://www.w3.org/1999/xhtml" property="og:title" content="Rick Astley - Never Gonna Give You Up (Video)" />
                     <meta xmlns="http://www.w3.org/1999/xhtml" property="og:image" content="https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg" />
-                    <meta xmlns="http://www.w3.org/1999/xhtml" property="og:image:width" content="1280" />
-                    <meta xmlns="http://www.w3.org/1999/xhtml" property="og:image:height" content="720" />
                     <meta xmlns="http://www.w3.org/1999/xhtml" property="og:description" content="Rick Astley&amp;#39;s official music video for &quot;Never Gonna Give You Up&quot; Listen to Rick Astley: https://RickAstley.lnk.to/_listenYD Subscribe to the official Rick Ast..." />
-                    <meta xmlns="http://www.w3.org/1999/xhtml" property="og:type" content="video.other" />
-                    <meta xmlns="http://www.w3.org/1999/xhtml" property="og:video:url" content="https://www.youtube.com/embed/dQw4w9WgXcQ" />
-                    <meta xmlns="http://www.w3.org/1999/xhtml" property="og:video:secure_url" content="https://www.youtube.com/embed/dQw4w9WgXcQ" />
-                    <meta xmlns="http://www.w3.org/1999/xhtml" property="og:video:type" content="text/html" />
-                    <meta xmlns="http://www.w3.org/1999/xhtml" property="og:video:width" content="1280" />
-                    <meta xmlns="http://www.w3.org/1999/xhtml" property="og:video:height" content="720" />
                 </apply-to>
             </message>`);
         _converse.connection._dataRecv(mock.createRequest(metadata_stanza));
@@ -175,15 +167,48 @@ describe("A Groupchat Message", function () {
                     <meta xmlns="http://www.w3.org/1999/xhtml" property="og:url" content="https://www.youtube.com/watch?v=dQw4w9WgXcQ" />
                     <meta xmlns="http://www.w3.org/1999/xhtml" property="og:title" content="Rick Astley - Never Gonna Give You Up (Video)" />
                     <meta xmlns="http://www.w3.org/1999/xhtml" property="og:image" content="https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg" />
-                    <meta xmlns="http://www.w3.org/1999/xhtml" property="og:image:width" content="1280" />
-                    <meta xmlns="http://www.w3.org/1999/xhtml" property="og:image:height" content="720" />
                     <meta xmlns="http://www.w3.org/1999/xhtml" property="og:description" content="Rick Astley&amp;#39;s official music video for &quot;Never Gonna Give You Up&quot; Listen to Rick Astley: https://RickAstley.lnk.to/_listenYD Subscribe to the official Rick Ast..." />
-                    <meta xmlns="http://www.w3.org/1999/xhtml" property="og:type" content="video.other" />
-                    <meta xmlns="http://www.w3.org/1999/xhtml" property="og:video:url" content="https://www.youtube.com/embed/dQw4w9WgXcQ" />
-                    <meta xmlns="http://www.w3.org/1999/xhtml" property="og:video:secure_url" content="https://www.youtube.com/embed/dQw4w9WgXcQ" />
-                    <meta xmlns="http://www.w3.org/1999/xhtml" property="og:video:type" content="text/html" />
-                    <meta xmlns="http://www.w3.org/1999/xhtml" property="og:video:width" content="1280" />
-                    <meta xmlns="http://www.w3.org/1999/xhtml" property="og:video:height" content="720" />
+                </apply-to>
+            </message>`);
+        _converse.connection._dataRecv(mock.createRequest(metadata_stanza));
+
+        await u.waitUntil(() => view.model.handleMetadataFastening.calls.count());
+        expect(view.model.handleMetadataFastening.calls.first().returnValue).toBe(false);
+        expect(view.querySelector('converse-message-unfurl')).toBe(null);
+        done();
+    }));
+
+    it("will not render an unfurl based on OGP data if muc_show_ogp_unfurls is false",
+            mock.initConverse(['chatBoxesFetched'],
+            {'muc_show_ogp_unfurls': false},
+            async function (done, _converse) {
+        const nick = 'romeo';
+        const muc_jid = 'lounge@montague.lit';
+        await mock.openAndEnterChatRoom(_converse, muc_jid, nick);
+        const view = _converse.api.chatviews.get(muc_jid);
+
+        const message_stanza = u.toStanza(`
+            <message xmlns="jabber:client" type="groupchat" from="${muc_jid}/arzu" xml:lang="en" to="${_converse.jid}" id="eda6c790-b4f3-4c07-b5e2-13fff99e6c04">
+                <body>https://www.youtube.com/watch?v=dQw4w9WgXcQ</body>
+                <active xmlns="http://jabber.org/protocol/chatstates"/>
+                <origin-id xmlns="urn:xmpp:sid:0" id="eda6c790-b4f3-4c07-b5e2-13fff99e6c04"/>
+                <stanza-id xmlns="urn:xmpp:sid:0" by="${muc_jid}" id="8f7613cc-27d4-40ca-9488-da25c4baf92a"/>
+                <markable xmlns="urn:xmpp:chat-markers:0"/>
+            </message>`);
+        _converse.connection._dataRecv(mock.createRequest(message_stanza));
+        const el = await u.waitUntil(() => view.querySelector('.chat-msg__text'));
+        expect(el.textContent).toBe('https://www.youtube.com/watch?v=dQw4w9WgXcQ');
+
+        spyOn(view.model, 'handleMetadataFastening').and.callThrough();
+
+        const metadata_stanza = u.toStanza(`
+            <message xmlns="jabber:client" from="${muc_jid}" to="${_converse.jid}" type="groupchat">
+                <apply-to xmlns="urn:xmpp:fasten:0" id="eda6c790-b4f3-4c07-b5e2-13fff99e6c04">
+                    <meta xmlns="http://www.w3.org/1999/xhtml" property="og:site_name" content="YouTube" />
+                    <meta xmlns="http://www.w3.org/1999/xhtml" property="og:url" content="https://www.youtube.com/watch?v=dQw4w9WgXcQ" />
+                    <meta xmlns="http://www.w3.org/1999/xhtml" property="og:title" content="Rick Astley - Never Gonna Give You Up (Video)" />
+                    <meta xmlns="http://www.w3.org/1999/xhtml" property="og:image" content="https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg" />
+                    <meta xmlns="http://www.w3.org/1999/xhtml" property="og:description" content="Rick Astley&amp;#39;s official music video for &quot;Never Gonna Give You Up&quot; Listen to Rick Astley: https://RickAstley.lnk.to/_listenYD Subscribe to the official Rick Ast..." />
                 </apply-to>
             </message>`);
         _converse.connection._dataRecv(mock.createRequest(metadata_stanza));

+ 1 - 0
src/headless/plugins/muc/index.js

@@ -252,6 +252,7 @@ converse.plugins.add('converse-muc', {
                 ...converse.MUC_INFO_CODES.role_changes
             ],
             'muc_show_logs_before_join': false,
+            'muc_show_ogp_unfurls': true,
             'muc_subscribe_to_rai': false,
         });
         api.promises.add(['roomsAutoJoined']);

+ 3 - 0
src/headless/plugins/muc/muc.js

@@ -2122,6 +2122,9 @@ const ChatRoomMixin = {
     },
 
     handleMetadataFastening (attrs) {
+        if (!api.settings.get('muc_show_ogp_unfurls')) {
+            return false;
+        }
         if (attrs.ogp_for_id) {
             if (attrs.from !== this.get('jid')) {
                 // For now we only allow metadata from the MUC itself and not