Philipp Hörist pushed to branch master at gajim / python-nbxmpp

Commits:

1 changed file:

Changes:

  • nbxmpp/modules/bookmarks.py
    ... ... @@ -21,6 +21,7 @@ from nbxmpp.protocol import Node
    21 21
     from nbxmpp.protocol import Iq
    
    22 22
     from nbxmpp.protocol import JID
    
    23 23
     from nbxmpp.protocol import NodeProcessed
    
    24
    +from nbxmpp.protocol import validate_resourcepart
    
    24 25
     from nbxmpp.structs import StanzaHandler
    
    25 26
     from nbxmpp.structs import BookmarkData
    
    26 27
     from nbxmpp.const import BookmarkStoreType
    
    ... ... @@ -129,61 +130,75 @@ class Bookmarks(BaseModule):
    129 130
             bookmarks = []
    
    130 131
             confs = storage.getTags('conference')
    
    131 132
             for conf in confs:
    
    132
    -            autojoin = conf.getAttr('autojoin')
    
    133
    -            if autojoin is None:
    
    134
    -                autojoin = False
    
    135
    -            else:
    
    136
    -                try:
    
    137
    -                    autojoin = from_xs_boolean(autojoin)
    
    138
    -                except ValueError as error:
    
    139
    -                    self._log.warning(error)
    
    140
    -                    self._log.warning(storage)
    
    141
    -                    autojoin = False
    
    142
    -
    
    143 133
                 try:
    
    144 134
                     jid = JID(conf.getAttr('jid'))
    
    145 135
                 except Exception as error:
    
    146
    -                self._log.warning('Invalid JID: %s, %s',
    
    147
    -                                  conf.getAttr('jid'), error)
    
    136
    +                self._log.warning('Invalid JID: "%s", %s',
    
    137
    +                                  conf.getAttr('jid'),
    
    138
    +                                  error)
    
    148 139
                     continue
    
    149 140
     
    
    141
    +            autojoin = self._parse_autojoin(conf.getAttr('autojoin'))
    
    142
    +            nick = self._parse_nickname(conf.getTagData('nick'))
    
    143
    +            name = conf.getAttr('name') or None
    
    144
    +            password = conf.getTagData('password') or None
    
    145
    +
    
    150 146
                 bookmark = BookmarkData(
    
    151 147
                     jid=jid,
    
    152
    -                name=conf.getAttr('name'),
    
    148
    +                name=name,
    
    153 149
                     autojoin=autojoin,
    
    154
    -                password=conf.getTagData('password'),
    
    155
    -                nick=conf.getTagData('nick'))
    
    150
    +                password=password,
    
    151
    +                nick=nick)
    
    156 152
                 bookmarks.append(bookmark)
    
    157 153
     
    
    158 154
             return bookmarks
    
    159 155
     
    
    160 156
         def _parse_bookmarks2(self, item):
    
    161
    -        jid = item.getAttr('id')
    
    162
    -        if jid is None:
    
    163
    -            self._log.warning('No id attr found')
    
    164
    -            return None
    
    165
    -
    
    166
    -        try:
    
    167
    -            jid = JID(jid)
    
    168
    -        except Exception as error:
    
    169
    -            self._log.warning('Invalid JID: %s', error)
    
    170
    -            self._log.warning(item)
    
    171
    -            return None
    
    172
    -
    
    173 157
             conference = item.getTag('conference', namespace=Namespace.BOOKMARKS_2)
    
    174 158
             if conference is None:
    
    175 159
                 self._log.warning('No conference node found')
    
    176 160
                 self._log.warning(item)
    
    177 161
                 return None
    
    178 162
     
    
    179
    -        autojoin = conference.getAttr('autojoin') in ('True', 'true', '1')
    
    180
    -        name = conference.getAttr('name')
    
    181
    -        nick = conference.getTagData('nick')
    
    163
    +        try:
    
    164
    +            jid = JID(item.getAttr('id'))
    
    165
    +        except Exception as error:
    
    166
    +            self._log.warning('Invalid JID: "%s", %s',
    
    167
    +                              item.getAttr('id'),
    
    168
    +                              error)
    
    169
    +            return None
    
    170
    +
    
    171
    +        autojoin = self._parse_autojoin(conference.getAttr('autojoin'))
    
    172
    +        nick = self._parse_nickname(conference.getTagData('nick'))
    
    173
    +        name = conference.getAttr('name') or None
    
    174
    +        password = conference.getTagData('password') or None
    
    182 175
     
    
    183 176
             return BookmarkData(jid=jid,
    
    184
    -                            name=name or None,
    
    177
    +                            name=name,
    
    185 178
                                 autojoin=autojoin,
    
    186
    -                            nick=nick or None)
    
    179
    +                            password=password,
    
    180
    +                            nick=nick)
    
    181
    +
    
    182
    +    def _parse_nickname(self, nick):
    
    183
    +        if nick is None:
    
    184
    +            return None
    
    185
    +
    
    186
    +        try:
    
    187
    +            return validate_resourcepart(nick)
    
    188
    +        except Exception as error:
    
    189
    +            self._log.warning('Invalid nick: %s, %s', nick, error)
    
    190
    +            return None
    
    191
    +
    
    192
    +    def _parse_autojoin(self, autojoin):
    
    193
    +        if autojoin is None:
    
    194
    +            return False
    
    195
    +
    
    196
    +        try:
    
    197
    +            return from_xs_boolean(autojoin)
    
    198
    +        except ValueError as error:
    
    199
    +            self._log.warning('Invalid autojoin attribute: (%s) %s',
    
    200
    +                              autojoin, error)
    
    201
    +            return False
    
    187 202
     
    
    188 203
         @staticmethod
    
    189 204
         def get_private_request():