mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-03 21:43:21 +00:00 
			
		
		
		
	Compare commits
	
		
			4 Commits
		
	
	
		
			2abbc058ab
			...
			2.1.1
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					49ff894d6a | ||
| 
						 | 
					f3e75b6b5f | ||
| 
						 | 
					6b9f37dc8f | ||
| 
						 | 
					cd926b8aae | 
@@ -7,6 +7,15 @@ All notable changes to the Zulip server are documented in this file.
 | 
				
			|||||||
This section lists notable unreleased changes; it is generally updated
 | 
					This section lists notable unreleased changes; it is generally updated
 | 
				
			||||||
in bursts.
 | 
					in bursts.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 2.1.1 -- 2019-12-13
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Fixed upgrading to 2.1.x with the LDAP integration enabled in a
 | 
				
			||||||
 | 
					  configuration where `AUTH_LDAP_REVERSE_EMAIL_SEARCH` is newly
 | 
				
			||||||
 | 
					  required, but is not set yet.
 | 
				
			||||||
 | 
					- Reimplemented --postgres-missing-dictionaries installer option,
 | 
				
			||||||
 | 
					  used with our new support for a DBaaS managed database.
 | 
				
			||||||
 | 
					- Improved documentation for `AUTH_LDAP_REVERSE_EMAIL_SEARCH`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### 2.1.0 -- 2019-12-12
 | 
					### 2.1.0 -- 2019-12-12
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**Highlights:**
 | 
					**Highlights:**
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -176,29 +176,33 @@ In either configuration, you will need to do the following:
 | 
				
			|||||||
   the form it needs for authentication.  There are three supported
 | 
					   the form it needs for authentication.  There are three supported
 | 
				
			||||||
   ways to set up the username and/or email mapping:
 | 
					   ways to set up the username and/or email mapping:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   (A) Using email addresses as usernames, if LDAP has each user's
 | 
					   (A) Using email addresses as Zulip usernames, if LDAP has each
 | 
				
			||||||
      email address.  To do this, just set `AUTH_LDAP_USER_SEARCH` to
 | 
					      user's email address:
 | 
				
			||||||
      query by email address.
 | 
					      * Make `AUTH_LDAP_USER_SEARCH` a query by email address.
 | 
				
			||||||
 | 
					      * Set `AUTH_LDAP_REVERSE_EMAIL_SEARCH` to the same query with
 | 
				
			||||||
 | 
					        `%(email)s` rather than `%(user)s` as the search parameter.
 | 
				
			||||||
 | 
					      * Set `AUTH_LDAP_USERNAME_ATTR` to the name of the LDAP
 | 
				
			||||||
 | 
					        attribute for the user's LDAP username in the search result
 | 
				
			||||||
 | 
					        for `AUTH_LDAP_REVERSE_EMAIL_SEARCH`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   (B) Using LDAP usernames as Zulip usernames, with email addresses
 | 
					   (B) Using LDAP usernames as Zulip usernames, with email addresses
 | 
				
			||||||
      formed consistently like `sam` -> `sam@example.com`.  To do
 | 
					      formed consistently like `sam` -> `sam@example.com`:
 | 
				
			||||||
      this, set `AUTH_LDAP_USER_SEARCH` to query by LDAP username, and
 | 
					      * Set `AUTH_LDAP_USER_SEARCH` to query by LDAP username
 | 
				
			||||||
      `LDAP_APPEND_DOMAIN = "example.com"`.
 | 
					      * Set `LDAP_APPEND_DOMAIN = "example.com"`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   (C) Using LDAP usernames as Zulip usernames, with email addresses
 | 
					   (C) Using LDAP usernames as Zulip usernames, with email addresses
 | 
				
			||||||
      taken from some other attribute in LDAP (for example, `email`).
 | 
					      taken from some other attribute in LDAP (for example, `mail`):
 | 
				
			||||||
      To do this, set `AUTH_LDAP_USER_SEARCH` to query by LDAP
 | 
					      * Set `AUTH_LDAP_USER_SEARCH` to query by LDAP username
 | 
				
			||||||
      username, and `LDAP_EMAIL_ATTR = "email"`.
 | 
					      * Set `LDAP_EMAIL_ATTR = "mail"`.
 | 
				
			||||||
 | 
					      * Set `AUTH_LDAP_REVERSE_EMAIL_SEARCH` to a query that will find
 | 
				
			||||||
