mirror of
https://github.com/zulip/zulip.git
synced 2025-11-03 21:43:21 +00:00
This adds support for running a Zulip production server with each realm on its own unique subdomain, e.g. https://realm_name.example.com. This patch includes a ton of important features: * Configuring the Zulip sesion middleware to issue cookier correctly for the subdomains case. * Throwing an error if the user tries to visit an invalid subdomain. * Runs a portion of the Casper tests with REALMS_HAVE_SUBDOMAINS enabled to test the subdomain signup process. * Updating our integrations documentation to refer to the current subdomain. * Enforces that users can only login to the subdomain of their realm (but does not restrict the API; that will be tightened in a future commit). Note that toggling settings.REALMS_HAVE_SUBDOMAINS on a live server is not supported without manual intervention (the main problem will be adding "subdomain" values for all the existing realms). [substantially modified by tabbott as part of merging]
37 lines
1.1 KiB
Python
37 lines
1.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
from __future__ import unicode_literals
|
|
|
|
from django.db import models, migrations
|
|
from django.db.backends.postgresql_psycopg2.schema import DatabaseSchemaEditor
|
|
from django.db.migrations.state import StateApps
|
|
from django.conf import settings
|
|
from django.core.exceptions import ObjectDoesNotExist
|
|
|
|
def set_subdomain_of_default_realm(apps, schema_editor):
|
|
# type: (StateApps, DatabaseSchemaEditor) -> None
|
|
if settings.DEVELOPMENT:
|
|
Realm = apps.get_model('zerver', 'Realm')
|
|
try:
|
|
default_realm = Realm.objects.get(domain="zulip.com")
|
|
except ObjectDoesNotExist:
|
|
default_realm = None
|
|
|
|
if default_realm is not None:
|
|
default_realm.subdomain = "zulip"
|
|
default_realm.save()
|
|
|
|
class Migration(migrations.Migration):
|
|
|
|
dependencies = [
|
|
('zerver', '0028_userprofile_tos_version'),
|
|
]
|
|
|
|
operations = [
|
|
migrations.AddField(
|
|
model_name='realm',
|
|
name='subdomain',
|
|
field=models.CharField(max_length=40, unique=True, null=True),
|
|
),
|
|
migrations.RunPython(set_subdomain_of_default_realm)
|
|
]
|