Skip to content
This repository was archived by the owner on Apr 26, 2024. It is now read-only.

Commit d1f1b46

Browse files
authored
Additional type hints for client REST servlets (part 4) (#10728)
1 parent dc75fb7 commit d1f1b46

File tree

9 files changed

+145
-100
lines changed

9 files changed

+145
-100
lines changed

changelog.d/10728.misc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Add missing type hints to REST servlets.

synapse/rest/client/account.py

Lines changed: 39 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,11 @@
1616
import logging
1717
import random
1818
from http import HTTPStatus
19-
from typing import TYPE_CHECKING
19+
from typing import TYPE_CHECKING, Optional, Tuple
2020
from urllib.parse import urlparse
2121

22+
from twisted.web.server import Request
23+
2224
from synapse.api.constants import LoginType
2325
from synapse.api.errors import (
2426
Codes,
@@ -28,15 +30,17 @@
2830
)
2931
from synapse.config.emailconfig import ThreepidBehaviour
3032
from synapse.handlers.ui_auth import UIAuthSessionDataConstants
31-
from synapse.http.server import finish_request, respond_with_html
33+
from synapse.http.server import HttpServer, finish_request, respond_with_html
3234
from synapse.http.servlet import (
3335
RestServlet,
3436
assert_params_in_dict,
3537
parse_json_object_from_request,
3638
parse_string,
3739
)
40+
from synapse.http.site import SynapseRequest
3841
from synapse.metrics import threepid_send_requests
3942
from synapse.push.mailer import Mailer
43+
from synapse.types import JsonDict
4044
from synapse.util.msisdn import phone_number_to_msisdn
4145
from synapse.util.stringutils import assert_valid_client_secret, random_string
4246
from synapse.util.threepids import check_3pid_allowed, validate_email
@@ -68,7 +72,7 @@ def __init__(self, hs: "HomeServer"):
6872
template_text=self.config.email_password_reset_template_text,
6973
)
7074

