mirror of
https://mau.dev/maunium/synapse.git
synced 2024-10-01 01:36:05 -04:00
Merge pull request #5196 from matrix-org/babolivier/per_room_profiles
Add an option to disable per-room profiles
This commit is contained in:
commit
fdeac1e984
1
changelog.d/5196.feature
Normal file
1
changelog.d/5196.feature
Normal file
@ -0,0 +1 @@
|
|||||||
|
Add an option to disable per-room profiles.
|
@ -276,6 +276,12 @@ listeners:
|
|||||||
#
|
#
|
||||||
#require_membership_for_aliases: false
|
#require_membership_for_aliases: false
|
||||||
|
|
||||||
|
# Whether to allow per-room membership profiles through the send of membership
|
||||||
|
# events with profile information that differ from the target's global profile.
|
||||||
|
# Defaults to 'true'.
|
||||||
|
#
|
||||||
|
#allow_per_room_profiles: false
|
||||||
|
|
||||||
|
|
||||||
## TLS ##
|
## TLS ##
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# Copyright 2014-2016 OpenMarket Ltd
|
# Copyright 2014-2016 OpenMarket Ltd
|
||||||
# Copyright 2017-2018 New Vector Ltd
|
# Copyright 2017-2018 New Vector Ltd
|
||||||
|
# Copyright 2019 The Matrix.org Foundation C.I.C.
|
||||||
#
|
#
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
# you may not use this file except in compliance with the License.
|
# you may not use this file except in compliance with the License.
|
||||||
@ -173,6 +174,10 @@ class ServerConfig(Config):
|
|||||||
"require_membership_for_aliases", True,
|
"require_membership_for_aliases", True,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Whether to allow per-room membership profiles through the send of membership
|
||||||
|
# events with profile information that differ from the target's global profile.
|
||||||
|
self.allow_per_room_profiles = config.get("allow_per_room_profiles", True)
|
||||||
|
|
||||||
self.listeners = []
|
self.listeners = []
|
||||||
for listener in config.get("listeners", []):
|
for listener in config.get("listeners", []):
|
||||||
if not isinstance(listener.get("port", None), int):
|
if not isinstance(listener.get("port", None), int):
|
||||||
@ -566,6 +571,12 @@ class ServerConfig(Config):
|
|||||||
# Defaults to 'true'.
|
# Defaults to 'true'.
|
||||||
#
|
#
|
||||||
#require_membership_for_aliases: false
|
#require_membership_for_aliases: false
|
||||||
|
|
||||||
|
# Whether to allow per-room membership profiles through the send of membership
|
||||||
|
# events with profile information that differ from the target's global profile.
|
||||||
|
# Defaults to 'true'.
|
||||||
|
#
|
||||||
|
#allow_per_room_profiles: false
|
||||||
""" % locals()
|
""" % locals()
|
||||||
|
|
||||||
def read_arguments(self, args):
|
def read_arguments(self, args):
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# Copyright 2016 OpenMarket Ltd
|
# Copyright 2016 OpenMarket Ltd
|
||||||
# Copyright 2018 New Vector Ltd
|
# Copyright 2018 New Vector Ltd
|
||||||
|
# Copyright 2019 The Matrix.org Foundation C.I.C.
|
||||||
#
|
#
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
# you may not use this file except in compliance with the License.
|
# you may not use this file except in compliance with the License.
|
||||||
@ -73,6 +74,7 @@ class RoomMemberHandler(object):
|
|||||||
self.spam_checker = hs.get_spam_checker()
|
self.spam_checker = hs.get_spam_checker()
|
||||||
self._server_notices_mxid = self.config.server_notices_mxid
|
self._server_notices_mxid = self.config.server_notices_mxid
|
||||||
self._enable_lookup = hs.config.enable_3pid_lookup
|
self._enable_lookup = hs.config.enable_3pid_lookup
|
||||||
|
self.allow_per_room_profiles = self.config.allow_per_room_profiles
|
||||||
|
|
||||||
# This is only used to get at ratelimit function, and
|
# This is only used to get at ratelimit function, and
|
||||||
# maybe_kick_guest_users. It's fine there are multiple of these as
|
# maybe_kick_guest_users. It's fine there are multiple of these as
|
||||||
@ -357,6 +359,13 @@ class RoomMemberHandler(object):
|
|||||||
# later on.
|
# later on.
|
||||||
content = dict(content)
|
content = dict(content)
|
||||||
|
|
||||||
|
if not self.allow_per_room_profiles:
|
||||||
|
# Strip profile data, knowing that new profile data will be added to the
|
||||||
|
# event's content in event_creation_handler.create_event() using the target's
|
||||||
|
# global profile.
|
||||||
|
content.pop("displayname", None)
|
||||||
|
content.pop("avatar_url", None)
|
||||||
|
|
||||||
effective_membership_state = action
|
effective_membership_state = action
|
||||||
if action in ["kick", "unban"]:
|
if action in ["kick", "unban"]:
|
||||||
effective_membership_state = "leave"
|
effective_membership_state = "leave"
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# Copyright 2014-2016 OpenMarket Ltd
|
# Copyright 2014-2016 OpenMarket Ltd
|
||||||
|
# Copyright 2019 The Matrix.org Foundation C.I.C.
|
||||||
#
|
#
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
# you may not use this file except in compliance with the License.
|
# you may not use this file except in compliance with the License.
|
||||||
@ -24,7 +25,7 @@ from twisted.internet import defer
|
|||||||
|
|
||||||
import synapse.rest.admin
|
import synapse.rest.admin
|
||||||
from synapse.api.constants import Membership
|
from synapse.api.constants import Membership
|
||||||
from synapse.rest.client.v1 import login, room
|
from synapse.rest.client.v1 import login, profile, room
|
||||||
|
|
||||||
from tests import unittest
|
from tests import unittest
|
||||||
|
|
||||||
@ -936,3 +937,70 @@ class PublicRoomsRestrictedTestCase(unittest.HomeserverTestCase):
|
|||||||
request, channel = self.make_request("GET", self.url, access_token=tok)
|
request, channel = self.make_request("GET", self.url, access_token=tok)
|
||||||
self.render(request)
|
self.render(request)
|
||||||
self.assertEqual(channel.code, 200, channel.result)
|
self.assertEqual(channel.code, 200, channel.result)
|
||||||
|
|
||||||
|
|
||||||
|
class PerRoomProfilesForbiddenTestCase(unittest.HomeserverTestCase):
|
||||||
|
|
||||||
|
servlets = [
|
||||||
|
synapse.rest.admin.register_servlets_for_client_rest_resource,
|
||||||
|
room.register_servlets,
|
||||||
|
login.register_servlets,
|
||||||
|
profile.register_servlets,
|
||||||
|
]
|
||||||
|
|
||||||
|
def make_homeserver(self, reactor, clock):
|
||||||
|
config = self.default_config()
|
||||||
|
config["allow_per_room_profiles"] = False
|
||||||
|
self.hs = self.setup_test_homeserver(config=config)
|
||||||
|
|
||||||
|
return self.hs
|
||||||
|
|
||||||
|
def prepare(self, reactor, clock, homeserver):
|
||||||
|
self.user_id = self.register_user("test", "test")
|
||||||
|
self.tok = self.login("test", "test")
|
||||||
|
|
||||||
|
# Set a profile for the test user
|
||||||
|
self.displayname = "test user"
|
||||||
|
data = {
|
||||||
|
"displayname": self.displayname,
|
||||||
|
}
|
||||||
|
request_data = json.dumps(data)
|
||||||
|
request, channel = self.make_request(
|
||||||
|
"PUT",
|
||||||
|
"/_matrix/client/r0/profile/%s/displayname" % (self.user_id,),
|
||||||
|
request_data,
|
||||||
|
access_token=self.tok,
|
||||||
|
)
|
||||||
|
self.render(request)
|
||||||
|
self.assertEqual(channel.code, 200, channel.result)
|
||||||
|
|
||||||
|
self.room_id = self.helper.create_room_as(self.user_id, tok=self.tok)
|
||||||
|
|
||||||
|
def test_per_room_profile_forbidden(self):
|
||||||
|
data = {
|
||||||
|
"membership": "join",
|
||||||
|
"displayname": "other test user"
|
||||||
|
}
|
||||||
|
request_data = json.dumps(data)
|
||||||
|
request, channel = self.make_request(
|
||||||
|
"PUT",
|
||||||
|
"/_matrix/client/r0/rooms/%s/state/m.room.member/%s" % (
|
||||||
|
self.room_id, self.user_id,
|
||||||
|
),
|
||||||
|
request_data,
|
||||||
|
access_token=self.tok,
|
||||||
|
)
|
||||||
|
self.render(request)
|
||||||
|
self.assertEqual(channel.code, 200, channel.result)
|
||||||
|
event_id = channel.json_body["event_id"]
|
||||||
|
|
||||||
|
request, channel = self.make_request(
|
||||||
|
"GET",
|
||||||
|
"/_matrix/client/r0/rooms/%s/event/%s" % (self.room_id, event_id),
|
||||||
|
access_token=self.tok,
|
||||||
|
)
|
||||||
|
self.render(request)
|
||||||
|
self.assertEqual(channel.code, 200, channel.result)
|
||||||
|
|
||||||
|
res_displayname = channel.json_body["content"]["displayname"]
|
||||||
|
self.assertEqual(res_displayname, self.displayname, channel.result)
|
||||||
|
Loading…
Reference in New Issue
Block a user