1
0
mirror of https://github.com/profanity-im/profanity.git synced 2024-11-03 19:37:16 -05:00

Show PGP error strings

This commit is contained in:
James Booth 2015-12-15 00:38:16 +00:00
parent 482eea4fcf
commit 88fd2a25ee
5 changed files with 33 additions and 14 deletions

View File

@ -651,12 +651,14 @@ cmd_account(ProfWin *window, const char *const command, gchar **args)
cons_show(""); cons_show("");
} else if (strcmp(property, "pgpkeyid") == 0) { } else if (strcmp(property, "pgpkeyid") == 0) {
#ifdef HAVE_LIBGPGME #ifdef HAVE_LIBGPGME
if (!p_gpg_valid_key(value)) { char *err_str = NULL;
cons_show("Invalid PGP key ID specified, see /pgp keys"); if (!p_gpg_valid_key(value, &err_str)) {
cons_show("Invalid PGP key ID specified: %s, see /pgp keys", err_str);
} else { } else {
accounts_set_pgp_keyid(account_name, value); accounts_set_pgp_keyid(account_name, value);
cons_show("Updated PGP key ID for account %s: %s", account_name, value); cons_show("Updated PGP key ID for account %s: %s", account_name, value);
} }
free(err_str);
#else #else
cons_show("PGP support is not included in this build."); cons_show("PGP support is not included in this build.");
#endif #endif
@ -5319,11 +5321,14 @@ cmd_pgp(ProfWin *window, const char *const command, gchar **args)
} }
ProfAccount *account = accounts_get_account(jabber_get_account_name()); ProfAccount *account = accounts_get_account(jabber_get_account_name());
if (!p_gpg_valid_key(account->pgp_keyid)) { char *err_str = NULL;
ui_current_print_formatted_line('!', 0, "You must specify a valid PGP key ID for this account to start PGP encryption."); if (!p_gpg_valid_key(account->pgp_keyid, &err_str)) {
ui_current_print_formatted_line('!', 0, "Invalid PGP key ID %s: %s, cannot start PGP encryption.", account->pgp_keyid, err_str);
free(err_str);
account_free(account); account_free(account);
return TRUE; return TRUE;
} }
free(err_str);
account_free(account); account_free(account);
if (!p_gpg_available(chatwin->barejid)) { if (!p_gpg_available(chatwin->barejid)) {

View File

@ -102,11 +102,21 @@ sv_ev_roster_received(void)
ui_show_roster(); ui_show_roster();
} }
char *account = jabber_get_account_name(); char *account_name = jabber_get_account_name();
// check pgp key valid if specified
ProfAccount *account = accounts_get_account(account_name);
if (account && account->pgp_keyid) {
char *err_str = NULL;
if (!p_gpg_valid_key(account->pgp_keyid, &err_str)) {
cons_show_error("Invalid PGP key ID specified: %s, %s", account->pgp_keyid, err_str);
}
free(err_str);
}
// send initial presence // send initial presence
resource_presence_t conn_presence = accounts_get_login_presence(account); resource_presence_t conn_presence = accounts_get_login_presence(account_name);
char *last_activity_str = accounts_get_last_activity(account); char *last_activity_str = accounts_get_last_activity(account_name);
if (last_activity_str) { if (last_activity_str) {
GDateTime *nowdt = g_date_time_new_now_utc(); GDateTime *nowdt = g_date_time_new_now_utc();

View File

@ -424,12 +424,13 @@ p_gpg_libver(void)
} }
gboolean gboolean
p_gpg_valid_key(const char *const keyid) p_gpg_valid_key(const char *const keyid, char **err_str)
{ {
gpgme_ctx_t ctx; gpgme_ctx_t ctx;
gpgme_error_t error = gpgme_new(&ctx); gpgme_error_t error = gpgme_new(&ctx);
if (error) { if (error) {
log_error("GPG: Failed to create gpgme context. %s %s", gpgme_strsource(error), gpgme_strerror(error)); log_error("GPG: Failed to create gpgme context. %s %s", gpgme_strsource(error), gpgme_strerror(error));
*err_str = strdup(gpgme_strerror(error));
return FALSE; return FALSE;
} }
@ -438,18 +439,21 @@ p_gpg_valid_key(const char *const keyid)
if (error || key == NULL) { if (error || key == NULL) {
log_error("GPG: Failed to get key. %s %s", gpgme_strsource(error), gpgme_strerror(error)); log_error("GPG: Failed to get key. %s %s", gpgme_strsource(error), gpgme_strerror(error));
*err_str = strdup(gpgme_strerror(error));
gpgme_release(ctx); gpgme_release(ctx);
return FALSE; return FALSE;
} }
if (key) { if (key == NULL) {
*err_str = strdup("Unknown error");
gpgme_release(ctx); gpgme_release(ctx);
gpgme_key_unref(key); return FALSE;
return TRUE;
} }
gpgme_release(ctx); gpgme_release(ctx);
return FALSE; gpgme_key_unref(key);
return TRUE;
} }
gboolean gboolean

View File

@ -59,7 +59,7 @@ GHashTable* p_gpg_list_keys(void);
void p_gpg_free_keys(GHashTable *keys); void p_gpg_free_keys(GHashTable *keys);
gboolean p_gpg_addkey(const char *const jid, const char *const keyid); gboolean p_gpg_addkey(const char *const jid, const char *const keyid);
GHashTable* p_gpg_pubkeys(void); GHashTable* p_gpg_pubkeys(void);
gboolean p_gpg_valid_key(const char *const keyid); gboolean p_gpg_valid_key(const char *const keyid, char **err_str);
gboolean p_gpg_available(const char *const barejid); gboolean p_gpg_available(const char *const barejid);
const char* p_gpg_libver(void); const char* p_gpg_libver(void);
char* p_gpg_sign(const char *const str, const char *const fp); char* p_gpg_sign(const char *const str, const char *const fp);

View File

@ -28,7 +28,7 @@ char* p_gpg_sign(const char * const str, const char * const fp)
return NULL; return NULL;
} }
gboolean p_gpg_valid_key(const char * const keyid) gboolean p_gpg_valid_key(const char * const keyid, char **err_str)
{ {
return FALSE; return FALSE;
} }