From acd2d2309f164a4902c3cfd7dc5b1ed5d2f7aa71 Mon Sep 17 00:00:00 2001 From: James Booth Date: Fri, 8 May 2015 00:07:21 +0100 Subject: [PATCH] Moved pgp signature generation to cl_ev_presence_send --- Makefile.am | 5 ++++- src/event/client_events.c | 17 ++++++++++++++++- src/xmpp/presence.c | 32 +++++++++++--------------------- src/xmpp/xmpp.h | 3 +-- tests/pgp/stub_gpg.c | 6 ++++++ tests/test_cmd_account.c | 10 +++++++++- tests/xmpp/stub_xmpp.c | 3 ++- 7 files changed, 49 insertions(+), 27 deletions(-) diff --git a/Makefile.am b/Makefile.am index 6b59da17..0da3aacd 100644 --- a/Makefile.am +++ b/Makefile.am @@ -68,7 +68,6 @@ tests_sources = \ src/event/ui_events.c src/event/ui_events.h \ tests/xmpp/stub_xmpp.c \ tests/ui/stub_ui.c \ - tests/pgp/stub_gpg.c \ tests/log/stub_log.c \ tests/config/stub_accounts.c \ tests/helpers.c tests/helpers.h \ @@ -103,6 +102,9 @@ git_include = src/gitversion.h pgp_sources = \ src/pgp/gpg.h src/pgp/gpg.c +pgp_test_sources = \ + tests/pgp/stub_gpg.c + otr3_sources = \ src/otr/otrlib.h src/otr/otrlibv3.c src/otr/otr.h src/otr/otr.c @@ -120,6 +122,7 @@ man_sources = docs/profanity.1 if BUILD_PGP core_sources += $(pgp_sources) +tests_sources += $(pgp_test_sources) endif if BUILD_OTR diff --git a/src/event/client_events.c b/src/event/client_events.c index f0f763a6..3465d5ee 100644 --- a/src/event/client_events.c +++ b/src/event/client_events.c @@ -42,6 +42,9 @@ #ifdef HAVE_LIBOTR #include "otr/otr.h" #endif +#ifdef HAVE_LIBGPGME +#include "pgp/gpg.h" +#endif jabber_conn_status_t cl_ev_connect_jid(const char * const jid, const char * const passwd, const char * const altdomain, const int port) @@ -63,7 +66,19 @@ cl_ev_connect_account(ProfAccount *account) void cl_ev_presence_send(const resource_presence_t presence_type, const char * const msg, const int idle) { - presence_send(presence_type, msg, idle); + char *signed_status = NULL; + +#ifdef HAVE_LIBGPGME + char *account_name = jabber_get_account_name(); + ProfAccount *account = accounts_get_account(account_name); + if (account->pgp_keyid) { + signed_status = p_gpg_sign(msg, account->pgp_keyid); + } +#endif + + presence_send(presence_type, msg, idle, signed_status); + + free(signed_status); } void diff --git a/src/xmpp/presence.c b/src/xmpp/presence.c index ba2af538..a245155c 100644 --- a/src/xmpp/presence.c +++ b/src/xmpp/presence.c @@ -196,7 +196,7 @@ presence_reset_sub_request_search(void) } void -presence_send(const resource_presence_t presence_type, const char * const msg, const int idle) +presence_send(const resource_presence_t presence_type, const char * const msg, const int idle, char *signed_status) { if (jabber_get_connection_status() != JABBER_CONNECTED) { log_warning("Error setting presence, not connected."); @@ -224,27 +224,17 @@ presence_send(const resource_presence_t presence_type, const char * const msg, c stanza_attach_status(ctx, presence, msg); -#ifdef HAVE_LIBGPGME - char *account_name = jabber_get_account_name(); - ProfAccount *account = accounts_get_account(account_name); - if (account->pgp_keyid) { - char *signed_status = p_gpg_sign(msg, account->pgp_keyid); - - if (signed_status) { - xmpp_stanza_t *x = xmpp_stanza_new(ctx); - xmpp_stanza_set_name(x, STANZA_NAME_X); - xmpp_stanza_set_ns(x, STANZA_NS_SIGNED); - xmpp_stanza_t *signed_text = xmpp_stanza_new(ctx); - xmpp_stanza_set_text(signed_text, signed_status); - xmpp_stanza_add_child(x, signed_text); - xmpp_stanza_release(signed_text); - xmpp_stanza_add_child(presence, x); - xmpp_stanza_release(x); - - free(signed_status); - } + if (signed_status) { + xmpp_stanza_t *x = xmpp_stanza_new(ctx); + xmpp_stanza_set_name(x, STANZA_NAME_X); + xmpp_stanza_set_ns(x, STANZA_NS_SIGNED); + xmpp_stanza_t *signed_text = xmpp_stanza_new(ctx); + xmpp_stanza_set_text(signed_text, signed_status); + xmpp_stanza_add_child(x, signed_text); + xmpp_stanza_release(signed_text); + xmpp_stanza_add_child(presence, x); + xmpp_stanza_release(x); } -#endif stanza_attach_priority(ctx, presence, pri); stanza_attach_last_activity(ctx, presence, idle); diff --git a/src/xmpp/xmpp.h b/src/xmpp/xmpp.h index 398c9f46..80b680b0 100644 --- a/src/xmpp/xmpp.h +++ b/src/xmpp/xmpp.h @@ -168,8 +168,7 @@ char * presence_sub_request_find(const char * const search_str); void presence_join_room(char *room, char *nick, char * passwd); void presence_change_room_nick(const char * const room, const char * const nick); void presence_leave_chat_room(const char * const room_jid); -void presence_send(resource_presence_t status, const char * const msg, - int idle); +void presence_send(resource_presence_t status, const char * const msg, int idle, char *signed_status); gboolean presence_sub_request_exists(const char * const bare_jid); // iq functions diff --git a/tests/pgp/stub_gpg.c b/tests/pgp/stub_gpg.c index b8150d0a..da80bbf5 100644 --- a/tests/pgp/stub_gpg.c +++ b/tests/pgp/stub_gpg.c @@ -24,3 +24,9 @@ const char* p_gpg_libver(void) void p_gpg_free_key(ProfPGPKey *key) {} void p_gpg_verify(const char * const barejid, const char *const sign) {} + +char* p_gpg_sign(const char * const str, const char * const fp) +{ + return NULL; +} + diff --git a/tests/test_cmd_account.c b/tests/test_cmd_account.c index 7405658f..887f635e 100644 --- a/tests/test_cmd_account.c +++ b/tests/test_cmd_account.c @@ -926,6 +926,8 @@ void cmd_account_set_priority_updates_presence_when_account_connected_with_prese { CommandHelp *help = malloc(sizeof(CommandHelp)); gchar *args[] = { "set", "a_account", "online", "10", NULL }; + ProfAccount *account = account_new("a_account", "a_jid", NULL, NULL, TRUE, NULL, 5222, "a_resource", + NULL, NULL, 10, 10, 10, 10, 10, NULL, NULL, NULL, NULL, NULL, NULL, NULL); expect_any(accounts_account_exists, account_name); will_return(accounts_account_exists, TRUE); @@ -934,16 +936,22 @@ void cmd_account_set_priority_updates_presence_when_account_connected_with_prese expect_any(accounts_set_priority_online, value); will_return(jabber_get_connection_status, JABBER_CONNECTED); - will_return(jabber_get_account_name, "a_account"); expect_any(accounts_get_last_presence, account_name); will_return(accounts_get_last_presence, RESOURCE_ONLINE); + will_return(jabber_get_account_name, "a_account"); + will_return(jabber_get_account_name, "a_account"); + + expect_any(accounts_get_account, name); + will_return(accounts_get_account, account); + will_return(jabber_get_presence_message, "Free to chat"); expect_value(presence_send, status, RESOURCE_ONLINE); expect_string(presence_send, msg, "Free to chat"); expect_value(presence_send, idle, 0); + expect_value(presence_send, signed_status, NULL); expect_cons_show("Updated online priority for account a_account: 10"); expect_cons_show(""); diff --git a/tests/xmpp/stub_xmpp.c b/tests/xmpp/stub_xmpp.c index cc9580bf..d134b901 100644 --- a/tests/xmpp/stub_xmpp.c +++ b/tests/xmpp/stub_xmpp.c @@ -114,11 +114,12 @@ void presence_join_room(char *room, char *nick, char * passwd) void presence_change_room_nick(const char * const room, const char * const nick) {} void presence_leave_chat_room(const char * const room_jid) {} -void presence_send(resource_presence_t status, const char * const msg, int idle) +void presence_send(resource_presence_t status, const char * const msg, int idle, char *signed_status) { check_expected(status); check_expected(msg); check_expected(idle); + check_expected(signed_status); } gboolean presence_sub_request_exists(const char * const bare_jid)