From 83f0b645eaaa407e953c320664a783085a49b521 Mon Sep 17 00:00:00 2001 From: Taras Lytvynenko <69678257+Inferato@users.noreply.github.com> Date: Fri, 27 Oct 2023 21:05:56 +0300 Subject: [PATCH 1/3] fix: Social link parsing approach changed --- .../core/djangoapps/user_api/accounts/tests/test_utils.py | 2 +- openedx/core/djangoapps/user_api/accounts/utils.py | 6 +----- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/openedx/core/djangoapps/user_api/accounts/tests/test_utils.py b/openedx/core/djangoapps/user_api/accounts/tests/test_utils.py index 5755143e4a94..3b9293487361 100644 --- a/openedx/core/djangoapps/user_api/accounts/tests/test_utils.py +++ b/openedx/core/djangoapps/user_api/accounts/tests/test_utils.py @@ -43,7 +43,7 @@ def validate_social_link(self, social_platform, link): ('twitter', 'https://www.twiter.com/edX/', None, False), ('twitter', 'https://www.twitter.com/edX/123s', None, False), ('twitter', 'twitter.com/edX', 'https://www.twitter.com/edX', True), - ('twitter', 'twitter.com/edX?foo=bar', 'https://www.twitter.com/edX', True), + ('twitter', 'twitter.com/edX?foo=bar', 'https://www.twitter.com/edX?foo=bar', True), ('twitter', 'twitter.com/test.user', 'https://www.twitter.com/test.user', True), ('linkedin', 'www.linkedin.com/harryrein', None, False), ('linkedin', 'www.linkedin.com/in/harryrein-1234', 'https://www.linkedin.com/in/harryrein-1234', True), diff --git a/openedx/core/djangoapps/user_api/accounts/utils.py b/openedx/core/djangoapps/user_api/accounts/utils.py index 1326c36a2eb5..bc28bfb7fef2 100644 --- a/openedx/core/djangoapps/user_api/accounts/utils.py +++ b/openedx/core/djangoapps/user_api/accounts/utils.py @@ -6,7 +6,6 @@ import random import re import string -from urllib.parse import urlparse # pylint: disable=import-error import waffle # lint-amnesty, pylint: disable=invalid-django-waffle-import from completion.models import BlockCompletion @@ -85,11 +84,8 @@ def _get_username_from_social_link(platform_name, new_social_link): if not new_social_link: return new_social_link - # Parse the social link as if it were a URL. - parse_result = urlparse(new_social_link) - url_domain_and_path = parse_result[1] + parse_result[2] url_stub = re.escape(settings.SOCIAL_PLATFORMS[platform_name]['url_stub']) - username_match = re.search(r'(www\.)?' + url_stub + r'(?P.*?)[/]?$', url_domain_and_path, re.IGNORECASE) + username_match = re.search(r'(www\.)?' + url_stub + r'(?P.+)(\?.*)?$', new_social_link, re.IGNORECASE) if username_match: username = username_match.group('username') else: From 346e95e911550fe1d7b3ba3de92872b1f6c1d087 Mon Sep 17 00:00:00 2001 From: Taras Lytvynenko <69678257+Inferato@users.noreply.github.com> Date: Mon, 30 Oct 2023 04:52:55 +0200 Subject: [PATCH 2/3] fix: fix tests --- openedx/core/djangoapps/user_api/accounts/tests/test_utils.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openedx/core/djangoapps/user_api/accounts/tests/test_utils.py b/openedx/core/djangoapps/user_api/accounts/tests/test_utils.py index 3b9293487361..f6ea3cfba855 100644 --- a/openedx/core/djangoapps/user_api/accounts/tests/test_utils.py +++ b/openedx/core/djangoapps/user_api/accounts/tests/test_utils.py @@ -37,8 +37,8 @@ def validate_social_link(self, social_platform, link): @ddt.data( ('facebook', 'www.facebook.com/edX', 'https://www.facebook.com/edX', True), - ('facebook', 'facebook.com/edX/', 'https://www.facebook.com/edX', True), - ('facebook', 'HTTP://facebook.com/edX/', 'https://www.facebook.com/edX', True), + ('facebook', 'facebook.com/edX', 'https://www.facebook.com/edX', True), + ('facebook', 'HTTP://facebook.com/edX', 'https://www.facebook.com/edX', True), ('facebook', 'www.evilwebsite.com/123', None, False), ('twitter', 'https://www.twiter.com/edX/', None, False), ('twitter', 'https://www.twitter.com/edX/123s', None, False), From 29eb4be2914b093406fbc98ee2d04573fb291acf Mon Sep 17 00:00:00 2001 From: Taras Lytvynenko <69678257+Inferato@users.noreply.github.com> Date: Mon, 30 Oct 2023 05:16:42 +0200 Subject: [PATCH 3/3] fix: better approach --- openedx/core/djangoapps/user_api/accounts/tests/test_utils.py | 4 ++-- openedx/core/djangoapps/user_api/accounts/utils.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/openedx/core/djangoapps/user_api/accounts/tests/test_utils.py b/openedx/core/djangoapps/user_api/accounts/tests/test_utils.py index f6ea3cfba855..3b9293487361 100644 --- a/openedx/core/djangoapps/user_api/accounts/tests/test_utils.py +++ b/openedx/core/djangoapps/user_api/accounts/tests/test_utils.py @@ -37,8 +37,8 @@ def validate_social_link(self, social_platform, link): @ddt.data( ('facebook', 'www.facebook.com/edX', 'https://www.facebook.com/edX', True), - ('facebook', 'facebook.com/edX', 'https://www.facebook.com/edX', True), - ('facebook', 'HTTP://facebook.com/edX', 'https://www.facebook.com/edX', True), + ('facebook', 'facebook.com/edX/', 'https://www.facebook.com/edX', True), + ('facebook', 'HTTP://facebook.com/edX/', 'https://www.facebook.com/edX', True), ('facebook', 'www.evilwebsite.com/123', None, False), ('twitter', 'https://www.twiter.com/edX/', None, False), ('twitter', 'https://www.twitter.com/edX/123s', None, False), diff --git a/openedx/core/djangoapps/user_api/accounts/utils.py b/openedx/core/djangoapps/user_api/accounts/utils.py index bc28bfb7fef2..13f8459cedd7 100644 --- a/openedx/core/djangoapps/user_api/accounts/utils.py +++ b/openedx/core/djangoapps/user_api/accounts/utils.py @@ -85,7 +85,7 @@ def _get_username_from_social_link(platform_name, new_social_link): return new_social_link url_stub = re.escape(settings.SOCIAL_PLATFORMS[platform_name]['url_stub']) - username_match = re.search(r'(www\.)?' + url_stub + r'(?P.+)(\?.*)?$', new_social_link, re.IGNORECASE) + username_match = re.search(r'(www\.)?' + url_stub + r'(?P.+?)(?:/)?$', new_social_link, re.IGNORECASE) if username_match: username = username_match.group('username') else: