@@ -72,6 +72,14 @@ def login_id_thirdparty_from_phone(identifier):
7272 return {"type" : "m.id.thirdparty" , "medium" : "msisdn" , "address" : msisdn }
7373
7474
75+ def build_service_param (cas_service_url , client_redirect_url ):
76+ return "%s%s?redirectUrl=%s" % (
77+ cas_service_url ,
78+ "/_matrix/client/r0/login/cas/ticket" ,
79+ urllib .parse .quote (client_redirect_url , safe = "" ),
80+ )
81+
82+
7583class LoginRestServlet (RestServlet ):
7684 PATTERNS = client_patterns ("/login$" , v1 = True )
7785 CAS_TYPE = "m.login.cas"
@@ -427,18 +435,15 @@ def get_sso_url(self, client_redirect_url):
427435class CasRedirectServlet (BaseSSORedirectServlet ):
428436 def __init__ (self , hs ):
429437 super (CasRedirectServlet , self ).__init__ ()
430- self .cas_server_url = hs .config .cas_server_url . encode ( "ascii" )
431- self .cas_service_url = hs .config .cas_service_url . encode ( "ascii" )
438+ self .cas_server_url = hs .config .cas_server_url
439+ self .cas_service_url = hs .config .cas_service_url
432440
433441 def get_sso_url (self , client_redirect_url ):
434- client_redirect_url_param = urllib .parse .urlencode (
435- {b"redirectUrl" : client_redirect_url }
436- ).encode ("ascii" )
437- hs_redirect_url = self .cas_service_url + b"/_matrix/client/r0/login/cas/ticket"
438- service_param = urllib .parse .urlencode (
439- {b"service" : b"%s?%s" % (hs_redirect_url , client_redirect_url_param )}
440- ).encode ("ascii" )
441- return b"%s/login?%s" % (self .cas_server_url , service_param )
442+ args = urllib .parse .urlencode (
443+ {"service" : build_service_param (self .cas_service_url , client_redirect_url )}
444+ )
445+
446+ return "%s/login?%s" % (self .cas_server_url , args )
442447
443448
444449class CasTicketServlet (RestServlet ):
@@ -458,7 +463,7 @@ async def on_GET(self, request):
458463 uri = self .cas_server_url + "/proxyValidate"
459464 args = {
460465 "ticket" : parse_string (request , "ticket" , required = True ),
461- "service" : self .cas_service_url ,
466+ "service" : build_service_param ( self .cas_service_url , client_redirect_url ) ,
462467 }
463468 try :
464469 body = await self ._http_client .get_raw (uri , args )
0 commit comments