slidge 0.1.1__tar.gz → 0.1.3__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. {slidge-0.1.1 → slidge-0.1.3}/PKG-INFO +5 -4
  2. {slidge-0.1.1 → slidge-0.1.3}/README.md +2 -3
  3. {slidge-0.1.1 → slidge-0.1.3}/pyproject.toml +3 -1
  4. {slidge-0.1.1 → slidge-0.1.3}/slidge/core/gateway/base.py +1 -1
  5. {slidge-0.1.1 → slidge-0.1.3}/slidge/core/gateway/session_dispatcher.py +15 -0
  6. {slidge-0.1.1 → slidge-0.1.3}/slidge/group/participant.py +6 -6
  7. {slidge-0.1.1 → slidge-0.1.3}/LICENSE +0 -0
  8. {slidge-0.1.1 → slidge-0.1.3}/slidge/__init__.py +0 -0
  9. {slidge-0.1.1 → slidge-0.1.3}/slidge/__main__.py +0 -0
  10. {slidge-0.1.1 → slidge-0.1.3}/slidge/command/__init__.py +0 -0
  11. {slidge-0.1.1 → slidge-0.1.3}/slidge/command/adhoc.py +0 -0
  12. {slidge-0.1.1 → slidge-0.1.3}/slidge/command/admin.py +0 -0
  13. {slidge-0.1.1 → slidge-0.1.3}/slidge/command/base.py +0 -0
  14. {slidge-0.1.1 → slidge-0.1.3}/slidge/command/categories.py +0 -0
  15. {slidge-0.1.1 → slidge-0.1.3}/slidge/command/chat_command.py +0 -0
  16. {slidge-0.1.1 → slidge-0.1.3}/slidge/command/register.py +0 -0
  17. {slidge-0.1.1 → slidge-0.1.3}/slidge/command/user.py +0 -0
  18. {slidge-0.1.1 → slidge-0.1.3}/slidge/contact/__init__.py +0 -0
  19. {slidge-0.1.1 → slidge-0.1.3}/slidge/contact/contact.py +0 -0
  20. {slidge-0.1.1 → slidge-0.1.3}/slidge/contact/roster.py +0 -0
  21. {slidge-0.1.1 → slidge-0.1.3}/slidge/core/__init__.py +0 -0
  22. {slidge-0.1.1 → slidge-0.1.3}/slidge/core/cache.py +0 -0
  23. {slidge-0.1.1 → slidge-0.1.3}/slidge/core/config.py +0 -0
  24. {slidge-0.1.1 → slidge-0.1.3}/slidge/core/gateway/__init__.py +0 -0
  25. {slidge-0.1.1 → slidge-0.1.3}/slidge/core/gateway/caps.py +0 -0
  26. {slidge-0.1.1 → slidge-0.1.3}/slidge/core/gateway/delivery_receipt.py +0 -0
  27. {slidge-0.1.1 → slidge-0.1.3}/slidge/core/gateway/disco.py +0 -0
  28. {slidge-0.1.1 → slidge-0.1.3}/slidge/core/gateway/mam.py +0 -0
  29. {slidge-0.1.1 → slidge-0.1.3}/slidge/core/gateway/muc_admin.py +0 -0
  30. {slidge-0.1.1 → slidge-0.1.3}/slidge/core/gateway/ping.py +0 -0
  31. {slidge-0.1.1 → slidge-0.1.3}/slidge/core/gateway/presence.py +0 -0
  32. {slidge-0.1.1 → slidge-0.1.3}/slidge/core/gateway/registration.py +0 -0
  33. {slidge-0.1.1 → slidge-0.1.3}/slidge/core/gateway/search.py +0 -0
  34. {slidge-0.1.1 → slidge-0.1.3}/slidge/core/gateway/vcard_temp.py +0 -0
  35. {slidge-0.1.1 → slidge-0.1.3}/slidge/core/mixins/__init__.py +0 -0
  36. {slidge-0.1.1 → slidge-0.1.3}/slidge/core/mixins/attachment.py +0 -0
  37. {slidge-0.1.1 → slidge-0.1.3}/slidge/core/mixins/avatar.py +0 -0
  38. {slidge-0.1.1 → slidge-0.1.3}/slidge/core/mixins/base.py +0 -0
  39. {slidge-0.1.1 → slidge-0.1.3}/slidge/core/mixins/disco.py +0 -0
  40. {slidge-0.1.1 → slidge-0.1.3}/slidge/core/mixins/lock.py +0 -0
  41. {slidge-0.1.1 → slidge-0.1.3}/slidge/core/mixins/message.py +0 -0
  42. {slidge-0.1.1 → slidge-0.1.3}/slidge/core/mixins/message_maker.py +0 -0
  43. {slidge-0.1.1 → slidge-0.1.3}/slidge/core/mixins/presence.py +0 -0
  44. {slidge-0.1.1 → slidge-0.1.3}/slidge/core/mixins/recipient.py +0 -0
  45. {slidge-0.1.1 → slidge-0.1.3}/slidge/core/pubsub.py +0 -0
  46. {slidge-0.1.1 → slidge-0.1.3}/slidge/core/session.py +0 -0
  47. {slidge-0.1.1 → slidge-0.1.3}/slidge/group/__init__.py +0 -0
  48. {slidge-0.1.1 → slidge-0.1.3}/slidge/group/archive.py +0 -0
  49. {slidge-0.1.1 → slidge-0.1.3}/slidge/group/bookmarks.py +0 -0
  50. {slidge-0.1.1 → slidge-0.1.3}/slidge/group/room.py +0 -0
  51. {slidge-0.1.1 → slidge-0.1.3}/slidge/migration.py +0 -0
  52. {slidge-0.1.1 → slidge-0.1.3}/slidge/py.typed +0 -0
  53. {slidge-0.1.1 → slidge-0.1.3}/slidge/slixfix/__init__.py +0 -0
  54. {slidge-0.1.1 → slidge-0.1.3}/slidge/slixfix/link_preview/__init__.py +0 -0
  55. {slidge-0.1.1 → slidge-0.1.3}/slidge/slixfix/link_preview/link_preview.py +0 -0
  56. {slidge-0.1.1 → slidge-0.1.3}/slidge/slixfix/link_preview/stanza.py +0 -0
  57. {slidge-0.1.1 → slidge-0.1.3}/slidge/slixfix/roster.py +0 -0
  58. {slidge-0.1.1 → slidge-0.1.3}/slidge/slixfix/xep_0077/__init__.py +0 -0
  59. {slidge-0.1.1 → slidge-0.1.3}/slidge/slixfix/xep_0077/register.py +0 -0
  60. {slidge-0.1.1 → slidge-0.1.3}/slidge/slixfix/xep_0077/stanza.py +0 -0
  61. {slidge-0.1.1 → slidge-0.1.3}/slidge/slixfix/xep_0100/__init__.py +0 -0
  62. {slidge-0.1.1 → slidge-0.1.3}/slidge/slixfix/xep_0100/gateway.py +0 -0
  63. {slidge-0.1.1 → slidge-0.1.3}/slidge/slixfix/xep_0100/stanza.py +0 -0
  64. {slidge-0.1.1 → slidge-0.1.3}/slidge/slixfix/xep_0153/__init__.py +0 -0
  65. {slidge-0.1.1 → slidge-0.1.3}/slidge/slixfix/xep_0153/stanza.py +0 -0
  66. {slidge-0.1.1 → slidge-0.1.3}/slidge/slixfix/xep_0153/vcard_avatar.py +0 -0
  67. {slidge-0.1.1 → slidge-0.1.3}/slidge/slixfix/xep_0264/__init__.py +0 -0
  68. {slidge-0.1.1 → slidge-0.1.3}/slidge/slixfix/xep_0264/stanza.py +0 -0
  69. {slidge-0.1.1 → slidge-0.1.3}/slidge/slixfix/xep_0264/thumbnail.py +0 -0
  70. {slidge-0.1.1 → slidge-0.1.3}/slidge/slixfix/xep_0292/__init__.py +0 -0
  71. {slidge-0.1.1 → slidge-0.1.3}/slidge/slixfix/xep_0292/vcard4.py +0 -0
  72. {slidge-0.1.1 → slidge-0.1.3}/slidge/slixfix/xep_0313/__init__.py +0 -0
  73. {slidge-0.1.1 → slidge-0.1.3}/slidge/slixfix/xep_0313/mam.py +0 -0
  74. {slidge-0.1.1 → slidge-0.1.3}/slidge/slixfix/xep_0313/stanza.py +0 -0
  75. {slidge-0.1.1 → slidge-0.1.3}/slidge/slixfix/xep_0317/__init__.py +0 -0
  76. {slidge-0.1.1 → slidge-0.1.3}/slidge/slixfix/xep_0317/hats.py +0 -0
  77. {slidge-0.1.1 → slidge-0.1.3}/slidge/slixfix/xep_0317/stanza.py +0 -0
  78. {slidge-0.1.1 → slidge-0.1.3}/slidge/slixfix/xep_0356_old/__init__.py +0 -0
  79. {slidge-0.1.1 → slidge-0.1.3}/slidge/slixfix/xep_0356_old/privilege.py +0 -0
  80. {slidge-0.1.1 → slidge-0.1.3}/slidge/slixfix/xep_0356_old/stanza.py +0 -0
  81. {slidge-0.1.1 → slidge-0.1.3}/slidge/slixfix/xep_0424/__init__.py +0 -0
  82. {slidge-0.1.1 → slidge-0.1.3}/slidge/slixfix/xep_0424/retraction.py +0 -0
  83. {slidge-0.1.1 → slidge-0.1.3}/slidge/slixfix/xep_0424/stanza.py +0 -0
  84. {slidge-0.1.1 → slidge-0.1.3}/slidge/slixfix/xep_0490/__init__.py +0 -0
  85. {slidge-0.1.1 → slidge-0.1.3}/slidge/slixfix/xep_0490/mds.py +0 -0
  86. {slidge-0.1.1 → slidge-0.1.3}/slidge/slixfix/xep_0490/stanza.py +0 -0
  87. {slidge-0.1.1 → slidge-0.1.3}/slidge/util/__init__.py +0 -0
  88. {slidge-0.1.1 → slidge-0.1.3}/slidge/util/archive_msg.py +0 -0
  89. {slidge-0.1.1 → slidge-0.1.3}/slidge/util/conf.py +0 -0
  90. {slidge-0.1.1 → slidge-0.1.3}/slidge/util/db.py +0 -0
  91. {slidge-0.1.1 → slidge-0.1.3}/slidge/util/schema.sql +0 -0
  92. {slidge-0.1.1 → slidge-0.1.3}/slidge/util/sql.py +0 -0
  93. {slidge-0.1.1 → slidge-0.1.3}/slidge/util/test.py +0 -0
  94. {slidge-0.1.1 → slidge-0.1.3}/slidge/util/types.py +0 -0
  95. {slidge-0.1.1 → slidge-0.1.3}/slidge/util/util.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: slidge
