Fix #2186 (muc password in the config file)

Also use the passwords on start, and automatically use a password with
/join if there is one.
This commit is contained in:
mathieui 2012-12-20 18:50:34 +01:00
parent 519f3afe06
commit 2a980838a9
3 changed files with 17 additions and 4 deletions

View file

@ -531,6 +531,10 @@ foo = true
loaded from the log files. 0 or a negative value here disable that option. loaded from the log files. 0 or a negative value here disable that option.
No value makes poezio fall back to the global value. No value makes poezio fall back to the global value.
*password:: [empty]
The password needed to join the room.
*private_auto_response*:: "Not in private, please." *private_auto_response*:: "Not in private, please."
The message you want to be sent when someone tries to message you. The message you want to be sent when someone tries to message you.

View file

@ -73,6 +73,8 @@ class Bookmark(object):
if self.nick: if self.nick:
local += '/%s' % self.nick local += '/%s' % self.nick
local += ':' local += ':'
if self.password:
config.set_and_save('password', self.password, section=self.jid)
return local return local
def parse_from_element(el, method=None): def parse_from_element(el, method=None):
@ -211,6 +213,7 @@ def get_local():
nick = jid.resource nick = jid.resource
else: else:
nick = None nick = None
b = Bookmark(jid.bare, autojoin=True, nick=nick, method='local') passwd = config.get_by_tabname('password', '', jid.bare, fallback=False) or None
b = Bookmark(jid.bare, autojoin=True, nick=nick, password=passwd, method='local')
if not get_by_jid(b.jid): if not get_by_jid(b.jid):
bookmarks.append(b) bookmarks.append(b)

View file

