Mercurial > libervia-backend
annotate sat/bridge/bridge_constructor/constructors/dbus/constructor.py @ 3237:b0c57c9a4bd8
plugin XEP-0384: OMEMO trust policy:
OMEMO trust policy can now be specified. For now there are 2 policies:
- `manual`: each new device fingerprint must be explicitly trusted or not before the
device can be used, and the message sent
- `BTBV` (Blind Trust Before Verification): each new device fingerprint is automically
trusted, until user manually trust or not a device, in which case the behaviour becomes
the same as for `manual` for the entity. When using the Trust UI, user can put the
entity back to blind trust if they wish.
A message is send as feedback to user when a new device is/must be trusted, trying to
explain clearly what's happening to the user.
Devices which have been automically trusted are marked, so user can know which ones may
cause security issue.
author | Goffi <goffi@goffi.org> |
---|---|
date | Fri, 27 Mar 2020 10:02:14 +0100 |
parents | 559a625a236b |
children | be6d91572633 |
rev | line source |
---|---|
3028 | 1 #!/usr/bin/env python3 |
3137 | 2 |
2085 | 3 |
4 # SàT: a XMPP client | |
3136 | 5 # Copyright (C) 2009-2020 Jérôme Poisson (goffi@goffi.org) |
2085 | 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 | |
20 from sat.bridge.bridge_constructor import base_constructor | |
21 | |
22 | |
23 class DbusConstructor(base_constructor.Constructor): | |
24 NAME = "dbus" | |
25 CORE_TEMPLATE = "dbus_core_template.py" | |
2086 | 26 CORE_DEST = "dbus_bridge.py" |
2085 | 27 CORE_FORMATS = { |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
28 "signals": """\ |
2085 | 29 @dbus.service.signal(const_INT_PREFIX+const_{category}_SUFFIX, |
30 signature='{sig_in}') | |
31 def {name}(self, {args}): | |
32 {body}\n""", | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
33 "methods": """\ |
2085 | 34 @dbus.service.method(const_INT_PREFIX+const_{category}_SUFFIX, |
35 in_signature='{sig_in}', out_signature='{sig_out}', | |
36 async_callbacks={async_callbacks}) | |
37 def {name}(self, {args}{async_comma}{async_args_def}): | |
38 {debug}return self._callback("{name}", {args_result}{async_comma}{async_args_call})\n""", | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
39 "signal_direct_calls": """\ |
2085 | 40 def {name}(self, {args}): |
41 self.dbus_bridge.{name}({args})\n""", | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
42 } |
2085 | 43 |
44 FRONTEND_TEMPLATE = "dbus_frontend_template.py" | |
45 FRONTEND_DEST = CORE_DEST | |
46 FRONTEND_FORMATS = { | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
47 "methods": """\ |
2085 | 48 def {name}(self, {args}{async_comma}{async_args}): |
3042
964abd07dc03
bridge (dbus): AsyncIO version of D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
49 {error_handler}{blocking_call}{debug}return {result}\n""", |
964abd07dc03
bridge (dbus): AsyncIO version of D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
50 "async_methods": """\ |
964abd07dc03
bridge (dbus): AsyncIO version of D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
51 def {name}(self{async_comma}{args}): |
964abd07dc03
bridge (dbus): AsyncIO version of D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
52 loop = asyncio.get_running_loop() |
964abd07dc03
bridge (dbus): AsyncIO version of D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
53 fut = loop.create_future() |
964abd07dc03
bridge (dbus): AsyncIO version of D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
54 reply_handler = lambda ret=None: loop.call_soon_threadsafe(fut.set_result, ret) |
964abd07dc03
bridge (dbus): AsyncIO version of D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
55 error_handler = lambda err: loop.call_soon_threadsafe(fut.set_exception, dbus_to_bridge_exception(err)) |
964abd07dc03
bridge (dbus): AsyncIO version of D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
56 self.db_{category}_iface.{name}({args_result}{async_comma}timeout=const_TIMEOUT, reply_handler=reply_handler, error_handler=error_handler) |
964abd07dc03
bridge (dbus): AsyncIO version of D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
57 {debug}return fut\n""", |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
58 } |
2085 | 59 |
60 def core_completion_signal(self, completion, function, default, arg_doc, async_): | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
61 completion["category"] = completion["category"].upper() |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
62 completion["body"] = ( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
63 "pass" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
64 if not self.args.debug |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
65 else 'log.debug ("{}")'.format(completion["name"]) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
66 ) |
2085 | 67 |
68 def core_completion_method(self, completion, function, default, arg_doc, async_): | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
69 completion.update( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
70 { |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
71 "debug": "" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
72 if not self.args.debug |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
73 else 'log.debug ("%s")\n%s' % (completion["name"], 8 * " "), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
74 "args_result": self.getArguments( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
75 function["sig_in"], name=arg_doc, unicode_protect=self.args.unicode |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
76 ), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
77 "async_comma": ", " if async_ and function["sig_in"] else "", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
78 "async_args_def": "callback=None, errback=None" if async_ else "", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
79 "async_args_call": "callback=callback, errback=errback" if async_ else "", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
80 "async_callbacks": "('callback', 'errback')" if async_ else "None", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
81 "category": completion["category"].upper(), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
82 } |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
83 ) |
2085 | 84 |
85 def frontend_completion_method(self, completion, function, default, arg_doc, async_): | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
86 completion.update( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
87 { |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
88 # XXX: we can manage blocking call in the same way as async one: if callback is None the call will be blocking |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
89 "debug": "" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
90 if not self.args.debug |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
91 else 'log.debug ("%s")\n%s' % (completion["name"], 8 * " "), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
92 "args_result": self.getArguments(function["sig_in"], name=arg_doc), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
93 "async_args": "callback=None, errback=None", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
94 "async_comma": ", " if function["sig_in"] else "", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
95 "error_handler": """if callback is None: |
2085 | 96 error_handler = None |
97 else: | |
98 if errback is None: | |
99 errback = log.error | |
100 error_handler = lambda err:errback(dbus_to_bridge_exception(err)) | |
101 """, | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
102 } |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
103 ) |
2085 | 104 if async_: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
105 completion["blocking_call"] = "" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
106 completion[ |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
107 "async_args_result" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
108 ] = "timeout=const_TIMEOUT, reply_handler=callback, error_handler=error_handler" |
2085 | 109 else: |
110 # XXX: To have a blocking call, we must have not reply_handler, so we test if callback exists, and add reply_handler only in this case | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
111 completion[ |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
112 "blocking_call" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
113 ] = """kwargs={} |
2085 | 114 if callback is not None: |
115 kwargs['timeout'] = const_TIMEOUT | |
116 kwargs['reply_handler'] = callback | |
117 kwargs['error_handler'] = error_handler | |
118 """ | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
119 completion["async_args_result"] = "**kwargs" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
120 result = ( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
121 "self.db_%(category)s_iface.%(name)s(%(args_result)s%(async_comma)s%(async_args_result)s)" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
122 % completion |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
123 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
124 completion["result"] = ( |
3028 | 125 "str(%s)" if self.args.unicode and function["sig_out"] == "s" else "%s" |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
126 ) % result |