groups.py 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771
  1. # -*- coding: utf-8 -*-
  2. # Copyright 2017 Vector Creations Ltd
  3. # Copyright 2018 New Vector Ltd
  4. #
  5. # Licensed under the Apache License, Version 2.0 (the "License");
  6. # you may not use this file except in compliance with the License.
  7. # You may obtain a copy of the License at
  8. #
  9. # http://www.apache.org/licenses/LICENSE-2.0
  10. #
  11. # Unless required by applicable law or agreed to in writing, software
  12. # distributed under the License is distributed on an "AS IS" BASIS,
  13. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. # See the License for the specific language governing permissions and
  15. # limitations under the License.
  16. import logging
  17. from twisted.internet import defer
  18. from synapse.http.servlet import RestServlet, parse_json_object_from_request
  19. from synapse.types import GroupID
  20. from ._base import client_patterns
  21. logger = logging.getLogger(__name__)
  22. class GroupServlet(RestServlet):
  23. """Get the group profile
  24. """
  25. PATTERNS = client_patterns("/groups/(?P<group_id>[^/]*)/profile$")
  26. def __init__(self, hs):
  27. super(GroupServlet, self).__init__()
  28. self.auth = hs.get_auth()
  29. self.clock = hs.get_clock()
  30. self.groups_handler = hs.get_groups_local_handler()
  31. @defer.inlineCallbacks
  32. def on_GET(self, request, group_id):
  33. requester = yield self.auth.get_user_by_req(request, allow_guest=True)
  34. requester_user_id = requester.user.to_string()
  35. group_description = yield self.groups_handler.get_group_profile(
  36. group_id, requester_user_id
  37. )
  38. return (200, group_description)
  39. @defer.inlineCallbacks
  40. def on_POST(self, request, group_id):
  41. requester = yield self.auth.get_user_by_req(request)
  42. requester_user_id = requester.user.to_string()
  43. content = parse_json_object_from_request(request)
  44. yield self.groups_handler.update_group_profile(
  45. group_id, requester_user_id, content
  46. )
  47. return (200, {})
  48. class GroupSummaryServlet(RestServlet):
  49. """Get the full group summary
  50. """
  51. PATTERNS = client_patterns("/groups/(?P<group_id>[^/]*)/summary$")
  52. def __init__(self, hs):
  53. super(GroupSummaryServlet, self).__init__()
  54. self.auth = hs.get_auth()
  55. self.clock = hs.get_clock()
  56. self.groups_handler = hs.get_groups_local_handler()
  57. @defer.inlineCallbacks
  58. def on_GET(self, request, group_id):
  59. requester = yield self.auth.get_user_by_req(request, allow_guest=True)
  60. requester_user_id = requester.user.to_string()
  61. get_group_summary = yield self.groups_handler.get_group_summary(
  62. group_id, requester_user_id
  63. )
  64. return (200, get_group_summary)
  65. class GroupSummaryRoomsCatServlet(RestServlet):
  66. """Update/delete a rooms entry in the summary.
  67. Matches both:
  68. - /groups/:group/summary/rooms/:room_id
  69. - /groups/:group/summary/categories/:category/rooms/:room_id
  70. """
  71. PATTERNS = client_patterns(
  72. "/groups/(?P<group_id>[^/]*)/summary"
  73. "(/categories/(?P<category_id>[^/]+))?"
  74. "/rooms/(?P<room_id>[^/]*)$"
  75. )
  76. def __init__(self, hs):
  77. super(GroupSummaryRoomsCatServlet, self).__init__()
  78. self.auth = hs.get_auth()
  79. self.clock = hs.get_clock()
  80. self.groups_handler = hs.get_groups_local_handler()
  81. @defer.inlineCallbacks
  82. def on_PUT(self, request, group_id, category_id, room_id):
  83. requester = yield self.auth.get_user_by_req(request)
  84. requester_user_id = requester.user.to_string()
  85. content = parse_json_object_from_request(request)
  86. resp = yield self.groups_handler.update_group_summary_room(
  87. group_id,
  88. requester_user_id,
  89. room_id=room_id,
  90. category_id=category_id,
  91. content=content,
  92. )
  93. return (200, resp)
  94. @defer.inlineCallbacks
  95. def on_DELETE(self, request, group_id, category_id, room_id):
  96. requester = yield self.auth.get_user_by_req(request)
  97. requester_user_id = requester.user.to_string()
  98. resp = yield self.groups_handler.delete_group_summary_room(
  99. group_id, requester_user_id, room_id=room_id, category_id=category_id
  100. )
  101. return (200, resp)
  102. class GroupCategoryServlet(RestServlet):
  103. """Get/add/update/delete a group category
  104. """
  105. PATTERNS = client_patterns(
  106. "/groups/(?P<group_id>[^/]*)/categories/(?P<category_id>[^/]+)$"
  107. )
  108. def __init__(self, hs):
  109. super(GroupCategoryServlet, self).__init__()
  110. self.auth = hs.get_auth()
  111. self.clock = hs.get_clock()
  112. self.groups_handler = hs.get_groups_local_handler()
  113. @defer.inlineCallbacks
  114. def on_GET(self, request, group_id, category_id):
  115. requester = yield self.auth.get_user_by_req(request, allow_guest=True)
  116. requester_user_id = requester.user.to_string()
  117. category = yield self.groups_handler.get_group_category(
  118. group_id, requester_user_id, category_id=category_id
  119. )
  120. return (200, category)
  121. @defer.inlineCallbacks
  122. def on_PUT(self, request, group_id, category_id):
  123. requester = yield self.auth.get_user_by_req(request)
  124. requester_user_id = requester.user.to_string()
  125. content = parse_json_object_from_request(request)
  126. resp = yield self.groups_handler.update_group_category(
  127. group_id, requester_user_id, category_id=category_id, content=content
  128. )
  129. return (200, resp)
  130. @defer.inlineCallbacks
  131. def on_DELETE(self, request, group_id, category_id):
  132. requester = yield self.auth.get_user_by_req(request)
  133. requester_user_id = requester.user.to_string()
  134. resp = yield self.groups_handler.delete_group_category(
  135. group_id, requester_user_id, category_id=category_id
  136. )
  137. return (200, resp)
  138. class GroupCategoriesServlet(RestServlet):
  139. """Get all group categories
  140. """
  141. PATTERNS = client_patterns("/groups/(?P<group_id>[^/]*)/categories/$")
  142. def __init__(self, hs):
  143. super(GroupCategoriesServlet, self).__init__()
  144. self.auth = hs.get_auth()
  145. self.clock = hs.get_clock()
  146. self.groups_handler = hs.get_groups_local_handler()
  147. @defer.inlineCallbacks
  148. def on_GET(self, request, group_id):
  149. requester = yield self.auth.get_user_by_req(request, allow_guest=True)
  150. requester_user_id = requester.user.to_string()
  151. category = yield self.groups_handler.get_group_categories(
  152. group_id, requester_user_id
  153. )
  154. return (200, category)
  155. class GroupRoleServlet(RestServlet):
  156. """Get/add/update/delete a group role
  157. """
  158. PATTERNS = client_patterns("/groups/(?P<group_id>[^/]*)/roles/(?P<role_id>[^/]+)$")
  159. def __init__(self, hs):
  160. super(GroupRoleServlet, self).__init__()
  161. self.auth = hs.get_auth()
  162. self.clock = hs.get_clock()
  163. self.groups_handler = hs.get_groups_local_handler()
  164. @defer.inlineCallbacks
  165. def on_GET(self, request, group_id, role_id):
  166. requester = yield self.auth.get_user_by_req(request, allow_guest=True)
  167. requester_user_id = requester.user.to_string()
  168. category = yield self.groups_handler.get_group_role(
  169. group_id, requester_user_id, role_id=role_id
  170. )
  171. return (200, category)
  172. @defer.inlineCallbacks
  173. def on_PUT(self, request, group_id, role_id):
  174. requester = yield self.auth.get_user_by_req(request)
  175. requester_user_id = requester.user.to_string()
  176. content = parse_json_object_from_request(request)
  177. resp = yield self.groups_handler.update_group_role(
  178. group_id, requester_user_id, role_id=role_id, content=content
  179. )
  180. return (200, resp)
  181. @defer.inlineCallbacks
  182. def on_DELETE(self, request, group_id, role_id):
  183. requester = yield self.auth.get_user_by_req(request)
  184. requester_user_id = requester.user.to_string()
  185. resp = yield self.groups_handler.delete_group_role(
  186. group_id, requester_user_id, role_id=role_id
  187. )
  188. return (200, resp)
  189. class GroupRolesServlet(RestServlet):
  190. """Get all group roles
  191. """
  192. PATTERNS = client_patterns("/groups/(?P<group_id>[^/]*)/roles/$")
  193. def __init__(self, hs):
  194. super(GroupRolesServlet, self).__init__()
  195. self.auth = hs.get_auth()
  196. self.clock = hs.get_clock()
  197. self.groups_handler = hs.get_groups_local_handler()
  198. @defer.inlineCallbacks
  199. def on_GET(self, request, group_id):
  200. requester = yield self.auth.get_user_by_req(request, allow_guest=True)
  201. requester_user_id = requester.user.to_string()
  202. category = yield self.groups_handler.get_group_roles(
  203. group_id, requester_user_id
  204. )
  205. return (200, category)
  206. class GroupSummaryUsersRoleServlet(RestServlet):
  207. """Update/delete a user's entry in the summary.
  208. Matches both:
  209. - /groups/:group/summary/users/:room_id
  210. - /groups/:group/summary/roles/:role/users/:user_id
  211. """
  212. PATTERNS = client_patterns(
  213. "/groups/(?P<group_id>[^/]*)/summary"
  214. "(/roles/(?P<role_id>[^/]+))?"
  215. "/users/(?P<user_id>[^/]*)$"
  216. )
  217. def __init__(self, hs):
  218. super(GroupSummaryUsersRoleServlet, self).__init__()
  219. self.auth = hs.get_auth()
  220. self.clock = hs.get_clock()
  221. self.groups_handler = hs.get_groups_local_handler()
  222. @defer.inlineCallbacks
  223. def on_PUT(self, request, group_id, role_id, user_id):
  224. requester = yield self.auth.get_user_by_req(request)
  225. requester_user_id = requester.user.to_string()
  226. content = parse_json_object_from_request(request)
  227. resp = yield self.groups_handler.update_group_summary_user(
  228. group_id,
  229. requester_user_id,
  230. user_id=user_id,
  231. role_id=role_id,
  232. content=content,
  233. )
  234. return (200, resp)
  235. @defer.inlineCallbacks
  236. def on_DELETE(self, request, group_id, role_id, user_id):
  237. requester = yield self.auth.get_user_by_req(request)
  238. requester_user_id = requester.user.to_string()
  239. resp = yield self.groups_handler.delete_group_summary_user(
  240. group_id, requester_user_id, user_id=user_id, role_id=role_id
  241. )
  242. return (200, resp)
  243. class GroupRoomServlet(RestServlet):
  244. """Get all rooms in a group
  245. """
  246. PATTERNS = client_patterns("/groups/(?P<group_id>[^/]*)/rooms$")
  247. def __init__(self, hs):
  248. super(GroupRoomServlet, self).__init__()
  249. self.auth = hs.get_auth()
  250. self.clock = hs.get_clock()
  251. self.groups_handler = hs.get_groups_local_handler()
  252. @defer.inlineCallbacks
  253. def on_GET(self, request, group_id):
  254. requester = yield self.auth.get_user_by_req(request, allow_guest=True)
  255. requester_user_id = requester.user.to_string()
  256. result = yield self.groups_handler.get_rooms_in_group(
  257. group_id, requester_user_id
  258. )
  259. return (200, result)
  260. class GroupUsersServlet(RestServlet):
  261. """Get all users in a group
  262. """
  263. PATTERNS = client_patterns("/groups/(?P<group_id>[^/]*)/users$")
  264. def __init__(self, hs):
  265. super(GroupUsersServlet, self).__init__()
  266. self.auth = hs.get_auth()
  267. self.clock = hs.get_clock()
  268. self.groups_handler = hs.get_groups_local_handler()
  269. @defer.inlineCallbacks
  270. def on_GET(self, request, group_id):
  271. requester = yield self.auth.get_user_by_req(request, allow_guest=True)
  272. requester_user_id = requester.user.to_string()
  273. result = yield self.groups_handler.get_users_in_group(
  274. group_id, requester_user_id
  275. )
  276. return (200, result)
  277. class GroupInvitedUsersServlet(RestServlet):
  278. """Get users invited to a group
  279. """
  280. PATTERNS = client_patterns("/groups/(?P<group_id>[^/]*)/invited_users$")
  281. def __init__(self, hs):
  282. super(GroupInvitedUsersServlet, self).__init__()
  283. self.auth = hs.get_auth()
  284. self.clock = hs.get_clock()
  285. self.groups_handler = hs.get_groups_local_handler()
  286. @defer.inlineCallbacks
  287. def on_GET(self, request, group_id):
  288. requester = yield self.auth.get_user_by_req(request)
  289. requester_user_id = requester.user.to_string()
  290. result = yield self.groups_handler.get_invited_users_in_group(
  291. group_id, requester_user_id
  292. )
  293. return (200, result)
  294. class GroupSettingJoinPolicyServlet(RestServlet):
  295. """Set group join policy
  296. """
  297. PATTERNS = client_patterns("/groups/(?P<group_id>[^/]*)/settings/m.join_policy$")
  298. def __init__(self, hs):
  299. super(GroupSettingJoinPolicyServlet, self).__init__()
  300. self.auth = hs.get_auth()
  301. self.groups_handler = hs.get_groups_local_handler()
  302. @defer.inlineCallbacks
  303. def on_PUT(self, request, group_id):
  304. requester = yield self.auth.get_user_by_req(request)
  305. requester_user_id = requester.user.to_string()
  306. content = parse_json_object_from_request(request)
  307. result = yield self.groups_handler.set_group_join_policy(
  308. group_id, requester_user_id, content
  309. )
  310. return (200, result)
  311. class GroupCreateServlet(RestServlet):
  312. """Create a group
  313. """
  314. PATTERNS = client_patterns("/create_group$")
  315. def __init__(self, hs):
  316. super(GroupCreateServlet, self).__init__()
  317. self.auth = hs.get_auth()
  318. self.clock = hs.get_clock()
  319. self.groups_handler = hs.get_groups_local_handler()
  320. self.server_name = hs.hostname
  321. @defer.inlineCallbacks
  322. def on_POST(self, request):
  323. requester = yield self.auth.get_user_by_req(request)
  324. requester_user_id = requester.user.to_string()
  325. # TODO: Create group on remote server
  326. content = parse_json_object_from_request(request)
  327. localpart = content.pop("localpart")
  328. group_id = GroupID(localpart, self.server_name).to_string()
  329. result = yield self.groups_handler.create_group(
  330. group_id, requester_user_id, content
  331. )
  332. return (200, result)
  333. class GroupAdminRoomsServlet(RestServlet):
  334. """Add a room to the group
  335. """
  336. PATTERNS = client_patterns(
  337. "/groups/(?P<group_id>[^/]*)/admin/rooms/(?P<room_id>[^/]*)$"
  338. )
  339. def __init__(self, hs):
  340. super(GroupAdminRoomsServlet, self).__init__()
  341. self.auth = hs.get_auth()
  342. self.clock = hs.get_clock()
  343. self.groups_handler = hs.get_groups_local_handler()
  344. @defer.inlineCallbacks
  345. def on_PUT(self, request, group_id, room_id):
  346. requester = yield self.auth.get_user_by_req(request)
  347. requester_user_id = requester.user.to_string()
  348. content = parse_json_object_from_request(request)
  349. result = yield self.groups_handler.add_room_to_group(
  350. group_id, requester_user_id, room_id, content
  351. )
  352. return (200, result)
  353. @defer.inlineCallbacks
  354. def on_DELETE(self, request, group_id, room_id):
  355. requester = yield self.auth.get_user_by_req(request)
  356. requester_user_id = requester.user.to_string()
  357. result = yield self.groups_handler.remove_room_from_group(
  358. group_id, requester_user_id, room_id
  359. )
  360. return (200, result)
  361. class GroupAdminRoomsConfigServlet(RestServlet):
  362. """Update the config of a room in a group
  363. """
  364. PATTERNS = client_patterns(
  365. "/groups/(?P<group_id>[^/]*)/admin/rooms/(?P<room_id>[^/]*)"
  366. "/config/(?P<config_key>[^/]*)$"
  367. )
  368. def __init__(self, hs):
  369. super(GroupAdminRoomsConfigServlet, self).__init__()
  370. self.auth = hs.get_auth()
  371. self.clock = hs.get_clock()
  372. self.groups_handler = hs.get_groups_local_handler()
  373. @defer.inlineCallbacks
  374. def on_PUT(self, request, group_id, room_id, config_key):
  375. requester = yield self.auth.get_user_by_req(request)
  376. requester_user_id = requester.user.to_string()
  377. content = parse_json_object_from_request(request)
  378. result = yield self.groups_handler.update_room_in_group(
  379. group_id, requester_user_id, room_id, config_key, content
  380. )
  381. return (200, result)
  382. class GroupAdminUsersInviteServlet(RestServlet):
  383. """Invite a user to the group
  384. """
  385. PATTERNS = client_patterns(
  386. "/groups/(?P<group_id>[^/]*)/admin/users/invite/(?P<user_id>[^/]*)$"
  387. )
  388. def __init__(self, hs):
  389. super(GroupAdminUsersInviteServlet, self).__init__()
  390. self.auth = hs.get_auth()
  391. self.clock = hs.get_clock()
  392. self.groups_handler = hs.get_groups_local_handler()
  393. self.store = hs.get_datastore()
  394. self.is_mine_id = hs.is_mine_id
  395. @defer.inlineCallbacks
  396. def on_PUT(self, request, group_id, user_id):
  397. requester = yield self.auth.get_user_by_req(request)
  398. requester_user_id = requester.user.to_string()
  399. content = parse_json_object_from_request(request)
  400. config = content.get("config", {})
  401. result = yield self.groups_handler.invite(
  402. group_id, user_id, requester_user_id, config
  403. )
  404. return (200, result)
  405. class GroupAdminUsersKickServlet(RestServlet):
  406. """Kick a user from the group
  407. """
  408. PATTERNS = client_patterns(
  409. "/groups/(?P<group_id>[^/]*)/admin/users/remove/(?P<user_id>[^/]*)$"
  410. )
  411. def __init__(self, hs):
  412. super(GroupAdminUsersKickServlet, self).__init__()
  413. self.auth = hs.get_auth()
  414. self.clock = hs.get_clock()
  415. self.groups_handler = hs.get_groups_local_handler()
  416. @defer.inlineCallbacks
  417. def on_PUT(self, request, group_id, user_id):
  418. requester = yield self.auth.get_user_by_req(request)
  419. requester_user_id = requester.user.to_string()
  420. content = parse_json_object_from_request(request)
  421. result = yield self.groups_handler.remove_user_from_group(
  422. group_id, user_id, requester_user_id, content
  423. )
  424. return (200, result)
  425. class GroupSelfLeaveServlet(RestServlet):
  426. """Leave a joined group
  427. """
  428. PATTERNS = client_patterns("/groups/(?P<group_id>[^/]*)/self/leave$")
  429. def __init__(self, hs):
  430. super(GroupSelfLeaveServlet, self).__init__()
  431. self.auth = hs.get_auth()
  432. self.clock = hs.get_clock()
  433. self.groups_handler = hs.get_groups_local_handler()
  434. @defer.inlineCallbacks
  435. def on_PUT(self, request, group_id):
  436. requester = yield self.auth.get_user_by_req(request)
  437. requester_user_id = requester.user.to_string()
  438. content = parse_json_object_from_request(request)
  439. result = yield self.groups_handler.remove_user_from_group(
  440. group_id, requester_user_id, requester_user_id, content
  441. )
  442. return (200, result)
  443. class GroupSelfJoinServlet(RestServlet):
  444. """Attempt to join a group, or knock
  445. """
  446. PATTERNS = client_patterns("/groups/(?P<group_id>[^/]*)/self/join$")
  447. def __init__(self, hs):
  448. super(GroupSelfJoinServlet, self).__init__()
  449. self.auth = hs.get_auth()
  450. self.clock = hs.get_clock()
  451. self.groups_handler = hs.get_groups_local_handler()
  452. @defer.inlineCallbacks
  453. def on_PUT(self, request, group_id):
  454. requester = yield self.auth.get_user_by_req(request)
  455. requester_user_id = requester.user.to_string()
  456. content = parse_json_object_from_request(request)
  457. result = yield self.groups_handler.join_group(
  458. group_id, requester_user_id, content
  459. )
  460. return (200, result)
  461. class GroupSelfAcceptInviteServlet(RestServlet):
  462. """Accept a group invite
  463. """
  464. PATTERNS = client_patterns("/groups/(?P<group_id>[^/]*)/self/accept_invite$")
  465. def __init__(self, hs):
  466. super(GroupSelfAcceptInviteServlet, self).__init__()
  467. self.auth = hs.get_auth()
  468. self.clock = hs.get_clock()
  469. self.groups_handler = hs.get_groups_local_handler()
  470. @defer.inlineCallbacks
  471. def on_PUT(self, request, group_id):
  472. requester = yield self.auth.get_user_by_req(request)
  473. requester_user_id = requester.user.to_string()
  474. content = parse_json_object_from_request(request)
  475. result = yield self.groups_handler.accept_invite(
  476. group_id, requester_user_id, content
  477. )
  478. return (200, result)
  479. class GroupSelfUpdatePublicityServlet(RestServlet):
  480. """Update whether we publicise a users membership of a group
  481. """
  482. PATTERNS = client_patterns("/groups/(?P<group_id>[^/]*)/self/update_publicity$")
  483. def __init__(self, hs):
  484. super(GroupSelfUpdatePublicityServlet, self).__init__()
  485. self.auth = hs.get_auth()
  486. self.clock = hs.get_clock()
  487. self.store = hs.get_datastore()
  488. @defer.inlineCallbacks
  489. def on_PUT(self, request, group_id):
  490. requester = yield self.auth.get_user_by_req(request)
  491. requester_user_id = requester.user.to_string()
  492. content = parse_json_object_from_request(request)
  493. publicise = content["publicise"]
  494. yield self.store.update_group_publicity(group_id, requester_user_id, publicise)
  495. return (200, {})
  496. class PublicisedGroupsForUserServlet(RestServlet):
  497. """Get the list of groups a user is advertising
  498. """
  499. PATTERNS = client_patterns("/publicised_groups/(?P<user_id>[^/]*)$")
  500. def __init__(self, hs):
  501. super(PublicisedGroupsForUserServlet, self).__init__()
  502. self.auth = hs.get_auth()
  503. self.clock = hs.get_clock()
  504. self.store = hs.get_datastore()
  505. self.groups_handler = hs.get_groups_local_handler()
  506. @defer.inlineCallbacks
  507. def on_GET(self, request, user_id):
  508. yield self.auth.get_user_by_req(request, allow_guest=True)
  509. result = yield self.groups_handler.get_publicised_groups_for_user(user_id)
  510. return (200, result)
  511. class PublicisedGroupsForUsersServlet(RestServlet):
  512. """Get the list of groups a user is advertising
  513. """
  514. PATTERNS = client_patterns("/publicised_groups$")
  515. def __init__(self, hs):
  516. super(PublicisedGroupsForUsersServlet, self).__init__()
  517. self.auth = hs.get_auth()
  518. self.clock = hs.get_clock()
  519. self.store = hs.get_datastore()
  520. self.groups_handler = hs.get_groups_local_handler()
  521. @defer.inlineCallbacks
  522. def on_POST(self, request):
  523. yield self.auth.get_user_by_req(request, allow_guest=True)
  524. content = parse_json_object_from_request(request)
  525. user_ids = content["user_ids"]
  526. result = yield self.groups_handler.bulk_get_publicised_groups(user_ids)
  527. return (200, result)
  528. class GroupsForUserServlet(RestServlet):
  529. """Get all groups the logged in user is joined to
  530. """
  531. PATTERNS = client_patterns("/joined_groups$")
  532. def __init__(self, hs):
  533. super(GroupsForUserServlet, self).__init__()
  534. self.auth = hs.get_auth()
  535. self.clock = hs.get_clock()
  536. self.groups_handler = hs.get_groups_local_handler()
  537. @defer.inlineCallbacks
  538. def on_GET(self, request):
  539. requester = yield self.auth.get_user_by_req(request, allow_guest=True)
  540. requester_user_id = requester.user.to_string()
  541. result = yield self.groups_handler.get_joined_groups(requester_user_id)
  542. return (200, result)
  543. def register_servlets(hs, http_server):
  544. GroupServlet(hs).register(http_server)
  545. GroupSummaryServlet(hs).register(http_server)
  546. GroupInvitedUsersServlet(hs).register(http_server)
  547. GroupUsersServlet(hs).register(http_server)
  548. GroupRoomServlet(hs).register(http_server)
  549. GroupSettingJoinPolicyServlet(hs).register(http_server)
  550. GroupCreateServlet(hs).register(http_server)
  551. GroupAdminRoomsServlet(hs).register(http_server)
  552. GroupAdminRoomsConfigServlet(hs).register(http_server)
  553. GroupAdminUsersInviteServlet(hs).register(http_server)
  554. GroupAdminUsersKickServlet(hs).register(http_server)
  555. GroupSelfLeaveServlet(hs).register(http_server)
  556. GroupSelfJoinServlet(hs).register(http_server)
  557. GroupSelfAcceptInviteServlet(hs).register(http_server)
  558. GroupsForUserServlet(hs).register(http_server)
  559. GroupCategoryServlet(hs).register(http_server)
  560. GroupCategoriesServlet(hs).register(http_server)
  561. GroupSummaryRoomsCatServlet(hs).register(http_server)
  562. GroupRoleServlet(hs).register(http_server)
  563. GroupRolesServlet(hs).register(http_server)
  564. GroupSelfUpdatePublicityServlet(hs).register(http_server)
  565. GroupSummaryUsersRoleServlet(hs).register(http_server)
  566. PublicisedGroupsForUserServlet(hs).register(http_server)
  567. PublicisedGroupsForUsersServlet(hs).register(http_server)