@@ -72,6 +72,14 @@ def login_id_thirdparty_from_phone(identifier):
72
72
return {"type" : "m.id.thirdparty" , "medium" : "msisdn" , "address" : msisdn }
73
73
74
74
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
+
75
83
class LoginRestServlet (RestServlet ):
76
84
PATTERNS = client_patterns ("/login$" , v1 = True )
77
85
CAS_TYPE = "m.login.cas"
@@ -427,18 +435,15 @@ def get_sso_url(self, client_redirect_url):
427
435
class CasRedirectServlet (BaseSSORedirectServlet ):
428
436
def __init__ (self , hs ):
429
437
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
432
440
433
441
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 )
442
447
443
448
444
449
class CasTicketServlet (RestServlet ):
@@ -458,7 +463,7 @@ async def on_GET(self, request):
458
463
uri = self .cas_server_url + "/proxyValidate"
459
464
args = {
460
465
"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 ) ,
462
467
}
463
468
try :
464
469
body = await self ._http_client .get_raw (uri , args )
0 commit comments