mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	subdomains: Extract zerver.lib.subdomains library.
These never really belonged with the rest of zerver.lib.utils.py, and having a separate library makes it easier to enforce full test coverage.
This commit is contained in:
		@@ -95,6 +95,7 @@ not_yet_fully_covered = {
 | 
			
		||||
    'zerver/lib/sqlalchemy_utils.py',
 | 
			
		||||
    'zerver/lib/str_utils.py',
 | 
			
		||||
    'zerver/lib/stream_recipient.py',
 | 
			
		||||
    'zerver/lib/subdomains.py',
 | 
			
		||||
    'zerver/lib/tex.py',
 | 
			
		||||
    'zerver/lib/timeout.py',
 | 
			
		||||
    'zerver/lib/unminify.py',
 | 
			
		||||
 
 | 
			
		||||
@@ -17,7 +17,7 @@ from zproject.backends import (
 | 
			
		||||
)
 | 
			
		||||
from zerver.lib.bugdown import convert
 | 
			
		||||
from zerver.lib.send_email import FromAddress
 | 
			
		||||
from zerver.lib.utils import get_subdomain
 | 
			
		||||
from zerver.lib.subdomains import get_subdomain
 | 
			
		||||
from zerver.lib.realm_icon import get_realm_icon_url
 | 
			
		||||
 | 
			
		||||
from version import ZULIP_VERSION
 | 
			
		||||
 
 | 
			
		||||
@@ -12,9 +12,9 @@ from django.utils.decorators import available_attrs
 | 
			
		||||
from django.utils.timezone import now as timezone_now
 | 
			
		||||
from django.conf import settings
 | 
			
		||||
from zerver.lib.queue import queue_json_publish
 | 
			
		||||
from zerver.lib.subdomains import get_subdomain, check_subdomain
 | 
			
		||||
from zerver.lib.timestamp import datetime_to_timestamp, timestamp_to_datetime
 | 
			
		||||
from zerver.lib.utils import statsd, get_subdomain, check_subdomain, \
 | 
			
		||||
    is_remote_server
 | 
			
		||||
from zerver.lib.utils import statsd, is_remote_server
 | 
			
		||||
from zerver.lib.exceptions import RateLimited, JsonableError, ErrorCode
 | 
			
		||||
 | 
			
		||||
from zerver.lib.rate_limiter import incr_ratelimit, is_ratelimited, \
 | 
			
		||||
 
 | 
			
		||||
@@ -15,8 +15,8 @@ from zerver.lib.actions import do_change_password, user_email_is_unique, \
 | 
			
		||||
from zerver.lib.name_restrictions import is_reserved_subdomain, is_disposable_domain
 | 
			
		||||
from zerver.lib.request import JsonableError
 | 
			
		||||
from zerver.lib.send_email import send_email, FromAddress
 | 
			
		||||
from zerver.lib.subdomains import get_subdomain, check_subdomain
 | 
			
		||||
from zerver.lib.users import check_full_name
 | 
			
		||||
from zerver.lib.utils import get_subdomain, check_subdomain
 | 
			
		||||
from zerver.models import Realm, get_user_profile_by_email, UserProfile, \
 | 
			
		||||
    get_realm, email_to_domain, email_allowed_for_realm
 | 
			
		||||
from zproject.backends import password_auth_enabled
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										34
									
								
								zerver/lib/subdomains.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								zerver/lib/subdomains.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
 | 
			
		||||
from django.conf import settings
 | 
			
		||||
from django.http import HttpRequest
 | 
			
		||||
from typing import Optional, Text
 | 
			
		||||
 | 
			
		||||
def _extract_subdomain(request):
 | 
			
		||||
    # type: (HttpRequest) -> Text
 | 
			
		||||
    domain = request.get_host().lower()
 | 
			
		||||
    index = domain.find("." + settings.EXTERNAL_HOST)
 | 
			
		||||
    if index == -1:
 | 
			
		||||
        return ""
 | 
			
		||||
    return domain[0:index]
 | 
			
		||||
 | 
			
		||||
def get_subdomain(request):
 | 
			
		||||
    # type: (HttpRequest) -> Text
 | 
			
		||||
    subdomain = _extract_subdomain(request)
 | 
			
		||||
    if subdomain in settings.ROOT_SUBDOMAIN_ALIASES:
 | 
			
		||||
        return ""
 | 
			
		||||
    return subdomain
 | 
			
		||||
 | 
			
		||||
def is_subdomain_root_or_alias(request):
 | 
			
		||||
    # type: (HttpRequest) -> bool
 | 
			
		||||
    subdomain = _extract_subdomain(request)
 | 
			
		||||
    return not subdomain or subdomain in settings.ROOT_SUBDOMAIN_ALIASES
 | 
			
		||||
 | 
			
		||||
def check_subdomain(realm_subdomain, user_subdomain):
 | 
			
		||||
    # type: (Optional[Text], Optional[Text]) -> bool
 | 
			
		||||
    if realm_subdomain is not None:
 | 
			
		||||
        if (realm_subdomain == "" and user_subdomain is None):
 | 
			
		||||
            return True
 | 
			
		||||
        if realm_subdomain != user_subdomain:
 | 
			
		||||
            return False
 | 
			
		||||
    return True
 | 
			
		||||
@@ -12,7 +12,6 @@ import sys
 | 
			
		||||
from time import sleep
 | 
			
		||||
 | 
			
		||||
from django.conf import settings
 | 
			
		||||
from django.http import HttpRequest
 | 
			
		||||
from six.moves import map, zip_longest
 | 
			
		||||
from zerver.lib.str_utils import force_text
 | 
			
		||||
 | 
			
		||||
@@ -185,35 +184,6 @@ def query_chunker(queries, id_collector=None, chunk_size=1000, db_chunk_size=Non
 | 
			
		||||
 | 
			
		||||
        yield [row for row_id, i, row in tup_chunk]
 | 
			
		||||
 | 
			
		||||
def _extract_subdomain(request):
 | 
			
		||||
    # type: (HttpRequest) -> Text
 | 
			
		||||
    domain = request.get_host().lower()
 | 
			
		||||
    index = domain.find("." + settings.EXTERNAL_HOST)
 | 
			
		||||
    if index == -1:
 | 
			
		||||
        return ""
 | 
			
		||||
    return domain[0:index]
 | 
			
		||||
 | 
			
		||||
def get_subdomain(request):
 | 
			
		||||
    # type: (HttpRequest) -> Text
 | 
			
		||||
    subdomain = _extract_subdomain(request)
 | 
			
		||||
    if subdomain in settings.ROOT_SUBDOMAIN_ALIASES:
 | 
			
		||||
        return ""
 | 
			
		||||
    return subdomain
 | 
			
		||||
 | 
			
		||||
def is_subdomain_root_or_alias(request):
 | 
			
		||||
    # type: (HttpRequest) -> bool
 | 
			
		||||
    subdomain = _extract_subdomain(request)
 | 
			
		||||
    return not subdomain or subdomain in settings.ROOT_SUBDOMAIN_ALIASES
 | 
			
		||||
 | 
			
		||||
def check_subdomain(realm_subdomain, user_subdomain):
 | 
			
		||||
    # type: (Optional[Text], Optional[Text]) -> bool
 | 
			
		||||
    if realm_subdomain is not None:
 | 
			
		||||
        if (realm_subdomain == "" and user_subdomain is None):
 | 
			
		||||
            return True
 | 
			
		||||
        if realm_subdomain != user_subdomain:
 | 
			
		||||
            return False
 | 
			
		||||
    return True
 | 
			
		||||
 | 
			
		||||
def split_by(array, group_size, filler):
 | 
			
		||||
    # type: (List[Any], int, Any) -> List[List[Any]]
 | 
			
		||||
    """
 | 
			
		||||
 
 | 
			
		||||
@@ -8,10 +8,11 @@ from django.utils.translation import ugettext as _
 | 
			
		||||
from django.utils.deprecation import MiddlewareMixin
 | 
			
		||||
 | 
			
		||||
from zerver.lib.response import json_error, json_response_from_error
 | 
			
		||||
from zerver.lib.subdomains import get_subdomain
 | 
			
		||||
from zerver.lib.exceptions import JsonableError, ErrorCode
 | 
			
		||||
from django.db import connection
 | 
			
		||||
from django.http import HttpRequest, HttpResponse, StreamingHttpResponse
 | 
			
		||||
from zerver.lib.utils import statsd, get_subdomain
 | 
			
		||||
from zerver.lib.utils import statsd
 | 
			
		||||
from zerver.lib.queue import queue_json_publish
 | 
			
		||||
from zerver.lib.cache import get_remote_cache_time, get_remote_cache_requests
 | 
			
		||||
from zerver.lib.bugdown import get_bugdown_time, get_bugdown_requests
 | 
			
		||||
 
 | 
			
		||||
@@ -26,7 +26,7 @@ from zerver.forms import HomepageForm, OurAuthenticationForm, \
 | 
			
		||||
from zerver.lib.mobile_auth_otp import is_valid_otp, otp_encrypt_api_key
 | 
			
		||||
from zerver.lib.request import REQ, has_request_variables, JsonableError
 | 
			
		||||
from zerver.lib.response import json_success, json_error
 | 
			
		||||
from zerver.lib.utils import get_subdomain, is_subdomain_root_or_alias
 | 
			
		||||
from zerver.lib.subdomains import get_subdomain, is_subdomain_root_or_alias
 | 
			
		||||
from zerver.lib.validator import validate_login_email
 | 
			
		||||
from zerver.models import PreregistrationUser, UserProfile, remote_user_to_email, Realm, \
 | 
			
		||||
    get_realm
 | 
			
		||||
 
 | 
			
		||||
@@ -24,7 +24,8 @@ from zerver.lib.i18n import get_language_list, get_language_name, \
 | 
			
		||||
    get_language_list_for_templates
 | 
			
		||||
from zerver.lib.push_notifications import num_push_devices_for_user
 | 
			
		||||
from zerver.lib.streams import access_stream_by_name
 | 
			
		||||
from zerver.lib.utils import statsd, get_subdomain
 | 
			
		||||
from zerver.lib.subdomains import get_subdomain
 | 
			
		||||
from zerver.lib.utils import statsd
 | 
			
		||||
 | 
			
		||||
import calendar
 | 
			
		||||
import datetime
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@ import ujson
 | 
			
		||||
from zerver.decorator import has_request_variables, REQ
 | 
			
		||||
from zerver.lib import bugdown
 | 
			
		||||
from zerver.lib.integrations import CATEGORIES, INTEGRATIONS, HUBOT_LOZENGES
 | 
			
		||||
from zerver.lib.utils import get_subdomain
 | 
			
		||||
from zerver.lib.subdomains import get_subdomain
 | 
			
		||||
from zerver.templatetags.app_filters import render_markdown_path
 | 
			
		||||
 | 
			
		||||
def add_api_uri_context(context, request):
 | 
			
		||||
 
 | 
			
		||||
@@ -29,7 +29,7 @@ from zerver.decorator import require_post, has_request_variables, \
 | 
			
		||||
from zerver.lib.onboarding import send_initial_pms, setup_initial_streams, \
 | 
			
		||||
    setup_initial_private_stream, send_initial_realm_messages
 | 
			
		||||
from zerver.lib.response import json_success
 | 
			
		||||
from zerver.lib.utils import get_subdomain
 | 
			
		||||
from zerver.lib.subdomains import get_subdomain
 | 
			
		||||
from zerver.lib.timezone import get_all_timezones
 | 
			
		||||
from zproject.backends import password_auth_enabled
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,7 @@ from social_core.exceptions import AuthFailed, SocialAuthBaseException
 | 
			
		||||
from django.contrib.auth import authenticate
 | 
			
		||||
from zerver.lib.users import check_full_name
 | 
			
		||||
from zerver.lib.request import JsonableError
 | 
			
		||||
from zerver.lib.utils import check_subdomain, get_subdomain
 | 
			
		||||
from zerver.lib.subdomains import check_subdomain, get_subdomain
 | 
			
		||||
 | 
			
		||||
from social_django.models import DjangoStorage
 | 
			
		||||
from social_django.strategy import DjangoStrategy
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user