# HG changeset patch # User neko259 # Date 2016-12-24 14:59:50 # Node ID 70ff8482f820af51d7429b94e221187ba768a45f # Parent 8b98b02e1c05b4e86ffcaff5e3232fb4fc4179b6 Added domain image for linux.org.ru, added ability to make images for third-level domains when it is an org.ru, com.ua, co.uk etc domain diff --git a/boards/models/attachment/viewers.py b/boards/models/attachment/viewers.py --- a/boards/models/attachment/viewers.py +++ b/boards/models/attachment/viewers.py @@ -5,8 +5,8 @@ from django.contrib.staticfiles.template from django.core.files.images import get_image_dimensions from django.template.defaultfilters import filesizeformat +from boards.utils import get_domain -REGEX_DOMAIN = re.compile(r'(\w+\.)*(\w+\.\w+)') FILE_STUB_IMAGE = 'images/file.png' FILE_STUB_URL = 'url' @@ -172,7 +172,7 @@ class UrlViewer(AbstractViewer): def get_format_view(self): protocol = self.url.split('://')[0] full_domain = self.url.split('/')[2] - domain = REGEX_DOMAIN.search(full_domain).group(2) + domain = get_domain(full_domain) if protocol in URL_PROTOCOLS: url_image_name = URL_PROTOCOLS.get(protocol) diff --git a/boards/static/images/domains/linux.org.ru.png b/boards/static/images/domains/linux.org.ru.png new file mode 100644 index 0000000000000000000000000000000000000000..0a554f78ff422ff5923ab638fd821c0fd4af8462 GIT binary patch literal 48156 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 YUm_#5H|FtSMF0Q*07*qoM6N<$f_clv^8f$< diff --git a/boards/utils.py b/boards/utils.py --- a/boards/utils.py +++ b/boards/utils.py @@ -32,6 +32,10 @@ ANON_IP = '127.0.0.1' FILE_EXTENSION_DELIMITER = '.' +KNOWN_DOMAINS = ( + 'org.ru', +) + def is_anonymous_mode(): return get_bool(SETTING_MESSAGES, SETTING_ANON_MODE) @@ -143,3 +147,24 @@ def get_file_mimetype(file) -> str: elif type(file_type) == bytes: file_type = file_type.decode() return file_type + + +def get_domain(url: str) -> str: + """ + Gets domain from an URL with random number of domain levels. + """ + levels = url.split('.') + top = levels[-1] + second = levels[-2] + + has_third_level = len(levels) > 2 + if has_third_level: + third = levels[-3] + + if has_third_level and ('{}.{}'.format(second, top) in KNOWN_DOMAINS): + result = '{}.{}.{}'.format(third, second, top) + else: + result = '{}.{}'.format(second, top) + + return result +