mirror of
https://github.com/element-hq/synapse.git
synced 2024-12-19 09:31:35 +03:00
Merge remote-tracking branch 'origin/develop' into matrix-org-hotfixes
This commit is contained in:
commit
cef3519e96
2 changed files with 55 additions and 54 deletions
1
changelog.d/17184.bugfix
Normal file
1
changelog.d/17184.bugfix
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Fix bug where disabling room publication prevented public rooms being created on workers.
|
|
@ -51,7 +51,7 @@ from synapse.api.room_versions import RoomVersion, RoomVersions
|
||||||
from synapse.config.homeserver import HomeServerConfig
|
from synapse.config.homeserver import HomeServerConfig
|
||||||
from synapse.events import EventBase
|
from synapse.events import EventBase
|
||||||
from synapse.replication.tcp.streams.partial_state import UnPartialStatedRoomStream
|
from synapse.replication.tcp.streams.partial_state import UnPartialStatedRoomStream
|
||||||
from synapse.storage._base import SQLBaseStore, db_to_json, make_in_list_sql_clause
|
from synapse.storage._base import db_to_json, make_in_list_sql_clause
|
||||||
from synapse.storage.database import (
|
from synapse.storage.database import (
|
||||||
DatabasePool,
|
DatabasePool,
|
||||||
LoggingDatabaseConnection,
|
LoggingDatabaseConnection,
|
||||||
|
@ -1682,6 +1682,58 @@ class RoomWorkerStore(CacheInvalidationWorkerStore):
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
async def set_room_is_public(self, room_id: str, is_public: bool) -> None:
|
||||||
|
await self.db_pool.simple_update_one(
|
||||||
|
table="rooms",
|
||||||
|
keyvalues={"room_id": room_id},
|
||||||
|
updatevalues={"is_public": is_public},
|
||||||
|
desc="set_room_is_public",
|
||||||
|
)
|
||||||
|
|
||||||
|
async def set_room_is_public_appservice(
|
||||||
|
self, room_id: str, appservice_id: str, network_id: str, is_public: bool
|
||||||
|
) -> None:
|
||||||
|
"""Edit the appservice/network specific public room list.
|
||||||
|
|
||||||
|
Each appservice can have a number of published room lists associated
|
||||||
|
with them, keyed off of an appservice defined `network_id`, which
|
||||||
|
basically represents a single instance of a bridge to a third party
|
||||||
|
network.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
room_id
|
||||||
|
appservice_id
|
||||||
|
network_id
|
||||||
|
is_public: Whether to publish or unpublish the room from the list.
|
||||||
|
"""
|
||||||
|
|
||||||
|
if is_public:
|
||||||
|
await self.db_pool.simple_upsert(
|
||||||
|
table="appservice_room_list",
|
||||||
|
keyvalues={
|
||||||
|
"appservice_id": appservice_id,
|
||||||
|
"network_id": network_id,
|
||||||
|
"room_id": room_id,
|
||||||
|
},
|
||||||
|
values={},
|
||||||
|
insertion_values={
|
||||||
|
"appservice_id": appservice_id,
|
||||||
|
"network_id": network_id,
|
||||||
|
"room_id": room_id,
|
||||||
|
},
|
||||||
|
desc="set_room_is_public_appservice_true",
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
await self.db_pool.simple_delete(
|
||||||
|
table="appservice_room_list",
|
||||||
|
keyvalues={
|
||||||
|
"appservice_id": appservice_id,
|
||||||
|
"network_id": network_id,
|
||||||
|
"room_id": room_id,
|
||||||
|
},
|
||||||
|
desc="set_room_is_public_appservice_false",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class _BackgroundUpdates:
|
class _BackgroundUpdates:
|
||||||
REMOVE_TOMESTONED_ROOMS_BG_UPDATE = "remove_tombstoned_rooms_from_directory"
|
REMOVE_TOMESTONED_ROOMS_BG_UPDATE = "remove_tombstoned_rooms_from_directory"
|
||||||
|
@ -1700,7 +1752,7 @@ _REPLACE_ROOM_DEPTH_SQL_COMMANDS = (
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class RoomBackgroundUpdateStore(SQLBaseStore):
|
class RoomBackgroundUpdateStore(RoomWorkerStore):
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
database: DatabasePool,
|
database: DatabasePool,
|
||||||
|
@ -1933,58 +1985,6 @@ class RoomBackgroundUpdateStore(SQLBaseStore):
|
||||||
|
|
||||||
return len(rooms)
|
return len(rooms)
|
||||||
|
|
||||||
async def set_room_is_public(self, room_id: str, is_public: bool) -> None:
|
|
||||||
await self.db_pool.simple_update_one(
|
|
||||||
table="rooms",
|
|
||||||
keyvalues={"room_id": room_id},
|
|
||||||
updatevalues={"is_public": is_public},
|
|
||||||
desc="set_room_is_public",
|
|
||||||
)
|
|
||||||
|
|
||||||
async def set_room_is_public_appservice(
|
|
||||||
self, room_id: str, appservice_id: str, network_id: str, is_public: bool
|
|
||||||
) -> None:
|
|
||||||
"""Edit the appservice/network specific public room list.
|
|
||||||
|
|
||||||
Each appservice can have a number of published room lists associated
|
|
||||||
with them, keyed off of an appservice defined `network_id`, which
|
|
||||||
basically represents a single instance of a bridge to a third party
|
|
||||||
network.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
room_id
|
|
||||||
appservice_id
|
|
||||||
network_id
|
|
||||||
is_public: Whether to publish or unpublish the room from the list.
|
|
||||||
"""
|
|
||||||
|
|
||||||
if is_public:
|
|
||||||
await self.db_pool.simple_upsert(
|
|
||||||
table="appservice_room_list",
|
|
||||||
keyvalues={
|
|
||||||
"appservice_id": appservice_id,
|
|
||||||
"network_id": network_id,
|
|
||||||
"room_id": room_id,
|
|
||||||
},
|
|
||||||
values={},
|
|
||||||
insertion_values={
|
|
||||||
"appservice_id": appservice_id,
|
|
||||||
"network_id": network_id,
|
|
||||||
"room_id": room_id,
|
|
||||||
},
|
|
||||||
desc="set_room_is_public_appservice_true",
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
await self.db_pool.simple_delete(
|
|
||||||
table="appservice_room_list",
|
|
||||||
keyvalues={
|
|
||||||
"appservice_id": appservice_id,
|
|
||||||
"network_id": network_id,
|
|
||||||
"room_id": room_id,
|
|
||||||
},
|
|
||||||
desc="set_room_is_public_appservice_false",
|
|
||||||
)
|
|
||||||
|
|
||||||
async def has_auth_chain_index(self, room_id: str) -> bool:
|
async def has_auth_chain_index(self, room_id: str) -> bool:
|
||||||
"""Check if the room has (or can have) a chain cover index.
|
"""Check if the room has (or can have) a chain cover index.
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue