mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			27 lines
		
	
	
		
			936 B
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			27 lines
		
	
	
		
			936 B
		
	
	
	
		
			Python
		
	
	
	
	
	
from urllib.parse import urlsplit
 | 
						|
 | 
						|
from django.conf import settings
 | 
						|
 | 
						|
 | 
						|
def is_same_server_message_link(url: str) -> bool:
 | 
						|
    split_result = urlsplit(url)
 | 
						|
    hostname = split_result.hostname
 | 
						|
    fragment = split_result.fragment
 | 
						|
 | 
						|
    if hostname not in {None, settings.EXTERNAL_HOST_WITHOUT_PORT}:
 | 
						|
        return False
 | 
						|
 | 
						|
    # A message link always has category `narrow`, section `channel`
 | 
						|
    # or `dm`, and ends with `/near/<message_id>`, where <message_id>
 | 
						|
    # is a sequence of digits. The URL fragment of a message link has
 | 
						|
    # at least 5 parts. e.g. '#narrow/dm/9,15-dm/near/43'
 | 
						|
    fragment_parts = fragment.split("/")
 | 
						|
    if len(fragment_parts) < 5:
 | 
						|
        return False
 | 
						|
 | 
						|
    category = fragment_parts[0]
 | 
						|
    section = fragment_parts[1]
 | 
						|
    ends_with_near_message_id = fragment_parts[-2] == "near" and fragment_parts[-1].isdigit()
 | 
						|
 | 
						|
    return category == "narrow" and section in {"channel", "dm"} and ends_with_near_message_id
 |