diff --git a/synapse/handlers/directory.py b/synapse/handlers/directory.py
index f76febee8f..e41a688836 100644
--- a/synapse/handlers/directory.py
+++ b/synapse/handlers/directory.py
@@ -22,6 +22,7 @@ from synapse.api.constants import EventTypes
from synapse.types import RoomAlias
import logging
+import string
logger = logging.getLogger(__name__)
@@ -40,6 +41,10 @@ class DirectoryHandler(BaseHandler):
def _create_association(self, room_alias, room_id, servers=None):
# general association creation for both human users and app services
+ for wchar in string.whitespace:
+ if wchar in room_alias.localpart:
+ raise SynapseError(400, "Invalid characters in room alias")
+
if not self.hs.is_mine(room_alias):
raise SynapseError(400, "Room alias must be local")
# TODO(erikj): Change this.
diff --git a/synapse/handlers/room.py b/synapse/handlers/room.py
index dac683616a..401cc677d1 100644
--- a/synapse/handlers/room.py
+++ b/synapse/handlers/room.py
@@ -26,6 +26,7 @@ from synapse.util.async import run_on_reactor
from synapse.events.utils import serialize_event
import logging
+import string
logger = logging.getLogger(__name__)
@@ -50,6 +51,10 @@ class RoomCreationHandler(BaseHandler):
self.ratelimit(user_id)
if "room_alias_name" in config:
+ for wchar in string.whitespace:
+ if wchar in config["room_alias_name"]:
+ raise SynapseError(400, "Invalid characters in room alias")
+
room_alias = RoomAlias.create(
config["room_alias_name"],
self.hs.hostname,
diff --git a/synapse/rest/client/v2_alpha/register.py b/synapse/rest/client/v2_alpha/register.py
index 3640fb4a29..72dfb876c5 100644
--- a/synapse/rest/client/v2_alpha/register.py
+++ b/synapse/rest/client/v2_alpha/register.py
@@ -82,8 +82,10 @@ class RegisterRestServlet(RestServlet):
[LoginType.EMAIL_IDENTITY]
]
+ result = None
if service:
is_application_server = True
+ params = body
elif 'mac' in body:
# Check registration-specific shared secret auth
if 'username' not in body:
@@ -92,6 +94,7 @@ class RegisterRestServlet(RestServlet):
body['username'], body['mac']
)
is_using_shared_secret = True
+ params = body
else:
authed, result, params = yield self.auth_handler.check_auth(
flows, body, self.hs.get_ip_from_request(request)
@@ -118,7 +121,7 @@ class RegisterRestServlet(RestServlet):
password=new_password
)
- if LoginType.EMAIL_IDENTITY in result:
+ if result and LoginType.EMAIL_IDENTITY in result:
threepid = result[LoginType.EMAIL_IDENTITY]
for reqd in ['medium', 'address', 'validated_at']:
diff --git a/synapse/storage/_base.py b/synapse/storage/_base.py
index c9fe5a3555..81052409b7 100644
--- a/synapse/storage/_base.py
+++ b/synapse/storage/_base.py
@@ -309,6 +309,7 @@ class SQLBaseStore(object):
self._access_tokens_id_gen = IdGenerator("access_tokens", "id", self)
self._pushers_id_gen = IdGenerator("pushers", "id", self)
self._push_rule_id_gen = IdGenerator("push_rules", "id", self)
+ self._push_rules_enable_id_gen = IdGenerator("push_rules_enable", "id", self)
def start_profiling(self):
self._previous_loop_ts = self._clock.time_msec()
diff --git a/synapse/storage/push_rule.py b/synapse/storage/push_rule.py
index 34805e276e..e7988676ce 100644
--- a/synapse/storage/push_rule.py
+++ b/synapse/storage/push_rule.py
@@ -204,11 +204,21 @@ class PushRuleStore(SQLBaseStore):
@defer.inlineCallbacks
def set_push_rule_enabled(self, user_name, rule_id, enabled):
- yield self._simple_upsert(
+ ret = yield self.runInteraction(
+ "_set_push_rule_enabled_txn",
+ self._set_push_rule_enabled_txn,
+ user_name, rule_id, enabled
+ )
+ defer.returnValue(ret)
+
+ def _set_push_rule_enabled_txn(self, txn, user_name, rule_id, enabled):
+ new_id = self._push_rules_enable_id_gen.get_next_txn(txn)
+ self._simple_upsert_txn(
+ txn,
PushRuleEnableTable.table_name,
{'user_name': user_name, 'rule_id': rule_id},
{'enabled': 1 if enabled else 0},
- desc="set_push_rule_enabled",
+ {'id': new_id},
)
|