slidge 0.2.0a8__py3-none-any.whl → 0.2.0a10__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- 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__)
|