1. In configurations (A) and (C), you need to tell Zulip how to look
 | 
					        an LDAP user given their email address (i.e. a search by
 | 
				
			||||||
   up a user's LDAP data given their user's email address:
 | 
					        `LDAP_EMAIL_ATTR`).  For example:
 | 
				
			||||||
 | 
					        ```
 | 
				
			||||||
   * Set `AUTH_LDAP_REVERSE_EMAIL_SEARCH` to a query that will find an
 | 
					        AUTH_LDAP_REVERSE_EMAIL_SEARCH = LDAPSearch("ou=users,dc=example,dc=com",
 | 
				
			||||||
   LDAP user given their email address.  Generally, this will be
 | 
					                                                    ldap.SCOPE_SUBTREE, "(mail=%(email)s)")
 | 
				
			||||||
   `AUTH_LDAP_USER_SEARCH` in configuration (A) or a search by
 | 
					        ```
 | 
				
			||||||
   `LDAP_EMAIL_ATTR` in configuration (C).
 | 
					      * Set `AUTH_LDAP_USERNAME_ATTR` to the name of the LDAP
 | 
				
			||||||
   * Set `AUTH_LDAP_USERNAME_ATTR` to the name of the LDAP attribute
 | 
					        attribute for the user's LDAP username in that search result.
 | 
				
			||||||
   for the user's LDAP username in that search result.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
You can quickly test whether your configuration works by running:
 | 
					You can quickly test whether your configuration works by running:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -210,24 +214,29 @@ from the root of your Zulip installation.  If your configuration is
 | 
				
			|||||||
working, that will output the full name for your user (and that user's
 | 
					working, that will output the full name for your user (and that user's
 | 
				
			||||||
email address, if it isn't the same as the "Zulip username").
 | 
					email address, if it isn't the same as the "Zulip username").
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**Active Directory**: For Active Directory, one typically sets
 | 
					**Active Directory**: Most Active Directory installations will use one
 | 
				
			||||||
  `AUTH_LDAP_USER_SEARCH` to one of:
 | 
					of the following configurations:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* To access by Active Directory username:
 | 
					* To access by Active Directory username:
 | 
				
			||||||
    ```
 | 
					    ```
 | 
				
			||||||
    AUTH_LDAP_USER_SEARCH = LDAPSearch("ou=users,dc=example,dc=com",
 | 
					    AUTH_LDAP_USER_SEARCH = LDAPSearch("ou=users,dc=example,dc=com",
 | 
				
			||||||
                                       ldap.SCOPE_SUBTREE, "(sAMAccountName=%(user)s)")
 | 
					                                       ldap.SCOPE_SUBTREE, "(sAMAccountName=%(user)s)")
 | 
				
			||||||
 | 
					    AUTH_LDAP_REVERSE_EMAIL_SEARCH = LDAPSearch("ou=users,dc=example,dc=com",
 | 
				
			||||||
 | 
					                                       ldap.SCOPE_SUBTREE, "(mail=%(email)s)")
 | 
				
			||||||
    ```
 | 
					    ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* To access by Active Directory email address:
 | 
					* To access by Active Directory email address:
 | 
				
			||||||
    ```
 | 
					    ```
 | 
				
			||||||
    AUTH_LDAP_USER_SEARCH = LDAPSearch("ou=users,dc=example,dc=com",
 | 
					    AUTH_LDAP_USER_SEARCH = LDAPSearch("ou=users,dc=example,dc=com",
 | 
				
			||||||
                                       ldap.SCOPE_SUBTREE, "(mail=%(user)s)")
 | 
					                                       ldap.SCOPE_SUBTREE, "(mail=%(user)s)")
 | 
				
			||||||
 | 
					    AUTH_LDAP_REVERSE_EMAIL_SEARCH = LDAPSearch("ou=users,dc=example,dc=com",
 | 
				
			||||||
 | 
					                                                ldap.SCOPE_SUBTREE, "(mail=%(email)s)")
 | 
				
			||||||
    ```
 | 
					    ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**If you are using LDAP for authentication**: you will need to enable
 | 
					**If you are using LDAP for authentication**: you will need to enable
 | 
				
			||||||
the `zproject.backends.ZulipLDAPAuthBackend` auth backend, in
 | 
					the `zproject.backends.ZulipLDAPAuthBackend` auth backend, in
 | 
				
			||||||
`AUTHENTICATION_BACKENDS` in `/etc/zulip/settings.py`.  After doing
 | 
					`AUTHENTICATION_BACKENDS` in `/etc/zulip/settings.py`.  After doing so
 | 
				
			||||||
so (and as always [restarting the Zulip server](settings.md) to ensure
 | 
					(and as always [restarting the Zulip server](settings.md) to ensure
 | 
				
			||||||
your settings changes take effect), you should be able to log into
 | 
					your settings changes take effect), you should be able to log into
 | 
				
			||||||
Zulip by entering your email address and LDAP password on the Zulip
 | 
					Zulip by entering your email address and LDAP password on the Zulip
 | 
				
			||||||
login form.
 | 
					login form.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -134,14 +134,11 @@ follows:
 | 
				
			|||||||
postgres_password = abcd1234
 | 
					postgres_password = abcd1234
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Now complete the installation by running the following command to ask
 | 
					Now complete the installation by running the following commands.
 | 
				
			||||||
the Zulip installer to initialize the postgres database. (Note: The
 | 
					 | 
				
			||||||
options are different from before).
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
./zulip-server-*/scripts/setup/install --certbot \
 | 
					# Ask Zulip installer to initialize the postgres database.
 | 
				
			||||||
    --email=YOUR_EMAIL --hostname=YOUR_HOSTNAME \
 | 
					su zulip -c '/home/zulip/deployments/current/scripts/setup/initialize-database'
 | 
				
			||||||
    --remote-postgres --postgres-missing-dictionaries
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
# And then generate a realm creation link:
 | 
					# And then generate a realm creation link:
 | 
				
			||||||
su zulip -c '/home/zulip/deployments/current/manage.py generate_realm_creation_link'
 | 
					su zulip -c '/home/zulip/deployments/current/manage.py generate_realm_creation_link'
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -280,7 +280,7 @@ if [ "$DEPLOYMENT_TYPE" = "dockervoyager" ]; then
 | 
				
			|||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if [ -n "$POSTGRES_MISSING_DICTIONARIES" ]; then
 | 
					if [ -n "$POSTGRES_MISSING_DICTIONARIES" ]; then
 | 
				
			||||||
    export POSTGRES_MISSING_DICTIONARIES="true"
 | 
					    crudini --set /etc/zulip/zulip.conf postgresql missing_dictionaries true
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if [ -n "$REMOTE_POSTGRES" ]; then
 | 
					if [ -n "$REMOTE_POSTGRES" ]; then
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
import os
 | 
					import os
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ZULIP_VERSION = "2.1.0"
 | 
					ZULIP_VERSION = "2.1.1"
 | 
				
			||||||
# Add information on number of commits and commit hash to version, if available
 | 
					# Add information on number of commits and commit hash to version, if available
 | 
				
			||||||
zulip_git_version_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'zulip-git-version')
 | 
					zulip_git_version_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'zulip-git-version')
 | 
				
			||||||
if os.path.exists(zulip_git_version_file):
 | 
					if os.path.exists(zulip_git_version_file):
 | 
				
			||||||
@@ -10,7 +10,7 @@ if os.path.exists(zulip_git_version_file):
 | 
				
			|||||||
            ZULIP_VERSION = version
 | 
					            ZULIP_VERSION = version
 | 
				
			||||||
 | 
					
 | 
				
			||||||
LATEST_MAJOR_VERSION = "2.1"
 | 
					LATEST_MAJOR_VERSION = "2.1"
 | 
				
			||||||
LATEST_RELEASE_VERSION = "2.1.0"
 | 
					LATEST_RELEASE_VERSION = "2.1.1"
 | 
				
			||||||
LATEST_RELEASE_ANNOUNCEMENT = "https://blog.zulip.org/2019/12/13/zulip-2-1-released/"
 | 
					LATEST_RELEASE_ANNOUNCEMENT = "https://blog.zulip.org/2019/12/13/zulip-2-1-released/"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Bump the minor PROVISION_VERSION to indicate that folks should provision
 | 
					# Bump the minor PROVISION_VERSION to indicate that folks should provision
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,5 @@
 | 
				
			|||||||
# -*- coding: utf-8 -*-
 | 
					# -*- coding: utf-8 -*-
 | 
				
			||||||
# Generated by Django 1.11.2 on 2017-06-22 10:22
 | 
					# Generated by Django 1.11.2 on 2017-06-22 10:22
 | 
				
			||||||
import os
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
import bitfield.models
 | 
					import bitfield.models
 | 
				
			||||||
