瀏覽代碼

Disable OTR and add code for adding the toolbar button.

JC Brand 7 年之前
父節點
當前提交
bfc246d9c7
共有 4 個文件被更改,包括 45 次插入16 次删除
  1. 3 4
      dev.html
  2. 1 1
      src/converse-core.js
  3. 41 10
      src/converse-omemo.js
  4. 0 1
      src/converse.js

+ 3 - 4
dev.html

@@ -10,7 +10,6 @@
     <meta name="keywords" content="xmpp chat webchat converse.js" />
     <link rel="shortcut icon" type="image/ico" href="css/images/favicon.ico"/>
     <link type="text/css" rel="stylesheet" media="screen" href="css/inverse.css" />
-    <script src="3rdparty/libsignal-protocol-javascript/dist/libsignal-protocol.js"/>
     <script src="node_modules/requirejs/require.js"></script>
     <script src="src/config.js"></script>
 </head>
@@ -18,7 +17,7 @@
 <body class="reset">
 
 <script>
-    require(['converse'], function (converse) {
+    require(['converse', 'converse-omemo'], function (converse) {
         converse.initialize({
             auto_away: 300,
             i18n: 'en',
@@ -34,8 +33,8 @@
             notify_all_room_messages: [
                 'discuss@conference.conversejs.org'
             ],
-            // bosh_service_url: 'http://chat.example.org:5280/http-bind/',
-            bosh_service_url: 'https://conversejs.org/http-bind/', // Please use this connection manager only for testing purposes
+            bosh_service_url: 'http://chat.example.org:5280/http-bind/',
+            // bosh_service_url: 'https://conversejs.org/http-bind/', // Please use this connection manager only for testing purposes
             message_archiving: 'always',
             debug: true
         });

+ 1 - 1
src/converse-core.js

@@ -89,7 +89,7 @@
         'converse-muc',
         'converse-muc-views',
         'converse-notification',
-        'converse-otr',
+        'converse-omemo',
         'converse-ping',
         'converse-profile',
         'converse-register',

+ 41 - 10
src/converse-omemo.js

@@ -23,18 +23,44 @@
     const TRUSTED = 1;
     const UNTRUSTED = -1;
 
+    function contactHasOMEMOSupport (_converse, contact_jid) {
+        return new Promise((resolve, reject) => {
+            _converse.api.waitUntil('OMEMOInitialized', () => {
+                resolve(_converse.devicelists.get(contact_jid).devices.length > 0);
+            });
+        });
+    }
+
+    function serverHasOMEMOSupport (_converse) {
+        return new Promise((resolve, reject) => {
+            _converse.api.disco.getIdentity('pubsub', 'pep').then((identity) => resolve(!_.isNil(identity)))
+        });
+    }
+
     converse.plugins.add('converse-omemo', {
 
+        enabled (_converse) {
+            return !_.isNil(window.libsignal);
+        },
+
         overrides: {
             ChatBoxView:  {
 
                 addOMEMOToolbarButton (options) {
-                    const { _converse } = this.__super__,
-                          { __ } = _converse,
-                          data = this.model.toJSON();
-                    this.el.querySelector('.chat-toolbar').insertAdjacentHTML(
-                        'beforeend',
-                        tpl_toolbar_omemo({'__': __}));
+                    const { _converse } = this.__super__;
+
+                    Promise.all([
+                        contactHasOMEMOSupport(_converse, this.model.get('jid')),
+                        serverHasOMEMOSupport(_converse)
+                    ]).then((client_support, server_support) => {
+                        debugger;
+
+                        if (client_support && server_support) {
+                            this.el.querySelector('.chat-toolbar').insertAdjacentHTML(
+                                'beforeend',
+                                tpl_toolbar_omemo({'__': __}));
+                        }
+                    }, _.partial(_converse.log, _, Strophe.LogLevel.ERROR));
                 },
 
                 renderToolbar (toolbar, options) {
@@ -51,10 +77,13 @@
              */
             const { _converse } = this;
 
+            _converse.api.promises.add(['OMEMOInitialized']);
+
+
             _converse.OMEMOSession = Backbone.Model.extend({
 
                 initialize () {
-                    this.keyhelper = libsignal.KeyHelper;
+                    this.keyhelper = window.libsignal.KeyHelper;
                 },
 
                 fetchSession () {
@@ -62,7 +91,7 @@
                         this.fetch({
                             'success': () => {
                                 if (!_converse.omemo_session.get('registration_id')) {
-                                    this.keyhelper.generateIdentityKeyPair().then(function (keypair) {
+                                    this.keyhelper.generateIdentityKeyPair().then((keypair) => {
                                         _converse.omemo_session.set({
                                             'registration_id': this.keyhelper.generateRegistrationId(),
                                             'pub_key': keypair.pubKey,
@@ -141,6 +170,7 @@
                  */
                 // TODO:
                 const devicelist = _converse.devicelists.get(_converse.bare_jid);
+                return Promise.resolve();
             }
 
             function updateDevicesFromStanza (stanza) {
@@ -178,7 +208,8 @@
                 publishBundle()
                     .then(() => fetchDeviceLists())
                     .then(() => _converse.devicelists.get(_converse.bare_jid).fetchDevices())
-                    .then(updateOwnDeviceList)
+                    .then(() => updateOwnDeviceList())
+                    .then(() => _converse.emit('OMEMOInitialized'))
                     .catch(_.partial(_converse.log, _, Strophe.LogLevel.ERROR));
             }
 
@@ -188,7 +219,7 @@
                     b64_sha1(`converse.devicelists-${_converse.bare_jid}`)
                 );
 
-                _converse.omemo_session = new Backbone.Model();
+                _converse.omemo_session = new _converse.OMEMOSession();
                 _converse.omemo_session.browserStorage =  new Backbone.BrowserStorage.session(
                     b64_sha1(`converse.omemosession-${_converse.bare_jid}`)
                 );

+ 0 - 1
src/converse.js

@@ -21,7 +21,6 @@ if (typeof define !== 'undefined') {
         "converse-muc-views",
         "converse-muc-views",       // Views related to MUC
         "converse-notification",    // HTML5 Notifications
-        "converse-otr",             // Off-the-record encryption for one-on-one messages
         "converse-ping",            // XEP-0199 XMPP Ping
         "converse-roster",
         "converse-register",        // XEP-0077 In-band registration