backends: Fix URL encoding in redirect_deactivated_user_to_login.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
This commit is contained in:
Anders Kaseorg
2021-10-13 16:56:37 -07:00
committed by Tim Abbott
parent cab0f9c219
commit cf7e8e3947
2 changed files with 11 additions and 5 deletions

View File

@@ -9,6 +9,7 @@ import urllib
from contextlib import contextmanager from contextlib import contextmanager
from typing import Any, Callable, Dict, Iterator, List, Mapping, Optional, Sequence, Tuple, Type from typing import Any, Callable, Dict, Iterator, List, Mapping, Optional, Sequence, Tuple, Type
from unittest import mock from unittest import mock
from urllib.parse import urlencode
import jwt import jwt
import ldap import ldap
@@ -170,7 +171,8 @@ class AuthBackendTest(ZulipTestCase):
self.assertEqual(result.status_code, 302) self.assertEqual(result.status_code, 302)
self.assertEqual( self.assertEqual(
result.url, result.url,
f"{user_profile.realm.uri}/login/?is_deactivated={user_profile.delivery_email}", f"{user_profile.realm.uri}/login/?"
+ urlencode({"is_deactivated": user_profile.delivery_email}),
) )
else: else:
# Just takes you back to the login page treating as # Just takes you back to the login page treating as
@@ -905,7 +907,7 @@ class SocialAuthBase(DesktopFlowTestingLib, ZulipTestCase):
params["next"] = next params["next"] = next
params["multiuse_object_key"] = multiuse_object_key params["multiuse_object_key"] = multiuse_object_key
if len(params) > 0: if len(params) > 0:
url += f"?{urllib.parse.urlencode(params)}" url += f"?{urlencode(params)}"
if user_agent is not None: if user_agent is not None:
headers["HTTP_USER_AGENT"] = user_agent headers["HTTP_USER_AGENT"] = user_agent
@@ -1119,7 +1121,8 @@ class SocialAuthBase(DesktopFlowTestingLib, ZulipTestCase):
self.assertEqual(result.status_code, 302) self.assertEqual(result.status_code, 302)
self.assertEqual( self.assertEqual(
result.url, result.url,
f"{user_profile.realm.uri}/login/?is_deactivated={user_profile.delivery_email}", f"{user_profile.realm.uri}/login/?"
+ urlencode({"is_deactivated": user_profile.delivery_email}),
) )
self.assertEqual( self.assertEqual(
m.output, m.output,
@@ -2888,7 +2891,7 @@ class AppleAuthBackendNativeFlowTest(AppleAuthMixin, SocialAuthBase):
params["user"] = json.dumps(account_data_dict) params["user"] = json.dumps(account_data_dict)
url += f"&{urllib.parse.urlencode(params)}" url += f"&{urlencode(params)}"
return url, headers return url, headers
def social_auth_test( def social_auth_test(

View File

@@ -17,6 +17,7 @@ import json
import logging import logging
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
from typing import Any, Callable, Dict, List, Optional, Set, Tuple, Type, TypeVar, Union, cast from typing import Any, Callable, Dict, List, Optional, Set, Tuple, Type, TypeVar, Union, cast
from urllib.parse import urlencode
import magic import magic
import orjson import orjson
@@ -1428,7 +1429,9 @@ def redirect_deactivated_user_to_login(realm: Realm, email: str) -> HttpResponse
# Specifying the template name makes sure that the user is not redirected to dev_login in case of # Specifying the template name makes sure that the user is not redirected to dev_login in case of
# a deactivated account on a test server. # a deactivated account on a test server.
login_url = reverse("login_page", kwargs={"template_name": "zerver/login.html"}) login_url = reverse("login_page", kwargs={"template_name": "zerver/login.html"})
redirect_url = add_query_to_redirect_url(realm.uri + login_url, f"is_deactivated={email}") redirect_url = add_query_to_redirect_url(
realm.uri + login_url, urlencode({"is_deactivated": email})
)
return HttpResponseRedirect(redirect_url) return HttpResponseRedirect(redirect_url)