1
0
mirror of https://github.com/profanity-im/profanity.git synced 2024-09-22 19:45:54 -04:00

Use passwords from the accounts file

This commit makes it so that if the password in an account in the
accounts file is present, then use it. Otherwise ask for the password to
the user.
This commit is contained in:
Tomás Senart 2013-10-14 20:15:51 +02:00
parent 3cc080b06a
commit 480589f0ae
6 changed files with 41 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 void _ask_password(char * passwd);
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,9 +1356,16 @@ _cmd_connect(gchar **args, struct cmd_help_t help)
} else {
jid = strdup(account->jid);
}
if (strlen(account->password) == 0) {
account->password = (gchar *) realloc(account->password, 21);
_ask_password(account->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[21];
_ask_password(passwd);
jid = strdup(lower);
cons_show("Connecting as %s", jid);
conn_status = jabber_connect_with_details(jid, passwd, altdomain);
@ -3525,6 +3527,18 @@ _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 void
_ask_password(char * passwd) {
assert(passwd != NULL);
status_bar_get_password();
status_bar_refresh();
inp_block();
inp_get_password(passwd);
inp_non_block();
}
// helper function for status change commands
static void

View File

@ -133,6 +133,7 @@ accounts_add(const char *account_name, const char *altdomain)
if (!g_key_file_has_group(accounts, account_name)) {
g_key_file_set_boolean(accounts, account_name, "enabled", TRUE);
g_key_file_set_string(accounts, account_name, "jid", barejid);
g_key_file_set_string(accounts, account_name, "password", "");
g_key_file_set_string(accounts, account_name, "resource", resource);
if (altdomain != NULL) {
g_key_file_set_string(accounts, account_name, "server", altdomain);
@ -191,6 +192,16 @@ 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 = strdup("");
g_key_file_set_string(accounts, name, "password", account->password);
_save_accounts();
}
account->enabled = g_key_file_get_boolean(accounts, name, "enabled", NULL);
gchar *server = g_key_file_get_string(accounts, name, "server", NULL);
@ -288,6 +299,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);

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,7 @@ cons_show_account(ProfAccount *account)
cons_show ("enabled : FALSE");
}
cons_show ("jid : %s", account->jid);
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);