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

Merge remote-tracking branch 'tsenart/passwords-on-accounts-file'

This commit is contained in:
James Booth 2013-11-07 21:43:11 +00:00
commit 4abdb02396
6 changed files with 44 additions and 15 deletions

View File

@ -20,6 +20,7 @@
*
*/
#include <assert.h>
#include <errno.h>
#include <limits.h>
#include <stdlib.h>
@ -68,6 +69,7 @@ typedef struct cmd_t {
typedef char*(*autocompleter)(char*, int*);
static char * _ask_password(void);
static void _update_presence(const resource_presence_t presence,
const char * const show, gchar **args);
static gboolean _cmd_set_boolean_preference(gchar *arg, struct cmd_help_t help,
@ -1347,13 +1349,6 @@ _cmd_connect(gchar **args, struct cmd_help_t help)
char *lower = g_utf8_strdown(user, -1);
char *jid;
status_bar_get_password();
status_bar_refresh();
char passwd[21];
inp_block();
inp_get_password(passwd);
inp_non_block();
ProfAccount *account = accounts_get_account(lower);
if (account != NULL) {
if (account->resource != NULL) {
@ -1361,12 +1356,18 @@ _cmd_connect(gchar **args, struct cmd_help_t help)
} else {
jid = strdup(account->jid);
}
if (account->password == NULL) {
account->password = _ask_password();
}
cons_show("Connecting with account %s as %s", account->name, jid);
conn_status = jabber_connect_with_account(account, passwd);
conn_status = jabber_connect_with_account(account);
} else {
char *passwd = _ask_password();
jid = strdup(lower);
cons_show("Connecting as %s", jid);
conn_status = jabber_connect_with_details(jid, passwd, altdomain);
free(passwd);
}
g_free(lower);
@ -3525,6 +3526,20 @@ _cmd_xa(gchar **args, struct cmd_help_t help)
return TRUE;
}
// helper function that asks the user for a password and saves it in passwd
static char *
_ask_password(void) {
char *passwd = malloc(sizeof(char) * 21);
status_bar_get_password();
status_bar_refresh();
inp_block();
inp_get_password(passwd);
inp_non_block();
return passwd;
}
// helper function for status change commands
static void

View File

@ -39,10 +39,12 @@ static GKeyFile *accounts;
static Autocomplete all_ac;
static Autocomplete enabled_ac;
// used to rename account (copies properties to new account)
static gchar *string_keys[] = {
"jid",
"server",
"resource",
"password",
"presence.last",
"presence.login",
"muc.service",
@ -191,6 +193,14 @@ accounts_get_account(const char * const name)
_save_accounts();
}
gchar *password = g_key_file_get_string(accounts, name, "password", NULL);
if (password != NULL) {
account->password = strdup(password);
g_free(password);
} else {
account->password = NULL;
}
account->enabled = g_key_file_get_boolean(accounts, name, "enabled", NULL);
gchar *server = g_key_file_get_string(accounts, name, "server", NULL);
@ -288,6 +298,7 @@ accounts_free_account(ProfAccount *account)
if (account != NULL) {
free(account->name);
free(account->jid);
free(account->password);
free(account->resource);
free(account->server);
free(account->last_presence);
@ -349,6 +360,7 @@ accounts_rename(const char * const account_name, const char * const new_name)
g_key_file_set_integer(accounts, new_name, "priority.dnd",
g_key_file_get_boolean(accounts, account_name, "priority.dnd", NULL));
// copy other string properties
int i;
for (i = 0; i < ARRAY_SIZE(string_keys); i++) {
char *value = g_key_file_get_string(accounts, account_name, string_keys[i], NULL);

View File

@ -28,6 +28,7 @@
typedef struct prof_account_t {
gchar *name;
gchar *jid;
gchar *password;
gchar *resource;
gchar *server;
gchar *last_presence;

View File

@ -793,6 +793,9 @@ cons_show_account(ProfAccount *account)
cons_show ("enabled : FALSE");
}
cons_show ("jid : %s", account->jid);
if (account->password != NULL) {
cons_show ("password : [redacted]");
}
if (account->resource != NULL) {
cons_show ("resource : %s", account->resource);
}

View File

@ -109,21 +109,20 @@ jabber_init(const int disable_tls)
}
jabber_conn_status_t
jabber_connect_with_account(const ProfAccount * const account,
const char * const passwd)
jabber_connect_with_account(const ProfAccount * const account)
{
assert(account != NULL);
assert(passwd != NULL);
log_info("Connecting using account: %s", account->name);
// save account name and password for reconnect
saved_account.name = strdup(account->name);
saved_account.passwd = strdup(passwd);
saved_account.passwd = strdup(account->password);
// connect with fulljid
Jid *jidp = jid_create_from_bare_and_resource(account->jid, account->resource);
jabber_conn_status_t result = _jabber_connect(jidp->fulljid, passwd, account->server);
jabber_conn_status_t result =
_jabber_connect(jidp->fulljid, account->password, account->server);
jid_destroy(jidp);
return result;

View File

@ -78,8 +78,7 @@ typedef struct disco_identity_t {
void jabber_init(const int disable_tls);
jabber_conn_status_t jabber_connect_with_details(const char * const jid,
const char * const passwd, const char * const altdomain);
jabber_conn_status_t jabber_connect_with_account(const ProfAccount * const account,
const char * const passwd);
jabber_conn_status_t jabber_connect_with_account(const ProfAccount * const account);
void jabber_disconnect(void);
void jabber_shutdown(void);
void jabber_process_events(void);