diff options
Diffstat (limited to 'src/command')
-rw-r--r-- | src/command/command.c | 21 | ||||
-rw-r--r-- | src/command/commands.c | 40 |
2 files changed, 52 insertions, 9 deletions
diff --git a/src/command/command.c b/src/command/command.c index c43e968e..dd160adc 100644 --- a/src/command/command.c +++ b/src/command/command.c @@ -869,18 +869,19 @@ static struct cmd_t command_defs[] = NULL } } }, { "/pgp", - cmd_pgp, parse_args, 1, 2, NULL, + cmd_pgp, parse_args, 1, 3, NULL, { "/pgp command [args..]", "Open PGP commands.", { "/pgp command [args..]", "---------------------", "Open PGP commands.", "", - "keys : List private keys.", - "libver : Show which version of the libgpgme library is being used.", - "fps : Show received fingerprints.", - "start [contact] : Start PGP encrypted chat, current contact will be used if not specified.", - "end : End PGP encrypted chat with the current recipient.", - "log on|off|redact : PGP message logging, default: redact.", + "keys : List all keys.", + "libver : Show which version of the libgpgme library is being used.", + "fps : Show known fingerprints.", + "setkey contact keyid : Manually associate a key ID with a JID.", + "start [contact] : Start PGP encrypted chat, current contact will be used if not specified.", + "end : End PGP encrypted chat with the current recipient.", + "log on|off|redact : PGP message logging, default: redact.", NULL } } }, { "/otr", @@ -1611,6 +1612,7 @@ cmd_init(void) pgp_ac = autocomplete_new(); autocomplete_add(pgp_ac, "keys"); autocomplete_add(pgp_ac, "fps"); + autocomplete_add(pgp_ac, "setkey"); autocomplete_add(pgp_ac, "libver"); autocomplete_add(pgp_ac, "start"); autocomplete_add(pgp_ac, "end"); @@ -2503,6 +2505,11 @@ _pgp_autocomplete(ProfWin *window, const char * const input) return found; } + found = autocomplete_param_with_func(input, "/pgp setkey", roster_barejid_autocomplete); + if (found) { + return found; + } + found = autocomplete_param_with_ac(input, "/pgp", pgp_ac, TRUE); if (found) { return found; diff --git a/src/command/commands.c b/src/command/commands.c index f865b873..3f9009b4 100644 --- a/src/command/commands.c +++ b/src/command/commands.c @@ -226,6 +226,7 @@ cmd_connect(ProfWin *window, gchar **args, struct cmd_help_t help) } else { cons_show("Error evaluating password, see logs for details."); g_free(lower); + account_free(account); return TRUE; } @@ -238,6 +239,7 @@ cmd_connect(ProfWin *window, gchar **args, struct cmd_help_t help) } jid = account_create_full_jid(account); + account_free(account); // connect with JID } else { @@ -680,6 +682,9 @@ cmd_disconnect(ProfWin *window, gchar **args, struct cmd_help_t help) muc_invites_clear(); chat_sessions_clear(); ui_disconnected(); +#ifdef HAVE_LIBGPGME + p_gpg_on_disconnect(); +#endif free(jid); } else { cons_show("You are not currently connected."); @@ -2175,6 +2180,7 @@ cmd_join(ProfWin *window, gchar **args, struct cmd_help_t help) if (!parsed) { cons_show("Usage: %s", help.usage); cons_show(""); + jid_destroy(room_arg); return TRUE; } @@ -4192,6 +4198,35 @@ cmd_pgp(ProfWin *window, gchar **args, struct cmd_help_t help) return TRUE; } + if (g_strcmp0(args[0], "setkey") == 0) { + jabber_conn_status_t conn_status = jabber_get_connection_status(); + if (conn_status != JABBER_CONNECTED) { + cons_show("You are not currently connected."); + return TRUE; + } + + char *jid = args[1]; + if (!args[1]) { + cons_show("Usage: %s", help.usage); + return TRUE; + } + + char *keyid = args[2]; + if (!args[2]) { + cons_show("Usage: %s", help.usage); + return TRUE; + } + + gboolean res = p_gpg_addkey(jid, keyid); + if (!res) { + cons_show("Key ID not found."); + } else { + cons_show("Key %s set for %s.", keyid, jid); + } + + return TRUE; + } + if (g_strcmp0(args[0], "fps") == 0) { jabber_conn_status_t conn_status = jabber_get_connection_status(); if (conn_status != JABBER_CONNECTED) { @@ -4201,11 +4236,11 @@ cmd_pgp(ProfWin *window, gchar **args, struct cmd_help_t help) GHashTable *fingerprints = p_gpg_fingerprints(); GList *jids = g_hash_table_get_keys(fingerprints); if (!jids) { - cons_show("No PGP fingerprints received."); + cons_show("No PGP fingerprints available."); return TRUE; } - cons_show("Received PGP fingerprints:"); + cons_show("Known PGP fingerprints:"); GList *curr = jids; while (curr) { char *jid = curr->data; @@ -4314,6 +4349,7 @@ cmd_pgp(ProfWin *window, gchar **args, struct cmd_help_t help) return TRUE; } + cons_show("Usage: %s", help.usage); return TRUE; #else cons_show("This version of Profanity has not been built with PGP support enabled"); |