Correct type hints for synapse.event_auth. (#10253)
This commit is contained in:
parent
329ef5c715
commit
aaf7d1acb8
|
@ -0,0 +1 @@
|
||||||
|
Fix type hints for computing auth events.
|
|
@ -12,7 +12,7 @@
|
||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
import logging
|
import logging
|
||||||
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple
|
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple, Union
|
||||||
|
|
||||||
import pymacaroons
|
import pymacaroons
|
||||||
from netaddr import IPAddress
|
from netaddr import IPAddress
|
||||||
|
@ -31,6 +31,7 @@ from synapse.api.errors import (
|
||||||
from synapse.api.room_versions import KNOWN_ROOM_VERSIONS
|
from synapse.api.room_versions import KNOWN_ROOM_VERSIONS
|
||||||
from synapse.appservice import ApplicationService
|
from synapse.appservice import ApplicationService
|
||||||
from synapse.events import EventBase
|
from synapse.events import EventBase
|
||||||
|
from synapse.events.builder import EventBuilder
|
||||||
from synapse.http import get_request_user_agent
|
from synapse.http import get_request_user_agent
|
||||||
from synapse.http.site import SynapseRequest
|
from synapse.http.site import SynapseRequest
|
||||||
from synapse.logging import opentracing as opentracing
|
from synapse.logging import opentracing as opentracing
|
||||||
|
@ -490,7 +491,7 @@ class Auth:
|
||||||
|
|
||||||
def compute_auth_events(
|
def compute_auth_events(
|
||||||
self,
|
self,
|
||||||
event,
|
event: Union[EventBase, EventBuilder],
|
||||||
current_state_ids: StateMap[str],
|
current_state_ids: StateMap[str],
|
||||||
for_verification: bool = False,
|
for_verification: bool = False,
|
||||||
) -> List[str]:
|
) -> List[str]:
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
from typing import Any, Dict, List, Optional, Set, Tuple
|
from typing import Any, Dict, List, Optional, Set, Tuple, Union
|
||||||
|
|
||||||
from canonicaljson import encode_canonical_json
|
from canonicaljson import encode_canonical_json
|
||||||
from signedjson.key import decode_verify_key_bytes
|
from signedjson.key import decode_verify_key_bytes
|
||||||
|
@ -29,6 +29,7 @@ from synapse.api.room_versions import (
|
||||||
RoomVersion,
|
RoomVersion,
|
||||||
)
|
)
|
||||||
from synapse.events import EventBase
|
from synapse.events import EventBase
|
||||||
|
from synapse.events.builder import EventBuilder
|
||||||
from synapse.types import StateMap, UserID, get_domain_from_id
|
from synapse.types import StateMap, UserID, get_domain_from_id
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
@ -724,7 +725,7 @@ def get_public_keys(invite_event: EventBase) -> List[Dict[str, Any]]:
|
||||||
return public_keys
|
return public_keys
|
||||||
|
|
||||||
|
|
||||||
def auth_types_for_event(event: EventBase) -> Set[Tuple[str, str]]:
|
def auth_types_for_event(event: Union[EventBase, EventBuilder]) -> Set[Tuple[str, str]]:
|
||||||
"""Given an event, return a list of (EventType, StateKey) that may be
|
"""Given an event, return a list of (EventType, StateKey) that may be
|
||||||
needed to auth the event. The returned list may be a superset of what
|
needed to auth the event. The returned list may be a superset of what
|
||||||
would actually be required depending on the full state of the room.
|
would actually be required depending on the full state of the room.
|
||||||
|
|
|
@ -118,7 +118,7 @@ class _EventInternalMetadata:
|
||||||
proactively_send = DictProperty("proactively_send") # type: bool
|
proactively_send = DictProperty("proactively_send") # type: bool
|
||||||
redacted = DictProperty("redacted") # type: bool
|
redacted = DictProperty("redacted") # type: bool
|
||||||
txn_id = DictProperty("txn_id") # type: str
|
txn_id = DictProperty("txn_id") # type: str
|
||||||
token_id = DictProperty("token_id") # type: str
|
token_id = DictProperty("token_id") # type: int
|
||||||
historical = DictProperty("historical") # type: bool
|
historical = DictProperty("historical") # type: bool
|
||||||
|
|
||||||
# XXX: These are set by StreamWorkerStore._set_before_and_after.
|
# XXX: These are set by StreamWorkerStore._set_before_and_after.
|
||||||
|
|
|
@ -12,12 +12,11 @@
|
||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
import logging
|
import logging
|
||||||
from typing import Any, Dict, List, Optional, Tuple, Union
|
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple, Union
|
||||||
|
|
||||||
import attr
|
import attr
|
||||||
from nacl.signing import SigningKey
|
from nacl.signing import SigningKey
|
||||||
|
|
||||||
from synapse.api.auth import Auth
|
|
||||||
from synapse.api.constants import MAX_DEPTH
|
from synapse.api.constants import MAX_DEPTH
|
||||||
from synapse.api.errors import UnsupportedRoomVersionError
|
from synapse.api.errors import UnsupportedRoomVersionError
|
||||||
from synapse.api.room_versions import (
|
from synapse.api.room_versions import (
|
||||||
|
@ -34,10 +33,14 @@ from synapse.types import EventID, JsonDict
|
||||||
from synapse.util import Clock
|
from synapse.util import Clock
|
||||||
from synapse.util.stringutils import random_string
|
from synapse.util.stringutils import random_string
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from synapse.api.auth import Auth
|
||||||
|
from synapse.server import HomeServer
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
@attr.s(slots=True, cmp=False, frozen=True)
|
@attr.s(slots=True, cmp=False, frozen=True, auto_attribs=True)
|
||||||
class EventBuilder:
|
class EventBuilder:
|
||||||
"""A format independent event builder used to build up the event content
|
"""A format independent event builder used to build up the event content
|
||||||
before signing the event.
|
before signing the event.
|
||||||
|
@ -62,31 +65,30 @@ class EventBuilder:
|
||||||
_signing_key: The signing key to use to sign the event as the server
|
_signing_key: The signing key to use to sign the event as the server
|
||||||
"""
|
"""
|
||||||
|
|
||||||
_state = attr.ib(type=StateHandler)
|
_state: StateHandler
|
||||||
_auth = attr.ib(type=Auth)
|
_auth: "Auth"
|
||||||
_store = attr.ib(type=DataStore)
|
_store: DataStore
|
||||||
_clock = attr.ib(type=Clock)
|
_clock: Clock
|
||||||
_hostname = attr.ib(type=str)
|
_hostname: str
|
||||||
_signing_key = attr.ib(type=SigningKey)
|
_signing_key: SigningKey
|
||||||
|
|
||||||
room_version = attr.ib(type=RoomVersion)
|
room_version: RoomVersion
|
||||||
|
|
||||||
room_id = attr.ib(type=str)
|
room_id: str
|
||||||
type = attr.ib(type=str)
|
type: str
|
||||||
sender = attr.ib(type=str)
|
sender: str
|
||||||
|
|
||||||
content = attr.ib(default=attr.Factory(dict), type=JsonDict)
|
content: JsonDict = attr.Factory(dict)
|
||||||
unsigned = attr.ib(default=attr.Factory(dict), type=JsonDict)
|
unsigned: JsonDict = attr.Factory(dict)
|
||||||
|
|
||||||
# These only exist on a subset of events, so they raise AttributeError if
|
# These only exist on a subset of events, so they raise AttributeError if
|
||||||
# someone tries to get them when they don't exist.
|
# someone tries to get them when they don't exist.
|
||||||
_state_key = attr.ib(default=None, type=Optional[str])
|
_state_key: Optional[str] = None
|
||||||
_redacts = attr.ib(default=None, type=Optional[str])
|
_redacts: Optional[str] = None
|
||||||
_origin_server_ts = attr.ib(default=None, type=Optional[int])
|
_origin_server_ts: Optional[int] = None
|
||||||
|
|
||||||
internal_metadata = attr.ib(
|
internal_metadata: _EventInternalMetadata = attr.Factory(
|
||||||
default=attr.Factory(lambda: _EventInternalMetadata({})),
|
lambda: _EventInternalMetadata({})
|
||||||
type=_EventInternalMetadata,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
@ -184,7 +186,7 @@ class EventBuilder:
|
||||||
|
|
||||||
|
|
||||||
class EventBuilderFactory:
|
class EventBuilderFactory:
|
||||||
def __init__(self, hs):
|
def __init__(self, hs: "HomeServer"):
|
||||||
self.clock = hs.get_clock()
|
self.clock = hs.get_clock()
|
||||||
self.hostname = hs.hostname
|
self.hostname = hs.hostname
|
||||||
self.signing_key = hs.signing_key
|
self.signing_key = hs.signing_key
|
||||||
|
@ -193,15 +195,14 @@ class EventBuilderFactory:
|
||||||
self.state = hs.get_state_handler()
|
self.state = hs.get_state_handler()
|
||||||
self.auth = hs.get_auth()
|
self.auth = hs.get_auth()
|
||||||
|
|
||||||
def new(self, room_version, key_values):
|
def new(self, room_version: str, key_values: dict) -> EventBuilder:
|
||||||
"""Generate an event builder appropriate for the given room version
|
"""Generate an event builder appropriate for the given room version
|
||||||
|
|
||||||
Deprecated: use for_room_version with a RoomVersion object instead
|
Deprecated: use for_room_version with a RoomVersion object instead
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
room_version (str): Version of the room that we're creating an event builder
|
room_version: Version of the room that we're creating an event builder for
|
||||||
for
|
key_values: Fields used as the basis of the new event
|
||||||
key_values (dict): Fields used as the basis of the new event
|
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
EventBuilder
|
EventBuilder
|
||||||
|
@ -212,13 +213,15 @@ class EventBuilderFactory:
|
||||||
raise UnsupportedRoomVersionError()
|
raise UnsupportedRoomVersionError()
|
||||||
return self.for_room_version(v, key_values)
|
return self.for_room_version(v, key_values)
|
||||||
|
|
||||||
def for_room_version(self, room_version, key_values):
|
def for_room_version(
|
||||||
|
self, room_version: RoomVersion, key_values: dict
|
||||||
|
) -> EventBuilder:
|
||||||
"""Generate an event builder appropriate for the given room version
|
"""Generate an event builder appropriate for the given room version
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
room_version (synapse.api.room_versions.RoomVersion):
|
room_version:
|
||||||
Version of the room that we're creating an event builder for
|
Version of the room that we're creating an event builder for
|
||||||
key_values (dict): Fields used as the basis of the new event
|
key_values: Fields used as the basis of the new event
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
EventBuilder
|
EventBuilder
|
||||||
|
@ -286,15 +289,15 @@ def create_local_event_from_event_dict(
|
||||||
_event_id_counter = 0
|
_event_id_counter = 0
|
||||||
|
|
||||||
|
|
||||||
def _create_event_id(clock, hostname):
|
def _create_event_id(clock: Clock, hostname: str) -> str:
|
||||||
"""Create a new event ID
|
"""Create a new event ID
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
clock (Clock)
|
clock
|
||||||
hostname (str): The server name for the event ID
|
hostname: The server name for the event ID
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
str
|
The new event ID
|
||||||
"""
|
"""
|
||||||
|
|
||||||
global _event_id_counter
|
global _event_id_counter
|
||||||
|
|
|
@ -509,6 +509,8 @@ class EventCreationHandler:
|
||||||
Should normally be left as None, which will cause them to be calculated
|
Should normally be left as None, which will cause them to be calculated
|
||||||
based on the room state at the prev_events.
|
based on the room state at the prev_events.
|
||||||
|
|
||||||
|
If non-None, prev_event_ids must also be provided.
|
||||||
|
|
||||||
require_consent: Whether to check if the requester has
|
require_consent: Whether to check if the requester has
|
||||||
consented to the privacy policy.
|
consented to the privacy policy.
|
||||||
|
|
||||||
|
@ -581,6 +583,9 @@ class EventCreationHandler:
|
||||||
# Strip down the auth_event_ids to only what we need to auth the event.
|
# Strip down the auth_event_ids to only what we need to auth the event.
|
||||||
# For example, we don't need extra m.room.member that don't match event.sender
|
# For example, we don't need extra m.room.member that don't match event.sender
|
||||||
if auth_event_ids is not None:
|
if auth_event_ids is not None:
|
||||||
|
# If auth events are provided, prev events must be also.
|
||||||
|
assert prev_event_ids is not None
|
||||||
|
|
||||||
temp_event = await builder.build(
|
temp_event = await builder.build(
|
||||||
prev_event_ids=prev_event_ids,
|
prev_event_ids=prev_event_ids,
|
||||||
auth_event_ids=auth_event_ids,
|
auth_event_ids=auth_event_ids,
|
||||||
|
@ -784,6 +789,8 @@ class EventCreationHandler:
|
||||||
The event ids to use as the auth_events for the new event.
|
The event ids to use as the auth_events for the new event.
|
||||||
Should normally be left as None, which will cause them to be calculated
|
Should normally be left as None, which will cause them to be calculated
|
||||||
based on the room state at the prev_events.
|
based on the room state at the prev_events.
|
||||||
|
|
||||||
|
If non-None, prev_event_ids must also be provided.
|
||||||
ratelimit: Whether to rate limit this send.
|
ratelimit: Whether to rate limit this send.
|
||||||
txn_id: The transaction ID.
|
txn_id: The transaction ID.
|
||||||
ignore_shadow_ban: True if shadow-banned users should be allowed to
|
ignore_shadow_ban: True if shadow-banned users should be allowed to
|
||||||
|
|
Loading…
Reference in New Issue