diff --git a/bookwyrm/utils/regex.py b/bookwyrm/utils/regex.py index 98bcde5ad7..5d4bf77bf5 100644 --- a/bookwyrm/utils/regex.py +++ b/bookwyrm/utils/regex.py @@ -3,9 +3,11 @@ DOMAIN = r"[\w_\-\.]+\.[a-z\-]{2,}" LOCALNAME = r"@?[a-zA-Z_\-\.0-9]+" STRICT_LOCALNAME = r"@[a-zA-Z_\-\.0-9]+" +REMOTENAME = r"[\w\-\.\~](?:[\w\-\.\~]|(?:%[0-9A-Fa-f]{2})){0,149}" USERNAME = rf"{LOCALNAME}(@{DOMAIN})?" STRICT_USERNAME = rf"(\B{STRICT_LOCALNAME}(@{DOMAIN})?\b)" FULL_USERNAME = rf"{LOCALNAME}@{DOMAIN}\b" +REMOTE_USER_URL = rf"(?:^http(?:s?):\/\/)([\w\-\.]*)(?:.)*(?:(?:\/)({REMOTENAME}))" SLUG = r"/s/(?P[-_a-z0-9]*)" HASHTAG = r"(#[^!@#$%^&*(),.?\":{}|<>\s]+)" # should match (BookWyrm/1.0.0; or (BookWyrm/99.1.2; diff --git a/bookwyrm/views/follow.py b/bookwyrm/views/follow.py index dcb1c695cd..5001ca9174 100644 --- a/bookwyrm/views/follow.py +++ b/bookwyrm/views/follow.py @@ -10,6 +10,7 @@ from bookwyrm import models from bookwyrm.models.relationship import clear_cache +from bookwyrm.utils import regex from .helpers import ( get_user_from_username, handle_remote_webfinger, @@ -135,7 +136,8 @@ def ostatus_follow_request(request): """prepare an outgoing remote follow request""" uri = urllib.parse.unquote(request.GET.get("acct")) username_parts = re.search( - r"(?:^http(?:s?):\/\/)([\w\-\.]*)(?:.)*(?:(?:\/)([\w]*))", uri + regex.REMOTE_USER_URL, + uri, ) account = f"{username_parts[2]}@{username_parts[1]}" user = handle_remote_webfinger(account)