Compare commits

...

9 Commits

Author SHA1 Message Date
Will Hunt
f546bbe83f Hitting save help 2019-07-11 15:40:57 +01:00
Will Hunt
888b66f42f commas and newlines 2019-07-11 15:39:04 +01:00
Will Hunt
f62000f308 Linting 2019-07-11 15:36:57 +01:00
Will Hunt
deff332951 Fix newsfile 2019-07-11 15:32:52 +01:00
Will Hunt
f02f288bda Newsfragment 2019-07-11 15:28:48 +01:00
Will Hunt
de810f92b5 Return 403 when hitting presence endpoints while presence is disabled. 2019-07-11 15:01:09 +01:00
Will Hunt
37fd36c0b1 Newline 2019-07-11 14:39:44 +01:00
Will Hunt
cee5befbd4 Add test for m.presence cap 2019-07-11 14:39:32 +01:00
Will Hunt
54546b5df8 Add m.presence capability 2019-07-11 14:39:22 +01:00
5 changed files with 63 additions and 3 deletions

1
changelog.d/5666.feature Normal file
View File

@@ -0,0 +1 @@
Support m.presence in the capabilities API for MSC1862.

View File

@@ -45,6 +45,9 @@ class PresenceStatusRestServlet(RestServlet):
requester = yield self.auth.get_user_by_req(request)
user = UserID.from_string(user_id)
if not self.hs.config.use_presence:
raise AuthError(403, "Presence is disabled on this homeserver")
if requester.user != user:
allowed = yield self.presence_handler.is_visible(
observed_user=user, observer_user=requester.user
@@ -63,6 +66,9 @@ class PresenceStatusRestServlet(RestServlet):
requester = yield self.auth.get_user_by_req(request)
user = UserID.from_string(user_id)
if not self.hs.config.use_presence:
raise AuthError(403, "Presence is disabled on this homeserver")
if requester.user != user:
raise AuthError(403, "Can only set your own presence state")
@@ -85,8 +91,7 @@ class PresenceStatusRestServlet(RestServlet):
except Exception:
raise SynapseError(400, "Unable to parse state")
if self.hs.config.use_presence:
yield self.presence_handler.set_state(user, state)
yield self.presence_handler.set_state(user, state)
defer.returnValue((200, {}))

View File

@@ -56,6 +56,10 @@ class CapabilitiesRestServlet(RestServlet):
},
},
"m.change_password": {"enabled": change_password},
"m.presence": {
"send_enabled": self.config.use_presence,
"receive_enabled": self.config.use_presence,
},
}
}
defer.returnValue((200, response))

View File

@@ -68,5 +68,33 @@ class PresenceTestCase(unittest.HomeserverTestCase):
)
self.render(request)
self.assertEqual(channel.code, 200)
self.assertEqual(channel.code, 403)
self.assertEqual(
{
"errcode": "M_FORBIDDEN",
"error": "Presence is disabled on this homeserver",
},
channel.json_body,
)
self.assertEqual(self.hs.presence_handler.set_state.call_count, 0)
def test_get_presence_disabled(self):
"""
GET to the status endpoint with use_presence disbled will respond
with M_FORBIDDEN
"""
self.hs.config.use_presence = False
request, channel = self.make_request(
"GET", "/presence/%s/status" % (self.user_id,)
)
self.render(request)
self.assertEqual(channel.code, 403)
self.assertEqual(
{
"errcode": "M_FORBIDDEN",
"error": "Presence is disabled on this homeserver",
},
channel.json_body,
)

View File

@@ -79,3 +79,25 @@ class CapabilitiesTestCase(unittest.HomeserverTestCase):
self.assertEqual(channel.code, 200)
self.assertFalse(capabilities["m.change_password"]["enabled"])
def test_get_presence(self):
self.register_user("user", "pass")
access_token = self.login("user", "pass")
self.hs.get_config().use_presence = True
request, channel = self.make_request("GET", self.url, access_token=access_token)
self.render(request)
capabilities = channel.json_body["capabilities"]
self.assertEqual(channel.code, 200)
self.assertEqual(True, capabilities["m.presence"]["send_enabled"])
self.assertEqual(True, capabilities["m.presence"]["receive_enabled"])
self.hs.get_config().use_presence = False
request, channel = self.make_request("GET", self.url, access_token=access_token)
self.render(request)
capabilities = channel.json_body["capabilities"]
self.assertEqual(channel.code, 200)
self.assertEqual(False, capabilities["m.presence"]["send_enabled"])
self.assertEqual(False, capabilities["m.presence"]["receive_enabled"])