about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2014-01-13 20:17:45 +0000
committerJames Booth <boothj5@gmail.com>2014-01-13 20:17:45 +0000
commit60820007ee6b5a1bc634904d35f9f10292a04195 (patch)
treebb79b5ed16f7a1d96528971571f3e2daa1602a73
parent443b240ce4c649b81d2f27d82a300f2a6a4cea14 (diff)
downloadprofani-tty-60820007ee6b5a1bc634904d35f9f10292a04195.tar.gz
Added setting /otr log on|off|redact
-rw-r--r--src/command/command.c23
-rw-r--r--src/command/commands.c23
-rw-r--r--src/config/preferences.c5
-rw-r--r--src/config/preferences.h3
-rw-r--r--src/ui/console.c16
-rw-r--r--src/ui/ui.h1
6 files changed, 66 insertions, 5 deletions
diff --git a/src/command/command.c b/src/command/command.c
index 2d03db5a..e582e2e7 100644
--- a/src/command/command.c
+++ b/src/command/command.c
@@ -571,9 +571,9 @@ static struct cmd_t command_defs[] =
 
     { "/otr",
         cmd_otr, parse_args, 1, 2, NULL,
-        { "/otr gen|myfp|theirfp|start|end|trust|untrust", "Off The Record encryption commands.",
-        { "/otr gen|myfp|theirfp|start|end|trust|untrust",
-          "---------------------------------------------",
+        { "/otr gen|myfp|theirfp|start|end|trust|untrust|log", "Off The Record encryption commands.",
+        { "/otr gen|myfp|theirfp|start|end|trust|untrust|log",
+          "-------------------------------------------------",
           "gen - Generate your private key.",
           "myfp - Show your fingerprint.",
           "theirfp - Show contacts fingerprint.",
@@ -581,6 +581,7 @@ static struct cmd_t command_defs[] =
           "end - End the current OTR session,",
           "trust - Indicate that you have verified the contact's fingerprint.",
           "untrust - Indicate the the contact's fingerprint is not verified,",
+          "log - How to log OTR messages, options are 'on', 'off' and 'redact', with redaction being the default.",
           NULL } } },
 
     { "/outtype",
@@ -834,6 +835,7 @@ static Autocomplete roster_ac;
 static Autocomplete group_ac;
 static Autocomplete bookmark_ac;
 static Autocomplete otr_ac;
+static Autocomplete otr_log_ac;
 
 /*
  * Initialise command autocompleter and history
@@ -994,6 +996,12 @@ cmd_init(void)
     autocomplete_add(otr_ac, "theirfp");
     autocomplete_add(otr_ac, "trust");
     autocomplete_add(otr_ac, "untrust");
+    autocomplete_add(otr_ac, "log");
+
+    otr_log_ac = autocomplete_new();
+    autocomplete_add(otr_log_ac, "on");
+    autocomplete_add(otr_log_ac, "off");
+    autocomplete_add(otr_log_ac, "redact");
 
     cmd_history_init();
 }
@@ -1026,6 +1034,7 @@ cmd_uninit(void)
     autocomplete_free(group_ac);
     autocomplete_free(bookmark_ac);
     autocomplete_free(otr_ac);
+    autocomplete_free(otr_log_ac);
 }
 
 // Command autocompletion functions
@@ -1100,6 +1109,7 @@ cmd_reset_autocomplete()
     autocomplete_reset(group_ac);
     autocomplete_reset(bookmark_ac);
     autocomplete_reset(otr_ac);
+    autocomplete_reset(otr_log_ac);
     bookmark_autocomplete_reset();
 }
 
@@ -1325,7 +1335,7 @@ _cmd_complete_parameters(char *input, int *size)
     }
 
     gchar *cmds[] = { "/help", "/prefs", "/log", "/disco", "/close", "/wins" };
-    Autocomplete completers[] = { help_ac, prefs_ac, log_ac, disco_ac, close_ac, wins_ac, otr_ac };
+    Autocomplete completers[] = { help_ac, prefs_ac, log_ac, disco_ac, close_ac, wins_ac  };
 
     for (i = 0; i < ARRAY_SIZE(cmds); i++) {
         result = autocomplete_param_with_ac(input, size, cmds[i], completers[i]);
@@ -1569,6 +1579,11 @@ _otr_autocomplete(char *input, int *size)
         return result;
     }
 
+    result = autocomplete_param_with_ac(input, size, "/otr log", otr_log_ac);
+    if (result != NULL) {
+        return result;
+    }
+
     result = autocomplete_param_with_ac(input, size, "/otr", otr_ac);
     if (result != NULL) {
         return result;
diff --git a/src/command/commands.c b/src/command/commands.c
index 25139a78..51296cd6 100644
--- a/src/command/commands.c
+++ b/src/command/commands.c
@@ -2302,6 +2302,29 @@ gboolean
 cmd_otr(gchar **args, struct cmd_help_t help)
 {
 #ifdef HAVE_LIBOTR
+    if (strcmp(args[0], "log") == 0) {
+        char *choice = args[1];
+        if (g_strcmp0(choice, "on") == 0) {
+            prefs_set_string(PREF_OTR_LOG, "on");
+            cons_show("OTR messages will be logged as plaintext.");
+            if (!prefs_get_boolean(PREF_CHLOG)) {
+                cons_show("Chat logging is currently disabled, use '/chlog on' to enable.");
+            }
+        } else if (g_strcmp0(choice, "off") == 0) {
+            prefs_set_string(PREF_OTR_LOG, "off");
+            cons_show("OTR message logging disabled.");
+        } else if (g_strcmp0(choice, "redact") == 0) {
+            prefs_set_string(PREF_OTR_LOG, "redact");
+            cons_show("OTR messages will be logged as '[redacted]'.");
+            if (!prefs_get_boolean(PREF_CHLOG)) {
+                cons_show("Chat logging is currently disabled, use '/chlog on' to enable.");
+            }
+        } else {
+            cons_show("Usage: %s", help.usage);
+        }
+        return TRUE;
+    }
+
     if (jabber_get_connection_status() != JABBER_CONNECTED) {
         cons_show("You must be connected with an account to load OTR information.");
         return TRUE;
diff --git a/src/config/preferences.c b/src/config/preferences.c
index 18f10dee..216e4988 100644
--- a/src/config/preferences.c
+++ b/src/config/preferences.c
@@ -304,6 +304,7 @@ _get_group(preference_t pref)
             return "notifications";
         case PREF_CHLOG:
         case PREF_GRLOG:
+        case PREF_OTR_LOG:
             return "logging";
         case PREF_AUTOAWAY_CHECK:
         case PREF_AUTOAWAY_MODE:
@@ -365,6 +366,8 @@ _get_key(preference_t pref)
             return "autoaway.message";
         case PREF_CONNECT_ACCOUNT:
             return "account";
+        case PREF_OTR_LOG:
+            return "otr";
         default:
             return NULL;
     }
@@ -390,6 +393,8 @@ _get_default_string(preference_t pref)
     {
         case PREF_AUTOAWAY_MODE:
             return "off";
+        case PREF_OTR_LOG:
+            return "redact";
         default:
             return NULL;
     }
diff --git a/src/config/preferences.h b/src/config/preferences.h
index 5affe002..df89ac04 100644
--- a/src/config/preferences.h
+++ b/src/config/preferences.h
@@ -57,7 +57,8 @@ typedef enum {
     PREF_AUTOAWAY_CHECK,
     PREF_AUTOAWAY_MODE,
     PREF_AUTOAWAY_MESSAGE,
-    PREF_CONNECT_ACCOUNT
+    PREF_CONNECT_ACCOUNT,
+    PREF_OTR_LOG
 } preference_t;
 
 void prefs_load(void);
diff --git a/src/ui/console.c b/src/ui/console.c
index afdc1776..f1450cc1 100644
--- a/src/ui/console.c
+++ b/src/ui/console.c
@@ -1134,6 +1134,20 @@ _cons_grlog_setting(void)
 }
 
 static void
+_cons_otr_log_setting(void)
+{
+    char *value = prefs_get_string(PREF_OTR_LOG);
+
+    if (strcmp(value, "on") == 0) {
+        cons_show("OTR logging (/otr log)      : ON");
+    } else if (strcmp(value, "off") == 0) {
+        cons_show("OTR logging (/otr log)      : OFF");
+    } else {
+        cons_show("OTR logging (/otr log)      : Redacted");
+    }
+}
+
+static void
 _cons_show_log_prefs(void)
 {
     cons_show("Logging preferences:");
@@ -1141,6 +1155,7 @@ _cons_show_log_prefs(void)
     cons_log_setting();
     cons_chlog_setting();
     cons_grlog_setting();
+    cons_otr_log_setting();
 
     wins_refresh_console();
     cons_alert();
@@ -1548,6 +1563,7 @@ console_init_module(void)
     cons_log_setting = _cons_log_setting;
     cons_chlog_setting = _cons_chlog_setting;
     cons_grlog_setting = _cons_grlog_setting;
+    cons_otr_log_setting = _cons_otr_log_setting;
     cons_show_log_prefs = _cons_show_log_prefs;
     cons_autoaway_setting = _cons_autoaway_setting;
     cons_show_presence_prefs = _cons_show_presence_prefs;
diff --git a/src/ui/ui.h b/src/ui/ui.h
index 240f6b4b..4395b096 100644
--- a/src/ui/ui.h
+++ b/src/ui/ui.h
@@ -222,6 +222,7 @@ void (*cons_history_setting)(void);
 void (*cons_log_setting)(void);
 void (*cons_chlog_setting)(void);
 void (*cons_grlog_setting)(void);
+void (*cons_otr_log_setting)(void);
 void (*cons_autoaway_setting)(void);
 void (*cons_reconnect_setting)(void);
 void (*cons_autoping_setting)(void);