3
- Version: 0.1.1
3
+ Version: 0.1.3
4
4
  Summary: XMPP bridging framework
5
5
  Home-page: https://sr.ht/~nicoco/slidge/
6
6
  License: AGPL-3.0-or-later
@@ -20,9 +20,11 @@ Requires-Dist: pickle-secure (>=0.99.9,<0.100.0)
20
20
  Requires-Dist: python-magic (>=0.4.27,<0.5.0)
21
21
  Requires-Dist: qrcode (>=7.4.1,<8.0.0)
22
22
  Requires-Dist: slixmpp (>=1.8.5,<2.0.0)
23
+ Project-URL: Documentation, https://slidge.im/
24
+ Project-URL: Repository, https://git.sr.ht/~nicoco/slidge/
23
25
  Description-Content-Type: text/markdown
24
26
 
25
- ![Slidge logo](./dev/assets/slidge-color-small.png)
27
+ ![Slidge logo](https://git.sr.ht/~nicoco/slidge/blob/master/dev/assets/slidge-color-small.png)
26
28
 
27
29
  [Home](https://sr.ht/~nicoco/slidge) |
28
30
  [Docs](https://slidge.im/core) |
@@ -66,8 +68,7 @@ bundle.
66
68
  Status
67
69
  ------
68
70
 
69
- Slidge is **beta**-grade software for 1:1 chats.
70
- Group chat support is **experimental**.
71
+ Slidge is **beta**-grade software. It support groups and 1:1 chats.
71
72
 
72
73
  Try slidge and give us some
73
74
  feedback, through the [MUC](xmpp:slidge@conference.nicoco.fr?join), the
@@ -1,4 +1,4 @@
1
- ![Slidge logo](./dev/assets/slidge-color-small.png)
1
+ ![Slidge logo](https://git.sr.ht/~nicoco/slidge/blob/master/dev/assets/slidge-color-small.png)
2
2
 
3
3
  [Home](https://sr.ht/~nicoco/slidge) |
4
4
  [Docs](https://slidge.im/core) |
@@ -42,8 +42,7 @@ bundle.
42
42
  Status
43
43
  ------
44
44
 
45
- Slidge is **beta**-grade software for 1:1 chats.
46
- Group chat support is **experimental**.
45
+ Slidge is **beta**-grade software. It support groups and 1:1 chats.
47
46
 
48
47
  Try slidge and give us some
49
48
  feedback, through the [MUC](xmpp:slidge@conference.nicoco.fr?join), the
@@ -1,11 +1,13 @@
1
1
  [tool.poetry]
2
2
  name = "slidge"
3
- version = "0.1.1"
3
+ version = "0.1.3"
4
4
  description = "XMPP bridging framework"
5
5
  authors = ["Nicolas Cedilnik <nicoco@nicoco.fr>"]
6
6
  readme = "README.md"
7
7
  license = "AGPL-3.0-or-later"
8
8
  homepage = "https://sr.ht/~nicoco/slidge/"
9
+ repository = "https://git.sr.ht/~nicoco/slidge/"
10
+ documentation = "https://slidge.im/"
9
11
  include = ["slidge/util/schema.sql"]
10
12
 
11
13
  [tool.poetry.dependencies]
@@ -521,7 +521,7 @@ class BaseGateway(
521
521
  self.send_message(
522
522
  mto=jid,
523
523
  mbody=f"{iq.get_from()} has registered",
524
- mtype="headline",
524
+ mtype="chat",
525
525
  mfrom=self.boundjid.bare,
526
526
  )
527
527
  session.send_gateway_message(self.WELCOME_MESSAGE)
@@ -448,6 +448,15 @@ class SessionDispatcher:
448
448
  entity.react(legacy_id, emojis, xmpp_id=xmpp_id, carbon=True)
449
449
 
450
450
  async def on_presence(self, p: Presence):
451
+ if p.get_plugin("muc_join", check=True):
452
+ # handled in on_groupchat_join
453
+ # without this early return, since we switch from and to in this
454
+ # presence stanza, on_groupchat_join ends up trying to instantiate
455
+ # a MUC with the user's JID, which in turn leads to slidge sending
456
+ # a (error) presence from=the user's JID, which terminates the
457
+ # XML stream.
458
+ return
459
+
451
460
  session = await self.__get_session(p)
452
461
 
453
462
  pto = p.get_to()
@@ -473,6 +482,12 @@ class SessionDispatcher:
473
482
  if muc is None or p.get_from().resource not in muc.user_resources:
474
483
  return
475
484
 
485
+ if pto.resource == muc.user_nick:
486
+ # Ignore presence stanzas with the valid nick.
487
+ # even if joined to the group, we might receive those from clients,
488
+ # when setting a status message, or going away, etc.
489
+ return
490
+
476
491
  # We can't use XMPPError here because from must be room@slidge/VALID-USER-NICK
477
492
 
478
493
  error_from = JID(muc.jid)
@@ -108,7 +108,7 @@ class LegacyParticipant(
108
108
  msg = self._make_message()
109
109
  msg["muc"]["affiliation"] = self._affiliation
110
110
  msg["type"] = "normal"
111
- if not self.muc.is_anonymous:
111
+ if not self.muc.is_anonymous and not self.is_system:
112
112
  if self.contact:
113
113
  msg["muc"]["jid"] = self.contact.jid
114
114
  else:
@@ -143,6 +143,7 @@ class LegacyParticipant(
143
143
 
144
144
  if self.is_system:
145
145
  self.jid = j
146
+ self._nickname_no_illegal = ""
146
147
  return
147
148
 
148
149
  nickname = unescaped_nickname
@@ -213,7 +214,6 @@ class LegacyParticipant(
213
214
 
214
215
  kwargs["status_codes"] = set()
215
216
  p = self._make_presence(ptype="available", last_seen=last_seen, **kwargs)
216
- self.__add_nick_element(p)
217
217
  self._send(p)
218
218
 
219
219
  if old:
@@ -235,7 +235,7 @@ class LegacyParticipant(
235
235
  codes = status_codes or set()
236
236
  if self.is_user:
237
237
  codes.add(110)
238
- if not self.muc.is_anonymous:
238
+ if not self.muc.is_anonymous and not self.is_system:
239
239
  if self.is_user:
240
240
  if user_full_jid:
241
241
  p["muc"]["jid"] = user_full_jid
@@ -301,6 +301,7 @@ class LegacyParticipant(
301
301
  **send_kwargs,
302
302
  ) -> MessageOrPresenceTypeVar:
303
303
  stanza["occupant-id"]["id"] = self.__occupant_id
304
+ self.__add_nick_element(stanza)
304
305
  if isinstance(stanza, Presence):
305
306
  if stanza["type"] == "unavailable" and not self.__presence_sent:
306
307
  return stanza # type:ignore
@@ -344,11 +345,11 @@ class LegacyParticipant(
344
345
  )
345
346
  return item
346
347
 
347
- def __add_nick_element(self, p: Presence):
348
+ def __add_nick_element(self, stanza: Union[Presence, Message]):
348
349
  if (nick := self._nickname_no_illegal) != self.jid.resource:
349
350
  n = self.xmpp.plugin["xep_0172"].stanza.UserNick()
350
351
  n["nick"] = nick
351
- p.append(n)
352
+ stanza.append(n)
352
353
 
353
354
  def _get_last_presence(self) -> Optional[CachedPresence]:
354
355
  own = super()._get_last_presence()
@@ -400,7 +401,6 @@ class LegacyParticipant(
400
401
  )
401
402
  if presence_id:
402
403
  p["id"] = presence_id
403
- self.__add_nick_element(p)
404
404
  self._send(p, full_jid)
405
405
 
406
406
  def leave(self):
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes