| ... |
... |
@@ -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():
|