mirror of
				https://github.com/matrix-org/synapse.git
				synced 2025-11-03 17:51:20 +01:00 
			
		
		
		
	Change to create new room and join other users
This commit is contained in:
		
							parent
							
								
									5db7070dd1
								
							
						
					
					
						commit
						b490299a3b
					
				@ -61,7 +61,7 @@ class RoomCreationHandler(BaseHandler):
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @defer.inlineCallbacks
 | 
					    @defer.inlineCallbacks
 | 
				
			||||||
    def create_room(self, requester, config):
 | 
					    def create_room(self, requester, config, ratelimit=True):
 | 
				
			||||||
        """ Creates a new room.
 | 
					        """ Creates a new room.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Args:
 | 
					        Args:
 | 
				
			||||||
@ -75,7 +75,8 @@ class RoomCreationHandler(BaseHandler):
 | 
				
			|||||||
        """
 | 
					        """
 | 
				
			||||||
        user_id = requester.user.to_string()
 | 
					        user_id = requester.user.to_string()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        yield self.ratelimit(requester)
 | 
					        if ratelimit:
 | 
				
			||||||
 | 
					            yield self.ratelimit(requester)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if "room_alias_name" in config:
 | 
					        if "room_alias_name" in config:
 | 
				
			||||||
            for wchar in string.whitespace:
 | 
					            for wchar in string.whitespace:
 | 
				
			||||||
@ -167,6 +168,7 @@ class RoomCreationHandler(BaseHandler):
 | 
				
			|||||||
            initial_state=initial_state,
 | 
					            initial_state=initial_state,
 | 
				
			||||||
            creation_content=creation_content,
 | 
					            creation_content=creation_content,
 | 
				
			||||||
            room_alias=room_alias,
 | 
					            room_alias=room_alias,
 | 
				
			||||||
 | 
					            power_level_content_override=config.get("power_level_content_override", {})
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if "name" in config:
 | 
					        if "name" in config:
 | 
				
			||||||
