aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--protocols/jabber/jabber.c8
-rw-r--r--protocols/twitter/twitter.c4
-rw-r--r--root_commands.c24
-rw-r--r--set.c28
-rw-r--r--set.h4
5 files changed, 37 insertions, 31 deletions
diff --git a/protocols/jabber/jabber.c b/protocols/jabber/jabber.c
index 11980d13..71287842 100644
--- a/protocols/jabber/jabber.c
+++ b/protocols/jabber/jabber.c
@@ -60,7 +60,7 @@ static void jabber_init( account_t *acc )
s = set_add( &acc->set, "activity_timeout", "600", set_eval_int, acc );
- s = set_add( &acc->set, "oauth", "false", set_eval_bool, acc );
+ s = set_add( &acc->set, "oauth", "false", set_eval_oauth, acc );
g_snprintf( str, sizeof( str ), "%d", jabber_port_list[0] );
s = set_add( &acc->set, "port", str, set_eval_int, acc );
@@ -75,6 +75,9 @@ static void jabber_init( account_t *acc )
s = set_add( &acc->set, "resource_select", "activity", NULL, acc );
+ s = set_add( &acc->set, "sasl", "true", set_eval_bool, acc );
+ s->flags |= ACC_SET_OFFLINE_ONLY | SET_HIDDEN_DEFAULT;
+
s = set_add( &acc->set, "server", NULL, set_eval_account, acc );
s->flags |= ACC_SET_NOSAVE | ACC_SET_OFFLINE_ONLY | SET_NULL_OK;
@@ -83,9 +86,6 @@ static void jabber_init( account_t *acc )
s = set_add( &acc->set, "tls", "try", set_eval_tls, acc );
s->flags |= ACC_SET_OFFLINE_ONLY;
-
- s = set_add( &acc->set, "sasl", "true", set_eval_bool, acc );
- s->flags |= ACC_SET_OFFLINE_ONLY | SET_HIDDEN_DEFAULT;
s = set_add( &acc->set, "user_agent", "BitlBee", NULL, acc );
diff --git a/protocols/twitter/twitter.c b/protocols/twitter/twitter.c
index 76ccc3eb..1cf0b0b5 100644
--- a/protocols/twitter/twitter.c
+++ b/protocols/twitter/twitter.c
@@ -239,12 +239,12 @@ static void twitter_init(account_t * acc)
s = set_add(&acc->set, "mode", "chat", set_eval_mode, acc);
s->flags |= ACC_SET_OFFLINE_ONLY;
+ s = set_add(&acc->set, "oauth", def_oauth, set_eval_oauth, acc);
+
s = set_add(&acc->set, "show_ids", "false", set_eval_bool, acc);
s->flags |= ACC_SET_OFFLINE_ONLY;
s = set_add(&acc->set, "show_old_mentions", "true", set_eval_bool, acc);
-
- s = set_add(&acc->set, "oauth", def_oauth, set_eval_bool, acc);
}
/**
diff --git a/root_commands.c b/root_commands.c
index 734cb0e8..f8f2e578 100644
--- a/root_commands.c
+++ b/root_commands.c
@@ -442,9 +442,27 @@ static void cmd_account( irc_t *irc, char **cmd )
set_setstr( &a->set, "server", cmd[5] );
}
- irc_rootmsg( irc, "Account successfully added with tag %s%s",
- a->tag, cmd[4] ? "" :
- ", now use /OPER to enter the password" );
+ irc_rootmsg( irc, "Account successfully added with tag %s", a->tag );
+
+ if( cmd[4] == NULL )
+ {
+ set_t *oauth = set_find( &a->set, "oauth" );
+ if( oauth && bool2int( set_value( oauth ) ) )
+ {
+ *a->pass = '\0';
+ irc_rootmsg( irc, "No need to enter a password for this "
+ "account since it's using OAuth" );
+ }
+ else
+ {
+ irc_rootmsg( irc, "You can now use the /OPER command to "
+ "enter the password" );
+ if( oauth )
+ irc_rootmsg( irc, "Alternatively, enable oauth if "
+ "the account supports it: account %s "
+ "set oauth on", a->tag );
+ }
+ }
return;
}
diff --git a/set.c b/set.c
index b35be708..a1eb9f03 100644
--- a/set.c
+++ b/set.c
@@ -84,7 +84,7 @@ char *set_getstr( set_t **head, const char *key )
if( !s || ( !s->value && !s->def ) )
return NULL;
- return s->value ? s->value : s->def;
+ return set_value( s );
}
int set_getint( set_t **head, const char *key )
@@ -249,26 +249,12 @@ char *set_eval_to_char( set_t *set, char *value )
return s;
}
-/*
-char *set_eval_ops( set_t *set, char *value )
+char *set_eval_oauth( set_t *set, char *value )
{
- irc_t *irc = set->data;
-
- if( g_strcasecmp( value, "user" ) == 0 )
- irc_write( irc, ":%s!%s@%s MODE %s %s %s %s", irc->mynick, irc->mynick, irc->myhost,
- irc->channel, "+o-o", irc->nick, irc->mynick );
- else if( g_strcasecmp( value, "root" ) == 0 )
- irc_write( irc, ":%s!%s@%s MODE %s %s %s %s", irc->mynick, irc->mynick, irc->myhost,
- irc->channel, "-o+o", irc->nick, irc->mynick );
- else if( g_strcasecmp( value, "both" ) == 0 )
- irc_write( irc, ":%s!%s@%s MODE %s %s %s %s", irc->mynick, irc->mynick, irc->myhost,
- irc->channel, "+oo", irc->nick, irc->mynick );
- else if( g_strcasecmp( value, "none" ) == 0 )
- irc_write( irc, ":%s!%s@%s MODE %s %s %s %s", irc->mynick, irc->mynick, irc->myhost,
- irc->channel, "-oo", irc->nick, irc->mynick );
- else
- return SET_INVALID;
+ account_t *acc = set->data;
- return value;
+ if( bool2int( value ) && strcmp( acc->pass, PASSWORD_PENDING ) == 0 )
+ *acc->pass = '\0';
+
+ return set_eval_bool( set, value );
}
-*/
diff --git a/set.h b/set.h
index f4f56f88..d4915546 100644
--- a/set.h
+++ b/set.h
@@ -76,6 +76,8 @@ typedef struct set
struct set *next;
} set_t;
+#define set_value( set ) ((set)->value) ? ((set)->value) : ((set)->def)
+
/* Should be pretty clear. */
set_t *set_add( set_t **head, const char *key, const char *def, set_eval eval, void *data );
@@ -110,6 +112,6 @@ char *set_eval_list( set_t *set, char *value );
/* Some not very generic evaluators that really shouldn't be here... */
char *set_eval_to_char( set_t *set, char *value );
-char *set_eval_ops( set_t *set, char *value );
+char *set_eval_oauth( set_t *set, char *value );
#endif /* __SET_H__ */