import django.contrib.auth.models
 | 
					import django.contrib.auth.models
 | 
				
			||||||
@@ -37,12 +36,11 @@ class Migration(migrations.Migration):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    initial = True
 | 
					    initial = True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    zulip_postgres_dictionaries_unavailable = os.getenv("POSTGRES_MISSING_DICTIONARIES", False)
 | 
					 | 
				
			||||||
    dependencies = [
 | 
					    dependencies = [
 | 
				
			||||||
        ('auth', '0001_initial'),
 | 
					        ('auth', '0001_initial'),
 | 
				
			||||||
    ]
 | 
					    ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if zulip_postgres_dictionaries_unavailable:
 | 
					    if settings.POSTGRES_MISSING_DICTIONARIES:
 | 
				
			||||||
        fts_sql = """
 | 
					        fts_sql = """
 | 
				
			||||||
CREATE TEXT SEARCH CONFIGURATION zulip.english_us_search (COPY=pg_catalog.english);
 | 
					CREATE TEXT SEARCH CONFIGURATION zulip.english_us_search (COPY=pg_catalog.english);
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,7 +3,6 @@
 | 
				
			|||||||
from __future__ import unicode_literals
 | 
					from __future__ import unicode_literals
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from django.conf import settings
 | 
					from django.conf import settings
 | 
				
			||||||
from django.contrib.auth import get_backends
 | 
					 | 
				
			||||||
from django.db import migrations
 | 
					from django.db import migrations
 | 
				
			||||||
from django.db.backends.postgresql_psycopg2.schema import DatabaseSchemaEditor
 | 
					from django.db.backends.postgresql_psycopg2.schema import DatabaseSchemaEditor
 | 
				
			||||||
from django.db.migrations.state import StateApps
 | 
					from django.db.migrations.state import StateApps
 | 
				
			||||||
@@ -13,7 +12,6 @@ from django.utils.timezone import now as timezone_now
 | 
				
			|||||||
from zerver.lib.cache import cache_delete, user_profile_by_api_key_cache_key
 | 
					from zerver.lib.cache import cache_delete, user_profile_by_api_key_cache_key
 | 
				
			||||||
from zerver.lib.queue import queue_json_publish
 | 
					from zerver.lib.queue import queue_json_publish
 | 
				
			||||||
from zerver.lib.utils import generate_api_key
 | 
					from zerver.lib.utils import generate_api_key
 | 
				
			||||||
from zproject.backends import EmailAuthBackend
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
from typing import Any, Set, Union
 | 
					from typing import Any, Set, Union
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -159,8 +157,7 @@ def ensure_no_empty_passwords(apps: StateApps, schema_editor: DatabaseSchemaEdit
 | 
				
			|||||||
    # If Zulip's built-in password authentication is not enabled on
 | 
					    # If Zulip's built-in password authentication is not enabled on
 | 
				
			||||||
    # the server level, then we plan to skip resetting any users' API
 | 
					    # the server level, then we plan to skip resetting any users' API
 | 
				
			||||||
    # keys, since the bug requires EmailAuthBackend.
 | 
					    # keys, since the bug requires EmailAuthBackend.
 | 
				
			||||||
    email_auth_enabled = any(isinstance(backend, EmailAuthBackend)
 | 
					    email_auth_enabled = 'zproject.backends.EmailAuthBackend' in settings.AUTHENTICATION_BACKENDS
 | 
				
			||||||
                             for backend in get_backends())
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # A quick note: This query could in theory exclude users with
 | 
					    # A quick note: This query could in theory exclude users with
 | 
				
			||||||
    # is_active=False, is_bot=True, or realm__deactivated=True here to
 | 
					    # is_active=False, is_bot=True, or realm__deactivated=True here to
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -293,6 +293,8 @@ elif REMOTE_POSTGRES_HOST != '':
 | 
				
			|||||||
    else:
 | 
					    else:
 | 
				
			||||||
        DATABASES['default']['OPTIONS']['sslmode'] = 'verify-full'
 | 
					        DATABASES['default']['OPTIONS']['sslmode'] = 'verify-full'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					POSTGRES_MISSING_DICTIONARIES = bool(get_config('postgresql', 'missing_dictionaries', None))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
########################################################################
 | 
					########################################################################
 | 
				
			||||||
# RABBITMQ CONFIGURATION
 | 
					# RABBITMQ CONFIGURATION
 | 
				
			||||||
########################################################################
 | 
					########################################################################
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user