71-
async def on_POST(self, request):
75+
async def on_POST(self, request: SynapseRequest) -> Tuple[int, JsonDict]:
7276
if self.config.threepid_behaviour_email == ThreepidBehaviour.OFF:
7377
if self.config.local_threepid_handling_disabled_due_to_email_config:
7478
logger.warning(
@@ -159,7 +163,7 @@ async def on_POST(self, request):
159163
class PasswordRestServlet(RestServlet):
160164
PATTERNS = client_patterns("/account/password$")
161165

162-
def __init__(self, hs):
166+
def __init__(self, hs: "HomeServer"):
163167
super().__init__()
164168
self.hs = hs
165169
self.auth = hs.get_auth()
@@ -169,7 +173,7 @@ def __init__(self, hs):
169173
self._set_password_handler = hs.get_set_password_handler()
170174

171175
@interactive_auth_handler
172-
async def on_POST(self, request):
176+
async def on_POST(self, request: SynapseRequest) -> Tuple[int, JsonDict]:
173177
body = parse_json_object_from_request(request)
174178

175179
# we do basic sanity checks here because the auth layer will store these
@@ -190,6 +194,7 @@ async def on_POST(self, request):
190194
#
191195
# In the second case, we require a password to confirm their identity.
192196

197+
requester = None
193198
if self.auth.has_access_token(request):
194199
requester = await self.auth.get_user_by_req(request)
195200
try:
@@ -206,16 +211,15 @@ async def on_POST(self, request):
206211
# If a password is available now, hash the provided password and
207212
# store it for later.
208213
if new_password:
209-
password_hash = await self.auth_handler.hash(new_password)
214+
new_password_hash = await self.auth_handler.hash(new_password)
210215
await self.auth_handler.set_session_data(
211216
e.session_id,
212217
UIAuthSessionDataConstants.PASSWORD_HASH,
213-
password_hash,
218+
new_password_hash,
214219
)
215220
raise
216221
user_id = requester.user.to_string()
217222
else:
218-
requester = None
219223
try:
220224
result, params, session_id = await self.auth_handler.check_ui_auth(
221225
[[LoginType.EMAIL_IDENTITY]],
@@ -230,11 +234,11 @@ async def on_POST(self, request):
230234
# If a password is available now, hash the provided password and
231235
# store it for later.
232236
if new_password:
233-
password_hash = await self.auth_handler.hash(new_password)
237+
new_password_hash = await self.auth_handler.hash(new_password)
234238
await self.auth_handler.set_session_data(
235239
e.session_id,
236240
UIAuthSessionDataConstants.PASSWORD_HASH,
237-
password_hash,
241+
new_password_hash,
238242
)
239243
raise
240244

@@ -264,7 +268,7 @@ async def on_POST(self, request):
264268
# If we have a password in this request, prefer it. Otherwise, use the
265269
# password hash from an earlier request.
266270
if new_password:
267-
password_hash = await self.auth_handler.hash(new_password)
271+
password_hash: Optional[str] = await self.auth_handler.hash(new_password)
268272
elif session_id is not None:
269273
password_hash = await self.auth_handler.get_session_data(
270274
session_id, UIAuthSessionDataConstants.PASSWORD_HASH, None
@@ -288,15 +292,15 @@ async def on_POST(self, request):
288292
class DeactivateAccountRestServlet(RestServlet):
289293
PATTERNS = client_patterns("/account/deactivate$")
290294

291-
def __init__(self, hs):
295+
def __init__(self, hs: "HomeServer"):
292296
super().__init__()
293297
self.hs = hs
294298
self.auth = hs.get_auth()
295299
self.auth_handler = hs.get_auth_handler()
296300
self._deactivate_account_handler = hs.get_deactivate_account_handler()
297301

298302
@interactive_auth_handler
299-
async def on_POST(self, request):
303+
async def on_POST(self, request: SynapseRequest) -> Tuple[int, JsonDict]:
300304
body = parse_json_object_from_request(request)
301305
erase = body.get("erase", False)
302306
if not isinstance(erase, bool):
@@ -338,7 +342,7 @@ async def on_POST(self, request):
338342
class EmailThreepidRequestTokenRestServlet(RestServlet):
339343
PATTERNS = client_patterns("/account/3pid/email/requestToken$")
340344

341-
def __init__(self, hs):
345+
def __init__(self, hs: "HomeServer"):
342346
super().__init__()
343347
self.hs = hs
344348
self.config = hs.config
@@ -353,7 +357,7 @@ def __init__(self, hs):
353357
template_text=self.config.email_add_threepid_template_text,
354358
)
355359

356-
async def on_POST(self, request):
360+
async def on_POST(self, request: SynapseRequest) -> Tuple[int, JsonDict]:
357361
if self.config.threepid_behaviour_email == ThreepidBehaviour.OFF:
358362
if self.config.local_threepid_handling_disabled_due_to_email_config:
359363
logger.warning(
@@ -449,7 +453,7 @@ def __init__(self, hs: "HomeServer"):
449453
self.store = self.hs.get_datastore()
450454
self.identity_handler = hs.get_identity_handler()
451455

452-
async def on_POST(self, request):
456+
async def on_POST(self, request: SynapseRequest) -> Tuple[int, JsonDict]:
453457
body = parse_json_object_from_request(request)
454458
assert_params_in_dict(
455459
body, ["client_secret", "country", "phone_number", "send_attempt"]
@@ -525,11 +529,7 @@ class AddThreepidEmailSubmitTokenServlet(RestServlet):
525529
"/add_threepid/email/submit_token$", releases=(), unstable=True
526530
)
527531

528-
def __init__(self, hs):
529-
"""
530-
Args:
531-
hs (synapse.server.HomeServer): server
532-
"""
532+
def __init__(self, hs: "HomeServer"):
533533
super().__init__()
534534
self.config = hs.config
535535
self.clock = hs.get_clock()
@@ -539,7 +539,7 @@ def __init__(self, hs):
539539
self.config.email_add_threepid_template_failure_html
540540
)
541541

542-
async def on_GET(self, request):
542+
async def on_GET(self, request: Request) -> None:
543543
if self.config.threepid_behaviour_email == ThreepidBehaviour.OFF:
544544
if self.config.local_threepid_handling_disabled_due_to_email_config:
545545
logger.warning(
@@ -596,18 +596,14 @@ class AddThreepidMsisdnSubmitTokenServlet(RestServlet):
596596
"/add_threepid/msisdn/submit_token$", releases=(), unstable=True
597597
)
598598

599-
def __init__(self, hs):
600-
"""
601-
Args:
602-
hs (synapse.server.HomeServer): server
603-
"""
599+
def __init__(self, hs: "HomeServer"):
604600
super().__init__()
605601
self.config = hs.config
606602
self.clock = hs.get_clock()
607603
self.store = hs.get_datastore()
608604
self.identity_handler = hs.get_identity_handler()
609605

610-
async def on_POST(self, request):
606+
async def on_POST(self, request: Request) -> Tuple[int, JsonDict]:
611607
if not self.config.account_threepid_delegate_msisdn:
612608
raise SynapseError(
613609
400,
@@ -632,22 +628,22 @@ async def on_POST(self, request):
632628
class ThreepidRestServlet(RestServlet):
633629
PATTERNS = client_patterns("/account/3pid$")
634630

635-
def __init__(self, hs):
631+
def __init__(self, hs: "HomeServer"):
636632
super().__init__()
637633
self.hs = hs
638634
self.identity_handler = hs.get_identity_handler()
639635
self.auth = hs.get_auth()
640636
self.auth_handler = hs.get_auth_handler()
641637
self.datastore = self.hs.get_datastore()
642638

643-
async def on_GET(self, request):
639+
async def on_GET(self, request: SynapseRequest) -> Tuple[int, JsonDict]:
644640
requester = await self.auth.get_user_by_req(request)
645641

646642
threepids = await self.datastore.user_get_threepids(requester.user.to_string())
647643

648644
return 200, {"threepids": threepids}
649645

650-
async def on_POST(self, request):
646+
async def on_POST(self, request: SynapseRequest) -> Tuple[int, JsonDict]:
651647
if not self.hs.config.enable_3pid_changes:
652648
raise SynapseError(
653649
400, "3PID changes are disabled on this server", Codes.FORBIDDEN
@@ -688,15 +684,15 @@ async def on_POST(self, request):
688684
class ThreepidAddRestServlet(RestServlet):
689685
PATTERNS = client_patterns("/account/3pid/add$")
690686

691-
def __init__(self, hs):
687+
def __init__(self, hs: "HomeServer"):
692688
super().__init__()
693689
self.hs = hs
694690
self.identity_handler = hs.get_identity_handler()
695691
self.auth = hs.get_auth()
696692
self.auth_handler = hs.get_auth_handler()
697693

698694
@interactive_auth_handler
699-
async def on_POST(self, request):
695+
async def on_POST(self, request: SynapseRequest) -> Tuple[int, JsonDict]:
700696
if not self.hs.config.enable_3pid_changes:
701697
raise SynapseError(
702698
400, "3PID changes are disabled on this server", Codes.FORBIDDEN
@@ -738,13 +734,13 @@ async def on_POST(self, request):
738734
class ThreepidBindRestServlet(RestServlet):
739735
PATTERNS = client_patterns("/account/3pid/bind$")
740736

741-
def __init__(self, hs):
737+
def __init__(self, hs: "HomeServer"):
742738
super().__init__()
743739
self.hs = hs
744740
self.identity_handler = hs.get_identity_handler()
745741
self.auth = hs.get_auth()
746742

747-
async def on_POST(self, request):
743+
async def on_POST(self, request: SynapseRequest) -> Tuple[int, JsonDict]:
748744
body = parse_json_object_from_request(request)
749745

750746
assert_params_in_dict(body, ["id_server", "sid", "client_secret"])
@@ -767,14 +763,14 @@ async def on_POST(self, request):
767763
class ThreepidUnbindRestServlet(RestServlet):
768764
PATTERNS = client_patterns("/account/3pid/unbind$")
769765

770-
def __init__(self, hs):
766+
def __init__(self, hs: "HomeServer"):
771767
super().__init__()
772768
self.hs = hs
773769
self.identity_handler = hs.get_identity_handler()
774770
self.auth = hs.get_auth()
775771
self.datastore = self.hs.get_datastore()
776772

777-
async def on_POST(self, request):
773+
async def on_POST(self, request: SynapseRequest) -> Tuple[int, JsonDict]:
778774
"""Unbind the given 3pid from a specific identity server, or identity servers that are
779775
known to have this 3pid bound
780776
"""
@@ -798,13 +794,13 @@ async def on_POST(self, request):
798794
class ThreepidDeleteRestServlet(RestServlet):
799795
PATTERNS = client_patterns("/account/3pid/delete$")
800796

801-
def __init__(self, hs):
797+
def __init__(self, hs: "HomeServer"):
802798
super().__init__()
803799
self.hs = hs
804800
self.auth = hs.get_auth()
805801
self.auth_handler = hs.get_auth_handler()
806802

807-
async def on_POST(self, request):
803+
async def on_POST(self, request: SynapseRequest) -> Tuple[int, JsonDict]:
808804
if not self.hs.config.enable_3pid_changes:
809805
raise SynapseError(
810806
400, "3PID changes are disabled on this server", Codes.FORBIDDEN
@@ -835,7 +831,7 @@ async def on_POST(self, request):
835831
return 200, {"id_server_unbind_result": id_server_unbind_result}
836832

837833

838-
def assert_valid_next_link(hs: "HomeServer", next_link: str):
834+
def assert_valid_next_link(hs: "HomeServer", next_link: str) -> None:
839835
"""
840836
Raises a SynapseError if a given next_link value is invalid
841837
@@ -877,11 +873,11 @@ def assert_valid_next_link(hs: "HomeServer", next_link: str):
877873
class WhoamiRestServlet(RestServlet):
878874
PATTERNS = client_patterns("/account/whoami$")
879875

880-
def __init__(self, hs):
876+
def __init__(self, hs: "HomeServer"):
881877
super().__init__()
882878
self.auth = hs.get_auth()
883879

884-
async def on_GET(self, request):
880+
async def on_GET(self, request: SynapseRequest) -> Tuple[int, JsonDict]:
885881
requester = await self.auth.get_user_by_req(request)
886882

887883
response = {"user_id": requester.user.to_string()}
@@ -894,7 +890,7 @@ async def on_GET(self, request):
894890
return 200, response
895891

896892

897-
def register_servlets(hs, http_server):
893+
def register_servlets(hs: "HomeServer", http_server: HttpServer) -> None:
898894
EmailPasswordRequestTokenRestServlet(hs).register(http_server)
899895
PasswordRestServlet(hs).register(http_server)
900896
DeactivateAccountRestServlet(hs).register(http_server)

synapse/rest/client/knock.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
# See the License for the specific language governing permissions and
1414
# limitations under the License.
1515
import logging
16-
from typing import TYPE_CHECKING, Dict, List, Optional, Tuple
16+
from typing import TYPE_CHECKING, Awaitable, Dict, List, Optional, Tuple
1717

1818
from twisted.web.server import Request
1919

@@ -96,7 +96,9 @@ async def on_POST(
9696

9797
return 200, {"room_id": room_id}
9898

99-
def on_PUT(self, request: Request, room_identifier: str, txn_id: str):
99+
def on_PUT(
100+
self, request: Request, room_identifier: str, txn_id: str
101+
) -> Awaitable[Tuple[int, JsonDict]]:
100102
set_tag("txn_id", txn_id)
101103

102104
return self.txns.fetch_or_execute_request(

synapse/rest/client/register.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -375,11 +375,7 @@ class RegistrationTokenValidityRestServlet(RestServlet):
375375
unstable=True,
376376
)
377377

378-
def __init__(self, hs):
379-
"""
380-
Args:
381-
hs (synapse.server.HomeServer): server
382-
"""
378+
def __init__(self, hs: "HomeServer"):
383379
super().__init__()
384380
self.hs = hs
385381
self.store = hs.get_datastore()
@@ -390,7 +386,7 @@ def __init__(self, hs):
390386
burst_count=hs.config.ratelimiting.rc_registration_token_validity.burst_count,
391387
)
392388

393-
async def on_GET(self, request):
389+
async def on_GET(self, request: Request) -> Tuple[int, JsonDict]:
394390
await self.ratelimiter.ratelimit(None, (request.getClientIP(),))
395391

396392
if not self.hs.config.enable_registration:
@@ -730,7 +726,11 @@ async def on_POST(self, request: SynapseRequest) -> Tuple[int, JsonDict]:
730726
return 200, return_dict
731727

732728
async def _do_appservice_registration(
733-
self, username, as_token, body, should_issue_refresh_token: bool = False
729+
self,
730+
username: str,
731+
as_token: str,
732+
body: JsonDict,
733+
should_issue_refresh_token: bool = False,
734734
) -> JsonDict:
735735
user_id = await self.registration_handler.appservice_register(
736736
username, as_token

0 commit comments

Comments
 (0)