1818#
1919#
2020import logging
21- from typing import TYPE_CHECKING , Optional
21+ from typing import TYPE_CHECKING , Optional , Tuple , cast
2222
2323from twisted .web .resource import Resource
2424from twisted .web .server import Request
2525
26- from synapse .http .server import set_cors_headers
26+ from synapse .api .errors import NotFoundError
27+ from synapse .http .server import DirectServeJsonResource
2728from synapse .http .site import SynapseRequest
2829from synapse .types import JsonDict
2930from synapse .util import json_encoder
3839class WellKnownBuilder :
3940 def __init__ (self , hs : "HomeServer" ):
4041 self ._config = hs .config
42+ self ._auth = hs .get_auth ()
4143
42- def get_well_known (self ) -> Optional [JsonDict ]:
44+ async def get_well_known (self ) -> Optional [JsonDict ]:
4345 if not self ._config .server .serve_client_wellknown :
4446 return None
4547
@@ -52,13 +54,20 @@ def get_well_known(self) -> Optional[JsonDict]:
5254
5355 # We use the MSC3861 values as they are used by multiple MSCs
5456 if self ._config .experimental .msc3861 .enabled :
57+ # If MSC3861 is enabled, we can assume self._auth is an instance of MSC3861DelegatedAuth
58+ # We import lazily here because of the authlib requirement
59+ from synapse .api .auth .msc3861_delegated import MSC3861DelegatedAuth
60+
61+ auth = cast (MSC3861DelegatedAuth , self ._auth )
62+
5563 result ["org.matrix.msc2965.authentication" ] = {
56- "issuer" : self . _config . experimental . msc3861 . issuer
64+ "issuer" : await auth . issuer (),
5765 }
58- if self ._config .experimental .msc3861 .account_management_url is not None :
66+ account_management_url = await auth .account_management_url ()
67+ if account_management_url is not None :
5968 result ["org.matrix.msc2965.authentication" ][
6069 "account"
61- ] = self . _config . experimental . msc3861 . account_management_url
70+ ] = account_management_url
6271
6372 if self ._config .server .extra_well_known_client_content :
6473 for (
@@ -71,26 +80,22 @@ def get_well_known(self) -> Optional[JsonDict]:
7180 return result
7281
7382
74- class ClientWellKnownResource (Resource ):
83+ class ClientWellKnownResource (DirectServeJsonResource ):
7584 """A Twisted web resource which renders the .well-known/matrix/client file"""
7685
7786 isLeaf = 1
7887
7988 def __init__ (self , hs : "HomeServer" ):
80- Resource .__init__ (self )
89+ super () .__init__ ()
8190 self ._well_known_builder = WellKnownBuilder (hs )
8291
83- def render_GET (self , request : SynapseRequest ) -> bytes :
84- set_cors_headers (request )
85- r = self ._well_known_builder .get_well_known ()
92+ async def _async_render_GET (self , request : SynapseRequest ) -> Tuple [int , JsonDict ]:
93+ r = await self ._well_known_builder .get_well_known ()
8694 if not r :
87- request .setResponseCode (404 )
88- request .setHeader (b"Content-Type" , b"text/plain" )
89- return b".well-known not available"
95+ raise NotFoundError (".well-known not available" )
9096
9197 logger .debug ("returning: %s" , r )
92- request .setHeader (b"Content-Type" , b"application/json" )
93- return json_encoder .encode (r ).encode ("utf-8" )
98+ return 200 , r
9499
95100
96101class ServerWellKnownResource (Resource ):
0 commit comments