about summary refs log tree commit diff stats
path: root/src/command
diff options
context:
space:
mode:
authorPaul Fariello <paul@fariello.eu>2019-02-25 18:07:11 +0140
committerPaul Fariello <paul@fariello.eu>2019-04-10 16:03:50 +0200
commitf9216fddb106d46bac2d13d9dfe175b4a475a789 (patch)
tree3381185fb76931406986dcfac29eeee7b3d485cd /src/command
parent1f9d46037cb86b26a7e91d924f41702a6ea58114 (diff)
downloadprofani-tty-f9216fddb106d46bac2d13d9dfe175b4a475a789.tar.gz
Add signal store backend and OMEMO start command
Diffstat (limited to 'src/command')
-rw-r--r--src/command/cmd_defs.c3
-rw-r--r--src/command/cmd_funcs.c53
-rw-r--r--src/command/cmd_funcs.h1
3 files changed, 56 insertions, 1 deletions
diff --git a/src/command/cmd_defs.c b/src/command/cmd_defs.c
index af30db34..265af119 100644
--- a/src/command/cmd_defs.c
+++ b/src/command/cmd_defs.c
@@ -2333,7 +2333,8 @@ static struct cmd_t command_defs[] =
     { "/omemo",
         parse_args, 1, 3, NULL,
         CMD_SUBFUNCS(
-            { "gen", cmd_omemo_gen })
+            { "gen", cmd_omemo_gen },
+            { "start", cmd_omemo_start })
         CMD_NOMAINFUNC
         CMD_TAGS(
             CMD_TAG_CHAT,
diff --git a/src/command/cmd_funcs.c b/src/command/cmd_funcs.c
index ab438c7f..66715d20 100644
--- a/src/command/cmd_funcs.c
+++ b/src/command/cmd_funcs.c
@@ -7904,3 +7904,56 @@ cmd_omemo_gen(ProfWin *window, const char *const command, gchar **args)
     return TRUE;
 #endif
 }
+
+gboolean
+cmd_omemo_start(ProfWin *window, const char *const command, gchar **args)
+{
+#ifdef HAVE_OMEMO
+    if (connection_get_status() != JABBER_CONNECTED) {
+        cons_show("You must be connected with an account to load OMEMO information.");
+        return TRUE;
+    }
+
+    // recipient supplied
+    if (args[1]) {
+        char *contact = args[1];
+        char *barejid = roster_barejid_from_name(contact);
+        if (barejid == NULL) {
+            barejid = contact;
+        }
+
+        ProfChatWin *chatwin = wins_get_chat(barejid);
+        if (!chatwin) {
+            chatwin = chatwin_new(barejid);
+        }
+        ui_focus_win((ProfWin*)chatwin);
+
+        if (chatwin->pgp_send) {
+            win_println(window, THEME_DEFAULT, '!', "You must disable PGP encryption before starting an OMEMO session.");
+            return TRUE;
+        }
+
+        if (chatwin->is_otr) {
+            win_println(window, THEME_DEFAULT, '!', "You must disable OTR encryption before starting an OMEMO session.");
+            return TRUE;
+        }
+
+        if (chatwin->is_omemo) {
+            win_println(window, THEME_DEFAULT, '!', "You are already in an OMEMO session.");
+            return TRUE;
+        }
+
+        if (!omemo_loaded()) {
+            win_println(window, THEME_DEFAULT, '!', "You have not generated or loaded a cryptographic materials, use '/omemo init'");
+            return TRUE;
+        }
+
+        omemo_start_session(barejid);
+    }
+
+    return TRUE;
+#else
+    cons_show("This version of Profanity has not been built with OMEMO support enabled");
+    return TRUE;
+#endif
+}
diff --git a/src/command/cmd_funcs.h b/src/command/cmd_funcs.h
index 650c9eaf..f39e8c17 100644
--- a/src/command/cmd_funcs.h
+++ b/src/command/cmd_funcs.h
@@ -215,5 +215,6 @@ gboolean cmd_wins_swap(ProfWin *window, const char *const command, gchar **args)
 gboolean cmd_form_field(ProfWin *window, char *tag, gchar **args);
 
 gboolean cmd_omemo_gen(ProfWin *window, const char *const command, gchar **args);
+gboolean cmd_omemo_start(ProfWin *window, const char *const command, gchar **args);
 
 #endif