slidge 0.2.0a8__py3-none-any.whl → 0.2.0a10__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- slidge/__version__.py +1 -1
- slidge/command/adhoc.py +1 -1
- slidge/command/base.py +4 -4
- slidge/contact/contact.py +3 -2
- slidge/contact/roster.py +7 -0
- slidge/core/dispatcher/__init__.py +3 -0
- slidge/core/{gateway → dispatcher}/caps.py +6 -4
- slidge/core/{gateway → dispatcher}/disco.py +11 -17
- slidge/core/dispatcher/message/__init__.py +10 -0
- slidge/core/dispatcher/message/chat_state.py +40 -0
- slidge/core/dispatcher/message/marker.py +67 -0
- slidge/core/dispatcher/message/message.py +397 -0
- slidge/core/dispatcher/muc/__init__.py +12 -0
- slidge/core/dispatcher/muc/admin.py +98 -0
- slidge/core/{gateway → dispatcher/muc}/mam.py +26 -15
- slidge/core/dispatcher/muc/misc.py +118 -0
- slidge/core/dispatcher/muc/owner.py +96 -0
- slidge/core/{gateway → dispatcher/muc}/ping.py +10 -15
- slidge/core/dispatcher/presence.py +177 -0
- slidge/core/{gateway → dispatcher}/registration.py +23 -2
- slidge/core/{gateway → dispatcher}/search.py +9 -14
- slidge/core/dispatcher/session_dispatcher.py +84 -0
- slidge/core/dispatcher/util.py +174 -0
- slidge/core/{gateway/vcard_temp.py → dispatcher/vcard.py} +26 -12
- slidge/core/{gateway/base.py → gateway.py} +42 -137
- slidge/core/mixins/attachment.py +7 -2
- slidge/core/mixins/base.py +2 -2
- slidge/core/mixins/message.py +10 -4
- slidge/core/pubsub.py +2 -1
- slidge/core/session.py +28 -2
- slidge/db/alembic/versions/45c24cc73c91_add_bob.py +42 -0
- slidge/db/models.py +13 -0
- slidge/db/store.py +128 -2
- slidge/{core/gateway → slixfix}/delivery_receipt.py +1 -1
- slidge/util/test.py +5 -1
- slidge/util/types.py +6 -0
- slidge/util/util.py +5 -2
- {slidge-0.2.0a8.dist-info → slidge-0.2.0a10.dist-info}/METADATA +2 -1
- {slidge-0.2.0a8.dist-info → slidge-0.2.0a10.dist-info}/RECORD +42 -33
- slidge/core/gateway/__init__.py +0 -3
- slidge/core/gateway/muc_admin.py +0 -35
- slidge/core/gateway/presence.py +0 -95
- slidge/core/gateway/session_dispatcher.py +0 -895
- {slidge-0.2.0a8.dist-info → slidge-0.2.0a10.dist-info}/LICENSE +0 -0
- {slidge-0.2.0a8.dist-info → slidge-0.2.0a10.dist-info}/WHEEL +0 -0
- {slidge-0.2.0a8.dist-info → slidge-0.2.0a10.dist-info}/entry_points.txt +0 -0
slidge/util/test.py
CHANGED
@@ -287,7 +287,11 @@ class SlidgeTest(SlixTestPlus):
|
|
287
287
|
session.execute(delete(Contact))
|
288
288
|
session.commit()
|
289
289
|
|
290
|
-
self.run_coro(
|
290
|
+
self.run_coro(
|
291
|
+
self.xmpp._BaseGateway__dispatcher._on_user_register(
|
292
|
+
Iq(sfrom="romeo@montague.lit/gajim")
|
293
|
+
)
|
294
|
+
)
|
291
295
|
welcome = self.next_sent()
|
292
296
|
assert welcome["body"]
|
293
297
|
stanza = self.next_sent()
|
slidge/util/types.py
CHANGED
@@ -207,3 +207,9 @@ class CachedPresence(NamedTuple):
|
|
207
207
|
ptype: Optional[PresenceTypes] = None
|
208
208
|
pstatus: Optional[str] = None
|
209
209
|
pshow: Optional[PresenceShows] = None
|
210
|
+
|
211
|
+
|
212
|
+
class Sticker(NamedTuple):
|
213
|
+
path: Path
|
214
|
+
content_type: Optional[str]
|
215
|
+
hashes: dict[str, str]
|
slidge/util/util.py
CHANGED
@@ -7,7 +7,7 @@ from abc import ABCMeta
|
|
7
7
|
from functools import wraps
|
8
8
|
from pathlib import Path
|
9
9
|
from time import time
|
10
|
-
from typing import TYPE_CHECKING, Callable, NamedTuple, Optional, Type
|
10
|
+
from typing import TYPE_CHECKING, Callable, NamedTuple, Optional, Type, TypeVar
|
11
11
|
|
12
12
|
from .types import Mention, ResourceDict
|
13
13
|
|
@@ -276,7 +276,10 @@ def deprecated(name: str, new: Callable):
|
|
276
276
|
return wrapped
|
277
277
|
|
278
278
|
|
279
|
-
|
279
|
+
T = TypeVar("T", bound=NamedTuple)
|
280
|
+
|
281
|
+
|
282
|
+
def dict_to_named_tuple(data: dict, cls: Type[T]) -> T:
|
280
283
|
return cls(*(data.get(f) for f in cls._fields)) # type:ignore
|
281
284
|
|
282
285
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: slidge
|
3
|
-
Version: 0.2.
|
3
|
+
Version: 0.2.0a10
|
4
4
|
Summary: XMPP bridging framework
|
5
5
|
Home-page: https://sr.ht/~nicoco/slidge/
|
6
6
|
License: AGPL-3.0-or-later
|
@@ -16,6 +16,7 @@ Requires-Dist: ConfigArgParse (>=1.5.3,<2.0.0)
|
|
16
16
|
Requires-Dist: Pillow (>=10,<11)
|
17
17
|
Requires-Dist: aiohttp[speedups] (>=3.8.3,<4.0.0)
|
18
18
|
Requires-Dist: alembic (>=1.13.1,<2.0.0)
|
19
|
+
Requires-Dist: defusedxml (>=0.7.1,<0.8.0)
|
19
20
|
Requires-Dist: pickle-secure (>=0.99.9,<0.100.0)
|
20
21
|
Requires-Dist: python-magic (>=0.4.27,<0.5.0)
|
21
22
|
Requires-Dist: qrcode (>=7.4.1,<8.0.0)
|
@@ -1,45 +1,52 @@
|
|
1
1
|
slidge/__init__.py,sha256=S0tUjqpZlzsr8G4Y_1Xt-KCYB07qaknTB0OwHU8k29U,1587
|
2
2
|
slidge/__main__.py,sha256=Y12eh1TD_C5MB50KgEAuMffGnRFCvKYFKHD4UYSmHA0,72
|
3
|
-
slidge/__version__.py,sha256=
|
3
|
+
slidge/__version__.py,sha256=05G747WHKOvpl1x4M5U-3t3qszlgbNfnUxAxrATG8ck,171
|
4
4
|
slidge/command/__init__.py,sha256=UYf1mjCYbZ5G7PIgaFTWSQRAzEJkQ6dTH8Fu_e_XnO0,613
|
5
|
-
slidge/command/adhoc.py,sha256=
|
5
|
+
slidge/command/adhoc.py,sha256=9PsTsGMPKAK_YXQpwdcH9SSDki8YQ49OZ5p65W5HA6k,9412
|
6
6
|
slidge/command/admin.py,sha256=x_kJ0TJhzf6d3OBIOXFjudZFO8bRYUG919td7OjMCug,6008
|
7
|
-
slidge/command/base.py,sha256=
|
7
|
+
slidge/command/base.py,sha256=7NSzPZdBLZElrm3smzvFKgP0GUggxXdkhclxIKCjtT8,13036
|
8
8
|
slidge/command/categories.py,sha256=BJCfaga2qoAxnHfgHD7I_RKZuBA5nnNOukkWHJwsUFE,99
|
9
9
|
slidge/command/chat_command.py,sha256=VBs6IuDka1IyyMzz0ZyE9zMImaEzUZLcnffxq_vwb4M,10565
|
10
10
|
slidge/command/register.py,sha256=fzPcGUoJtainnDOiC13gWV-uYLuJcsmdKGJ-jXT1qIo,6697
|
11
11
|
slidge/command/user.py,sha256=uFheYOprhypkHEEl6qSTEM7T2N28xXaDi7v1he-AET8,11512
|
12
12
|
slidge/contact/__init__.py,sha256=WMMaHk7UW7YT9EH2LtPdkU0bHQaOp4ikBhbBQskmoc8,191
|
13
|
-
slidge/contact/contact.py,sha256=
|
14
|
-
slidge/contact/roster.py,sha256=
|
13
|
+
slidge/contact/contact.py,sha256=kKtJ9NPLS9DPVyyahx_K-Mtp5k5UQdQJZavC1XCmWlc,23104
|
14
|
+
slidge/contact/roster.py,sha256=AQTfmM4hrlxkXSM7ZX-C8P9NDN5RqNMNuPrSjt_3MJM,10223
|
15
15
|
slidge/core/__init__.py,sha256=RG7Jj5JCJERjhqJ31lOLYV-7bH_oblClQD1KF9LsTXo,68
|
16
16
|
slidge/core/config.py,sha256=leNcN_TI0Ka1hhzOHx7cBW3fNj5xZwsiv9l8AfRY_vU,7630
|
17
|
-
slidge/core/
|
18
|
-
slidge/core/
|
19
|
-
slidge/core/
|
20
|
-
slidge/core/
|
21
|
-
slidge/core/
|
22
|
-
slidge/core/
|
23
|
-
slidge/core/
|
24
|
-
slidge/core/
|
25
|
-
slidge/core/
|
26
|
-
slidge/core/
|
27
|
-
slidge/core/
|
28
|
-
slidge/core/
|
29
|
-
slidge/core/
|
17
|
+
slidge/core/dispatcher/__init__.py,sha256=1EXcjXietUKlxEqdrCWCV3xZ3q_DSsjHoqWrPMbtYao,84
|
18
|
+
slidge/core/dispatcher/caps.py,sha256=vzCAXo_bhALuLEpJWtyJTzVfWx96g1AsWD8_wkoDl0Y,2028
|
19
|
+
slidge/core/dispatcher/disco.py,sha256=j56VY9NIFzwPEWFKQQZ7YIqS9GdD-ZaF_K8a2L-JvRk,2006
|
20
|
+
slidge/core/dispatcher/message/__init__.py,sha256=vpDGOc_U9XvkUU_ws9n9-5M2NPJ87XGTVpuIxM7Z99k,223
|
21
|
+
slidge/core/dispatcher/message/chat_state.py,sha256=sCdEpzbgmvBmTovNOCv9uY6v0eJZcWVvDYAGlAV3FJ4,1735
|
22
|
+
slidge/core/dispatcher/message/marker.py,sha256=VbD1-2QeOCC4EbrS-wpJxHwIcmvPF4Q4qd0eiv95c7I,2451
|
23
|
+
slidge/core/dispatcher/message/message.py,sha256=HwauW2kGionLyDWG01OSa9a14gYzoovJuJvGbfB4nt4,15296
|
24
|
+
slidge/core/dispatcher/muc/__init__.py,sha256=V8URHLJ_y7mk-7Id6FzRuczb1Uq_Z69fhxvzHuVLH1w,269
|
25
|
+
slidge/core/dispatcher/muc/admin.py,sha256=s21V2LEqc0e_DIpipEhhQdpae762lW1lVqj4wjFhX8M,3364
|
26
|
+
slidge/core/dispatcher/muc/mam.py,sha256=1ROVP4ZPEVEH-HR5qRV4YwHz-V15uu5gyhv1ZwwKhk8,2821
|
27
|
+
slidge/core/dispatcher/muc/misc.py,sha256=L5I2nt23qvQ-2qS5qgW3hSg6Z7DKnGvwxgXqn_WLvpQ,3943
|
28
|
+
slidge/core/dispatcher/muc/owner.py,sha256=Vwwz15fdLq40XTnyDcMmRtMOXdY3T3_BwpSV3Nr8FNw,3290
|
29
|
+
slidge/core/dispatcher/muc/ping.py,sha256=lb1VQPhiUPZ19KhbofRXMVCcY6wwQ2w-asnqtANaAwA,1660
|
30
|
+
slidge/core/dispatcher/presence.py,sha256=ZxAmC34yxKxbk_-h6g_S8pTssL7ovULm3q2ishpYaB4,6393
|
31
|
+
slidge/core/dispatcher/registration.py,sha256=Xmbw9NF3LUppCOa3XzreopdKDitZnwl_5HE-kds74n8,3155
|
32
|
+
slidge/core/dispatcher/search.py,sha256=9cGj0wwvyYlP_Yk440Y12sgo4Y1p-JWUDSJP5Zxch0M,3296
|
33
|
+
slidge/core/dispatcher/session_dispatcher.py,sha256=_njTftgpUKKMP-hgAo99Hu0YrIa6E9OTzSYdiMW000w,2844
|
34
|
+
slidge/core/dispatcher/util.py,sha256=x_vC7OXcaDaSz3RPPGnK9fOvimmMaKPM3RkgmHvU0Qw,5676
|
35
|
+
slidge/core/dispatcher/vcard.py,sha256=Rmx-wCz6Lps0mXCO48HppNQlS3GOgMuzuw9hZYBdlVU,5130
|
36
|
+
slidge/core/gateway.py,sha256=NhIgxZKPnOpwsx50OKgyZyk9nfU8ZlUSMddwIDIhFcw,36351
|
30
37
|
slidge/core/mixins/__init__.py,sha256=muReAzgvENgMvlfm0Fpe6BQFfm2EMjoDe9ZhGgo6Vig,627
|
31
|
-
slidge/core/mixins/attachment.py,sha256=
|
38
|
+
slidge/core/mixins/attachment.py,sha256=5Xa_GkSL_rRTC45TRjW98jztk__4M5P-3EG4IF91K0c,19022
|
32
39
|
slidge/core/mixins/avatar.py,sha256=kGIIZzLSNuxF9bIvt5Bv03_uT_pU5QV1kS7cRu6-GUA,7874
|
33
|
-
slidge/core/mixins/base.py,sha256=
|
40
|
+
slidge/core/mixins/base.py,sha256=MOd-pas38_52VawQVlxWtBtmTKC6My9G0ZaCeQxOJbs,748
|
34
41
|
slidge/core/mixins/db.py,sha256=5Qpegd7D8e5TLXLLINYcf_DuVdN-7wNmsfztUuFYPcU,442
|
35
42
|
slidge/core/mixins/disco.py,sha256=jk3Z1B6zTuisHv8VKNRJodIo0ee5btYHh2ZrlflPj_Q,3670
|
36
43
|
slidge/core/mixins/lock.py,sha256=mVzwVVEoq1hrAMgGLh4K84BTLt7JTJ33B8HSGSorTdY,913
|
37
|
-
slidge/core/mixins/message.py,sha256=
|
44
|
+
slidge/core/mixins/message.py,sha256=6X0MskF1fC9Ih8aLRfdqNe7H3jpnFGEJb0EykRKze0c,15384
|
38
45
|
slidge/core/mixins/message_maker.py,sha256=TcCutHi0sIwL6beJNkN7XyR0aDIbA0xZyxd2Gc9ulG4,6022
|
39
46
|
slidge/core/mixins/presence.py,sha256=yywo6KAw8C7GaZSMrSMuioNfhW08MrnobHt8XbHd0q8,7891
|
40
47
|
slidge/core/mixins/recipient.py,sha256=U-YppozUO8pA94jmD3-qmhkykTebPNaOVWc3JDPC9w8,1302
|
41
|
-
slidge/core/pubsub.py,sha256=
|
42
|
-
slidge/core/session.py,sha256=
|
48
|
+
slidge/core/pubsub.py,sha256=oTiS5KFQJAmsgkhOsvfvthT-LkuZGQSCrrUG0JskNkI,11907
|
49
|
+
slidge/core/session.py,sha256=nQexpCd1jlHOhQPnFI4ri-5odp3N2pU5HO4l7WFetZY,28148
|
43
50
|
slidge/db/__init__.py,sha256=EBDH1JSEhgqYcli2Bw11CRC749wJk8AOucgBzmhDSvU,105
|
44
51
|
slidge/db/alembic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
45
52
|
slidge/db/alembic/env.py,sha256=hsBlRNs0zF5diSHGRSa8Fi3qRVQDA2rJdR41AEIdvxc,1642
|
@@ -50,6 +57,7 @@ slidge/db/alembic/versions/2461390c0af2_store_contacts_caps_verstring_in_db.py,s
|
|
50
57
|
slidge/db/alembic/versions/29f5280c61aa_store_subject_setter_in_room.py,sha256=f8TFS28CXjGhvIn41UYMoHYeODfqhKfo4O7gk-JwA1E,1134
|
51
58
|
slidge/db/alembic/versions/2b1f45ab7379_store_room_subject_setter_by_nickname.py,sha256=CMVP2wFz6s7t57eWdSaGtck8BXzfVPJhHE5AoWi34tI,1359
|
52
59
|
slidge/db/alembic/versions/3071e0fa69d4_add_contact_client_type.py,sha256=O5BY1vpbtuYT5j6i3EMuuJAf6loIYT1kco8c-c6TF5g,1391
|
60
|
+
slidge/db/alembic/versions/45c24cc73c91_add_bob.py,sha256=UjMySZ5LaInyPt0KbAxx0rF4GQhZh8CwBeqHtNPdG1c,1249
|
53
61
|
slidge/db/alembic/versions/5bd48bfdffa2_lift_room_legacy_id_constraint.py,sha256=cObfqUzqdNezIeJdHe7YKFwRwtelXk8y1PwZ75chXDc,1629
|
54
62
|
slidge/db/alembic/versions/82a4af84b679_add_muc_history_filled.py,sha256=g37po0ydp8ZmzJrE5oFV7GscnploxjCtPDpw28SqVGk,1429
|
55
63
|
slidge/db/alembic/versions/8b993243a536_add_vcard_content_to_contact_table.py,sha256=18tG8B03Kq8Qz_-mMd28Beed6jow8XNTtrz7gT5QY3g,1210
|
@@ -62,8 +70,8 @@ slidge/db/alembic/versions/c4a8ec35a0e8_per_room_user_nick.py,sha256=jjQmlRv6nqd
|
|
62
70
|
slidge/db/alembic/versions/e91195719c2c_store_users_avatars_persistently.py,sha256=8Ga3VFgKrzMs_-B8OPtfP-0rey_MFaDg-QGtSbaft3o,640
|
63
71
|
slidge/db/avatar.py,sha256=FfRt2Vu11ZKD9F3x1_drawvUd-TDE3mp7SE3BZ9hOOg,6467
|
64
72
|
slidge/db/meta.py,sha256=v1Jf-npZ28QwdGpsLQWLBHEbEP3-jnPrygRg05tJ_Iw,1831
|
65
|
-
slidge/db/models.py,sha256=
|
66
|
-
slidge/db/store.py,sha256=
|
73
|
+
slidge/db/models.py,sha256=bsZCEtBDkvwiZiJNyp0cqxLHphtCUBIGnOPIaaG9opc,13738
|
74
|
+
slidge/db/store.py,sha256=1p-wAgG4K_QUehnmqRz-zvmW_PbXYYVq5qYMViF0cNY,46432
|
67
75
|
slidge/group/__init__.py,sha256=yFt7cHqeaKIMN6f9ZyhhspOcJJvBtLedGv-iICG7lto,258
|
68
76
|
slidge/group/archive.py,sha256=xGPkdSk8-BT6t6lNVo1FEwiFVAttoxCma8Tsyk5r8Kg,5279
|
69
77
|
slidge/group/bookmarks.py,sha256=_LDf7A7aWkwPH88v7c-mOp8VJs3gSFM1-uCqSb4ThO8,5825
|
@@ -73,6 +81,7 @@ slidge/main.py,sha256=8oND7xpR3eLw7b62fT61UhYlmNp_9gv3tNz2N3xR7-c,6232
|
|
73
81
|
slidge/migration.py,sha256=4BJmPIRB56_WIhRTqBFIIBXuvnhhBjjOMl4CE7jY6oc,1541
|
74
82
|
slidge/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
75
83
|
slidge/slixfix/__init__.py,sha256=7GevigEt68hwgwHqXcsFogN5jRXRHPeqR6kwODCH4hc,3055
|
84
|
+
slidge/slixfix/delivery_receipt.py,sha256=3bWdZH3-X3CZJXmnI_TpjkTUUK-EY4Ktm78lW0-40fc,1366
|
76
85
|
slidge/slixfix/link_preview/__init__.py,sha256=TDPTSEH5FQxgGpQpQIde-D72AHg-6YVWG-tOj4KpKmU,290
|
77
86
|
slidge/slixfix/link_preview/link_preview.py,sha256=9PgdfnoyVMHnXS0w5OFp0wz3ku96Ck-HtRXbVUlDi1U,448
|
78
87
|
slidge/slixfix/link_preview/stanza.py,sha256=YAXoNw2MD0a3nzvldGKlvSemjUMbUEG23regzmj4Ntc,2664
|
@@ -110,11 +119,11 @@ slidge/util/__init__.py,sha256=BELovoTMPcPPGz3D48esBr8A4BRRHXTvavfgnArBgEc,301
|
|
110
119
|
slidge/util/archive_msg.py,sha256=xXAR0BI5r3d6KKWjae9594izCOv6iI03z2WLuTecNw8,1724
|
111
120
|
slidge/util/conf.py,sha256=1j2OnOsCBar1tOObErhXR5RC3Vl3faliOZ1U8J3My58,6613
|
112
121
|
slidge/util/db.py,sha256=4LxZj8oBYgiSnyBUnF_ALjr0TblkfNQq_p28sCfkHMY,242
|
113
|
-
slidge/util/test.py,sha256=
|
114
|
-
slidge/util/types.py,sha256=
|
115
|
-
slidge/util/util.py,sha256=
|
116
|
-
slidge-0.2.
|
117
|
-
slidge-0.2.
|
118
|
-
slidge-0.2.
|
119
|
-
slidge-0.2.
|
120
|
-
slidge-0.2.
|
122
|
+
slidge/util/test.py,sha256=movqj7rxDPZG4RF46CN1z73PSYAHIc_LuudquGRwLVU,13909
|
123
|
+
slidge/util/types.py,sha256=R_xfS5mRL0XUJIoDpnaAkZlTOoLPerduXBFftaVwIAI,5489
|
124
|
+
slidge/util/util.py,sha256=DyJWO2pmE-RiB9Rsy6TUTcvB-BDlmLZBW4PELx4arFQ,9156
|
125
|
+
slidge-0.2.0a10.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
|
126
|
+
slidge-0.2.0a10.dist-info/METADATA,sha256=_sFwLHhxETI7mHO1Hoetd6FVtNVYpyHHnboPxJucnkU,5006
|
127
|
+
slidge-0.2.0a10.dist-info/WHEEL,sha256=7Z8_27uaHI_UZAc4Uox4PpBhQ9Y5_modZXWMxtUi4NU,88
|
128
|
+
slidge-0.2.0a10.dist-info/entry_points.txt,sha256=SNl72KSocF5plsu_67xyH6wVWfGTXQbzkQgXbLtzDrQ,47
|
129
|
+
slidge-0.2.0a10.dist-info/RECORD,,
|
slidge/core/gateway/__init__.py
DELETED
slidge/core/gateway/muc_admin.py
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
from typing import TYPE_CHECKING
|
2
|
-
|
3
|
-
from slixmpp import CoroutineCallback, Iq, StanzaPath
|
4
|
-
from slixmpp.exceptions import XMPPError
|
5
|
-
|
6
|
-
if TYPE_CHECKING:
|
7
|
-
from .base import BaseGateway
|
8
|
-
|
9
|
-
|
10
|
-
class MucAdmin:
|
11
|
-
def __init__(self, xmpp: "BaseGateway"):
|
12
|
-
self.xmpp = xmpp
|
13
|
-
xmpp.register_handler(
|
14
|
-
CoroutineCallback(
|
15
|
-
"muc#admin",
|
16
|
-
StanzaPath("iq@type=get/mucadmin_query"),
|
17
|
-
self._handle_admin, # type: ignore
|
18
|
-
)
|
19
|
-
)
|
20
|
-
|
21
|
-
async def _handle_admin(self, iq: Iq):
|
22
|
-
muc = await self.xmpp.get_muc_from_stanza(iq)
|
23
|
-
|
24
|
-
affiliation = iq["mucadmin_query"]["item"]["affiliation"]
|
25
|
-
|
26
|
-
if not affiliation:
|
27
|
-
raise XMPPError("bad-request")
|
28
|
-
|
29
|
-
reply = iq.reply()
|
30
|
-
reply.enable("mucadmin_query")
|
31
|
-
async for participant in muc.get_participants():
|
32
|
-
if not participant.affiliation == affiliation:
|
33
|
-
continue
|
34
|
-
reply["mucadmin_query"].append(participant.mucadmin_item())
|
35
|
-
reply.send()
|
slidge/core/gateway/presence.py
DELETED
@@ -1,95 +0,0 @@
|
|
1
|
-
import logging
|
2
|
-
|
3
|
-
from slixmpp import JID, Presence
|
4
|
-
|
5
|
-
from ..session import BaseSession
|
6
|
-
|
7
|
-
|
8
|
-
class _IsDirectedAtComponent(Exception):
|
9
|
-
def __init__(self, session: BaseSession):
|
10
|
-
self.session = session
|
11
|
-
|
12
|
-
|
13
|
-
class PresenceHandlerMixin:
|
14
|
-
boundjid: JID
|
15
|
-
|
16
|
-
def get_session_from_stanza(self, s) -> BaseSession:
|
17
|
-
raise NotImplementedError
|
18
|
-
|
19
|
-
async def __get_contact(self, pres: Presence):
|
20
|
-
sess = await self.__get_session(pres)
|
21
|
-
pto = pres.get_to()
|
22
|
-
if pto == self.boundjid.bare:
|
23
|
-
raise _IsDirectedAtComponent(sess)
|
24
|
-
await sess.contacts.ready
|
25
|
-
return await sess.contacts.by_jid(pto)
|
26
|
-
|
27
|
-
async def __get_session(self, p: Presence):
|
28
|
-
sess = self.get_session_from_stanza(p)
|
29
|
-
return sess
|
30
|
-
|
31
|
-
async def _handle_subscribe(self, pres: Presence):
|
32
|
-
try:
|
33
|
-
contact = await self.__get_contact(pres)
|
34
|
-
except _IsDirectedAtComponent:
|
35
|
-
pres.reply().send()
|
36
|
-
return
|
37
|
-
|
38
|
-
if contact.is_friend:
|
39
|
-
pres.reply().send()
|
40
|
-
else:
|
41
|
-
await contact.on_friend_request(pres["status"])
|
42
|
-
|
43
|
-
async def _handle_unsubscribe(self, pres: Presence):
|
44
|
-
pres.reply().send()
|
45
|
-
|
46
|
-
try:
|
47
|
-
contact = await self.__get_contact(pres)
|
48
|
-
except _IsDirectedAtComponent as e:
|
49
|
-
e.session.send_gateway_message("Bye bye!")
|
50
|
-
await e.session.kill_by_jid(e.session.user_jid)
|
51
|
-
return
|
52
|
-
|
53
|
-
contact.is_friend = False
|
54
|
-
await contact.on_friend_delete(pres["status"])
|
55
|
-
|
56
|
-
async def _handle_subscribed(self, pres: Presence):
|
57
|
-
try:
|
58
|
-
contact = await self.__get_contact(pres)
|
59
|
-
except _IsDirectedAtComponent:
|
60
|
-
return
|
61
|
-
|
62
|
-
await contact.on_friend_accept()
|
63
|
-
|
64
|
-
async def _handle_unsubscribed(self, pres: Presence):
|
65
|
-
try:
|
66
|
-
contact = await self.__get_contact(pres)
|
67
|
-
except _IsDirectedAtComponent:
|
68
|
-
return
|
69
|
-
|
70
|
-
if contact.is_friend:
|
71
|
-
contact.is_friend = False
|
72
|
-
await contact.on_friend_delete(pres["status"])
|
73
|
-
|
74
|
-
async def _handle_probe(self, pres: Presence):
|
75
|
-
try:
|
76
|
-
contact = await self.__get_contact(pres)
|
77
|
-
except _IsDirectedAtComponent:
|
78
|
-
session = await self.__get_session(pres)
|
79
|
-
session.send_cached_presence(pres.get_from())
|
80
|
-
return
|
81
|
-
if contact.is_friend:
|
82
|
-
contact.send_last_presence(force=True)
|
83
|
-
else:
|
84
|
-
reply = pres.reply()
|
85
|
-
reply["type"] = "unsubscribed"
|
86
|
-
reply.send()
|
87
|
-
|
88
|
-
async def _handle_new_subscription(self, pres: Presence):
|
89
|
-
pass
|
90
|
-
|
91
|
-
async def _handle_removed_subscription(self, pres: Presence):
|
92
|
-
pass
|
93
|
-
|
94
|
-
|
95
|
-
log = logging.getLogger(__name__)
|