mirror of
https://git.anonymousland.org/anonymousland/synapse-product.git
synced 2025-02-14 01:11:25 -05:00
Merge remote-tracking branch 'origin/develop' into rav/event_auth/4
This commit is contained in:
commit
870c00e278
1
changelog.d/6220.feature
Normal file
1
changelog.d/6220.feature
Normal file
@ -0,0 +1 @@
|
|||||||
|
Increase default room version from 4 to 5, thereby enforcing server key validity period checks.
|
1
changelog.d/6317.misc
Normal file
1
changelog.d/6317.misc
Normal file
@ -0,0 +1 @@
|
|||||||
|
Add optional python dependencies and dependant binary libraries to snapcraft packaging.
|
1
changelog.d/6357.misc
Normal file
1
changelog.d/6357.misc
Normal file
@ -0,0 +1 @@
|
|||||||
|
Correct spacing/case of various instances of the word "homeserver".
|
1
changelog.d/6359.bugfix
Normal file
1
changelog.d/6359.bugfix
Normal file
@ -0,0 +1 @@
|
|||||||
|
Fix bug where upgrading a guest account to a full user would fail when account validity is enabled.
|
1
changelog.d/6361.misc
Normal file
1
changelog.d/6361.misc
Normal file
@ -0,0 +1 @@
|
|||||||
|
Temporarily blacklist the failing unit test PurgeRoomTestCase.test_purge_room.
|
1
changelog.d/6363.bugfix
Normal file
1
changelog.d/6363.bugfix
Normal file
@ -0,0 +1 @@
|
|||||||
|
Fix `to_device` stream ID getting reset every time Synapse restarts, which had the potential to cause unable to decrypt errors.
|
@ -72,7 +72,7 @@ pid_file: DATADIR/homeserver.pid
|
|||||||
# For example, for room version 1, default_room_version should be set
|
# For example, for room version 1, default_room_version should be set
|
||||||
# to "1".
|
# to "1".
|
||||||
#
|
#
|
||||||
#default_room_version: "4"
|
#default_room_version: "5"
|
||||||
|
|
||||||
# The GC threshold parameters to pass to `gc.set_threshold`, if defined
|
# The GC threshold parameters to pass to `gc.set_threshold`, if defined
|
||||||
#
|
#
|
||||||
@ -287,7 +287,7 @@ listeners:
|
|||||||
# Used by phonehome stats to group together related servers.
|
# Used by phonehome stats to group together related servers.
|
||||||
#server_context: context
|
#server_context: context
|
||||||
|
|
||||||
# Resource-constrained Homeserver Settings
|
# Resource-constrained homeserver Settings
|
||||||
#
|
#
|
||||||
# If limit_remote_rooms.enabled is True, the room complexity will be
|
# If limit_remote_rooms.enabled is True, the room complexity will be
|
||||||
# checked before a user joins a new remote room. If it is above
|
# checked before a user joins a new remote room. If it is above
|
||||||
@ -743,11 +743,11 @@ uploads_path: "DATADIR/uploads"
|
|||||||
## Captcha ##
|
## Captcha ##
|
||||||
# See docs/CAPTCHA_SETUP for full details of configuring this.
|
# See docs/CAPTCHA_SETUP for full details of configuring this.
|
||||||
|
|
||||||
# This Home Server's ReCAPTCHA public key.
|
# This homeserver's ReCAPTCHA public key.
|
||||||
#
|
#
|
||||||
#recaptcha_public_key: "YOUR_PUBLIC_KEY"
|
#recaptcha_public_key: "YOUR_PUBLIC_KEY"
|
||||||
|
|
||||||
# This Home Server's ReCAPTCHA private key.
|
# This homeserver's ReCAPTCHA private key.
|
||||||
#
|
#
|
||||||
#recaptcha_private_key: "YOUR_PRIVATE_KEY"
|
#recaptcha_private_key: "YOUR_PRIVATE_KEY"
|
||||||
|
|
||||||
@ -1270,7 +1270,7 @@ password_config:
|
|||||||
# smtp_user: "exampleusername"
|
# smtp_user: "exampleusername"
|
||||||
# smtp_pass: "examplepassword"
|
# smtp_pass: "examplepassword"
|
||||||
# require_transport_security: false
|
# require_transport_security: false
|
||||||
# notif_from: "Your Friendly %(app)s Home Server <noreply@example.com>"
|
# notif_from: "Your Friendly %(app)s homeserver <noreply@example.com>"
|
||||||
# app_name: Matrix
|
# app_name: Matrix
|
||||||
#
|
#
|
||||||
# # Enable email notifications by default
|
# # Enable email notifications by default
|
||||||
|
@ -20,3 +20,23 @@ parts:
|
|||||||
source: .
|
source: .
|
||||||
plugin: python
|
plugin: python
|
||||||
python-version: python3
|
python-version: python3
|
||||||
|
python-packages:
|
||||||
|
- '.[all]'
|
||||||
|
build-packages:
|
||||||
|
- libffi-dev
|
||||||
|
- libturbojpeg0-dev
|
||||||
|
- libssl-dev
|
||||||
|
- libxslt1-dev
|
||||||
|
- libpq-dev
|
||||||
|
- zlib1g-dev
|
||||||
|
stage-packages:
|
||||||
|
- libasn1-8-heimdal
|
||||||
|
- libgssapi3-heimdal
|
||||||
|
- libhcrypto4-heimdal
|
||||||
|
- libheimbase1-heimdal
|
||||||
|
- libheimntlm0-heimdal
|
||||||
|
- libhx509-5-heimdal
|
||||||
|
- libkrb5-26-heimdal
|
||||||
|
- libldap-2.4-2
|
||||||
|
- libpq5
|
||||||
|
- libsasl2-2
|
||||||
|
@ -14,7 +14,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.
|
||||||
|
|
||||||
""" This is a reference implementation of a Matrix home server.
|
""" This is a reference implementation of a Matrix homeserver.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
@ -144,8 +144,8 @@ def main():
|
|||||||
logging.captureWarnings(True)
|
logging.captureWarnings(True)
|
||||||
|
|
||||||
parser = argparse.ArgumentParser(
|
parser = argparse.ArgumentParser(
|
||||||
description="Used to register new users with a given home server when"
|
description="Used to register new users with a given homeserver when"
|
||||||
" registration has been disabled. The home server must be"
|
" registration has been disabled. The homeserver must be"
|
||||||
" configured with the 'registration_shared_secret' option"
|
" configured with the 'registration_shared_secret' option"
|
||||||
" set."
|
" set."
|
||||||
)
|
)
|
||||||
@ -202,7 +202,7 @@ def main():
|
|||||||
"server_url",
|
"server_url",
|
||||||
default="https://localhost:8448",
|
default="https://localhost:8448",
|
||||||
nargs="?",
|
nargs="?",
|
||||||
help="URL to use to talk to the home server. Defaults to "
|
help="URL to use to talk to the homeserver. Defaults to "
|
||||||
" 'https://localhost:8448'.",
|
" 'https://localhost:8448'.",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -457,7 +457,7 @@ def cs_error(msg, code=Codes.UNKNOWN, **kwargs):
|
|||||||
|
|
||||||
|
|
||||||
class FederationError(RuntimeError):
|
class FederationError(RuntimeError):
|
||||||
""" This class is used to inform remote home servers about erroneous
|
""" This class is used to inform remote homeservers about erroneous
|
||||||
PDUs they sent us.
|
PDUs they sent us.
|
||||||
|
|
||||||
FATAL: The remote server could not interpret the source event.
|
FATAL: The remote server could not interpret the source event.
|
||||||
|
@ -35,11 +35,11 @@ class CaptchaConfig(Config):
|
|||||||
## Captcha ##
|
## Captcha ##
|
||||||
# See docs/CAPTCHA_SETUP for full details of configuring this.
|
# See docs/CAPTCHA_SETUP for full details of configuring this.
|
||||||
|
|
||||||
# This Home Server's ReCAPTCHA public key.
|
# This homeserver's ReCAPTCHA public key.
|
||||||
#
|
#
|
||||||
#recaptcha_public_key: "YOUR_PUBLIC_KEY"
|
#recaptcha_public_key: "YOUR_PUBLIC_KEY"
|
||||||
|
|
||||||
# This Home Server's ReCAPTCHA private key.
|
# This homeserver's ReCAPTCHA private key.
|
||||||
#
|
#
|
||||||
#recaptcha_private_key: "YOUR_PRIVATE_KEY"
|
#recaptcha_private_key: "YOUR_PRIVATE_KEY"
|
||||||
|
|
||||||
|
@ -305,7 +305,7 @@ class EmailConfig(Config):
|
|||||||
# smtp_user: "exampleusername"
|
# smtp_user: "exampleusername"
|
||||||
# smtp_pass: "examplepassword"
|
# smtp_pass: "examplepassword"
|
||||||
# require_transport_security: false
|
# require_transport_security: false
|
||||||
# notif_from: "Your Friendly %(app)s Home Server <noreply@example.com>"
|
# notif_from: "Your Friendly %(app)s homeserver <noreply@example.com>"
|
||||||
# app_name: Matrix
|
# app_name: Matrix
|
||||||
#
|
#
|
||||||
# # Enable email notifications by default
|
# # Enable email notifications by default
|
||||||
|
@ -41,7 +41,7 @@ logger = logging.Logger(__name__)
|
|||||||
# in the list.
|
# in the list.
|
||||||
DEFAULT_BIND_ADDRESSES = ["::", "0.0.0.0"]
|
DEFAULT_BIND_ADDRESSES = ["::", "0.0.0.0"]
|
||||||
|
|
||||||
DEFAULT_ROOM_VERSION = "4"
|
DEFAULT_ROOM_VERSION = "5"
|
||||||
|
|
||||||
ROOM_COMPLEXITY_TOO_GREAT = (
|
ROOM_COMPLEXITY_TOO_GREAT = (
|
||||||
"Your homeserver is unable to join rooms this large or complex. "
|
"Your homeserver is unable to join rooms this large or complex. "
|
||||||
@ -721,7 +721,7 @@ class ServerConfig(Config):
|
|||||||
# Used by phonehome stats to group together related servers.
|
# Used by phonehome stats to group together related servers.
|
||||||
#server_context: context
|
#server_context: context
|
||||||
|
|
||||||
# Resource-constrained Homeserver Settings
|
# Resource-constrained homeserver Settings
|
||||||
#
|
#
|
||||||
# If limit_remote_rooms.enabled is True, the room complexity will be
|
# If limit_remote_rooms.enabled is True, the room complexity will be
|
||||||
# checked before a user joins a new remote room. If it is above
|
# checked before a user joins a new remote room. If it is above
|
||||||
@ -781,7 +781,7 @@ class ServerConfig(Config):
|
|||||||
"--daemonize",
|
"--daemonize",
|
||||||
action="store_true",
|
action="store_true",
|
||||||
default=None,
|
default=None,
|
||||||
help="Daemonize the home server",
|
help="Daemonize the homeserver",
|
||||||
)
|
)
|
||||||
server_group.add_argument(
|
server_group.add_argument(
|
||||||
"--print-pidfile",
|
"--print-pidfile",
|
||||||
|
@ -177,7 +177,7 @@ class FederationClient(FederationBase):
|
|||||||
given destination server.
|
given destination server.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
dest (str): The remote home server to ask.
|
dest (str): The remote homeserver to ask.
|
||||||
room_id (str): The room_id to backfill.
|
room_id (str): The room_id to backfill.
|
||||||
limit (int): The maximum number of PDUs to return.
|
limit (int): The maximum number of PDUs to return.
|
||||||
extremities (list): List of PDU id and origins of the first pdus
|
extremities (list): List of PDU id and origins of the first pdus
|
||||||
@ -227,7 +227,7 @@ class FederationClient(FederationBase):
|
|||||||
one succeeds.
|
one succeeds.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
destinations (list): Which home servers to query
|
destinations (list): Which homeservers to query
|
||||||
event_id (str): event to fetch
|
event_id (str): event to fetch
|
||||||
room_version (str): version of the room
|
room_version (str): version of the room
|
||||||
outlier (bool): Indicates whether the PDU is an `outlier`, i.e. if
|
outlier (bool): Indicates whether the PDU is an `outlier`, i.e. if
|
||||||
@ -312,7 +312,7 @@ class FederationClient(FederationBase):
|
|||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
@log_function
|
@log_function
|
||||||
def get_state_for_room(self, destination, room_id, event_id):
|
def get_state_for_room(self, destination, room_id, event_id):
|
||||||
"""Requests all of the room state at a given event from a remote home server.
|
"""Requests all of the room state at a given event from a remote homeserver.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
destination (str): The remote homeserver to query for the state.
|
destination (str): The remote homeserver to query for the state.
|
||||||
|
@ -14,9 +14,9 @@
|
|||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
"""The transport layer is responsible for both sending transactions to remote
|
"""The transport layer is responsible for both sending transactions to remote
|
||||||
home servers and receiving a variety of requests from other home servers.
|
homeservers and receiving a variety of requests from other homeservers.
|
||||||
|
|
||||||
By default this is done over HTTPS (and all home servers are required to
|
By default this is done over HTTPS (and all homeservers are required to
|
||||||
support HTTPS), however individual pairings of servers may decide to
|
support HTTPS), however individual pairings of servers may decide to
|
||||||
communicate over a different (albeit still reliable) protocol.
|
communicate over a different (albeit still reliable) protocol.
|
||||||
"""
|
"""
|
||||||
|
@ -44,7 +44,7 @@ class TransportLayerClient(object):
|
|||||||
given event.
|
given event.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
destination (str): The host name of the remote home server we want
|
destination (str): The host name of the remote homeserver we want
|
||||||
to get the state from.
|
to get the state from.
|
||||||
context (str): The name of the context we want the state of
|
context (str): The name of the context we want the state of
|
||||||
event_id (str): The event we want the context at.
|
event_id (str): The event we want the context at.
|
||||||
@ -68,7 +68,7 @@ class TransportLayerClient(object):
|
|||||||
given event. Returns the state's event_id's
|
given event. Returns the state's event_id's
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
destination (str): The host name of the remote home server we want
|
destination (str): The host name of the remote homeserver we want
|
||||||
to get the state from.
|
to get the state from.
|
||||||
context (str): The name of the context we want the state of
|
context (str): The name of the context we want the state of
|
||||||
event_id (str): The event we want the context at.
|
event_id (str): The event we want the context at.
|
||||||
@ -91,7 +91,7 @@ class TransportLayerClient(object):
|
|||||||
""" Requests the pdu with give id and origin from the given server.
|
""" Requests the pdu with give id and origin from the given server.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
destination (str): The host name of the remote home server we want
|
destination (str): The host name of the remote homeserver we want
|
||||||
to get the state from.
|
to get the state from.
|
||||||
event_id (str): The id of the event being requested.
|
event_id (str): The id of the event being requested.
|
||||||
timeout (int): How long to try (in ms) the destination for before
|
timeout (int): How long to try (in ms) the destination for before
|
||||||
|
@ -714,7 +714,7 @@ class PublicRoomList(BaseFederationServlet):
|
|||||||
|
|
||||||
This API returns information in the same format as /publicRooms on the
|
This API returns information in the same format as /publicRooms on the
|
||||||
client API, but will only ever include local public rooms and hence is
|
client API, but will only ever include local public rooms and hence is
|
||||||
intended for consumption by other home servers.
|
intended for consumption by other homeservers.
|
||||||
|
|
||||||
GET /publicRooms HTTP/1.1
|
GET /publicRooms HTTP/1.1
|
||||||
|
|
||||||
|
@ -223,7 +223,7 @@ class AuthHandler(BaseHandler):
|
|||||||
# could continue registration from your phone having clicked the
|
# could continue registration from your phone having clicked the
|
||||||
# email auth link on there). It's probably too open to abuse
|
# email auth link on there). It's probably too open to abuse
|
||||||
# because it lets unauthenticated clients store arbitrary objects
|
# because it lets unauthenticated clients store arbitrary objects
|
||||||
# on a home server.
|
# on a homeserver.
|
||||||
# Revisit: Assumimg the REST APIs do sensible validation, the data
|
# Revisit: Assumimg the REST APIs do sensible validation, the data
|
||||||
# isn't arbintrary.
|
# isn't arbintrary.
|
||||||
session["clientdict"] = clientdict
|
session["clientdict"] = clientdict
|
||||||
@ -810,7 +810,7 @@ class AuthHandler(BaseHandler):
|
|||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
def add_threepid(self, user_id, medium, address, validated_at):
|
def add_threepid(self, user_id, medium, address, validated_at):
|
||||||
# 'Canonicalise' email addresses down to lower case.
|
# 'Canonicalise' email addresses down to lower case.
|
||||||
# We've now moving towards the Home Server being the entity that
|
# We've now moving towards the homeserver being the entity that
|
||||||
# is responsible for validating threepids used for resetting passwords
|
# is responsible for validating threepids used for resetting passwords
|
||||||
# on accounts, so in future Synapse will gain knowledge of specific
|
# on accounts, so in future Synapse will gain knowledge of specific
|
||||||
# types (mediums) of threepid. For now, we still use the existing
|
# types (mediums) of threepid. For now, we still use the existing
|
||||||
|
@ -283,7 +283,7 @@ class DirectoryHandler(BaseHandler):
|
|||||||
def on_directory_query(self, args):
|
def on_directory_query(self, args):
|
||||||
room_alias = RoomAlias.from_string(args["room_alias"])
|
room_alias = RoomAlias.from_string(args["room_alias"])
|
||||||
if not self.hs.is_mine(room_alias):
|
if not self.hs.is_mine(room_alias):
|
||||||
raise SynapseError(400, "Room Alias is not hosted on this Home Server")
|
raise SynapseError(400, "Room Alias is not hosted on this homeserver")
|
||||||
|
|
||||||
result = yield self.get_association_from_room_alias(room_alias)
|
result = yield self.get_association_from_room_alias(room_alias)
|
||||||
|
|
||||||
|
@ -97,9 +97,9 @@ class FederationHandler(BaseHandler):
|
|||||||
"""Handles events that originated from federation.
|
"""Handles events that originated from federation.
|
||||||
Responsible for:
|
Responsible for:
|
||||||
a) handling received Pdus before handing them on as Events to the rest
|
a) handling received Pdus before handing them on as Events to the rest
|
||||||
of the home server (including auth and state conflict resoultion)
|
of the homeserver (including auth and state conflict resoultion)
|
||||||
b) converting events that were produced by local clients that may need
|
b) converting events that were produced by local clients that may need
|
||||||
to be sent to remote home servers.
|
to be sent to remote homeservers.
|
||||||
c) doing the necessary dances to invite remote users and join remote
|
c) doing the necessary dances to invite remote users and join remote
|
||||||
rooms.
|
rooms.
|
||||||
"""
|
"""
|
||||||
|
@ -152,7 +152,7 @@ class BaseProfileHandler(BaseHandler):
|
|||||||
by_admin (bool): Whether this change was made by an administrator.
|
by_admin (bool): Whether this change was made by an administrator.
|
||||||
"""
|
"""
|
||||||
if not self.hs.is_mine(target_user):
|
if not self.hs.is_mine(target_user):
|
||||||
raise SynapseError(400, "User is not hosted on this Home Server")
|
raise SynapseError(400, "User is not hosted on this homeserver")
|
||||||
|
|
||||||
if not by_admin and target_user != requester.user:
|
if not by_admin and target_user != requester.user:
|
||||||
raise AuthError(400, "Cannot set another user's displayname")
|
raise AuthError(400, "Cannot set another user's displayname")
|
||||||
@ -207,7 +207,7 @@ class BaseProfileHandler(BaseHandler):
|
|||||||
"""target_user is the user whose avatar_url is to be changed;
|
"""target_user is the user whose avatar_url is to be changed;
|
||||||
auth_user is the user attempting to make this change."""
|
auth_user is the user attempting to make this change."""
|
||||||
if not self.hs.is_mine(target_user):
|
if not self.hs.is_mine(target_user):
|
||||||
raise SynapseError(400, "User is not hosted on this Home Server")
|
raise SynapseError(400, "User is not hosted on this homeserver")
|
||||||
|
|
||||||
if not by_admin and target_user != requester.user:
|
if not by_admin and target_user != requester.user:
|
||||||
raise AuthError(400, "Cannot set another user's avatar_url")
|
raise AuthError(400, "Cannot set another user's avatar_url")
|
||||||
@ -231,7 +231,7 @@ class BaseProfileHandler(BaseHandler):
|
|||||||
def on_profile_query(self, args):
|
def on_profile_query(self, args):
|
||||||
user = UserID.from_string(args["user_id"])
|
user = UserID.from_string(args["user_id"])
|
||||||
if not self.hs.is_mine(user):
|
if not self.hs.is_mine(user):
|
||||||
raise SynapseError(400, "User is not hosted on this Home Server")
|
raise SynapseError(400, "User is not hosted on this homeserver")
|
||||||
|
|
||||||
just_field = args.get("field", None)
|
just_field = args.get("field", None)
|
||||||
|
|
||||||
|
@ -630,7 +630,7 @@ class RegistrationHandler(BaseHandler):
|
|||||||
# And we add an email pusher for them by default, but only
|
# And we add an email pusher for them by default, but only
|
||||||
# if email notifications are enabled (so people don't start
|
# if email notifications are enabled (so people don't start
|
||||||
# getting mail spam where they weren't before if email
|
# getting mail spam where they weren't before if email
|
||||||
# notifs are set up on a home server)
|
# notifs are set up on a homeserver)
|
||||||
if (
|
if (
|
||||||
self.hs.config.email_enable_notifs
|
self.hs.config.email_enable_notifs
|
||||||
and self.hs.config.email_notif_for_new_users
|
and self.hs.config.email_notif_for_new_users
|
||||||
|
@ -120,7 +120,7 @@ class TypingHandler(object):
|
|||||||
auth_user_id = auth_user.to_string()
|
auth_user_id = auth_user.to_string()
|
||||||
|
|
||||||
if not self.is_mine_id(target_user_id):
|
if not self.is_mine_id(target_user_id):
|
||||||
raise SynapseError(400, "User is not hosted on this Home Server")
|
raise SynapseError(400, "User is not hosted on this homeserver")
|
||||||
|
|
||||||
if target_user_id != auth_user_id:
|
if target_user_id != auth_user_id:
|
||||||
raise AuthError(400, "Cannot set another user's typing state")
|
raise AuthError(400, "Cannot set another user's typing state")
|
||||||
@ -150,7 +150,7 @@ class TypingHandler(object):
|
|||||||
auth_user_id = auth_user.to_string()
|
auth_user_id = auth_user.to_string()
|
||||||
|
|
||||||
if not self.is_mine_id(target_user_id):
|
if not self.is_mine_id(target_user_id):
|
||||||
raise SynapseError(400, "User is not hosted on this Home Server")
|
raise SynapseError(400, "User is not hosted on this homeserver")
|
||||||
|
|
||||||
if target_user_id != auth_user_id:
|
if target_user_id != auth_user_id:
|
||||||
raise AuthError(400, "Cannot set another user's typing state")
|
raise AuthError(400, "Cannot set another user's typing state")
|
||||||
|
@ -530,7 +530,7 @@ class MatrixFederationHttpClient(object):
|
|||||||
"""
|
"""
|
||||||
Builds the Authorization headers for a federation request
|
Builds the Authorization headers for a federation request
|
||||||
Args:
|
Args:
|
||||||
destination (bytes|None): The desination home server of the request.
|
destination (bytes|None): The desination homeserver of the request.
|
||||||
May be None if the destination is an identity server, in which case
|
May be None if the destination is an identity server, in which case
|
||||||
destination_is must be non-None.
|
destination_is must be non-None.
|
||||||
method (bytes): The HTTP method of the request
|
method (bytes): The HTTP method of the request
|
||||||
|
@ -153,7 +153,7 @@ class TerseJSONToTCPLogObserver(object):
|
|||||||
An IObserver that writes JSON logs to a TCP target.
|
An IObserver that writes JSON logs to a TCP target.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
hs (HomeServer): The Homeserver that is being logged for.
|
hs (HomeServer): The homeserver that is being logged for.
|
||||||
host: The host of the logging target.
|
host: The host of the logging target.
|
||||||
port: The logging target's port.
|
port: The logging target's port.
|
||||||
metadata: Metadata to be added to each log entry.
|
metadata: Metadata to be added to each log entry.
|
||||||
|
@ -361,14 +361,11 @@ class SQLBaseStore(object):
|
|||||||
expiration_ts,
|
expiration_ts,
|
||||||
)
|
)
|
||||||
|
|
||||||
self._simple_insert_txn(
|
self._simple_upsert_txn(
|
||||||
txn,
|
txn,
|
||||||
"account_validity",
|
"account_validity",
|
||||||
values={
|
keyvalues={"user_id": user_id},
|
||||||
"user_id": user_id,
|
values={"expiration_ts_ms": expiration_ts, "email_sent": False},
|
||||||
"expiration_ts_ms": expiration_ts,
|
|
||||||
"email_sent": False,
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
|
|
||||||
def start_profiling(self):
|
def start_profiling(self):
|
||||||
|
@ -358,8 +358,21 @@ class DeviceInboxStore(DeviceInboxWorkerStore, DeviceInboxBackgroundUpdateStore)
|
|||||||
def _add_messages_to_local_device_inbox_txn(
|
def _add_messages_to_local_device_inbox_txn(
|
||||||
self, txn, stream_id, messages_by_user_then_device
|
self, txn, stream_id, messages_by_user_then_device
|
||||||
):
|
):
|
||||||
sql = "UPDATE device_max_stream_id" " SET stream_id = ?" " WHERE stream_id < ?"
|
# Compatible method of performing an upsert
|
||||||
txn.execute(sql, (stream_id, stream_id))
|
sql = "SELECT stream_id FROM device_max_stream_id"
|
||||||
|
|
||||||
|
txn.execute(sql)
|
||||||
|
rows = txn.fetchone()
|
||||||
|
if rows:
|
||||||
|
db_stream_id = rows[0]
|
||||||
|
if db_stream_id < stream_id:
|
||||||
|
# Insert the new stream_id
|
||||||
|
sql = "UPDATE device_max_stream_id SET stream_id = ?"
|
||||||
|
else:
|
||||||
|
# No rows, perform an insert
|
||||||
|
sql = "INSERT INTO device_max_stream_id (stream_id) VALUES (?)"
|
||||||
|
|
||||||
|
txn.execute(sql, (stream_id,))
|
||||||
|
|
||||||
local_by_user_then_device = {}
|
local_by_user_then_device = {}
|
||||||
for user_id, messages_by_device in messages_by_user_then_device.items():
|
for user_id, messages_by_device in messages_by_user_then_device.items():
|
||||||
|
@ -20,7 +20,7 @@ logger = logging.getLogger(__name__)
|
|||||||
|
|
||||||
|
|
||||||
def create_resource_tree(desired_tree, root_resource):
|
def create_resource_tree(desired_tree, root_resource):
|
||||||
"""Create the resource tree for this Home Server.
|
"""Create the resource tree for this homeserver.
|
||||||
|
|
||||||
This in unduly complicated because Twisted does not support putting
|
This in unduly complicated because Twisted does not support putting
|
||||||
child resources more than 1 level deep at a time.
|
child resources more than 1 level deep at a time.
|
||||||
|
@ -641,3 +641,5 @@ class PurgeRoomTestCase(unittest.HomeserverTestCase):
|
|||||||
)
|
)
|
||||||
|
|
||||||
self.assertEqual(count, 0, msg="Rows not purged in {}".format(table))
|
self.assertEqual(count, 0, msg="Rows not purged in {}".format(table))
|
||||||
|
|
||||||
|
test_purge_room.skip = "Disabled because it's currently broken"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user