Mercurial > libervia-backend
annotate sat/plugins/plugin_sec_otr.py @ 2721:4aaa47f62d8d
core (memory/sqlite): fixed v7 update performance issue:
Performance issue was due to bad ordering in table dropping, this has been fixed.
"infos" message are also deleted by this update as they are containing only presence data and take a lot of space for a barely useful data.
A config option may be available in the future to store presence data in logs.
author | Goffi <goffi@goffi.org> |
---|---|
date | Tue, 11 Dec 2018 23:53:27 +0100 |
parents | c26492bd2144 |
children | a86f494457c2 |
rev | line source |
---|---|
1934
2daf7b4c6756
use of /usr/bin/env instead of /usr/bin/python in shebang
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
1 #!/usr/bin/env python2 |
1055 | 2 # -*- coding: utf-8 -*- |
3 | |
4 # SAT plugin for OTR encryption | |
2483 | 5 # Copyright (C) 2009-2018 Jérôme Poisson (goffi@goffi.org) |
1055 | 6 |
7 # This program is free software: you can redistribute it and/or modify | |
8 # it under the terms of the GNU Affero General Public License as published by | |
9 # the Free Software Foundation, either version 3 of the License, or | |
10 # (at your option) any later version. | |
11 | |
12 # This program is distributed in the hope that it will be useful, | |
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 # GNU Affero General Public License for more details. | |
16 | |
17 # You should have received a copy of the GNU Affero General Public License | |
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. | |
19 | |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
20 # XXX: thanks to Darrik L Mazey for his documentation |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
21 # (https://blog.darmasoft.net/2013/06/30/using-pure-python-otr.html) |
1055 | 22 # this implentation is based on it |
23 | |
1136
ea2bbdf5b541
plugin OTR: added start/refresh and end session menus
Goffi <goffi@goffi.org>
parents:
1135
diff
changeset
|
24 from sat.core.i18n import _, D_ |
ea2bbdf5b541
plugin OTR: added start/refresh and end session menus
Goffi <goffi@goffi.org>
parents:
1135
diff
changeset
|
25 from sat.core.constants import Const as C |
1055 | 26 from sat.core.log import getLogger |
27 from sat.core import exceptions | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
28 |
1055 | 29 log = getLogger(__name__) |
1141
7fcafc3206b1
plugin OTR: authentication management + fixed a bug in setState (due to a wrong docstring in potr.context.getCurrentTrust)
Goffi <goffi@goffi.org>
parents:
1137
diff
changeset
|
30 from sat.tools import xml_tools |
1055 | 31 from twisted.words.protocols.jabber import jid |
32 from twisted.python import failure | |
1095 | 33 from twisted.internet import defer |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1249
diff
changeset
|
34 from sat.memory import persistent |
1055 | 35 import potr |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1249
diff
changeset
|
36 import copy |
1955
633b5c21aefd
backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
37 import time |
633b5c21aefd
backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
38 import uuid |
1095 | 39 |
2125 | 40 |
1055 | 41 PLUGIN_INFO = { |
2145
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
42 C.PI_NAME: u"OTR", |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
43 C.PI_IMPORT_NAME: u"OTR", |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
44 C.PI_TYPE: u"SEC", |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
45 C.PI_PROTOCOLS: [u"XEP-0364"], |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
46 C.PI_DEPENDENCIES: [u"XEP-0280", u"XEP-0334"], |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
47 C.PI_MAIN: u"OTR", |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
48 C.PI_HANDLER: u"no", |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
49 C.PI_DESCRIPTION: _(u"""Implementation of OTR"""), |
1055 | 50 } |
51 | |
2657
9190874a8ac5
plugin otr: use namespace specified in XEP-0378
Goffi <goffi@goffi.org>
parents:
2653
diff
changeset
|
52 NS_OTR = "urn:xmpp:otr:0" |
2128 | 53 PRIVATE_KEY = "PRIVATE KEY" |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
54 OTR_MENU = D_(u"OTR") |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
55 AUTH_TXT = D_( |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
56 u"To authenticate your correspondent, you need to give your below fingerprint " |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
57 u"*BY AN EXTERNAL CANAL* (i.e. not in this chat), and check that the one he gives " |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
58 u"you is the same as below. If there is a mismatch, there can be a spy between you!" |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
59 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
60 DROP_TXT = D_( |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
61 u"You private key is used to encrypt messages for your correspondent, nobody except " |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
62 u"you must know it, if you are in doubt, you should drop it!\n\nAre you sure you " |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
63 u"want to drop your private key?" |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
64 ) |
2128 | 65 # NO_LOG_AND = D_(u"/!\\Your history is not logged anymore, and") # FIXME: not used at the moment |
2138
6e509ee853a8
plugin OTR, core; use of new sendMessage + OTR mini refactoring:
Goffi <goffi@goffi.org>
parents:
2132
diff
changeset
|
66 NO_ADV_FEATURES = D_(u"Some of advanced features are disabled !") |
2128 | 67 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
68 DEFAULT_POLICY_FLAGS = {"ALLOW_V1": False, "ALLOW_V2": True, "REQUIRE_ENCRYPTION": True} |
2128 | 69 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
70 OTR_STATE_TRUSTED = "trusted" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
71 OTR_STATE_UNTRUSTED = "untrusted" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
72 OTR_STATE_UNENCRYPTED = "unencrypted" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
73 OTR_STATE_ENCRYPTED = "encrypted" |
2128 | 74 |
1055 | 75 |
76 class Context(potr.context.Context): | |
1095 | 77 def __init__(self, host, account, other_jid): |
78 super(Context, self).__init__(account, other_jid) | |
1055 | 79 self.host = host |
80 | |
81 def getPolicy(self, key): | |
82 if key in DEFAULT_POLICY_FLAGS: | |
83 return DEFAULT_POLICY_FLAGS[key] | |
84 else: | |
85 return False | |
86 | |
1095 | 87 def inject(self, msg_str, appdata=None): |
2138
6e509ee853a8
plugin OTR, core; use of new sendMessage + OTR mini refactoring:
Goffi <goffi@goffi.org>
parents:
2132
diff
changeset
|
88 """Inject encrypted data in the stream |
6e509ee853a8
plugin OTR, core; use of new sendMessage + OTR mini refactoring:
Goffi <goffi@goffi.org>
parents:
2132
diff
changeset
|
89 |
2144
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2138
diff
changeset
|
90 if appdata is not None, we are sending a message in sendMessageDataTrigger |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
91 stanza will be injected directly if appdata is None, |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
92 else we just update the element and follow normal workflow |
2138
6e509ee853a8
plugin OTR, core; use of new sendMessage + OTR mini refactoring:
Goffi <goffi@goffi.org>
parents:
2132
diff
changeset
|
93 @param msg_str(str): encrypted message body |
6e509ee853a8
plugin OTR, core; use of new sendMessage + OTR mini refactoring:
Goffi <goffi@goffi.org>
parents:
2132
diff
changeset
|
94 @param appdata(None, dict): None for signal message, |
6e509ee853a8
plugin OTR, core; use of new sendMessage + OTR mini refactoring:
Goffi <goffi@goffi.org>
parents:
2132
diff
changeset
|
95 message data when an encrypted message is going to be sent |
6e509ee853a8
plugin OTR, core; use of new sendMessage + OTR mini refactoring:
Goffi <goffi@goffi.org>
parents:
2132
diff
changeset
|
96 """ |
1095 | 97 assert isinstance(self.peer, jid.JID) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
98 msg = msg_str.decode("utf-8") |
1095 | 99 client = self.user.client |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
100 log.debug(u"injecting encrypted message to {to}".format(to=self.peer)) |
2138
6e509ee853a8
plugin OTR, core; use of new sendMessage + OTR mini refactoring:
Goffi <goffi@goffi.org>
parents:
2132
diff
changeset
|
101 if appdata is None: |
6e509ee853a8
plugin OTR, core; use of new sendMessage + OTR mini refactoring:
Goffi <goffi@goffi.org>
parents:
2132
diff
changeset
|
102 mess_data = { |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
103 "from": client.jid, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
104 "to": self.peer, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
105 "uid": unicode(uuid.uuid4()), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
106 "message": {"": msg}, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
107 "subject": {}, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
108 "type": "chat", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
109 "extra": {}, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
110 "timestamp": time.time(), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
111 } |
2144
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2138
diff
changeset
|
112 client.generateMessageXML(mess_data) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
113 client.send(mess_data["xml"]) |
2138
6e509ee853a8
plugin OTR, core; use of new sendMessage + OTR mini refactoring:
Goffi <goffi@goffi.org>
parents:
2132
diff
changeset
|
114 else: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
115 message_elt = appdata[u"xml"] |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
116 assert message_elt.name == u"message" |
2138
6e509ee853a8
plugin OTR, core; use of new sendMessage + OTR mini refactoring:
Goffi <goffi@goffi.org>
parents:
2132
diff
changeset
|
117 message_elt.addElement("body", content=msg) |
1055 | 118 |
119 def setState(self, state): | |
2128 | 120 client = self.user.client |
1095 | 121 old_state = self.state |
1055 | 122 super(Context, self).setState(state) |
1135
3158f9e08760
plugin OTR: a warning is logged when Account is instancied with a bare jid.
Goffi <goffi@goffi.org>
parents:
1134
diff
changeset
|
123 log.debug(u"setState: %s (old_state=%s)" % (state, old_state)) |
1095 | 124 |
125 if state == potr.context.STATE_PLAINTEXT: | |
2653
7213caa5c5d0
plugin OTR: integrated in new encryption handler + fixed use of bare jid where full jid was expected
Goffi <goffi@goffi.org>
parents:
2643
diff
changeset
|
126 client.encryption.stop(self.peer, NS_OTR) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
127 feedback = _(u"/!\\ conversation with %(other_jid)s is now UNENCRYPTED") % { |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
128 "other_jid": self.peer.full() |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
129 } |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
130 self.host.bridge.otrState( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
131 OTR_STATE_UNENCRYPTED, self.peer.full(), client.profile |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
132 ) |
1095 | 133 elif state == potr.context.STATE_ENCRYPTED: |
2653
7213caa5c5d0
plugin OTR: integrated in new encryption handler + fixed use of bare jid where full jid was expected
Goffi <goffi@goffi.org>
parents:
2643
diff
changeset
|
134 client.encryption.start(self.peer, NS_OTR) |
1095 | 135 try: |
1141
7fcafc3206b1
plugin OTR: authentication management + fixed a bug in setState (due to a wrong docstring in potr.context.getCurrentTrust)
Goffi <goffi@goffi.org>
parents:
1137
diff
changeset
|
136 trusted = self.getCurrentTrust() |
1095 | 137 except TypeError: |
138 trusted = False | |
139 trusted_str = _(u"trusted") if trusted else _(u"untrusted") | |
140 | |
141 if old_state == potr.context.STATE_ENCRYPTED: | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
142 feedback = D_( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
143 u"{trusted} OTR conversation with {other_jid} REFRESHED" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
144 ).format(trusted=trusted_str, other_jid=self.peer.full()) |
1095 | 145 else: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
146 feedback = D_( |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
147 u"{trusted} encrypted OTR conversation started with {other_jid}\n" |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
148 u"{extra_info}" |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
149 ).format( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
150 trusted=trusted_str, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
151 other_jid=self.peer.full(), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
152 extra_info=NO_ADV_FEATURES, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
153 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
154 self.host.bridge.otrState( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
155 OTR_STATE_ENCRYPTED, self.peer.full(), client.profile |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
156 ) |
1095 | 157 elif state == potr.context.STATE_FINISHED: |
2653
7213caa5c5d0
plugin OTR: integrated in new encryption handler + fixed use of bare jid where full jid was expected
Goffi <goffi@goffi.org>
parents:
2643
diff
changeset
|
158 client.encryption.stop(self.peer, NS_OTR) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
159 feedback = D_(u"OTR conversation with {other_jid} is FINISHED").format( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
160 other_jid=self.peer.full() |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
161 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
162 self.host.bridge.otrState( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
163 OTR_STATE_UNENCRYPTED, self.peer.full(), client.profile |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
164 ) |
1095 | 165 else: |
2125 | 166 log.error(D_(u"Unknown OTR state")) |
1095 | 167 return |
168 | |
2138
6e509ee853a8
plugin OTR, core; use of new sendMessage + OTR mini refactoring:
Goffi <goffi@goffi.org>
parents:
2132
diff
changeset
|
169 client.feedback(self.peer, feedback) |
1055 | 170 |
1169
a3354063dfb6
plugin OTR: disconnect the active OTR sessions and delete the context on profile disconnection
souliane <souliane@mailoo.org>
parents:
1168
diff
changeset
|
171 def disconnect(self): |
a3354063dfb6
plugin OTR: disconnect the active OTR sessions and delete the context on profile disconnection
souliane <souliane@mailoo.org>
parents:
1168
diff
changeset
|
172 """Disconnect the session.""" |
a3354063dfb6
plugin OTR: disconnect the active OTR sessions and delete the context on profile disconnection
souliane <souliane@mailoo.org>
parents:
1168
diff
changeset
|
173 if self.state != potr.context.STATE_PLAINTEXT: |
a3354063dfb6
plugin OTR: disconnect the active OTR sessions and delete the context on profile disconnection
souliane <souliane@mailoo.org>
parents:
1168
diff
changeset
|
174 super(Context, self).disconnect() |
a3354063dfb6
plugin OTR: disconnect the active OTR sessions and delete the context on profile disconnection
souliane <souliane@mailoo.org>
parents:
1168
diff
changeset
|
175 |
1170
2df6427a5299
plugin OTR: forces FINISHED state if we are in ENCRYPTED state on contact disconnection
souliane <souliane@mailoo.org>
parents:
1169
diff
changeset
|
176 def finish(self): |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
177 """Finish the session |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
178 |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
179 avoid to send any message but the user still has to end the session himself. |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
180 """ |
1170
2df6427a5299
plugin OTR: forces FINISHED state if we are in ENCRYPTED state on contact disconnection
souliane <souliane@mailoo.org>
parents:
1169
diff
changeset
|
181 if self.state == potr.context.STATE_ENCRYPTED: |
2df6427a5299
plugin OTR: forces FINISHED state if we are in ENCRYPTED state on contact disconnection
souliane <souliane@mailoo.org>
parents:
1169
diff
changeset
|
182 self.processTLVs([potr.proto.DisconnectTLV()]) |
2df6427a5299
plugin OTR: forces FINISHED state if we are in ENCRYPTED state on contact disconnection
souliane <souliane@mailoo.org>
parents:
1169
diff
changeset
|
183 |
1055 | 184 |
185 class Account(potr.context.Account): | |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
186 # TODO: manage trusted keys: if a fingerprint is not used anymore, |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
187 # we have no way to remove it from database yet (same thing for a |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
188 # correspondent jid) |
2138
6e509ee853a8
plugin OTR, core; use of new sendMessage + OTR mini refactoring:
Goffi <goffi@goffi.org>
parents:
2132
diff
changeset
|
189 # TODO: manage explicit message encryption |
1055 | 190 |
1095 | 191 def __init__(self, host, client): |
192 log.debug(u"new account: %s" % client.jid) | |
1135
3158f9e08760
plugin OTR: a warning is logged when Account is instancied with a bare jid.
Goffi <goffi@goffi.org>
parents:
1134
diff
changeset
|
193 if not client.jid.resource: |
3158f9e08760
plugin OTR: a warning is logged when Account is instancied with a bare jid.
Goffi <goffi@goffi.org>
parents:
1134
diff
changeset
|
194 log.warning("Account created without resource") |
3158f9e08760
plugin OTR: a warning is logged when Account is instancied with a bare jid.
Goffi <goffi@goffi.org>
parents:
1134
diff
changeset
|
195 super(Account, self).__init__(unicode(client.jid), "xmpp", 1024) |
1095 | 196 self.host = host |
197 self.client = client | |
1055 | 198 |
199 def loadPrivkey(self): | |
1095 | 200 log.debug(u"loadPrivkey") |
1146
1ac5ea74dbdf
plugin OTR: remove unnecessary attribute SatXMPPClient.otr_priv_key
souliane <souliane@mailoo.org>
parents:
1144
diff
changeset
|
201 return self.privkey |
1055 | 202 |
203 def savePrivkey(self): | |
1095 | 204 log.debug(u"savePrivkey") |
1137
768f1f1ef12c
plugin otr: priv_key is better than getPrivKey here, as it should not be None + fixed private key encryption/decryption
Goffi <goffi@goffi.org>
parents:
1136
diff
changeset
|
205 if self.privkey is None: |
2125 | 206 raise exceptions.InternalError(_(u"Save is called but privkey is None !")) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
207 priv_key = self.privkey.serializePrivateKey().encode("hex") |
1095 | 208 d = self.host.memory.encryptValue(priv_key, self.client.profile) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
209 |
1095 | 210 def save_encrypted_key(encrypted_priv_key): |
2128 | 211 self.client._otr_data[PRIVATE_KEY] = encrypted_priv_key |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
212 |
1095 | 213 d.addCallback(save_encrypted_key) |
1055 | 214 |
1141
7fcafc3206b1
plugin OTR: authentication management + fixed a bug in setState (due to a wrong docstring in potr.context.getCurrentTrust)
Goffi <goffi@goffi.org>
parents:
1137
diff
changeset
|
215 def loadTrusts(self): |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
216 trust_data = self.client._otr_data.get("trust", {}) |
1141
7fcafc3206b1
plugin OTR: authentication management + fixed a bug in setState (due to a wrong docstring in potr.context.getCurrentTrust)
Goffi <goffi@goffi.org>
parents:
1137
diff
changeset
|
217 for jid_, jid_data in trust_data.iteritems(): |
7fcafc3206b1
plugin OTR: authentication management + fixed a bug in setState (due to a wrong docstring in potr.context.getCurrentTrust)
Goffi <goffi@goffi.org>
parents:
1137
diff
changeset
|
218 for fingerprint, trust_level in jid_data.iteritems(): |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
219 log.debug( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
220 u'setting trust for {jid}: [{fingerprint}] = "{trust_level}"'.format( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
221 jid=jid_, fingerprint=fingerprint, trust_level=trust_level |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
222 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
223 ) |
1141
7fcafc3206b1
plugin OTR: authentication management + fixed a bug in setState (due to a wrong docstring in potr.context.getCurrentTrust)
Goffi <goffi@goffi.org>
parents:
1137
diff
changeset
|
224 self.trusts.setdefault(jid.JID(jid_), {})[fingerprint] = trust_level |
7fcafc3206b1
plugin OTR: authentication management + fixed a bug in setState (due to a wrong docstring in potr.context.getCurrentTrust)
Goffi <goffi@goffi.org>
parents:
1137
diff
changeset
|
225 |
7fcafc3206b1
plugin OTR: authentication management + fixed a bug in setState (due to a wrong docstring in potr.context.getCurrentTrust)
Goffi <goffi@goffi.org>
parents:
1137
diff
changeset
|
226 def saveTrusts(self): |
1409
3265a2639182
massive (preventive) addition of 'u' (unicode) before the strings passed to logging functions
souliane <souliane@mailoo.org>
parents:
1396
diff
changeset
|
227 log.debug(u"saving trusts for {profile}".format(profile=self.client.profile)) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
228 log.debug(u"trusts = {}".format(self.client._otr_data["trust"])) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
229 self.client._otr_data.force("trust") |
1141
7fcafc3206b1
plugin OTR: authentication management + fixed a bug in setState (due to a wrong docstring in potr.context.getCurrentTrust)
Goffi <goffi@goffi.org>
parents:
1137
diff
changeset
|
230 |
7fcafc3206b1
plugin OTR: authentication management + fixed a bug in setState (due to a wrong docstring in potr.context.getCurrentTrust)
Goffi <goffi@goffi.org>
parents:
1137
diff
changeset
|
231 def setTrust(self, other_jid, fingerprint, trustLevel): |
7fcafc3206b1
plugin OTR: authentication management + fixed a bug in setState (due to a wrong docstring in potr.context.getCurrentTrust)
Goffi <goffi@goffi.org>
parents:
1137
diff
changeset
|
232 try: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
233 trust_data = self.client._otr_data["trust"] |
1141
7fcafc3206b1
plugin OTR: authentication management + fixed a bug in setState (due to a wrong docstring in potr.context.getCurrentTrust)
Goffi <goffi@goffi.org>
parents:
1137
diff
changeset
|
234 except KeyError: |
7fcafc3206b1
plugin OTR: authentication management + fixed a bug in setState (due to a wrong docstring in potr.context.getCurrentTrust)
Goffi <goffi@goffi.org>
parents:
1137
diff
changeset
|
235 trust_data = {} |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
236 self.client._otr_data["trust"] = trust_data |
1141
7fcafc3206b1
plugin OTR: authentication management + fixed a bug in setState (due to a wrong docstring in potr.context.getCurrentTrust)
Goffi <goffi@goffi.org>
parents:
1137
diff
changeset
|
237 jid_data = trust_data.setdefault(other_jid.full(), {}) |
7fcafc3206b1
plugin OTR: authentication management + fixed a bug in setState (due to a wrong docstring in potr.context.getCurrentTrust)
Goffi <goffi@goffi.org>
parents:
1137
diff
changeset
|
238 jid_data[fingerprint] = trustLevel |
7fcafc3206b1
plugin OTR: authentication management + fixed a bug in setState (due to a wrong docstring in potr.context.getCurrentTrust)
Goffi <goffi@goffi.org>
parents:
1137
diff
changeset
|
239 super(Account, self).setTrust(other_jid, fingerprint, trustLevel) |
7fcafc3206b1
plugin OTR: authentication management + fixed a bug in setState (due to a wrong docstring in potr.context.getCurrentTrust)
Goffi <goffi@goffi.org>
parents:
1137
diff
changeset
|
240 |
1055 | 241 |
242 class ContextManager(object): | |
243 def __init__(self, host, client): | |
244 self.host = host | |
1095 | 245 self.account = Account(host, client) |
1055 | 246 self.contexts = {} |
247 | |
1095 | 248 def startContext(self, other_jid): |
249 assert isinstance(other_jid, jid.JID) | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
250 context = self.contexts.setdefault( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
251 other_jid, Context(self.host, self.account, other_jid) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
252 ) |
1095 | 253 return context |
1055 | 254 |
255 def getContextForUser(self, other): | |
1095 | 256 log.debug(u"getContextForUser [%s]" % other) |
1135
3158f9e08760
plugin OTR: a warning is logged when Account is instancied with a bare jid.
Goffi <goffi@goffi.org>
parents:
1134
diff
changeset
|
257 if not other.resource: |
1409
3265a2639182
massive (preventive) addition of 'u' (unicode) before the strings passed to logging functions
souliane <souliane@mailoo.org>
parents:
1396
diff
changeset
|
258 log.warning(u"getContextForUser called with a bare jid: %s" % other.full()) |
1055 | 259 return self.startContext(other) |
260 | |
261 | |
262 class OTR(object): | |
2659
c26492bd2144
plugin OTR: use new "directed" attribute when registering + use new markAsEncrypted
Goffi <goffi@goffi.org>
parents:
2657
diff
changeset
|
263 |
1055 | 264 def __init__(self, host): |
1095 | 265 log.info(_(u"OTR plugin initialization")) |
1055 | 266 self.host = host |
267 self.context_managers = {} | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
268 self.skipped_profiles = ( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
269 set() |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
270 ) # FIXME: OTR should not be skipped per profile, this need to be refactored |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
271 self._p_hints = host.plugins[u"XEP-0334"] |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
272 self._p_carbons = host.plugins[u"XEP-0280"] |
1055 | 273 host.trigger.add("MessageReceived", self.MessageReceivedTrigger, priority=100000) |
2144
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2138
diff
changeset
|
274 host.trigger.add("sendMessage", self.sendMessageTrigger, priority=100000) |
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2138
diff
changeset
|
275 host.trigger.add("sendMessageData", self._sendMessageDataTrigger) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
276 host.bridge.addMethod( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
277 "skipOTR", ".plugin", in_sign="s", out_sign="", method=self._skipOTR |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
278 ) # FIXME: must be removed, must be done on per-message basis |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
279 host.bridge.addSignal( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
280 "otrState", ".plugin", signature="sss" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
281 ) # args: state, destinee_jid, profile |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
282 host.importMenu( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
283 (OTR_MENU, D_(u"Start/Refresh")), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
284 self._otrStartRefresh, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
285 security_limit=0, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
286 help_string=D_(u"Start or refresh an OTR session"), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
287 type_=C.MENU_SINGLE, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
288 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
289 host.importMenu( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
290 (OTR_MENU, D_(u"End session")), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
291 self._otrSessionEnd, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
292 security_limit=0, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
293 help_string=D_(u"Finish an OTR session"), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
294 type_=C.MENU_SINGLE, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
295 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
296 host.importMenu( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
297 (OTR_MENU, D_(u"Authenticate")), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
298 self._otrAuthenticate, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
299 security_limit=0, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
300 help_string=D_(u"Authenticate user/see your fingerprint"), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
301 type_=C.MENU_SINGLE, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
302 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
303 host.importMenu( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
304 (OTR_MENU, D_(u"Drop private key")), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
305 self._dropPrivKey, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
306 security_limit=0, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
307 type_=C.MENU_SINGLE, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
308 ) |
1480
8d61160ee4b8
core, plugin watched: new plugin, show an alert when a watched entity goes online
Goffi <goffi@goffi.org>
parents:
1463
diff
changeset
|
309 host.trigger.add("presenceReceived", self._presenceReceivedTrigger) |
2659
c26492bd2144
plugin OTR: use new "directed" attribute when registering + use new markAsEncrypted
Goffi <goffi@goffi.org>
parents:
2657
diff
changeset
|
310 self.host.registerEncryptionPlugin(self, u"OTR", NS_OTR, directed=True) |
1055 | 311 |
1149
652cd93dfdb4
plugin OTR: add bridge method skipOTR to desactivate OTR handling for a given profile
souliane <souliane@mailoo.org>
parents:
1147
diff
changeset
|
312 def _skipOTR(self, profile): |
652cd93dfdb4
plugin OTR: add bridge method skipOTR to desactivate OTR handling for a given profile
souliane <souliane@mailoo.org>
parents:
1147
diff
changeset
|
313 """Tell the backend to not handle OTR for this profile. |
652cd93dfdb4
plugin OTR: add bridge method skipOTR to desactivate OTR handling for a given profile
souliane <souliane@mailoo.org>
parents:
1147
diff
changeset
|
314 |
652cd93dfdb4
plugin OTR: add bridge method skipOTR to desactivate OTR handling for a given profile
souliane <souliane@mailoo.org>
parents:
1147
diff
changeset
|
315 @param profile (str): %(doc_profile)s |
652cd93dfdb4
plugin OTR: add bridge method skipOTR to desactivate OTR handling for a given profile
souliane <souliane@mailoo.org>
parents:
1147
diff
changeset
|
316 """ |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
317 # FIXME: should not be done per profile but per message, using extra data |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
318 # for message received, profile wide hook may be need, but client |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
319 # should be used anyway instead of a class attribute |
1149
652cd93dfdb4
plugin OTR: add bridge method skipOTR to desactivate OTR handling for a given profile
souliane <souliane@mailoo.org>
parents:
1147
diff
changeset
|
320 self.skipped_profiles.add(profile) |
652cd93dfdb4
plugin OTR: add bridge method skipOTR to desactivate OTR handling for a given profile
souliane <souliane@mailoo.org>
parents:
1147
diff
changeset
|
321 |
1095 | 322 @defer.inlineCallbacks |
2144
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2138
diff
changeset
|
323 def profileConnected(self, client): |
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2138
diff
changeset
|
324 if client.profile in self.skipped_profiles: |
1149
652cd93dfdb4
plugin OTR: add bridge method skipOTR to desactivate OTR handling for a given profile
souliane <souliane@mailoo.org>
parents:
1147
diff
changeset
|
325 return |
2128 | 326 ctxMng = client._otr_context_manager = ContextManager(self.host, client) |
2144
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2138
diff
changeset
|
327 client._otr_data = persistent.PersistentBinaryDict(NS_OTR, client.profile) |
2128 | 328 yield client._otr_data.load() |
329 encrypted_priv_key = client._otr_data.get(PRIVATE_KEY, None) | |
1095 | 330 if encrypted_priv_key is not None: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
331 priv_key = yield self.host.memory.decryptValue( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
332 encrypted_priv_key, client.profile |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
333 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
334 ctxMng.account.privkey = potr.crypt.PK.parsePrivateKey( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
335 priv_key.decode("hex") |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
336 )[0] |
1095 | 337 else: |
1146
1ac5ea74dbdf
plugin OTR: remove unnecessary attribute SatXMPPClient.otr_priv_key
souliane <souliane@mailoo.org>
parents:
1144
diff
changeset
|
338 ctxMng.account.privkey = None |
1141
7fcafc3206b1
plugin OTR: authentication management + fixed a bug in setState (due to a wrong docstring in potr.context.getCurrentTrust)
Goffi <goffi@goffi.org>
parents:
1137
diff
changeset
|
339 ctxMng.account.loadTrusts() |
1055 | 340 |
2144
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2138
diff
changeset
|
341 def profileDisconnected(self, client): |
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2138
diff
changeset
|
342 if client.profile in self.skipped_profiles: |
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2138
diff
changeset
|
343 self.skipped_profiles.remove(client.profile) |
2128 | 344 return |
345 for context in client._otr_context_manager.contexts.values(): | |
346 context.disconnect() | |
347 del client._otr_context_manager | |
1149
652cd93dfdb4
plugin OTR: add bridge method skipOTR to desactivate OTR handling for a given profile
souliane <souliane@mailoo.org>
parents:
1147
diff
changeset
|
348 |
2125 | 349 def _otrStartRefresh(self, menu_data, profile): |
1136
ea2bbdf5b541
plugin OTR: added start/refresh and end session menus
Goffi <goffi@goffi.org>
parents:
1135
diff
changeset
|
350 """Start or refresh an OTR session |
ea2bbdf5b541
plugin OTR: added start/refresh and end session menus
Goffi <goffi@goffi.org>
parents:
1135
diff
changeset
|
351 |
ea2bbdf5b541
plugin OTR: added start/refresh and end session menus
Goffi <goffi@goffi.org>
parents:
1135
diff
changeset
|
352 @param menu_data: %(menu_data)s |
ea2bbdf5b541
plugin OTR: added start/refresh and end session menus
Goffi <goffi@goffi.org>
parents:
1135
diff
changeset
|
353 @param profile: %(doc_profile)s |
ea2bbdf5b541
plugin OTR: added start/refresh and end session menus
Goffi <goffi@goffi.org>
parents:
1135
diff
changeset
|
354 """ |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
355 client = self.host.getClient(profile) |
1136
ea2bbdf5b541
plugin OTR: added start/refresh and end session menus
Goffi <goffi@goffi.org>
parents:
1135
diff
changeset
|
356 try: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
357 to_jid = jid.JID(menu_data["jid"]) |
1136
ea2bbdf5b541
plugin OTR: added start/refresh and end session menus
Goffi <goffi@goffi.org>
parents:
1135
diff
changeset
|
358 except KeyError: |
2125 | 359 log.error(_(u"jid key is not present !")) |
1136
ea2bbdf5b541
plugin OTR: added start/refresh and end session menus
Goffi <goffi@goffi.org>
parents:
1135
diff
changeset
|
360 return defer.fail(exceptions.DataError) |
2125 | 361 self.startRefresh(client, to_jid) |
1136
ea2bbdf5b541
plugin OTR: added start/refresh and end session menus
Goffi <goffi@goffi.org>
parents:
1135
diff
changeset
|
362 return {} |
ea2bbdf5b541
plugin OTR: added start/refresh and end session menus
Goffi <goffi@goffi.org>
parents:
1135
diff
changeset
|
363 |
2125 | 364 def startRefresh(self, client, to_jid): |
365 """Start or refresh an OTR session | |
366 | |
367 @param to_jid(jid.JID): jid to start encrypted session with | |
368 """ | |
2653
7213caa5c5d0
plugin OTR: integrated in new encryption handler + fixed use of bare jid where full jid was expected
Goffi <goffi@goffi.org>
parents:
2643
diff
changeset
|
369 encrypted_session = client.encryption.getSession(to_jid.userhostJID()) |
7213caa5c5d0
plugin OTR: integrated in new encryption handler + fixed use of bare jid where full jid was expected
Goffi <goffi@goffi.org>
parents:
2643
diff
changeset
|
370 if encrypted_session and encrypted_session[u'plugin'].namespace != NS_OTR: |
7213caa5c5d0
plugin OTR: integrated in new encryption handler + fixed use of bare jid where full jid was expected
Goffi <goffi@goffi.org>
parents:
2643
diff
changeset
|
371 raise exceptions.ConflictError(_( |
7213caa5c5d0
plugin OTR: integrated in new encryption handler + fixed use of bare jid where full jid was expected
Goffi <goffi@goffi.org>
parents:
2643
diff
changeset
|
372 u"Can't start an OTR session, there is already an encrypted session " |
7213caa5c5d0
plugin OTR: integrated in new encryption handler + fixed use of bare jid where full jid was expected
Goffi <goffi@goffi.org>
parents:
2643
diff
changeset
|
373 u"with {name}").format(name=encrypted_session[u'plugin'].name)) |
2125 | 374 if not to_jid.resource: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
375 to_jid.resource = self.host.memory.getMainResource( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
376 client, to_jid |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
377 ) # FIXME: temporary and unsecure, must be changed when frontends |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
378 # are refactored |
2128 | 379 otrctx = client._otr_context_manager.getContextForUser(to_jid) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
380 query = otrctx.sendMessage(0, "?OTRv?") |
2125 | 381 otrctx.inject(query) |
382 | |
383 def _otrSessionEnd(self, menu_data, profile): | |
1136
ea2bbdf5b541
plugin OTR: added start/refresh and end session menus
Goffi <goffi@goffi.org>
parents:
1135
diff
changeset
|
384 """End an OTR session |
ea2bbdf5b541
plugin OTR: added start/refresh and end session menus
Goffi <goffi@goffi.org>
parents:
1135
diff
changeset
|
385 |
ea2bbdf5b541
plugin OTR: added start/refresh and end session menus
Goffi <goffi@goffi.org>
parents:
1135
diff
changeset
|
386 @param menu_data: %(menu_data)s |
ea2bbdf5b541
plugin OTR: added start/refresh and end session menus
Goffi <goffi@goffi.org>
parents:
1135
diff
changeset
|
387 @param profile: %(doc_profile)s |
ea2bbdf5b541
plugin OTR: added start/refresh and end session menus
Goffi <goffi@goffi.org>
parents:
1135
diff
changeset
|
388 """ |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
389 client = self.host.getClient(profile) |
1136
ea2bbdf5b541
plugin OTR: added start/refresh and end session menus
Goffi <goffi@goffi.org>
parents:
1135
diff
changeset
|
390 try: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
391 to_jid = jid.JID(menu_data["jid"]) |
1136
ea2bbdf5b541
plugin OTR: added start/refresh and end session menus
Goffi <goffi@goffi.org>
parents:
1135
diff
changeset
|
392 except KeyError: |
2125 | 393 log.error(_(u"jid key is not present !")) |
1136
ea2bbdf5b541
plugin OTR: added start/refresh and end session menus
Goffi <goffi@goffi.org>
parents:
1135
diff
changeset
|
394 return defer.fail(exceptions.DataError) |
2125 | 395 self.endSession(client, to_jid) |
396 return {} | |
397 | |
398 def endSession(self, client, to_jid): | |
399 """End an OTR session""" | |
400 if not to_jid.resource: | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
401 to_jid.resource = self.host.memory.getMainResource( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
402 client, to_jid |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
403 ) # FIXME: temporary and unsecure, must be changed when frontends |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
404 # are refactored |
2128 | 405 otrctx = client._otr_context_manager.getContextForUser(to_jid) |
1136
ea2bbdf5b541
plugin OTR: added start/refresh and end session menus
Goffi <goffi@goffi.org>
parents:
1135
diff
changeset
|
406 otrctx.disconnect() |
ea2bbdf5b541
plugin OTR: added start/refresh and end session menus
Goffi <goffi@goffi.org>
parents:
1135
diff
changeset
|
407 return {} |
ea2bbdf5b541
plugin OTR: added start/refresh and end session menus
Goffi <goffi@goffi.org>
parents:
1135
diff
changeset
|
408 |
2125 | 409 def _otrAuthenticate(self, menu_data, profile): |
410 """End an OTR session | |
1141
7fcafc3206b1
plugin OTR: authentication management + fixed a bug in setState (due to a wrong docstring in potr.context.getCurrentTrust)
Goffi <goffi@goffi.org>
parents:
1137
diff
changeset
|
411 |
7fcafc3206b1
plugin OTR: authentication management + fixed a bug in setState (due to a wrong docstring in potr.context.getCurrentTrust)
Goffi <goffi@goffi.org>
parents:
1137
diff
changeset
|
412 @param menu_data: %(menu_data)s |
7fcafc3206b1
plugin OTR: authentication management + fixed a bug in setState (due to a wrong docstring in potr.context.getCurrentTrust)
Goffi <goffi@goffi.org>
parents:
1137
diff
changeset
|
413 @param profile: %(doc_profile)s |
7fcafc3206b1
plugin OTR: authentication management + fixed a bug in setState (due to a wrong docstring in potr.context.getCurrentTrust)
Goffi <goffi@goffi.org>
parents:
1137
diff
changeset
|
414 """ |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
415 client = self.host.getClient(profile) |
1141
7fcafc3206b1
plugin OTR: authentication management + fixed a bug in setState (due to a wrong docstring in potr.context.getCurrentTrust)
Goffi <goffi@goffi.org>
parents:
1137
diff
changeset
|
416 try: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
417 to_jid = jid.JID(menu_data["jid"]) |
1141
7fcafc3206b1
plugin OTR: authentication management + fixed a bug in setState (due to a wrong docstring in potr.context.getCurrentTrust)
Goffi <goffi@goffi.org>
parents:
1137
diff
changeset
|
418 except KeyError: |
2125 | 419 log.error(_(u"jid key is not present !")) |
1141
7fcafc3206b1
plugin OTR: authentication management + fixed a bug in setState (due to a wrong docstring in potr.context.getCurrentTrust)
Goffi <goffi@goffi.org>
parents:
1137
diff
changeset
|
420 return defer.fail(exceptions.DataError) |
2125 | 421 return self.authenticate(client, to_jid) |
422 | |
423 def authenticate(self, client, to_jid): | |
424 """Authenticate other user and see our own fingerprint""" | |
425 if not to_jid.resource: | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
426 to_jid.resource = self.host.memory.getMainResource( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
427 client, to_jid |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
428 ) # FIXME: temporary and unsecure, must be changed when frontends |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
429 # are refactored |
2128 | 430 ctxMng = client._otr_context_manager |
1146
1ac5ea74dbdf
plugin OTR: remove unnecessary attribute SatXMPPClient.otr_priv_key
souliane <souliane@mailoo.org>
parents:
1144
diff
changeset
|
431 otrctx = ctxMng.getContextForUser(to_jid) |
1ac5ea74dbdf
plugin OTR: remove unnecessary attribute SatXMPPClient.otr_priv_key
souliane <souliane@mailoo.org>
parents:
1144
diff
changeset
|
432 priv_key = ctxMng.account.privkey |
1141
7fcafc3206b1
plugin OTR: authentication management + fixed a bug in setState (due to a wrong docstring in potr.context.getCurrentTrust)
Goffi <goffi@goffi.org>
parents:
1137
diff
changeset
|
433 |
7fcafc3206b1
plugin OTR: authentication management + fixed a bug in setState (due to a wrong docstring in potr.context.getCurrentTrust)
Goffi <goffi@goffi.org>
parents:
1137
diff
changeset
|
434 if priv_key is None: |
7fcafc3206b1
plugin OTR: authentication management + fixed a bug in setState (due to a wrong docstring in potr.context.getCurrentTrust)
Goffi <goffi@goffi.org>
parents:
1137
diff
changeset
|
435 # we have no private key yet |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
436 dialog = xml_tools.XMLUI( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
437 C.XMLUI_DIALOG, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
438 dialog_opt={ |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
439 C.XMLUI_DATA_TYPE: C.XMLUI_DIALOG_MESSAGE, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
440 C.XMLUI_DATA_MESS: _( |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
441 u"You have no private key yet, start an OTR conversation to " |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
442 u"have one" |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
443 ), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
444 C.XMLUI_DATA_LVL: C.XMLUI_DATA_LVL_WARNING, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
445 }, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
446 title=_(u"No private key"), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
447 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
448 return {"xmlui": dialog.toXml()} |
1141
7fcafc3206b1
plugin OTR: authentication management + fixed a bug in setState (due to a wrong docstring in potr.context.getCurrentTrust)
Goffi <goffi@goffi.org>
parents:
1137
diff
changeset
|
449 |
7fcafc3206b1
plugin OTR: authentication management + fixed a bug in setState (due to a wrong docstring in potr.context.getCurrentTrust)
Goffi <goffi@goffi.org>
parents:
1137
diff
changeset
|
450 other_fingerprint = otrctx.getCurrentKey() |
7fcafc3206b1
plugin OTR: authentication management + fixed a bug in setState (due to a wrong docstring in potr.context.getCurrentTrust)
Goffi <goffi@goffi.org>
parents:
1137
diff
changeset
|
451 |
7fcafc3206b1
plugin OTR: authentication management + fixed a bug in setState (due to a wrong docstring in potr.context.getCurrentTrust)
Goffi <goffi@goffi.org>
parents:
1137
diff
changeset
|
452 if other_fingerprint is None: |
7fcafc3206b1
plugin OTR: authentication management + fixed a bug in setState (due to a wrong docstring in potr.context.getCurrentTrust)
Goffi <goffi@goffi.org>
parents:
1137
diff
changeset
|
453 # we have a private key, but not the fingerprint of our correspondent |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
454 dialog = xml_tools.XMLUI( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
455 C.XMLUI_DIALOG, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
456 dialog_opt={ |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
457 C.XMLUI_DATA_TYPE: C.XMLUI_DIALOG_MESSAGE, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
458 C.XMLUI_DATA_MESS: _( |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
459 u"Your fingerprint is:\n{fingerprint}\n\n" |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
460 u"Start an OTR conversation to have your correspondent one." |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
461 ).format(fingerprint=priv_key), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
462 C.XMLUI_DATA_LVL: C.XMLUI_DATA_LVL_INFO, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
463 }, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
464 title=_(u"Fingerprint"), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
465 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
466 return {"xmlui": dialog.toXml()} |
1141
7fcafc3206b1
plugin OTR: authentication management + fixed a bug in setState (due to a wrong docstring in potr.context.getCurrentTrust)
Goffi <goffi@goffi.org>
parents:
1137
diff
changeset
|
467 |
7fcafc3206b1
plugin OTR: authentication management + fixed a bug in setState (due to a wrong docstring in potr.context.getCurrentTrust)
Goffi <goffi@goffi.org>
parents:
1137
diff
changeset
|
468 def setTrust(raw_data, profile): |
7fcafc3206b1
plugin OTR: authentication management + fixed a bug in setState (due to a wrong docstring in potr.context.getCurrentTrust)
Goffi <goffi@goffi.org>
parents:
1137
diff
changeset
|
469 # This method is called when authentication form is submited |
7fcafc3206b1
plugin OTR: authentication management + fixed a bug in setState (due to a wrong docstring in potr.context.getCurrentTrust)
Goffi <goffi@goffi.org>
parents:
1137
diff
changeset
|
470 data = xml_tools.XMLUIResult2DataFormResult(raw_data) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
471 if data["match"] == "yes": |
2128 | 472 otrctx.setCurrentTrust(OTR_STATE_TRUSTED) |
2125 | 473 note_msg = _(u"Your correspondent {correspondent} is now TRUSTED") |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
474 self.host.bridge.otrState( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
475 OTR_STATE_TRUSTED, to_jid.full(), client.profile |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
476 ) |
1141
7fcafc3206b1
plugin OTR: authentication management + fixed a bug in setState (due to a wrong docstring in potr.context.getCurrentTrust)
Goffi <goffi@goffi.org>
parents:
1137
diff
changeset
|
477 else: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
478 otrctx.setCurrentTrust("") |
2125 | 479 note_msg = _(u"Your correspondent {correspondent} is now UNTRUSTED") |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
480 self.host.bridge.otrState( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
481 OTR_STATE_UNTRUSTED, to_jid.full(), client.profile |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
482 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
483 note = xml_tools.XMLUI( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
484 C.XMLUI_DIALOG, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
485 dialog_opt={ |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
486 C.XMLUI_DATA_TYPE: C.XMLUI_DIALOG_NOTE, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
487 C.XMLUI_DATA_MESS: note_msg.format(correspondent=otrctx.peer), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
488 }, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
489 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
490 return {"xmlui": note.toXml()} |
1141
7fcafc3206b1
plugin OTR: authentication management + fixed a bug in setState (due to a wrong docstring in potr.context.getCurrentTrust)
Goffi <goffi@goffi.org>
parents:
1137
diff
changeset
|
491 |
7fcafc3206b1
plugin OTR: authentication management + fixed a bug in setState (due to a wrong docstring in potr.context.getCurrentTrust)
Goffi <goffi@goffi.org>
parents:
1137
diff
changeset
|
492 submit_id = self.host.registerCallback(setTrust, with_data=True, one_shot=True) |
7fcafc3206b1
plugin OTR: authentication management + fixed a bug in setState (due to a wrong docstring in potr.context.getCurrentTrust)
Goffi <goffi@goffi.org>
parents:
1137
diff
changeset
|
493 trusted = bool(otrctx.getCurrentTrust()) |
7fcafc3206b1
plugin OTR: authentication management + fixed a bug in setState (due to a wrong docstring in potr.context.getCurrentTrust)
Goffi <goffi@goffi.org>
parents:
1137
diff
changeset
|
494 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
495 xmlui = xml_tools.XMLUI( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
496 C.XMLUI_FORM, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
497 title=_("Authentication (%s)") % to_jid.full(), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
498 submit_id=submit_id, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
499 ) |
1141
7fcafc3206b1
plugin OTR: authentication management + fixed a bug in setState (due to a wrong docstring in potr.context.getCurrentTrust)
Goffi <goffi@goffi.org>
parents:
1137
diff
changeset
|
500 xmlui.addText(_(AUTH_TXT)) |
7fcafc3206b1
plugin OTR: authentication management + fixed a bug in setState (due to a wrong docstring in potr.context.getCurrentTrust)
Goffi <goffi@goffi.org>
parents:
1137
diff
changeset
|
501 xmlui.addDivider() |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
502 xmlui.addText( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
503 D_(u"Your own fingerprint is:\n{fingerprint}").format(fingerprint=priv_key) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
504 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
505 xmlui.addText( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
506 D_(u"Your correspondent fingerprint should be:\n{fingerprint}").format( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
507 fingerprint=other_fingerprint |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
508 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
509 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
510 xmlui.addDivider("blank") |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
511 xmlui.changeContainer("pairs") |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
512 xmlui.addLabel(D_(u"Is your correspondent fingerprint the same as here ?")) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
513 xmlui.addList( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
514 "match", [("yes", _("yes")), ("no", _("no"))], ["yes" if trusted else "no"] |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
515 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
516 return {"xmlui": xmlui.toXml()} |
1141
7fcafc3206b1
plugin OTR: authentication management + fixed a bug in setState (due to a wrong docstring in potr.context.getCurrentTrust)
Goffi <goffi@goffi.org>
parents:
1137
diff
changeset
|
517 |
1144
2481fa96ac1c
plugin OTR: added ability to drop private key
Goffi <goffi@goffi.org>
parents:
1141
diff
changeset
|
518 def _dropPrivKey(self, menu_data, profile): |
2481fa96ac1c
plugin OTR: added ability to drop private key
Goffi <goffi@goffi.org>
parents:
1141
diff
changeset
|
519 """Drop our private Key |
2481fa96ac1c
plugin OTR: added ability to drop private key
Goffi <goffi@goffi.org>
parents:
1141
diff
changeset
|
520 |
2481fa96ac1c
plugin OTR: added ability to drop private key
Goffi <goffi@goffi.org>
parents:
1141
diff
changeset
|
521 @param menu_data: %(menu_data)s |
2481fa96ac1c
plugin OTR: added ability to drop private key
Goffi <goffi@goffi.org>
parents:
1141
diff
changeset
|
522 @param profile: %(doc_profile)s |
2481fa96ac1c
plugin OTR: added ability to drop private key
Goffi <goffi@goffi.org>
parents:
1141
diff
changeset
|
523 """ |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
524 client = self.host.getClient(profile) |
1144
2481fa96ac1c
plugin OTR: added ability to drop private key
Goffi <goffi@goffi.org>
parents:
1141
diff
changeset
|
525 try: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
526 to_jid = jid.JID(menu_data["jid"]) |
1144
2481fa96ac1c
plugin OTR: added ability to drop private key
Goffi <goffi@goffi.org>
parents:
1141
diff
changeset
|
527 if not to_jid.resource: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
528 to_jid.resource = self.host.memory.getMainResource( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
529 client, to_jid |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
530 ) # FIXME: temporary and unsecure, must be changed when frontends |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
531 # are refactored |
1144
2481fa96ac1c
plugin OTR: added ability to drop private key
Goffi <goffi@goffi.org>
parents:
1141
diff
changeset
|
532 except KeyError: |
2125 | 533 log.error(_(u"jid key is not present !")) |
1144
2481fa96ac1c
plugin OTR: added ability to drop private key
Goffi <goffi@goffi.org>
parents:
1141
diff
changeset
|
534 return defer.fail(exceptions.DataError) |
2481fa96ac1c
plugin OTR: added ability to drop private key
Goffi <goffi@goffi.org>
parents:
1141
diff
changeset
|
535 |
2128 | 536 ctxMng = client._otr_context_manager |
1146
1ac5ea74dbdf
plugin OTR: remove unnecessary attribute SatXMPPClient.otr_priv_key
souliane <souliane@mailoo.org>
parents:
1144
diff
changeset
|
537 if ctxMng.account.privkey is None: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
538 return { |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
539 "xmlui": xml_tools.note(_(u"You don't have a private key yet !")).toXml() |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
540 } |
1144
2481fa96ac1c
plugin OTR: added ability to drop private key
Goffi <goffi@goffi.org>
parents:
1141
diff
changeset
|
541 |
2481fa96ac1c
plugin OTR: added ability to drop private key
Goffi <goffi@goffi.org>
parents:
1141
diff
changeset
|
542 def dropKey(data, profile): |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
543 if C.bool(data["answer"]): |
1144
2481fa96ac1c
plugin OTR: added ability to drop private key
Goffi <goffi@goffi.org>
parents:
1141
diff
changeset
|
544 # we end all sessions |
2481fa96ac1c
plugin OTR: added ability to drop private key
Goffi <goffi@goffi.org>
parents:
1141
diff
changeset
|
545 for context in ctxMng.contexts.values(): |
1169
a3354063dfb6
plugin OTR: disconnect the active OTR sessions and delete the context on profile disconnection
souliane <souliane@mailoo.org>
parents:
1168
diff
changeset
|
546 context.disconnect() |
1147
736f1dd6e142
plugin OTR: two small fixes
souliane <souliane@mailoo.org>
parents:
1146
diff
changeset
|
547 ctxMng.account.privkey = None |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
548 ctxMng.account.getPrivkey() # as account.privkey is None, getPrivkey |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
549 # will generate a new key, and save it |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
550 return { |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
551 "xmlui": xml_tools.note( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
552 D_(u"Your private key has been dropped") |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
553 ).toXml() |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
554 } |
1144
2481fa96ac1c
plugin OTR: added ability to drop private key
Goffi <goffi@goffi.org>
parents:
1141
diff
changeset
|
555 return {} |
2481fa96ac1c
plugin OTR: added ability to drop private key
Goffi <goffi@goffi.org>
parents:
1141
diff
changeset
|
556 |
2481fa96ac1c
plugin OTR: added ability to drop private key
Goffi <goffi@goffi.org>
parents:
1141
diff
changeset
|
557 submit_id = self.host.registerCallback(dropKey, with_data=True, one_shot=True) |
2481fa96ac1c
plugin OTR: added ability to drop private key
Goffi <goffi@goffi.org>
parents:
1141
diff
changeset
|
558 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
559 confirm = xml_tools.XMLUI( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
560 C.XMLUI_DIALOG, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
561 title=_(u"Confirm private key drop"), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
562 dialog_opt={"type": C.XMLUI_DIALOG_CONFIRM, "message": _(DROP_TXT)}, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
563 submit_id=submit_id, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
564 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
565 return {"xmlui": confirm.toXml()} |
1144
2481fa96ac1c
plugin OTR: added ability to drop private key
Goffi <goffi@goffi.org>
parents:
1141
diff
changeset
|
566 |
2128 | 567 def _receivedTreatment(self, data, client): |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
568 from_jid = data["from"] |
1095 | 569 log.debug(u"_receivedTreatment [from_jid = %s]" % from_jid) |
2128 | 570 otrctx = client._otr_context_manager.getContextForUser(from_jid) |
1055 | 571 |
572 try: | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
573 message = ( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
574 data["message"].itervalues().next() |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
575 ) # FIXME: Q&D fix for message refactoring, message is now a dict |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
576 res = otrctx.receiveMessage(message.encode("utf-8")) |
1055 | 577 except potr.context.UnencryptedMessage: |
2128 | 578 encrypted = False |
1095 | 579 if otrctx.state == potr.context.STATE_ENCRYPTED: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
580 log.warning( |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
581 u"Received unencrypted message in an encrypted context (from {jid})" |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
582 .format(jid=from_jid.full()) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
583 ) |
2125 | 584 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
585 feedback = ( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
586 D_( |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
587 u"WARNING: received unencrypted data in a supposedly encrypted " |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
588 u"context" |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
589 ), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
590 ) |
2144
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2138
diff
changeset
|
591 client.feedback(from_jid, feedback) |
2653
7213caa5c5d0
plugin OTR: integrated in new encryption handler + fixed use of bare jid where full jid was expected
Goffi <goffi@goffi.org>
parents:
2643
diff
changeset
|
592 except potr.context.NotEncryptedError: |
7213caa5c5d0
plugin OTR: integrated in new encryption handler + fixed use of bare jid where full jid was expected
Goffi <goffi@goffi.org>
parents:
2643
diff
changeset
|
593 msg = D_(u"WARNING: received OTR encrypted data in an unencrypted context") |
7213caa5c5d0
plugin OTR: integrated in new encryption handler + fixed use of bare jid where full jid was expected
Goffi <goffi@goffi.org>
parents:
2643
diff
changeset
|
594 log.warning(msg) |
7213caa5c5d0
plugin OTR: integrated in new encryption handler + fixed use of bare jid where full jid was expected
Goffi <goffi@goffi.org>
parents:
2643
diff
changeset
|
595 feedback = msg |
7213caa5c5d0
plugin OTR: integrated in new encryption handler + fixed use of bare jid where full jid was expected
Goffi <goffi@goffi.org>
parents:
2643
diff
changeset
|
596 client.feedback(from_jid, msg) |
7213caa5c5d0
plugin OTR: integrated in new encryption handler + fixed use of bare jid where full jid was expected
Goffi <goffi@goffi.org>
parents:
2643
diff
changeset
|
597 raise failure.Failure(exceptions.CancelError(msg)) |
1955
633b5c21aefd
backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
598 except StopIteration: |
633b5c21aefd
backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
599 return data |
2128 | 600 else: |
601 encrypted = True | |
1055 | 602 |
2128 | 603 if encrypted: |
1055 | 604 if res[0] != None: |
605 # decrypted messages handling. | |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
606 # receiveMessage() will return a tuple, |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
607 # the first part of which will be the decrypted message |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
608 data["message"] = { |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
609 "": res[0].decode("utf-8") |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
610 } # FIXME: Q&D fix for message refactoring, message is now a dict |
2132
c0577837680a
core: replaced SkipHistory exception by a key in mess_data:
Goffi <goffi@goffi.org>
parents:
2129
diff
changeset
|
611 try: |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
612 # we want to keep message in history, even if no store is |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
613 # requested in message hints |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
614 del data[u"history"] |
2132
c0577837680a
core: replaced SkipHistory exception by a key in mess_data:
Goffi <goffi@goffi.org>
parents:
2129
diff
changeset
|
615 except KeyError: |
c0577837680a
core: replaced SkipHistory exception by a key in mess_data:
Goffi <goffi@goffi.org>
parents:
2129
diff
changeset
|
616 pass |
2128 | 617 # TODO: add skip history as an option, but by default we don't skip it |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
618 # data[u'history'] = C.HISTORY_SKIP # we send the decrypted message to |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
619 # frontends, but we don't want it in |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
620 # history |
1055 | 621 else: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
622 raise failure.Failure( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
623 exceptions.CancelError("Cancelled by OTR") |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
624 ) # no message at all (no history, no signal) |
2659
c26492bd2144
plugin OTR: use new "directed" attribute when registering + use new markAsEncrypted
Goffi <goffi@goffi.org>
parents:
2657
diff
changeset
|
625 client.encryption.markAsEncrypted(data) |
2128 | 626 return data |
1055 | 627 |
2128 | 628 def _receivedTreatmentForSkippedProfiles(self, data): |
1174
bc811915a96a
plugin OTR: do not save in history the encrypted messages for skipped profiles
souliane <souliane@mailoo.org>
parents:
1171
diff
changeset
|
629 """This profile must be skipped because the frontend manages OTR itself, |
2128 | 630 |
631 but we still need to check if the message must be stored in history or not | |
632 """ | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
633 # XXX: FIXME: this should not be done on a per-profile basis, but per-message |
1955
633b5c21aefd
backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
634 try: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
635 message = ( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
636 data["message"].itervalues().next().encode("utf-8") |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
637 ) # FIXME: Q&D fix for message refactoring, message is now a dict |
1955
633b5c21aefd
backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
638 except StopIteration: |
633b5c21aefd
backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
639 return data |
633b5c21aefd
backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
640 if message.startswith(potr.proto.OTRTAG): |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
641 # FIXME: it may be better to cancel the message and send it direclty to |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
642 # bridge |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
643 # this is used by Libervia, but this may send garbage message to |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
644 # other frontends |
2132
c0577837680a
core: replaced SkipHistory exception by a key in mess_data:
Goffi <goffi@goffi.org>
parents:
2129
diff
changeset
|
645 # if they are used at the same time as Libervia. |
c0577837680a
core: replaced SkipHistory exception by a key in mess_data:
Goffi <goffi@goffi.org>
parents:
2129
diff
changeset
|
646 # Hard to avoid with decryption on Libervia though. |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
647 data[u"history"] = C.HISTORY_SKIP |
1174
bc811915a96a
plugin OTR: do not save in history the encrypted messages for skipped profiles
souliane <souliane@mailoo.org>
parents:
1171
diff
changeset
|
648 return data |
bc811915a96a
plugin OTR: do not save in history the encrypted messages for skipped profiles
souliane <souliane@mailoo.org>
parents:
1171
diff
changeset
|
649 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
650 def MessageReceivedTrigger(self, client, message_elt, post_treat): |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
651 if message_elt.getAttribute("type") == C.MESS_TYPE_GROUPCHAT: |
2128 | 652 # OTR is not possible in group chats |
653 return True | |
654 if client.profile in self.skipped_profiles: | |
655 post_treat.addCallback(self._receivedTreatmentForSkippedProfiles) | |
1174
bc811915a96a
plugin OTR: do not save in history the encrypted messages for skipped profiles
souliane <souliane@mailoo.org>
parents:
1171
diff
changeset
|
656 else: |
2128 | 657 post_treat.addCallback(self._receivedTreatment, client) |
1055 | 658 return True |
659 | |
2144
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2138
diff
changeset
|
660 def _sendMessageDataTrigger(self, client, mess_data): |
2653
7213caa5c5d0
plugin OTR: integrated in new encryption handler + fixed use of bare jid where full jid was expected
Goffi <goffi@goffi.org>
parents:
2643
diff
changeset
|
661 encryption = mess_data.get(C.MESS_KEY_ENCRYPTION) |
7213caa5c5d0
plugin OTR: integrated in new encryption handler + fixed use of bare jid where full jid was expected
Goffi <goffi@goffi.org>
parents:
2643
diff
changeset
|
662 if encryption is None or encryption['plugin'].namespace != NS_OTR: |
2138
6e509ee853a8
plugin OTR, core; use of new sendMessage + OTR mini refactoring:
Goffi <goffi@goffi.org>
parents:
2132
diff
changeset
|
663 return |
2653
7213caa5c5d0
plugin OTR: integrated in new encryption handler + fixed use of bare jid where full jid was expected
Goffi <goffi@goffi.org>
parents:
2643
diff
changeset
|
664 to_jid = mess_data['to'] |
7213caa5c5d0
plugin OTR: integrated in new encryption handler + fixed use of bare jid where full jid was expected
Goffi <goffi@goffi.org>
parents:
2643
diff
changeset
|
665 if not to_jid.resource: |
7213caa5c5d0
plugin OTR: integrated in new encryption handler + fixed use of bare jid where full jid was expected
Goffi <goffi@goffi.org>
parents:
2643
diff
changeset
|
666 to_jid.resource = self.host.memory.getMainResource( |
7213caa5c5d0
plugin OTR: integrated in new encryption handler + fixed use of bare jid where full jid was expected
Goffi <goffi@goffi.org>
parents:
2643
diff
changeset
|
667 client, to_jid |
7213caa5c5d0
plugin OTR: integrated in new encryption handler + fixed use of bare jid where full jid was expected
Goffi <goffi@goffi.org>
parents:
2643
diff
changeset
|
668 ) # FIXME: temporary and unsecure, must be changed when frontends |
7213caa5c5d0
plugin OTR: integrated in new encryption handler + fixed use of bare jid where full jid was expected
Goffi <goffi@goffi.org>
parents:
2643
diff
changeset
|
669 otrctx = client._otr_context_manager.getContextForUser(to_jid) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
670 message_elt = mess_data["xml"] |
2138
6e509ee853a8
plugin OTR, core; use of new sendMessage + OTR mini refactoring:
Goffi <goffi@goffi.org>
parents:
2132
diff
changeset
|
671 if otrctx.state == potr.context.STATE_ENCRYPTED: |
6e509ee853a8
plugin OTR, core; use of new sendMessage + OTR mini refactoring:
Goffi <goffi@goffi.org>
parents:
2132
diff
changeset
|
672 log.debug(u"encrypting message") |
6e509ee853a8
plugin OTR, core; use of new sendMessage + OTR mini refactoring:
Goffi <goffi@goffi.org>
parents:
2132
diff
changeset
|
673 body = None |
6e509ee853a8
plugin OTR, core; use of new sendMessage + OTR mini refactoring:
Goffi <goffi@goffi.org>
parents:
2132
diff
changeset
|
674 for child in list(message_elt.children): |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
675 if child.name == "body": |
2138
6e509ee853a8
plugin OTR, core; use of new sendMessage + OTR mini refactoring:
Goffi <goffi@goffi.org>
parents:
2132
diff
changeset
|
676 # we remove all unencrypted body, |
6e509ee853a8
plugin OTR, core; use of new sendMessage + OTR mini refactoring:
Goffi <goffi@goffi.org>
parents:
2132
diff
changeset
|
677 # and will only encrypt the first one |
6e509ee853a8
plugin OTR, core; use of new sendMessage + OTR mini refactoring:
Goffi <goffi@goffi.org>
parents:
2132
diff
changeset
|
678 if body is None: |
6e509ee853a8
plugin OTR, core; use of new sendMessage + OTR mini refactoring:
Goffi <goffi@goffi.org>
parents:
2132
diff
changeset
|
679 body = child |
6e509ee853a8
plugin OTR, core; use of new sendMessage + OTR mini refactoring:
Goffi <goffi@goffi.org>
parents:
2132
diff
changeset
|
680 message_elt.children.remove(child) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
681 elif child.name == "html": |
2138
6e509ee853a8
plugin OTR, core; use of new sendMessage + OTR mini refactoring:
Goffi <goffi@goffi.org>
parents:
2132
diff
changeset
|
682 # we don't want any XHTML-IM element |
6e509ee853a8
plugin OTR, core; use of new sendMessage + OTR mini refactoring:
Goffi <goffi@goffi.org>
parents:
2132
diff
changeset
|
683 message_elt.children.remove(child) |
6e509ee853a8
plugin OTR, core; use of new sendMessage + OTR mini refactoring:
Goffi <goffi@goffi.org>
parents:
2132
diff
changeset
|
684 if body is None: |
6e509ee853a8
plugin OTR, core; use of new sendMessage + OTR mini refactoring:
Goffi <goffi@goffi.org>
parents:
2132
diff
changeset
|
685 log.warning(u"No message found") |
1168
39572f9d5249
plugin OTR: fixes handling of the FINISHED state
souliane <souliane@mailoo.org>
parents:
1149
diff
changeset
|
686 else: |
2138
6e509ee853a8
plugin OTR, core; use of new sendMessage + OTR mini refactoring:
Goffi <goffi@goffi.org>
parents:
2132
diff
changeset
|
687 self._p_carbons.setPrivate(message_elt) |
2653
7213caa5c5d0
plugin OTR: integrated in new encryption handler + fixed use of bare jid where full jid was expected
Goffi <goffi@goffi.org>
parents:
2643
diff
changeset
|
688 self._p_hints.addHintElements(message_elt, [ |
7213caa5c5d0
plugin OTR: integrated in new encryption handler + fixed use of bare jid where full jid was expected
Goffi <goffi@goffi.org>
parents:
2643
diff
changeset
|
689 self._p_hints.HINT_NO_COPY, |
7213caa5c5d0
plugin OTR: integrated in new encryption handler + fixed use of bare jid where full jid was expected
Goffi <goffi@goffi.org>
parents:
2643
diff
changeset
|
690 self._p_hints.HINT_NO_PERMANENT_STORE]) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
691 otrctx.sendMessage(0, unicode(body).encode("utf-8"), appdata=mess_data) |
1055 | 692 else: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
693 feedback = D_( |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
694 u"Your message was not sent because your correspondent closed the " |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
695 u"encrypted conversation on his/her side. " |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
696 u"Either close your own side, or refresh the session." |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
697 ) |
2144
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2138
diff
changeset
|
698 log.warning(_(u"Message discarded because closed encryption channel")) |
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2138
diff
changeset
|
699 client.feedback(to_jid, feedback) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
700 raise failure.Failure(exceptions.CancelError(u"Cancelled by OTR plugin")) |
2128 | 701 |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
702 def sendMessageTrigger(self, client, mess_data, pre_xml_treatments, |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
703 post_xml_treatments): |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
704 if mess_data["type"] == "groupchat": |
1055 | 705 return True |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
706 |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
707 if client.profile in self.skipped_profiles: |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
708 # FIXME: should not be done on a per-profile basis |
2128 | 709 return True |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
710 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
711 to_jid = copy.copy(mess_data["to"]) |
2653
7213caa5c5d0
plugin OTR: integrated in new encryption handler + fixed use of bare jid where full jid was expected
Goffi <goffi@goffi.org>
parents:
2643
diff
changeset
|
712 if client.encryption.getSession(to_jid.userhostJID()): |
7213caa5c5d0
plugin OTR: integrated in new encryption handler + fixed use of bare jid where full jid was expected
Goffi <goffi@goffi.org>
parents:
2643
diff
changeset
|
713 # there is already an encrypted session with this entity |
7213caa5c5d0
plugin OTR: integrated in new encryption handler + fixed use of bare jid where full jid was expected
Goffi <goffi@goffi.org>
parents:
2643
diff
changeset
|
714 return True |
7213caa5c5d0
plugin OTR: integrated in new encryption handler + fixed use of bare jid where full jid was expected
Goffi <goffi@goffi.org>
parents:
2643
diff
changeset
|
715 |
2138
6e509ee853a8
plugin OTR, core; use of new sendMessage + OTR mini refactoring:
Goffi <goffi@goffi.org>
parents:
2132
diff
changeset
|
716 if not to_jid.resource: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
717 to_jid.resource = self.host.memory.getMainResource( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
718 client, to_jid |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
719 ) # FIXME: full jid may not be known |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
720 |
2138
6e509ee853a8
plugin OTR, core; use of new sendMessage + OTR mini refactoring:
Goffi <goffi@goffi.org>
parents:
2132
diff
changeset
|
721 otrctx = client._otr_context_manager.getContextForUser(to_jid) |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
722 |
2138
6e509ee853a8
plugin OTR, core; use of new sendMessage + OTR mini refactoring:
Goffi <goffi@goffi.org>
parents:
2132
diff
changeset
|
723 if otrctx.state != potr.context.STATE_PLAINTEXT: |
2653
7213caa5c5d0
plugin OTR: integrated in new encryption handler + fixed use of bare jid where full jid was expected
Goffi <goffi@goffi.org>
parents:
2643
diff
changeset
|
724 client.encryption.start(to_jid, NS_OTR) |
7213caa5c5d0
plugin OTR: integrated in new encryption handler + fixed use of bare jid where full jid was expected
Goffi <goffi@goffi.org>
parents:
2643
diff
changeset
|
725 client.encryption.setEncryptionFlag(mess_data) |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
726 if not mess_data["to"].resource: |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
727 # if not resource was given, we force it here |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
728 mess_data["to"] = to_jid |
2128 | 729 return True |
1055 | 730 |
1480
8d61160ee4b8
core, plugin watched: new plugin, show an alert when a watched entity goes online
Goffi <goffi@goffi.org>
parents:
1463
diff
changeset
|
731 def _presenceReceivedTrigger(self, entity, show, priority, statuses, profile): |
8d61160ee4b8
core, plugin watched: new plugin, show an alert when a watched entity goes online
Goffi <goffi@goffi.org>
parents:
1463
diff
changeset
|
732 if show != C.PRESENCE_UNAVAILABLE: |
1249
3be9d8ab2e15
plugin sec_otr: a trigger was not returning True
souliane <souliane@mailoo.org>
parents:
1246
diff
changeset
|
733 return True |
2128 | 734 client = self.host.getClient(profile) |
1170
2df6427a5299
plugin OTR: forces FINISHED state if we are in ENCRYPTED state on contact disconnection
souliane <souliane@mailoo.org>
parents:
1169
diff
changeset
|
735 if not entity.resource: |
1657
62cd8fc1aef7
plugin sec_otr: fixes bad handling of entity disconnection
souliane <souliane@mailoo.org>
parents:
1480
diff
changeset
|
736 try: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
737 entity.resource = self.host.memory.getMainResource( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
738 client, entity |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
739 ) # FIXME: temporary and unsecure, must be changed when frontends |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
740 # are refactored |
1657
62cd8fc1aef7
plugin sec_otr: fixes bad handling of entity disconnection
souliane <souliane@mailoo.org>
parents:
1480
diff
changeset
|
741 except exceptions.UnknownEntityError: |
62cd8fc1aef7
plugin sec_otr: fixes bad handling of entity disconnection
souliane <souliane@mailoo.org>
parents:
1480
diff
changeset
|
742 return True # entity was not connected |
2128 | 743 if entity in client._otr_context_manager.contexts: |
744 otrctx = client._otr_context_manager.getContextForUser(entity) | |
1657
62cd8fc1aef7
plugin sec_otr: fixes bad handling of entity disconnection
souliane <souliane@mailoo.org>
parents:
1480
diff
changeset
|
745 otrctx.disconnect() |
1170
2df6427a5299
plugin OTR: forces FINISHED state if we are in ENCRYPTED state on contact disconnection
souliane <souliane@mailoo.org>
parents:
1169
diff
changeset
|
746 return True |