@ -165,7 +165,7 @@ class Core(object):
'move_tab': (self.command_move_tab, _("Usage: /move_tab <source> <destination>\nMove Tab: Insert the <source> tab at the position of <destination>. This will make the following tabs shift in some cases (refer to the documentation). A tab can be designated by its number or by the beginning of its address."), self.completion_move_tab), 'move_tab': (self.command_move_tab, _("Usage: /move_tab <source> <destination>\nMove Tab: Insert the <source> tab at the position of <destination>. This will make the following tabs shift in some cases (refer to the documentation). A tab can be designated by its number or by the beginning of its address."), self.completion_move_tab),
'show': (self.command_status, _('Usage: /show <availability> [status message]\nShow: Sets your availability and (optionally) your status message. The <availability> argument is one of \"available, chat, away, afk, dnd, busy, xa\" and the optional [status message] argument will be your status message.'), self.completion_status), 'show': (self.command_status, _('Usage: /show <availability> [status message]\nShow: Sets your availability and (optionally) your status message. The <availability> argument is one of \"available, chat, away, afk, dnd, busy, xa\" and the optional [status message] argument will be your status message.'), self.completion_status),
'status': (self.command_status, _('Usage: /status <availability> [status message]\nStatus: Sets your availability and (optionally) your status message. The <availability> argument is one of \"available, chat, away, afk, dnd, busy, xa\" and the optional [status message] argument will be your status message.'), self.completion_status), 'status': (self.command_status, _('Usage: /status <availability> [status message]\nStatus: Sets your availability and (optionally) your status message. The <availability> argument is one of \"available, chat, away, afk, dnd, busy, xa\" and the optional [status message] argument will be your status message.'), self.completion_status),
'bookmark_local': (self.command_bookmark_local, _("Usage: /bookmark_local [roomname][/nick]\nBookmark Local: Bookmark locally the specified room (you will then auto-join it on each poezio start). This commands uses almost the same syntaxe as /join. Type /help join for syntaxe examples. Note that when typing \"/bookmark\" on its own, the room will be bookmarked with the nickname you\'re currently using in this room (instead of default_nick)"), self.completion_bookmark_local), 'bookmark_local': (self.command_bookmark_local, _("Usage: /bookmark_local [roomname][/nick] [password]\nBookmark Local: Bookmark locally the specified room (you will then auto-join it on each poezio start). This commands uses almost the same syntaxe as /join. Type /help join for syntaxe examples. Note that when typing \"/bookmark\" on its own, the room will be bookmarked with the nickname you\'re currently using in this room (instead of default_nick)"), self.completion_bookmark_local),
'bookmark': (self.command_bookmark, _("Usage: /bookmark [roomname][/nick] [autojoin] [password]\nBookmark: Bookmark online the specified room (you will then auto-join it on each poezio start if autojoin is specified and is 'true'). This commands uses almost the same syntaxe as /join. Type /help join for syntaxe examples. Note that when typing \"/bookmark\" on its own, the room will be bookmarked with the nickname you\'re currently using in this room (instead of default_nick)"), self.completion_bookmark), 'bookmark': (self.command_bookmark, _("Usage: /bookmark [roomname][/nick] [autojoin] [password]\nBookmark: Bookmark online the specified room (you will then auto-join it on each poezio start if autojoin is specified and is 'true'). This commands uses almost the same syntaxe as /join. Type /help join for syntaxe examples. Note that when typing \"/bookmark\" on its own, the room will be bookmarked with the nickname you\'re currently using in this room (instead of default_nick)"), self.completion_bookmark),
'set': (self.command_set, _("Usage: /set [plugin|][section] <option> [value]\nSet: Set the value of an option in your configuration file. You can, for example, change your default nickname by doing `/set default_nick toto` or your resource with `/set resource blabla`. You can also set options in specific sections with `/set bindings M-i ^i` or in specific plugin with `/set mpd_client| host 127.0.0.1`. `toggle` can be used as a special value to toggle a boolean option."), self.completion_set), 'set': (self.command_set, _("Usage: /set [plugin|][section] <option> [value]\nSet: Set the value of an option in your configuration file. You can, for example, change your default nickname by doing `/set default_nick toto` or your resource with `/set resource blabla`. You can also set options in specific sections with `/set bindings M-i ^i` or in specific plugin with `/set mpd_client| host 127.0.0.1`. `toggle` can be used as a special value to toggle a boolean option."), self.completion_set),
'theme': (self.command_theme, _('Usage: /theme [theme_name]\nTheme: Reload the theme defined in the config file. If theme_name is provided, set that theme before reloading it.'), self.completion_theme), 'theme': (self.command_theme, _('Usage: /theme [theme_name]\nTheme: Reload the theme defined in the config file. If theme_name is provided, set that theme before reloading it.'), self.completion_theme),
@ -1695,6 +1695,8 @@ class Core(object):
histo_length= None histo_length= None
if histo_length is not None: if histo_length is not None:
histo_length= str(histo_length) histo_length= str(histo_length)
if password is None: # try to use a saved password
password = config.get_by_tabname('password', None, room, fallback=False)
if tab and not tab.joined: if tab and not tab.joined:
delta = datetime.now() - tab.last_connection delta = datetime.now() - tab.last_connection
seconds = delta.seconds + delta.days * 24 * 3600 if tab.last_connection is not None else 0 seconds = delta.seconds + delta.days * 24 * 3600 if tab.last_connection is not None else 0
@ -1757,10 +1759,11 @@ class Core(object):
def command_bookmark_local(self, arg=''): def command_bookmark_local(self, arg=''):
""" """
/bookmark_local [room][/nick] /bookmark_local [room][/nick] [password]
""" """
args = common.shell_split(arg) args = common.shell_split(arg)
nick = None nick = None
password = None
if len(args) == 0 and not isinstance(self.current_tab(), tabs.MucTab): if len(args) == 0 and not isinstance(self.current_tab(), tabs.MucTab):
return return
if len(args) == 0: if len(args) == 0:
@ -1790,6 +1793,8 @@ class Core(object):
if not isinstance(self.current_tab(), tabs.MucTab): if not isinstance(self.current_tab(), tabs.MucTab):
return return
roomname = self.current_tab().get_name() roomname = self.current_tab().get_name()
if len(args) > 1:
password = args[1]
bm = bookmark.get_by_jid(roomname) bm = bookmark.get_by_jid(roomname)
if not bm: if not bm:
@ -1801,6 +1806,7 @@ class Core(object):
if nick: if nick:
bm.nick = nick bm.nick = nick
bm.autojoin = True bm.autojoin = True
bm.password = password
bm.method = "local" bm.method = "local"
bookmark.save_local() bookmark.save_local()
self.information(_('Your local bookmarks are now: %s') % self.information(_('Your local bookmarks are now: %s') %
@ -2778,7 +2784,7 @@ class Core(object):
histo_length= None histo_length= None
if histo_length is not None: if histo_length is not None:
histo_length= str(histo_length) histo_length= str(histo_length)
muc.join_groupchat(self.xmpp, bm.jid, nick, None, histo_length) muc.join_groupchat(self.xmpp, bm.jid, nick, bm.password, histo_length)
### Other handlers ### ### Other handlers ###