diff sat_frontends/jp/cmd_message.py @ 2663:32b5f68a23b4

jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
author Goffi <goffi@goffi.org>
date Sat, 11 Aug 2018 18:24:55 +0200
parents 56f94936df1e
children 0b5deb9a35fd
line wrap: on
line diff
--- a/sat_frontends/jp/cmd_message.py	Sat Aug 11 18:24:55 2018 +0200
+++ b/sat_frontends/jp/cmd_message.py	Sat Aug 11 18:24:55 2018 +0200
@@ -18,10 +18,11 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 from sat_frontends.jp import base
+from sat_frontends.jp.constants import Const as C
 import sys
 from sat.core.i18n import _
-from sat.core.constants import Const as C
 from sat.tools.utils import clean_ustr
+from functools import partial
 
 __commands__ = ["Message"]
 
@@ -39,7 +40,8 @@
             "--separate",
             action="store_true",
             help=_(
-                u"separate xmpp messages: send one message per line instead of one message alone."
+                u"separate xmpp messages: send one message per line instead of one "
+                u"message alone."
             ),
         )
         self.parser.add_argument(
@@ -149,8 +151,56 @@
             )
 
 
+class EncryptionAlgorithms(base.CommandBase):
+
+    def __init__(self, host):
+        extra_outputs = {"default": self.default_output}
+        super(EncryptionAlgorithms, self).__init__(
+            host, "algorithms",
+            use_output=C.OUTPUT_LIST_DICT,
+            extra_outputs=extra_outputs,
+            use_profile=False,
+            help=_("show available encryption algorithms"))
+        self.need_loop = True
+
+    def add_parser_options(self):
+        pass
+
+    def encryptionPluginsGetCb(self, plugins):
+        self.output(plugins)
+        self.host.quit()
+
+    def default_output(self, plugins):
+        if not plugins:
+            self.disp(_(u"No encryption plugin registered!"))
+            self.host.quit(C.EXIT_NOT_FOUND)
+        else:
+            self.disp(_(u"Following encryption algorithms are available: {algos}").format(
+                algos=', '.join([p['name'] for p in plugins])))
+            self.host.quit()
+
+    def start(self):
+        self.host.bridge.encryptionPluginsGet(
+            callback=self.encryptionPluginsGetCb,
+            errback=partial(
+                self.errback,
+                msg=_(u"can't retrieve plugins: {}"),
+                exit_code=C.EXIT_BRIDGE_ERRBACK,
+            ),
+        )
+
+
+class Encryption(base.CommandBase):
+    subcommands = (EncryptionAlgorithms,)
+
+    def __init__(self, host):
+        super(Encryption, self).__init__(
+            host, "encryption", use_profile=False, help=_("encryption sessions handling")
+        )
+
+
 class Message(base.CommandBase):
-    subcommands = (Send,)
+    subcommands = (Send, Encryption)
 
     def __init__(self, host):
         super(Message, self).__init__(