mirror of
https://github.com/profanity-im/profanity.git
synced 2025-01-03 14:57:42 -05: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:
parent
3cc080b06a
commit
480589f0ae
@ -20,6 +20,7 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@ -68,6 +69,7 @@ typedef struct cmd_t {
|
|||||||
|
|
||||||
typedef char*(*autocompleter)(char*, int*);
|
typedef char*(*autocompleter)(char*, int*);
|
||||||
|
|
||||||
|
static void _ask_password(char * passwd);
|
||||||
static void _update_presence(const resource_presence_t presence,
|
static void _update_presence(const resource_presence_t presence,
|
||||||
const char * const show, gchar **args);
|
const char * const show, gchar **args);
|
||||||
static gboolean _cmd_set_boolean_preference(gchar *arg, struct cmd_help_t help,
|
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 *lower = g_utf8_strdown(user, -1);
|
||||||
char *jid;
|
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);
|
ProfAccount *account = accounts_get_account(lower);
|
||||||
if (account != NULL) {
|
if (account != NULL) {
|
||||||
if (account->resource != NULL) {
|
if (account->resource != NULL) {
|
||||||
@ -1361,9 +1356,16 @@ _cmd_connect(gchar **args, struct cmd_help_t help)
|
|||||||
} else {
|
} else {
|
||||||
jid = strdup(account->jid);
|
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);
|
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 {
|
} else {
|
||||||
|
char passwd[21];
|
||||||
|
_ask_password(passwd);
|
||||||
jid = strdup(lower);
|
jid = strdup(lower);
|
||||||
cons_show("Connecting as %s", jid);
|
cons_show("Connecting as %s", jid);
|
||||||
conn_status = jabber_connect_with_details(jid, passwd, altdomain);
|
conn_status = jabber_connect_with_details(jid, passwd, altdomain);
|
||||||
@ -3525,6 +3527,18 @@ _cmd_xa(gchar **args, struct cmd_help_t help)
|
|||||||
return TRUE;
|
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
|
// helper function for status change commands
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -133,6 +133,7 @@ accounts_add(const char *account_name, const char *altdomain)
|
|||||||
if (!g_key_file_has_group(accounts, account_name)) {
|
if (!g_key_file_has_group(accounts, account_name)) {
|
||||||
g_key_file_set_boolean(accounts, account_name, "enabled", TRUE);
|
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, "jid", barejid);
|
||||||
|
g_key_file_set_string(accounts, account_name, "password", "");
|
||||||
g_key_file_set_string(accounts, account_name, "resource", resource);
|
g_key_file_set_string(accounts, account_name, "resource", resource);
|
||||||
if (altdomain != NULL) {
|
if (altdomain != NULL) {
|
||||||
g_key_file_set_string(accounts, account_name, "server", altdomain);
|
g_key_file_set_string(accounts, account_name, "server", altdomain);
|
||||||
@ -191,6 +192,16 @@ accounts_get_account(const char * const name)
|
|||||||
_save_accounts();
|
_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);
|
account->enabled = g_key_file_get_boolean(accounts, name, "enabled", NULL);
|
||||||
|
|
||||||
gchar *server = g_key_file_get_string(accounts, name, "server", NULL);
|
gchar *server = g_key_file_get_string(accounts, name, "server", NULL);
|
||||||
@ -288,6 +299,7 @@ accounts_free_account(ProfAccount *account)
|
|||||||
if (account != NULL) {
|
if (account != NULL) {
|
||||||
free(account->name);
|
free(account->name);
|
||||||
free(account->jid);
|
free(account->jid);
|
||||||
|
free(account->password);
|
||||||
free(account->resource);
|
free(account->resource);
|
||||||
free(account->server);
|
free(account->server);
|
||||||
free(account->last_presence);
|
free(account->last_presence);
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
typedef struct prof_account_t {
|
typedef struct prof_account_t {
|
||||||
gchar *name;
|
gchar *name;
|
||||||
gchar *jid;
|
gchar *jid;
|
||||||
|
gchar *password;
|
||||||
gchar *resource;
|
gchar *resource;
|
||||||
gchar *server;
|
gchar *server;
|
||||||
gchar *last_presence;
|
gchar *last_presence;
|
||||||
|
@ -793,6 +793,7 @@ cons_show_account(ProfAccount *account)
|
|||||||
cons_show ("enabled : FALSE");
|
cons_show ("enabled : FALSE");
|
||||||
}
|
}
|
||||||
cons_show ("jid : %s", account->jid);
|
cons_show ("jid : %s", account->jid);
|
||||||
|
cons_show ("password : [redacted]");
|
||||||
if (account->resource != NULL) {
|
if (account->resource != NULL) {
|
||||||
cons_show ("resource : %s", account->resource);
|
cons_show ("resource : %s", account->resource);
|
||||||
}
|
}
|
||||||
|
@ -109,21 +109,20 @@ jabber_init(const int disable_tls)
|
|||||||
}
|
}
|
||||||
|
|
||||||
jabber_conn_status_t
|
jabber_conn_status_t
|
||||||
jabber_connect_with_account(const ProfAccount * const account,
|
jabber_connect_with_account(const ProfAccount * const account)
|
||||||
const char * const passwd)
|
|
||||||
{
|
{
|
||||||
assert(account != NULL);
|
assert(account != NULL);
|
||||||
assert(passwd != NULL);
|
|
||||||
|
|
||||||
log_info("Connecting using account: %s", account->name);
|
log_info("Connecting using account: %s", account->name);
|
||||||
|
|
||||||
// save account name and password for reconnect
|
// save account name and password for reconnect
|
||||||
saved_account.name = strdup(account->name);
|
saved_account.name = strdup(account->name);
|
||||||
saved_account.passwd = strdup(passwd);
|
saved_account.passwd = strdup(account->password);
|
||||||
|
|
||||||
// connect with fulljid
|
// connect with fulljid
|
||||||
Jid *jidp = jid_create_from_bare_and_resource(account->jid, account->resource);
|
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);
|
jid_destroy(jidp);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
@ -78,8 +78,7 @@ typedef struct disco_identity_t {
|
|||||||
void jabber_init(const int disable_tls);
|
void jabber_init(const int disable_tls);
|
||||||
jabber_conn_status_t jabber_connect_with_details(const char * const jid,
|
jabber_conn_status_t jabber_connect_with_details(const char * const jid,
|
||||||
const char * const passwd, const char * const altdomain);
|
const char * const passwd, const char * const altdomain);
|
||||||
jabber_conn_status_t jabber_connect_with_account(const ProfAccount * const account,
|
jabber_conn_status_t jabber_connect_with_account(const ProfAccount * const account);
|
||||||
const char * const passwd);
|
|
||||||
void jabber_disconnect(void);
|
void jabber_disconnect(void);
|
||||||
void jabber_shutdown(void);
|
void jabber_shutdown(void);
|
||||||
void jabber_process_events(void);
|
void jabber_process_events(void);
|
||||||
|
Loading…
Reference in New Issue
Block a user