diff --git a/synapse/rest/room.py b/synapse/rest/room.py
index 37b6b8cbc6..308b447090 100644
--- a/synapse/rest/room.py
+++ b/synapse/rest/room.py
@@ -388,7 +388,7 @@ class RoomMembershipRestServlet(RestServlet):
def register(self, http_server):
# /rooms/$roomid/[invite|join|leave]
PATTERN = ("/rooms/(?P<room_id>[^/]*)/" +
- "(?P<membership_action>join|invite|leave|ban)")
+ "(?P<membership_action>join|invite|leave|ban|kick)")
register_txn_path(self, PATTERN, http_server)
@defer.inlineCallbacks
@@ -399,11 +399,14 @@ class RoomMembershipRestServlet(RestServlet):
# target user is you unless it is an invite
state_key = user.to_string()
- if membership_action in ["invite", "ban"]:
+ if membership_action in ["invite", "ban", "kick"]:
if "user_id" not in content:
raise SynapseError(400, "Missing user_id key.")
state_key = content["user_id"]
+ if membership_action == "kick":
+ membership_action = "leave"
+
event = self.event_factory.create_event(
etype=RoomMemberEvent.TYPE,
content={"membership": unicode(membership_action)},
diff --git a/synapse/storage/_base.py b/synapse/storage/_base.py
index aaa09f47d0..bae50e7d1f 100644
--- a/synapse/storage/_base.py
+++ b/synapse/storage/_base.py
@@ -79,19 +79,21 @@ class SQLBaseStore(object):
# "Simple" SQL API methods that operate on a single table with no JOINs,
# no complex WHERE clauses, just a dict of values for columns.
- def _simple_insert(self, table, values):
+ def _simple_insert(self, table, values, or_replace=False):
"""Executes an INSERT query on the named table.
Args:
table : string giving the table name
values : dict of new column names and values for them
+ or_replace : bool; if True performs an INSERT OR REPLACE
"""
return self._db_pool.runInteraction(
- self._simple_insert_txn, table, values,
+ self._simple_insert_txn, table, values, or_replace=or_replace
)
- def _simple_insert_txn(self, txn, table, values):
- sql = "INSERT INTO %s (%s) VALUES(%s)" % (
+ def _simple_insert_txn(self, txn, table, values, or_replace=False):
+ sql = "%s INTO %s (%s) VALUES(%s)" % (
+ ("INSERT OR REPLACE" if or_replace else "INSERT"),
table,
", ".join(k for k in values),
", ".join("?" for k in values)
|