1515# limitations under the License.
1616
1717import logging
18+ from functools import wraps
1819
1920from synapse .api .errors import SynapseError
2021from synapse .http .servlet import RestServlet , parse_json_object_from_request
2526logger = logging .getLogger (__name__ )
2627
2728
29+ def _validate_group_id (f ):
30+ """Wrapper to validate the form of the group ID.
31+
32+ Can be applied to any on_FOO methods that accepts a group ID as a URL parameter.
33+ """
34+
35+ @wraps (f )
36+ def wrapper (self , request , group_id , * args , ** kwargs ):
37+ if not GroupID .is_valid (group_id ):
38+ raise SynapseError (400 , "%s is not a legal group ID" % (group_id ,))
39+
40+ return f (self , request , group_id , * args , ** kwargs )
41+
42+ return wrapper
43+
44+
2845class GroupServlet (RestServlet ):
2946 """Get the group profile
3047 """
@@ -37,6 +54,7 @@ def __init__(self, hs):
3754 self .clock = hs .get_clock ()
3855 self .groups_handler = hs .get_groups_local_handler ()
3956
57+ @_validate_group_id
4058 async def on_GET (self , request , group_id ):
4159 requester = await self .auth .get_user_by_req (request , allow_guest = True )
4260 requester_user_id = requester .user .to_string ()
@@ -47,6 +65,7 @@ async def on_GET(self, request, group_id):
4765
4866 return 200 , group_description
4967
68+ @_validate_group_id
5069 async def on_POST (self , request , group_id ):
5170 requester = await self .auth .get_user_by_req (request )
5271 requester_user_id = requester .user .to_string ()
@@ -71,6 +90,7 @@ def __init__(self, hs):
7190 self .clock = hs .get_clock ()
7291 self .groups_handler = hs .get_groups_local_handler ()
7392
93+ @_validate_group_id
7494 async def on_GET (self , request , group_id ):
7595 requester = await self .auth .get_user_by_req (request , allow_guest = True )
7696 requester_user_id = requester .user .to_string ()
@@ -102,6 +122,7 @@ def __init__(self, hs):
102122 self .clock = hs .get_clock ()
103123 self .groups_handler = hs .get_groups_local_handler ()
104124
125+ @_validate_group_id
105126 async def on_PUT (self , request , group_id , category_id , room_id ):
106127 requester = await self .auth .get_user_by_req (request )
107128 requester_user_id = requester .user .to_string ()
@@ -117,6 +138,7 @@ async def on_PUT(self, request, group_id, category_id, room_id):
117138
118139 return 200 , resp
119140
141+ @_validate_group_id
120142 async def on_DELETE (self , request , group_id , category_id , room_id ):
121143 requester = await self .auth .get_user_by_req (request )
122144 requester_user_id = requester .user .to_string ()
@@ -142,6 +164,7 @@ def __init__(self, hs):
142164 self .clock = hs .get_clock ()
143165 self .groups_handler = hs .get_groups_local_handler ()
144166
167+ @_validate_group_id
145168 async def on_GET (self , request , group_id , category_id ):
146169 requester = await self .auth .get_user_by_req (request , allow_guest = True )
147170 requester_user_id = requester .user .to_string ()
@@ -152,6 +175,7 @@ async def on_GET(self, request, group_id, category_id):
152175
153176 return 200 , category
154177
178+ @_validate_group_id
155179 async def on_PUT (self , request , group_id , category_id ):
156180 requester = await self .auth .get_user_by_req (request )
157181 requester_user_id = requester .user .to_string ()
@@ -163,6 +187,7 @@ async def on_PUT(self, request, group_id, category_id):
163187
164188 return 200 , resp
165189
190+ @_validate_group_id
166191 async def on_DELETE (self , request , group_id , category_id ):
167192 requester = await self .auth .get_user_by_req (request )
168193 requester_user_id = requester .user .to_string ()
@@ -186,6 +211,7 @@ def __init__(self, hs):
186211 self .clock = hs .get_clock ()
187212 self .groups_handler = hs .get_groups_local_handler ()
188213
214+ @_validate_group_id
189215 async def on_GET (self , request , group_id ):
190216 requester = await self .auth .get_user_by_req (request , allow_guest = True )
191217 requester_user_id = requester .user .to_string ()
@@ -209,6 +235,7 @@ def __init__(self, hs):
209235 self .clock = hs .get_clock ()
210236 self .groups_handler = hs .get_groups_local_handler ()
211237
238+ @_validate_group_id
212239 async def on_GET (self , request , group_id , role_id ):
213240 requester = await self .auth .get_user_by_req (request , allow_guest = True )
214241 requester_user_id = requester .user .to_string ()
@@ -219,6 +246,7 @@ async def on_GET(self, request, group_id, role_id):
219246
220247 return 200 , category
221248
249+ @_validate_group_id
222250 async def on_PUT (self , request , group_id , role_id ):
223251 requester = await self .auth .get_user_by_req (request )
224252 requester_user_id = requester .user .to_string ()
@@ -230,6 +258,7 @@ async def on_PUT(self, request, group_id, role_id):
230258
231259 return 200 , resp
232260
261+ @_validate_group_id
233262 async def on_DELETE (self , request , group_id , role_id ):
234263 requester = await self .auth .get_user_by_req (request )
235264 requester_user_id = requester .user .to_string ()
@@ -253,6 +282,7 @@ def __init__(self, hs):
253282 self .clock = hs .get_clock ()
254283 self .groups_handler = hs .get_groups_local_handler ()
255284
285+ @_validate_group_id
256286 async def on_GET (self , request , group_id ):
257287 requester = await self .auth .get_user_by_req (request , allow_guest = True )
258288 requester_user_id = requester .user .to_string ()
@@ -284,6 +314,7 @@ def __init__(self, hs):
284314 self .clock = hs .get_clock ()
285315 self .groups_handler = hs .get_groups_local_handler ()
286316
317+ @_validate_group_id
287318 async def on_PUT (self , request , group_id , role_id , user_id ):
288319 requester = await self .auth .get_user_by_req (request )
289320 requester_user_id = requester .user .to_string ()
@@ -299,6 +330,7 @@ async def on_PUT(self, request, group_id, role_id, user_id):
299330
300331 return 200 , resp
301332
333+ @_validate_group_id
302334 async def on_DELETE (self , request , group_id , role_id , user_id ):
303335 requester = await self .auth .get_user_by_req (request )
304336 requester_user_id = requester .user .to_string ()
@@ -322,13 +354,11 @@ def __init__(self, hs):
322354 self .clock = hs .get_clock ()
323355 self .groups_handler = hs .get_groups_local_handler ()
324356
357+ @_validate_group_id
325358 async def on_GET (self , request , group_id ):
326359 requester = await self .auth .get_user_by_req (request , allow_guest = True )
327360 requester_user_id = requester .user .to_string ()
328361
329- if not GroupID .is_valid (group_id ):
330- raise SynapseError (400 , "%s was not legal group ID" % (group_id ,))
331-
332362 result = await self .groups_handler .get_rooms_in_group (
333363 group_id , requester_user_id
334364 )
@@ -348,6 +378,7 @@ def __init__(self, hs):
348378 self .clock = hs .get_clock ()
349379 self .groups_handler = hs .get_groups_local_handler ()
350380
381+ @_validate_group_id
351382 async def on_GET (self , request , group_id ):
352383 requester = await self .auth .get_user_by_req (request , allow_guest = True )
353384 requester_user_id = requester .user .to_string ()
@@ -371,6 +402,7 @@ def __init__(self, hs):
371402 self .clock = hs .get_clock ()
372403 self .groups_handler = hs .get_groups_local_handler ()
373404
405+ @_validate_group_id
374406 async def on_GET (self , request , group_id ):
375407 requester = await self .auth .get_user_by_req (request )
376408 requester_user_id = requester .user .to_string ()
@@ -393,6 +425,7 @@ def __init__(self, hs):
393425 self .auth = hs .get_auth ()
394426 self .groups_handler = hs .get_groups_local_handler ()
395427
428+ @_validate_group_id
396429 async def on_PUT (self , request , group_id ):
397430 requester = await self .auth .get_user_by_req (request )
398431 requester_user_id = requester .user .to_string ()
@@ -449,6 +482,7 @@ def __init__(self, hs):
449482 self .clock = hs .get_clock ()
450483 self .groups_handler = hs .get_groups_local_handler ()
451484
485+ @_validate_group_id
452486 async def on_PUT (self , request , group_id , room_id ):
453487 requester = await self .auth .get_user_by_req (request )
454488 requester_user_id = requester .user .to_string ()
@@ -460,6 +494,7 @@ async def on_PUT(self, request, group_id, room_id):
460494
461495 return 200 , result
462496
497+ @_validate_group_id
463498 async def on_DELETE (self , request , group_id , room_id ):
464499 requester = await self .auth .get_user_by_req (request )
465500 requester_user_id = requester .user .to_string ()
@@ -486,6 +521,7 @@ def __init__(self, hs):
486521 self .clock = hs .get_clock ()
487522 self .groups_handler = hs .get_groups_local_handler ()
488523
524+ @_validate_group_id
489525 async def on_PUT (self , request , group_id , room_id , config_key ):
490526 requester = await self .auth .get_user_by_req (request )
491527 requester_user_id = requester .user .to_string ()
@@ -514,6 +550,7 @@ def __init__(self, hs):
514550 self .store = hs .get_datastore ()
515551 self .is_mine_id = hs .is_mine_id
516552
553+ @_validate_group_id
517554 async def on_PUT (self , request , group_id , user_id ):
518555 requester = await self .auth .get_user_by_req (request )
519556 requester_user_id = requester .user .to_string ()
@@ -541,6 +578,7 @@ def __init__(self, hs):
541578 self .clock = hs .get_clock ()
542579 self .groups_handler = hs .get_groups_local_handler ()
543580
581+ @_validate_group_id
544582 async def on_PUT (self , request , group_id , user_id ):
545583 requester = await self .auth .get_user_by_req (request )
546584 requester_user_id = requester .user .to_string ()
@@ -565,6 +603,7 @@ def __init__(self, hs):
565603 self .clock = hs .get_clock ()
566604 self .groups_handler = hs .get_groups_local_handler ()
567605
606+ @_validate_group_id
568607 async def on_PUT (self , request , group_id ):
569608 requester = await self .auth .get_user_by_req (request )
570609 requester_user_id = requester .user .to_string ()
@@ -589,6 +628,7 @@ def __init__(self, hs):
589628 self .clock = hs .get_clock ()
590629 self .groups_handler = hs .get_groups_local_handler ()
591630
631+ @_validate_group_id
592632 async def on_PUT (self , request , group_id ):
593633 requester = await self .auth .get_user_by_req (request )
594634 requester_user_id = requester .user .to_string ()
@@ -613,6 +653,7 @@ def __init__(self, hs):
613653 self .clock = hs .get_clock ()
614654 self .groups_handler = hs .get_groups_local_handler ()
615655
656+ @_validate_group_id
616657 async def on_PUT (self , request , group_id ):
617658 requester = await self .auth .get_user_by_req (request )
618659 requester_user_id = requester .user .to_string ()
@@ -637,6 +678,7 @@ def __init__(self, hs):
637678 self .clock = hs .get_clock ()
638679 self .store = hs .get_datastore ()
639680
681+ @_validate_group_id
640682 async def on_PUT (self , request , group_id ):
641683 requester = await self .auth .get_user_by_req (request )
642684 requester_user_id = requester .user .to_string ()
0 commit comments