@ -245,7 +247,8 @@ class RoomCreationHandler(BaseHandler):
 | 
				
			|||||||
            invite_list,
 | 
					            invite_list,
 | 
				
			||||||
            initial_state,
 | 
					            initial_state,
 | 
				
			||||||
            creation_content,
 | 
					            creation_content,
 | 
				
			||||||
            room_alias
 | 
					            room_alias,
 | 
				
			||||||
 | 
					            power_level_content_override,
 | 
				
			||||||
    ):
 | 
					    ):
 | 
				
			||||||
        def create(etype, content, **kwargs):
 | 
					        def create(etype, content, **kwargs):
 | 
				
			||||||
            e = {
 | 
					            e = {
 | 
				
			||||||
@ -291,7 +294,15 @@ class RoomCreationHandler(BaseHandler):
 | 
				
			|||||||
            ratelimit=False,
 | 
					            ratelimit=False,
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (EventTypes.PowerLevels, '') not in initial_state:
 | 
					        # We treat the power levels override specially as this needs to be one
 | 
				
			||||||
 | 
					        # of the first events that get sent into a room.
 | 
				
			||||||
 | 
					        pl_content = initial_state.pop((EventTypes.PowerLevels, ''), None)
 | 
				
			||||||
 | 
					        if pl_content is not None:
 | 
				
			||||||
 | 
					            yield send(
 | 
				
			||||||
 | 
					                etype=EventTypes.PowerLevels,
 | 
				
			||||||
 | 
					                content=pl_content,
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
            power_level_content = {
 | 
					            power_level_content = {
 | 
				
			||||||
                "users": {
 | 
					                "users": {
 | 
				
			||||||
                    creator_id: 100,
 | 
					                    creator_id: 100,
 | 
				
			||||||
@ -316,6 +327,8 @@ class RoomCreationHandler(BaseHandler):
 | 
				
			|||||||
                for invitee in invite_list:
 | 
					                for invitee in invite_list:
 | 
				
			||||||
                    power_level_content["users"][invitee] = 100
 | 
					                    power_level_content["users"][invitee] = 100
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            power_level_content.update(power_level_content_override)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            yield send(
 | 
					            yield send(
 | 
				
			||||||
                etype=EventTypes.PowerLevels,
 | 
					                etype=EventTypes.PowerLevels,
 | 
				
			||||||
                content=power_level_content,
 | 
					                content=power_level_content,
 | 
				
			||||||
 | 
				
			|||||||
@ -15,7 +15,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
from twisted.internet import defer
 | 
					from twisted.internet import defer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from synapse.api.constants import Membership
 | 
					from synapse.api.constants import Membership, EventTypes
 | 
				
			||||||
from synapse.api.errors import AuthError, SynapseError
 | 
					from synapse.api.errors import AuthError, SynapseError
 | 
				
			||||||
from synapse.types import UserID, create_requester
 | 
					from synapse.types import UserID, create_requester
 | 
				
			||||||
from synapse.http.servlet import parse_json_object_from_request
 | 
					from synapse.http.servlet import parse_json_object_from_request
 | 
				
			||||||
@ -161,10 +161,16 @@ class DeactivateAccountRestServlet(ClientV1RestServlet):
 | 
				
			|||||||
class ShutdownRoomRestServlet(ClientV1RestServlet):
 | 
					class ShutdownRoomRestServlet(ClientV1RestServlet):
 | 
				
			||||||
    """Shuts down a room by removing all local users from the room and blocking
 | 
					    """Shuts down a room by removing all local users from the room and blocking
 | 
				
			||||||
    all future invites and joins to the room. Any local aliases will be repointed
 | 
					    all future invites and joins to the room. Any local aliases will be repointed
 | 
				
			||||||
    to a given room id.
 | 
					    to a new room created by `new_room_user_id` and kicked users will be auto
 | 
				
			||||||
 | 
					    joined to the new room.
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
    PATTERNS = client_path_patterns("/admin/shutdown_room/(?P<room_id>[^/]+)")
 | 
					    PATTERNS = client_path_patterns("/admin/shutdown_room/(?P<room_id>[^/]+)")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    DEFAULT_MESSAGE = (
 | 
				
			||||||
 | 
					        "Sharing illegal content on this server is not permitted and rooms in"
 | 
				
			||||||
 | 
					        " violatation will be blocked."
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __init__(self, hs):
 | 
					    def __init__(self, hs):
 | 
				
			||||||
        super(ShutdownRoomRestServlet, self).__init__(hs)
 | 
					        super(ShutdownRoomRestServlet, self).__init__(hs)
 | 
				
			||||||
        self.store = hs.get_datastore()
 | 
					        self.store = hs.get_datastore()
 | 
				
			||||||
@ -180,9 +186,39 @@ class ShutdownRoomRestServlet(ClientV1RestServlet):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        content = parse_json_object_from_request(request)
 | 
					        content = parse_json_object_from_request(request)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        repoint_aliases_to_room_id = content.get("repoint_aliases_to_room_id")
 | 
					        new_room_user_id = content.get("new_room_user_id")
 | 
				
			||||||
        if not repoint_aliases_to_room_id:
 | 
					        if not new_room_user_id:
 | 
				
			||||||
            raise SynapseError(400, "Please provide field `repoint_aliases_to_room_id`")
 | 
					            raise SynapseError(400, "Please provide field `new_room_user_id`")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        room_creator_requester = create_requester(new_room_user_id)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        message = content.get("message", self.DEFAULT_MESSAGE)
 | 
				
			||||||
 | 
					        room_name = content.get("room_name", "Content Violation Notification")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        info = yield self.handlers.room_creation_handler.create_room(
 | 
				
			||||||
 | 
					            room_creator_requester,
 | 
				
			||||||
 | 
					            config={
 | 
				
			||||||
 | 
					                "preset": "public_chat",
 | 
				
			||||||
 | 
					                "name": room_name,
 | 
				
			||||||
 | 
					                "power_level_content_override": {
 | 
				
			||||||
 | 
					                    "users_default": -10,
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            ratelimit=False,
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					        new_room_id = info["room_id"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        msg_handler = self.handlers.message_handler
 | 
				
			||||||
 | 
					        yield msg_handler.create_and_send_nonmember_event(
 | 
				
			||||||
 | 
					            room_creator_requester,
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                "type": "m.room.message",
 | 
				
			||||||
 | 
					                "content": {"body": message, "msgtype": "m.text"},
 | 
				
			||||||
 | 
					                "room_id": new_room_id,
 | 
				
			||||||
 | 
					                "sender": new_room_user_id,
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            ratelimit=False,
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        requester_user_id = requester.user.to_string()
 | 
					        requester_user_id = requester.user.to_string()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -205,21 +241,32 @@ class ShutdownRoomRestServlet(ClientV1RestServlet):
 | 
				
			|||||||
                room_id=room_id,
 | 
					                room_id=room_id,
 | 
				
			||||||
                action=Membership.LEAVE,
 | 
					                action=Membership.LEAVE,
 | 
				
			||||||
                content={},
 | 
					                content={},
 | 
				
			||||||
 | 
					                ratelimit=False
 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            yield self.handlers.room_member_handler.forget(target_requester.user, room_id)
 | 
					            yield self.handlers.room_member_handler.forget(target_requester.user, room_id)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            yield self.handlers.room_member_handler.update_membership(
 | 
				
			||||||
 | 
					                requester=target_requester,
 | 
				
			||||||
 | 
					                target=target_requester.user,
 | 
				
			||||||
 | 
					                room_id=new_room_id,
 | 
				
			||||||
 | 
					                action=Membership.JOIN,
 | 
				
			||||||
 | 
					                content={},
 | 
				
			||||||
 | 
					                ratelimit=False
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            kicked_users.append(user_id)
 | 
					            kicked_users.append(user_id)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        aliases_for_room = yield self.store.get_aliases_for_room(room_id)
 | 
					        aliases_for_room = yield self.store.get_aliases_for_room(room_id)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        yield self.store.update_aliases_for_room(
 | 
					        yield self.store.update_aliases_for_room(
 | 
				
			||||||
            room_id, repoint_aliases_to_room_id, requester_user_id
 | 
					            room_id, new_room_id, requester_user_id
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        defer.returnValue((200, {
 | 
					        defer.returnValue((200, {
 | 
				
			||||||
            "kicked_users": kicked_users,
 | 
					            "kicked_users": kicked_users,
 | 
				
			||||||
            "local_aliases": aliases_for_room,
 | 
					            "local_aliases": aliases_for_room,
 | 
				
			||||||
 | 
					            "new_room_id": new_room_id,
 | 
				
			||||||
        }))
 | 
					        }))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user