mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-03 21:43:21 +00:00 
			
		
		
		
	Various pieces of our thumbor-based thumbnailing system were already merged; this adds the remaining pieces required for it to work: * a THUMBOR_URL Django setting that controls whether thumbor is enabled on the Zulip server (and if so, where thumbor is hosted). * Replaces the overly complicated prototype cryptography logic * Adds a /thumbnail endpoint (supported both on web and mobile) for accessing thumbnails in messages, designed to support hosting both external URLs as well as uploaded files (and applying Zulip's security model for access to thumbnails of uploaded files). * Modifies bugdown to, when THUMBOR_URL is set, render images with the `src` attribute pointing /thumbnail (to provide a small thumbnail for the image), along with adding a "data-original" attribute that can be used to access the "original/full" size version of the image. There are a few things that don't work quite yet: * The S3 backend support is incomplete and doesn't work yet. * The error pages for unauthorized access are ugly. * We might want to rename data-original and /thumbnail?size=original to use some other name, like "full", that better reflects the fact that we're potentially not serving the original image URL.
		
			
				
	
	
		
			159 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			159 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
import os
 | 
						|
# test_settings.py works differently from
 | 
						|
# dev_settings.py/prod_settings.py; it actually is directly referenced
 | 
						|
# by the test suite as DJANGO_SETTINGS_MODULE and imports settings.py
 | 
						|
# directly and then hacks up the values that are different for the
 | 
						|
# test suite.  As will be explained, this is kinda messy and probably
 | 
						|
# we'd be better off switching it to work more like dev_settings.py,
 | 
						|
# but for now, this is what we have.
 | 
						|
#
 | 
						|
# An important downside of the test_settings.py approach is that if we
 | 
						|
# want to change any settings that settings.py then computes
 | 
						|
# additional settings from (e.g. EXTERNAL_HOST), we need to do a hack
 | 
						|
# like the below line(s) before we import from settings, for
 | 
						|
# transmitting the value of EXTERNAL_HOST to dev_settings.py so that
 | 
						|
# it can be set there, at the right place in the settings.py flow.
 | 
						|
# Ick.
 | 
						|
if os.getenv("EXTERNAL_HOST") is None:
 | 
						|
    os.environ["EXTERNAL_HOST"] = "testserver"
 | 
						|
from .settings import *
 | 
						|
 | 
						|
# Clear out the REALM_HOSTS set in dev_settings.py
 | 
						|
REALM_HOSTS = {}
 | 
						|
 | 
						|
# Used to clone DBs in backend tests.
 | 
						|
BACKEND_DATABASE_TEMPLATE = 'zulip_test_template'
 | 
						|
 | 
						|
DATABASES["default"] = {
 | 
						|
    "NAME": os.getenv("ZULIP_DB_NAME", "zulip_test"),
 | 
						|
    "USER": "zulip_test",
 | 
						|
    "PASSWORD": LOCAL_DATABASE_PASSWORD,
 | 
						|
    "HOST": "localhost",
 | 
						|
    "SCHEMA": "zulip",
 | 
						|
    "ENGINE": "django.db.backends.postgresql_psycopg2",
 | 
						|
    "TEST_NAME": "django_zulip_tests",
 | 
						|
    "OPTIONS": {"connection_factory": TimeTrackingConnection},
 | 
						|
}
 | 
						|
 | 
						|
if "TORNADO_SERVER" in os.environ:
 | 
						|
    # This covers the Casper test suite case
 | 
						|
    TORNADO_SERVER = os.environ["TORNADO_SERVER"]
 | 
						|
else:
 | 
						|
    # This covers the backend test suite case
 | 
						|
    TORNADO_SERVER = None
 | 
						|
    CAMO_URI = 'https://external-content.zulipcdn.net/'
 | 
						|
    CAMO_KEY = 'dummy'
 | 
						|
 | 
						|
if "CASPER_TESTS" in os.environ:
 | 
						|
    CASPER_TESTS = True
 | 
						|
 | 
						|
# Decrease the get_updates timeout to 1 second.
 | 
						|
# This allows CasperJS to proceed quickly to the next test step.
 | 
						|
POLL_TIMEOUT = 1000
 | 
						|
 | 
						|
# Don't use the real message log for tests
 | 
						|
EVENT_LOG_DIR = '/tmp/zulip-test-event-log'
 | 
						|
 | 
						|
# Stores the messages in `django.core.mail.outbox` rather than sending them.
 | 
						|
EMAIL_BACKEND = 'django.core.mail.backends.locmem.EmailBackend'
 | 
						|
 | 
						|
# The test suite uses EmailAuthBackend
 | 
						|
AUTHENTICATION_BACKENDS += ('zproject.backends.EmailAuthBackend',)
 | 
						|
 | 
						|
# Configure Google Oauth2
 | 
						|
GOOGLE_OAUTH2_CLIENT_ID = "test_client_id"
 | 
						|
 | 
						|
# Makes testing LDAP backend require less mocking
 | 
						|
AUTH_LDAP_ALWAYS_UPDATE_USER = False
 | 
						|
 | 
						|
TEST_SUITE = True
 | 
						|
RATE_LIMITING = False
 | 
						|
# Don't use rabbitmq from the test suite -- the user_profile_ids for
 | 
						|
# any generated queue elements won't match those being used by the
 | 
						|
# real app.
 | 
						|
USING_RABBITMQ = False
 | 
						|
 | 
						|
# Disable the tutorial because it confuses the client tests.
 | 
						|
TUTORIAL_ENABLED = False
 | 
						|
 | 
						|
# Disable use of memcached for caching
 | 
						|
CACHES['database'] = {
 | 
						|
    'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
 | 
						|
    'LOCATION': 'zulip-database-test-cache',
 | 
						|
    'TIMEOUT': 3600,
 | 
						|
    'CONN_MAX_AGE': 600,
 | 
						|
    'OPTIONS': {
 | 
						|
        'MAX_ENTRIES': 100000
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
# Disable caching on sessions to make query counts consistent
 | 
						|
SESSION_ENGINE = "django.contrib.sessions.backends.db"
 | 
						|
 | 
						|
# Use production config from Webpack in tests
 | 
						|
if CASPER_TESTS:
 | 
						|
    WEBPACK_FILE = 'webpack-stats-production.json'
 | 
						|
else:
 | 
						|
    WEBPACK_FILE = os.path.join('var', 'webpack-stats-test.json')
 | 
						|
WEBPACK_LOADER['DEFAULT']['STATS_FILE'] = os.path.join(DEPLOY_ROOT, WEBPACK_FILE)
 | 
						|
 | 
						|
# Don't auto-restart Tornado server during automated tests
 | 
						|
AUTORELOAD = False
 | 
						|
 | 
						|
if not CASPER_TESTS:
 | 
						|
    # Use local memory cache for backend tests.
 | 
						|
    CACHES['default'] = {
 | 
						|
        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'
 | 
						|
    }
 | 
						|
 | 
						|
    def set_loglevel(logger_name, level) -> None:
 | 
						|
        LOGGING['loggers'].setdefault(logger_name, {})['level'] = level
 | 
						|
    set_loglevel('zulip.requests', 'CRITICAL')
 | 
						|
    set_loglevel('zulip.management', 'CRITICAL')
 | 
						|
    set_loglevel('django.request', 'ERROR')
 | 
						|
    set_loglevel('fakeldap', 'ERROR')
 | 
						|
    set_loglevel('zulip.send_email', 'ERROR')
 | 
						|
    set_loglevel('zerver.lib.digest', 'ERROR')
 | 
						|
    set_loglevel('zerver.lib.email_mirror', 'ERROR')
 | 
						|
    set_loglevel('zerver.worker.queue_processors', 'WARNING')
 | 
						|
 | 
						|
# Enable file:/// hyperlink support by default in tests
 | 
						|
ENABLE_FILE_LINKS = True
 | 
						|
 | 
						|
 | 
						|
LOCAL_UPLOADS_DIR = 'var/test_uploads'
 | 
						|
 | 
						|
S3_KEY = 'test-key'
 | 
						|
S3_SECRET_KEY = 'test-secret-key'
 | 
						|
S3_AUTH_UPLOADS_BUCKET = 'test-authed-bucket'
 | 
						|
S3_AVATAR_BUCKET = 'test-avatar-bucket'
 | 
						|
 | 
						|
# Test Custom TOS template rendering
 | 
						|
TERMS_OF_SERVICE = 'corporate/terms.md'
 | 
						|
 | 
						|
INLINE_URL_EMBED_PREVIEW = False
 | 
						|
 | 
						|
HOME_NOT_LOGGED_IN = '/login'
 | 
						|
LOGIN_URL = '/accounts/login'
 | 
						|
 | 
						|
# By default will not send emails when login occurs.
 | 
						|
# Explicity set this to True within tests that must have this on.
 | 
						|
SEND_LOGIN_EMAILS = False
 | 
						|
 | 
						|
GOOGLE_OAUTH2_CLIENT_ID = "id"
 | 
						|
GOOGLE_OAUTH2_CLIENT_SECRET = "secret"
 | 
						|
 | 
						|
SOCIAL_AUTH_GITHUB_KEY = "key"
 | 
						|
SOCIAL_AUTH_GITHUB_SECRET = "secret"
 | 
						|
SOCIAL_AUTH_SUBDOMAIN = 'www'
 | 
						|
 | 
						|
# By default two factor authentication is disabled in tests.
 | 
						|
# Explicitly set this to True within tests that must have this on.
 | 
						|
TWO_FACTOR_AUTHENTICATION_ENABLED = False
 | 
						|
PUSH_NOTIFICATION_BOUNCER_URL = None
 | 
						|
 | 
						|
# Disable messages from slow queries as they affect backend tests.
 | 
						|
SLOW_QUERY_MESSAGES_ENABLED = False
 | 
						|
 | 
						|
THUMBOR_URL = 'http://127.0.0.1:9995'
 |