summary refs log tree commit diff
path: root/synapse/rest
diff options
context:
space:
mode:
authorJoseph Weston <joseph@weston.cloud>2019-03-01 04:05:47 +0100
committerJoseph Weston <joseph@weston.cloud>2019-03-01 09:56:58 +0100
commit1e8388b311c54d754d6afbe639ed2825c1c1f285 (patch)
tree3e8ebe1bb68af9ede95c7c6e3376f9e3a989c273 /synapse/rest
parentImport 'admin' module rather than 'register_servlets' directly (diff)
downloadsynapse-1e8388b311c54d754d6afbe639ed2825c1c1f285.tar.xz
Add 'server_version' endpoint to admin API
This is required because the 'Server' HTTP header is not always
passed through proxies.
Diffstat (limited to 'synapse/rest')
-rw-r--r--synapse/rest/client/v1/admin.py23
1 files changed, 23 insertions, 0 deletions
diff --git a/synapse/rest/client/v1/admin.py b/synapse/rest/client/v1/admin.py
index 82433a2aa9..0201cf1186 100644
--- a/synapse/rest/client/v1/admin.py
+++ b/synapse/rest/client/v1/admin.py
@@ -17,12 +17,14 @@
 import hashlib
 import hmac
 import logging
+import platform
 
 from six import text_type
 from six.moves import http_client
 
 from twisted.internet import defer
 
+import synapse
 from synapse.api.constants import Membership, UserTypes
 from synapse.api.errors import AuthError, Codes, NotFoundError, SynapseError
 from synapse.http.servlet import (
@@ -32,6 +34,7 @@ from synapse.http.servlet import (
     parse_string,
 )
 from synapse.types import UserID, create_requester
+from synapse.util.versionstring import get_version_string
 
 from .base import ClientV1RestServlet, client_path_patterns
 
@@ -66,6 +69,25 @@ class UsersRestServlet(ClientV1RestServlet):
         defer.returnValue((200, ret))
 
 
+class VersionServlet(ClientV1RestServlet):
+    PATTERNS = client_path_patterns("/admin/server_version")
+
+    @defer.inlineCallbacks
+    def on_GET(self, request):
+        requester = yield self.auth.get_user_by_req(request)
+        is_admin = yield self.auth.is_server_admin(requester.user)
+
+        if not is_admin:
+            raise AuthError(403, "You are not a server admin")
+
+        ret = {
+            'server_version': get_version_string(synapse),
+            'python_version': platform.python_version(),
+        }
+
+        defer.returnValue((200, ret))
+
+
 class UserRegisterServlet(ClientV1RestServlet):
     """
     Attributes:
@@ -763,3 +785,4 @@ def register_servlets(hs, http_server):
     QuarantineMediaInRoom(hs).register(http_server)
     ListMediaInRoom(hs).register(http_server)
     UserRegisterServlet(hs).register(http_server)
+    VersionServlet(hs).register(http_server)