@@ -983,7 +983,7 @@ async def on_PUT(
983983
984984class UserMembershipRestServlet (RestServlet ):
985985 """
986- Get room list of an user.
986+ Get list of joined room ID's for a user.
987987 """
988988
989989 PATTERNS = admin_patterns ("/users/(?P<user_id>[^/]*)/joined_rooms$" )
@@ -999,8 +999,9 @@ async def on_GET(
999999 await assert_requester_is_admin (self .auth , request )
10001000
10011001 room_ids = await self .store .get_rooms_for_user (user_id )
1002- ret = {"joined_rooms" : list (room_ids ), "total" : len (room_ids )}
1003- return HTTPStatus .OK , ret
1002+ rooms_response = {"joined_rooms" : list (room_ids ), "total" : len (room_ids )}
1003+
1004+ return HTTPStatus .OK , rooms_response
10041005
10051006
10061007class PushersRestServlet (RestServlet ):
@@ -1501,3 +1502,50 @@ async def on_GET(
15011502 }
15021503 else :
15031504 raise NotFoundError ("redact id '%s' not found" % redact_id )
1505+
1506+
1507+ class UserInvitesCount (RestServlet ):
1508+ """
1509+ Return the count of invites that the user has sent after the given timestamp
1510+ """
1511+
1512+ PATTERNS = admin_patterns ("/users/(?P<user_id>[^/]*)/sent_invite_count" )
1513+
1514+ def __init__ (self , hs : "HomeServer" ):
1515+ self ._auth = hs .get_auth ()
1516+ self .store = hs .get_datastores ().main
1517+
1518+ async def on_GET (
1519+ self , request : SynapseRequest , user_id : str
1520+ ) -> Tuple [int , JsonDict ]:
1521+ await assert_requester_is_admin (self ._auth , request )
1522+ from_ts = parse_integer (request , "from_ts" , required = True )
1523+
1524+ sent_invite_count = await self .store .get_sent_invite_count_by_user (
1525+ user_id , from_ts
1526+ )
1527+
1528+ return HTTPStatus .OK , {"invite_count" : sent_invite_count }
1529+
1530+
1531+ class UserJoinedRoomCount (RestServlet ):
1532+ """
1533+ Return the count of rooms that the user has joined at or after the given timestamp, even
1534+ if they have subsequently left/been banned from those rooms.
1535+ """
1536+
1537+ PATTERNS = admin_patterns ("/users/(?P<user_id>[^/]*)/cumulative_joined_room_count" )
1538+
1539+ def __init__ (self , hs : "HomeServer" ):
1540+ self ._auth = hs .get_auth ()
1541+ self .store = hs .get_datastores ().main
1542+
1543+ async def on_GET (
1544+ self , request : SynapseRequest , user_id : str
1545+ ) -> Tuple [int , JsonDict ]:
1546+ await assert_requester_is_admin (self ._auth , request )
1547+ from_ts = parse_integer (request , "from_ts" , required = True )
1548+
1549+ joined_rooms = await self .store .get_rooms_for_user_by_date (user_id , from_ts )
1550+
1551+ return HTTPStatus .OK , {"cumulative_joined_room_count" : len (joined_rooms )}
0 commit comments