annotate libervia/backend/plugins/plugin_xep_0131.py @ 4351:6a0a081485b8

plugin autocrypt: Autocrypt protocol implementation: Implementation of autocrypt: `autocrypt` header is checked, and if present and no public key is known for the peer, the key is imported. `autocrypt` header is also added to outgoing message (only if an email gateway is detected). For the moment, the JID is use as identifier, but the real email used by gateway should be used in the future. rel 456
author Goffi <goffi@goffi.org>
date Fri, 28 Feb 2025 09:23:35 +0100
parents 1bedcc6712e9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4314
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
1 #!/usr/bin/env python3
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
2
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
3 # Libervia plugin Stanza Headers and Internet Metadata (XEP-0131)
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
4 # Copyright (C) 2009-2024 Jérôme Poisson (goffi@goffi.org)
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
5
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
6 # This program is free software: you can redistribute it and/or modify
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
7 # it under the terms of the GNU Affero General Public License as published by
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
8 # the Free Software Foundation, either version 3 of the License, or
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
9 # (at your option) any later version.
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
10
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
11 # This program is distributed in the hope that it will be useful,
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
14 # GNU Affero General Public License for more details.
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
15
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
16 # You should have received a copy of the GNU Affero General Public License
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
17 # along with this program. If not, see <http://www.gnu.org/licenses/>.
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
18
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
19 from email.utils import quote, unquote
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
20 from enum import StrEnum, auto
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
21 import re
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
22 from typing import Iterator, List, Literal, Optional, Self
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
23
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
24 from pydantic import BaseModel, ConfigDict, Field, RootModel
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
25 from twisted.internet import defer
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
26 from twisted.words.protocols.jabber.xmlstream import XMPPHandler
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
27 from twisted.words.xish import domish
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
28 from wokkel import disco
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
29 from zope.interface import implementer
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
30
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
31 from libervia.backend.core import exceptions
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
32 from libervia.backend.core.constants import Const as C
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
33 from libervia.backend.core.core_types import SatXMPPEntity
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
34 from libervia.backend.core.i18n import _
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
35 from libervia.backend.core.log import getLogger
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
36 from libervia.backend.models.core import MessageData
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
37
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
38 log = getLogger(__name__)
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
39
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
40 PLUGIN_INFO = {
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
41 C.PI_NAME: "Stanza Headers and Internet Metadata Plugin",
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
42 C.PI_IMPORT_NAME: "XEP-0131",
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
43 C.PI_TYPE: "XEP",
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
44 C.PI_MODES: C.PLUG_MODE_BOTH,
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
45 C.PI_PROTOCOLS: ["XEP-0131"],
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
46 C.PI_DEPENDENCIES: [],
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
47 C.PI_MAIN: "XEP_0131",
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
48 C.PI_HANDLER: "yes",
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
49 C.PI_DESCRIPTION: _(
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
50 "Enables the inclusion of non-addressing header information in XMPP stanzas."
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
51 ),
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
52 }
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
53
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
54 NS_SHIM = "http://jabber.org/protocol/shim"
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
55
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
56 # Regex to match quoted and non-quoted values.
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
57 RE_QUOTED_VALUES = re.compile(
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
58 r"""
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
59 # Match quoted phrases
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
60 "
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
61 (?:
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
62 # Match any escaped character
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
63 \\.
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
64 # Match any character that is not a double quote or a backslash
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
65 |[^"\\]
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
66 )*
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
67 "
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
68 |
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
69 # Match non-quoted phrases
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
70 (?:[^,]+)
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
71 """,
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
72 re.VERBOSE,
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
73 )
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
74
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
75
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
76 class Urgency(StrEnum):
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
77 low = auto()
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
78 medium = auto()
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
79 high = auto()
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
80
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
81
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
82 class Priority(StrEnum):
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
83 non_urgent = "non-urgent"
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
84 normal = auto()
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
85 urgent = auto()
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
86 emergency = auto()
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
87
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
88
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
89 class HeadersData(BaseModel):
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
90 model_config = ConfigDict(extra="allow")
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
91
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
92 __pydantic_extra__: dict[str, str] = Field(init=False) # type: ignore
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
93
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
94 keywords: str | None = None
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
95 urgency: Urgency | None = None
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
96 priority: Priority | None = None
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
97
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
98 def items(self):
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
99 return self.__pydantic_extra__.items()
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
100
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
101 def to_element(self) -> domish.Element:
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
102 """Build the <headers> element from this instance's data."""
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
103 headers_elt = domish.Element((NS_SHIM, "headers"))
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
104 header_names = list(self.model_fields.keys()) + list(
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
105 self.__pydantic_extra__.keys()
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
106 )
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
107 for name in header_names:
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
108 value = getattr(self, name)
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
109 if value is None:
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
110 continue
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
111 header_elt = headers_elt.addElement("header")
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
112 header_elt["name"] = name
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
113 header_elt.addContent(value)
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
114 return headers_elt
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
115
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
116 @classmethod
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
117 def from_element(cls, headers_elt: domish.Element) -> Self:
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
118 """Create a HeadersData instance from a <headers> element."""
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
119 if headers_elt.uri != NS_SHIM or headers_elt.name != "headers":
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
120 child_headers_elt = next(headers_elt.elements(NS_SHIM, "headers"), None)
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
121 if child_headers_elt is None:
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
122 raise exceptions.NotFound("<headers> element not found")
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
123 else:
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
124 headers_elt = child_headers_elt
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
125
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
126 headers = {}
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
127 for header_elt in headers_elt.elements(NS_SHIM, "header"):
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
128 name = header_elt.getAttribute("name")
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
129 value = str(header_elt)
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
130 headers[name] = value
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
131 return cls(**headers)
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
132
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
133
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
134 class Keywords(RootModel):
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
135 root: list[str]
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
136
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
137 def __iter__(self) -> Iterator[str]: # type: ignore
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
138 return iter(self.root)
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
139
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
140 def __getitem__(self, item) -> str:
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
141 return self.root[item]
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
142
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
143 def __len__(self) -> int:
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
144 return len(self.root)
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
145
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
146
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
147 class XEP_0131:
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
148 """Implementation for XEP-0131"""
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
149
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
150 def __init__(self, host):
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
151 log.info(_("Stanza Headers and Internet Metadata plugin initialization"))
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
152 self.host = host
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
153 host.register_namespace("shim", NS_SHIM)
4349
1bedcc6712e9 plugin XEP-0131: update triggers priority + add headers to MessageDataExtra:
Goffi <goffi@goffi.org>
parents: 4314
diff changeset
154 # We give negative priority, as we want header to be added after normal priority
1bedcc6712e9 plugin XEP-0131: update triggers priority + add headers to MessageDataExtra:
Goffi <goffi@goffi.org>
parents: 4314
diff changeset
155 # trigger are called, in case they add their own headers.
1bedcc6712e9 plugin XEP-0131: update triggers priority + add headers to MessageDataExtra:
Goffi <goffi@goffi.org>
parents: 4314
diff changeset
156 host.trigger.add("sendMessage", self.send_message_trigger, priority=-50)
1bedcc6712e9 plugin XEP-0131: update triggers priority + add headers to MessageDataExtra:
Goffi <goffi@goffi.org>
parents: 4314
diff changeset
157 host.trigger.add("sendMessageComponent", self.send_message_trigger, priority=-50)
1bedcc6712e9 plugin XEP-0131: update triggers priority + add headers to MessageDataExtra:
Goffi <goffi@goffi.org>
parents: 4314
diff changeset
158 # We give non defaut priority, has we want header parsing to be done before normal
1bedcc6712e9 plugin XEP-0131: update triggers priority + add headers to MessageDataExtra:
Goffi <goffi@goffi.org>
parents: 4314
diff changeset
159 # priority triggers are called.
1bedcc6712e9 plugin XEP-0131: update triggers priority + add headers to MessageDataExtra:
Goffi <goffi@goffi.org>
parents: 4314
diff changeset
160 host.trigger.add("message_received", self.message_received_trigger, priority=50)
4314
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
161
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
162 def quote_value(self, value: str) -> str:
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
163 """Quote a value if it contain special characters
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
164
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
165 @param value: Value to quote if necessary.
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
166 @return: Quoted value.
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
167 """
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
168 if any(c in value for c in r" ,\""):
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
169 value = f'"{quote(value)}"'
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
170 return value
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
171
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
172 def unquote_values(self, raw_header: str) -> list[str]:
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
173 """Unquote raw list of values header.
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
174
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
175 This is raw header for potentially quoted values separated by commas, like in the
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
176 "keywords" header.
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
177
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
178 @param raw_keywords_header: Raw Keywords header.
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
179 @return: A list of unquoted strings.
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
180 """
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
181 unquoted_values = []
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
182
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
183 for match in RE_QUOTED_VALUES.finditer(raw_header):
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
184 value = match.group(0).strip()
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
185
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
186 # Unquote the keyword if needed.
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
187 if value.startswith('"') and value.endswith('"'):
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
188 value = unquote(value)
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
189
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
190 value = value.strip()
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
191 if value:
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
192 unquoted_values.append(value)
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
193
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
194 return unquoted_values
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
195
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
196 def move_keywords_to_headers(self, extra: dict) -> None:
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
197 """Check if keywords are present in extra, and move them to headers.
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
198
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
199 The list of keywords will be converted to a header value and set in the right
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
200 location.
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
201
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
202 @param extra: MessageData's ``extra`` field. Will be modified in place by
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
203 creating/updating the ``headers`` field.
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
204 """
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
205 # Keywords can be in a list of strings in extra's "keywords" field.
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
206 if "keywords" in extra:
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
207 keywords = Keywords(extra["keywords"])
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
208 if keywords:
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
209 headers = extra.setdefault("headers", {})
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
210 quoted_kw = ",".join(self.quote_value(kw) for kw in keywords)
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
211 existing_kw = headers.get("keywords")
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
212 if existing_kw:
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
213 # We have also keywords in headers, we merge both.
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
214 quoted_kw = f"{existing_kw},{quoted_kw}"
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
215 headers["keywords"] = quoted_kw
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
216
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
217 def send_message_trigger(
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
218 self, client, mess_data, pre_xml_treatments, post_xml_treatments
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
219 ) -> Literal[True]:
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
220 """Process the XEP-0131 related data to be sent"""
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
221
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
222 def add_headers(mess_data: MessageData) -> MessageData:
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
223 extra = mess_data["extra"]
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
224 self.move_keywords_to_headers(extra)
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
225 # Now we parse headers, if any.
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
226 if "headers" in extra:
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
227 headers_data = HeadersData(**extra["headers"])
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
228 message_elt = mess_data["xml"]
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
229 message_elt.addChild(headers_data.to_element())
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
230 return mess_data
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
231
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
232 post_xml_treatments.addCallback(add_headers)
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
233 return True
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
234
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
235 def message_received_trigger(
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
236 self,
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
237 client: SatXMPPEntity,
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
238 message_elt: domish.Element,
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
239 post_treat: defer.Deferred,
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
240 ) -> Literal[True]:
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
241 """Parse headers information and add them to message data."""
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
242 try:
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
243 headers = HeadersData.from_element(message_elt)
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
244 except exceptions.NotFound:
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
245 pass
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
246 else:
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
247
4349
1bedcc6712e9 plugin XEP-0131: update triggers priority + add headers to MessageDataExtra:
Goffi <goffi@goffi.org>
parents: 4314
diff changeset
248 def post_treat_addr(mess_data: MessageData) -> MessageData:
4314
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
249 """Add the headers metadata to the message data"""
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
250 if headers.keywords:
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
251 # We move keywords to a list of string in extra's "keywords" field.
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
252 mess_data["extra"]["keywords"] = self.unquote_values(headers.keywords)
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
253 headers.keywords = None
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
254 mess_data["extra"]["headers"] = headers.model_dump(
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
255 mode="json", exclude_none=True
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
256 )
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
257 return mess_data
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
258
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
259 post_treat.addCallback(post_treat_addr)
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
260 return True
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
261
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
262 def get_handler(self, client):
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
263 return XEP_0131_handler()
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
264
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
265
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
266 @implementer(disco.IDisco)
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
267 class XEP_0131_handler(XMPPHandler):
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
268
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
269 def getDiscoInfo(
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
270 self, requestor, target, nodeIdentifier: Optional[str] = ""
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
271 ) -> List[disco.DiscoFeature]:
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
272 return [disco.DiscoFeature(NS_SHIM)]
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
273
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
274 def getDiscoItems(
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
275 self, requestor, target, nodeIdentifier: Optional[str] = ""
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
276 ) -> List[disco.DiscoItem]:
6a70fcd93a7a plugin XEP-0131: Stanza Headers and Internet Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
277 return []