2020-06-27 02:37:49 +02:00
|
|
|
import os
|
2022-07-27 23:33:49 +02:00
|
|
|
from email.headerregistry import Address
|
2022-11-05 23:55:11 +01:00
|
|
|
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple
|
2019-11-13 01:22:15 +01:00
|
|
|
|
2020-06-27 02:37:49 +02:00
|
|
|
from scripts.lib.zulip_tools import deport
|
2022-09-24 06:44:08 +02:00
|
|
|
from zproject.settings_types import JwtAuthKey, OIDCIdPConfigDict, SAMLIdPConfigDict
|
2020-06-27 02:37:49 +02:00
|
|
|
|
|
|
|
from .config import DEVELOPMENT, PRODUCTION, get_secret
|
|
|
|
|
2019-11-13 01:22:15 +01:00
|
|
|
if TYPE_CHECKING:
|
|
|
|
from django_auth_ldap.config import LDAPSearch
|
|
|
|
|
|
|
|
if PRODUCTION:
|
|
|
|
from .prod_settings import EXTERNAL_HOST, ZULIP_ADMINISTRATOR
|
|
|
|
else:
|
|
|
|
from .dev_settings import EXTERNAL_HOST, ZULIP_ADMINISTRATOR
|
|
|
|
|
2020-06-08 06:58:51 +02:00
|
|
|
DEBUG = DEVELOPMENT
|
|
|
|
|
2020-06-27 02:37:49 +02:00
|
|
|
EXTERNAL_HOST_WITHOUT_PORT = deport(EXTERNAL_HOST)
|
|
|
|
|
2019-11-13 01:22:15 +01:00
|
|
|
# These settings are intended for the server admin to set. We document them in
|
|
|
|
# prod_settings_template.py, and in the initial /etc/zulip/settings.py on a new
|
|
|
|
# install of the Zulip server.
|
|
|
|
|
2020-06-27 02:37:49 +02:00
|
|
|
# Extra HTTP "Host" values to allow (standard ones added in computed_settings.py)
|
python: Convert assignment type annotations to Python 3.6 style.
This commit was split by tabbott; this piece covers the vast majority
of files in Zulip, but excludes scripts/, tools/, and puppet/ to help
ensure we at least show the right error messages for Xenial systems.
We can likely further refine the remaining pieces with some testing.
Generated by com2ann, with whitespace fixes and various manual fixes
for runtime issues:
- invoiced_through: Optional[LicenseLedger] = models.ForeignKey(
+ invoiced_through: Optional["LicenseLedger"] = models.ForeignKey(
-_apns_client: Optional[APNsClient] = None
+_apns_client: Optional["APNsClient"] = None
- notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- signup_notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ signup_notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- author: Optional[UserProfile] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
+ author: Optional["UserProfile"] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
- bot_owner: Optional[UserProfile] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
+ bot_owner: Optional["UserProfile"] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
- default_sending_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
- default_events_register_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_sending_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_events_register_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
-descriptors_by_handler_id: Dict[int, ClientDescriptor] = {}
+descriptors_by_handler_id: Dict[int, "ClientDescriptor"] = {}
-worker_classes: Dict[str, Type[QueueProcessingWorker]] = {}
-queues: Dict[str, Dict[str, Type[QueueProcessingWorker]]] = {}
+worker_classes: Dict[str, Type["QueueProcessingWorker"]] = {}
+queues: Dict[str, Dict[str, Type["QueueProcessingWorker"]]] = {}
-AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional[LDAPSearch] = None
+AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional["LDAPSearch"] = None
Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
2020-04-22 01:09:50 +02:00
|
|
|
ALLOWED_HOSTS: List[str] = []
|
2019-11-13 01:22:15 +01:00
|
|
|
|
|
|
|
# Basic email settings
|
2022-07-27 23:33:49 +02:00
|
|
|
NOREPLY_EMAIL_ADDRESS = Address(username="noreply", domain=EXTERNAL_HOST_WITHOUT_PORT).addr_spec
|
2019-11-13 01:22:15 +01:00
|
|
|
ADD_TOKENS_TO_NOREPLY_ADDRESS = True
|
2022-07-27 23:33:49 +02:00
|
|
|
TOKENIZED_NOREPLY_EMAIL_ADDRESS = Address(
|
|
|
|
username="noreply-{token}", domain=EXTERNAL_HOST_WITHOUT_PORT
|
|
|
|
).addr_spec
|
2021-02-12 08:20:45 +01:00
|
|
|
PHYSICAL_ADDRESS = ""
|
2020-06-27 02:37:49 +02:00
|
|
|
FAKE_EMAIL_DOMAIN = EXTERNAL_HOST_WITHOUT_PORT
|
2019-11-13 01:22:15 +01:00
|
|
|
|
|
|
|
# SMTP settings
|
python: Convert assignment type annotations to Python 3.6 style.
This commit was split by tabbott; this piece covers the vast majority
of files in Zulip, but excludes scripts/, tools/, and puppet/ to help
ensure we at least show the right error messages for Xenial systems.
We can likely further refine the remaining pieces with some testing.
Generated by com2ann, with whitespace fixes and various manual fixes
for runtime issues:
- invoiced_through: Optional[LicenseLedger] = models.ForeignKey(
+ invoiced_through: Optional["LicenseLedger"] = models.ForeignKey(
-_apns_client: Optional[APNsClient] = None
+_apns_client: Optional["APNsClient"] = None
- notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- signup_notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ signup_notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- author: Optional[UserProfile] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
+ author: Optional["UserProfile"] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
- bot_owner: Optional[UserProfile] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
+ bot_owner: Optional["UserProfile"] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
- default_sending_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
- default_events_register_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_sending_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_events_register_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
-descriptors_by_handler_id: Dict[int, ClientDescriptor] = {}
+descriptors_by_handler_id: Dict[int, "ClientDescriptor"] = {}
-worker_classes: Dict[str, Type[QueueProcessingWorker]] = {}
-queues: Dict[str, Dict[str, Type[QueueProcessingWorker]]] = {}
+worker_classes: Dict[str, Type["QueueProcessingWorker"]] = {}
+queues: Dict[str, Dict[str, Type["QueueProcessingWorker"]]] = {}
-AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional[LDAPSearch] = None
+AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional["LDAPSearch"] = None
Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
2020-04-22 01:09:50 +02:00
|
|
|
EMAIL_HOST: Optional[str] = None
|
2019-11-13 01:22:15 +01:00
|
|
|
# Other settings, like EMAIL_HOST_USER, EMAIL_PORT, and EMAIL_USE_TLS,
|
|
|
|
# we leave up to Django's defaults.
|
|
|
|
|
|
|
|
# LDAP auth
|
|
|
|
AUTH_LDAP_SERVER_URI = ""
|
2021-01-13 02:05:30 +01:00
|
|
|
AUTH_LDAP_BIND_DN = ""
|
|
|
|
AUTH_LDAP_USER_SEARCH: Optional["LDAPSearch"] = None
|
2020-07-07 02:05:02 +02:00
|
|
|
LDAP_APPEND_DOMAIN: Optional[str] = None
|
python: Convert assignment type annotations to Python 3.6 style.
This commit was split by tabbott; this piece covers the vast majority
of files in Zulip, but excludes scripts/, tools/, and puppet/ to help
ensure we at least show the right error messages for Xenial systems.
We can likely further refine the remaining pieces with some testing.
Generated by com2ann, with whitespace fixes and various manual fixes
for runtime issues:
- invoiced_through: Optional[LicenseLedger] = models.ForeignKey(
+ invoiced_through: Optional["LicenseLedger"] = models.ForeignKey(
-_apns_client: Optional[APNsClient] = None
+_apns_client: Optional["APNsClient"] = None
- notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- signup_notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ signup_notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- author: Optional[UserProfile] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
+ author: Optional["UserProfile"] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
- bot_owner: Optional[UserProfile] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
+ bot_owner: Optional["UserProfile"] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
- default_sending_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
- default_events_register_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_sending_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_events_register_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
-descriptors_by_handler_id: Dict[int, ClientDescriptor] = {}
+descriptors_by_handler_id: Dict[int, "ClientDescriptor"] = {}
-worker_classes: Dict[str, Type[QueueProcessingWorker]] = {}
-queues: Dict[str, Dict[str, Type[QueueProcessingWorker]]] = {}
+worker_classes: Dict[str, Type["QueueProcessingWorker"]] = {}
+queues: Dict[str, Dict[str, Type["QueueProcessingWorker"]]] = {}
-AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional[LDAPSearch] = None
+AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional["LDAPSearch"] = None
Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
2020-04-22 01:09:50 +02:00
|
|
|
LDAP_EMAIL_ATTR: Optional[str] = None
|
|
|
|
AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional["LDAPSearch"] = None
|
2021-01-13 02:05:30 +01:00
|
|
|
AUTH_LDAP_USERNAME_ATTR: Optional[str] = None
|
|
|
|
# AUTH_LDAP_USER_ATTR_MAP is uncommented in prod_settings_template.py,
|
|
|
|
# so the value here mainly serves to help document the default.
|
|
|
|
AUTH_LDAP_USER_ATTR_MAP: Dict[str, str] = {
|
|
|
|
"full_name": "cn",
|
|
|
|
}
|
|
|
|
# Automatically deactivate users not found by the AUTH_LDAP_USER_SEARCH query.
|
|
|
|
LDAP_DEACTIVATE_NON_MATCHING_USERS: Optional[bool] = None
|
2020-01-03 07:07:51 +01:00
|
|
|
# AUTH_LDAP_CONNECTION_OPTIONS: we set ldap.OPT_REFERRALS in settings.py if unset.
|
python: Convert assignment type annotations to Python 3.6 style.
This commit was split by tabbott; this piece covers the vast majority
of files in Zulip, but excludes scripts/, tools/, and puppet/ to help
ensure we at least show the right error messages for Xenial systems.
We can likely further refine the remaining pieces with some testing.
Generated by com2ann, with whitespace fixes and various manual fixes
for runtime issues:
- invoiced_through: Optional[LicenseLedger] = models.ForeignKey(
+ invoiced_through: Optional["LicenseLedger"] = models.ForeignKey(
-_apns_client: Optional[APNsClient] = None
+_apns_client: Optional["APNsClient"] = None
- notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- signup_notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ signup_notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- author: Optional[UserProfile] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
+ author: Optional["UserProfile"] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
- bot_owner: Optional[UserProfile] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
+ bot_owner: Optional["UserProfile"] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
- default_sending_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
- default_events_register_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_sending_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_events_register_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
-descriptors_by_handler_id: Dict[int, ClientDescriptor] = {}
+descriptors_by_handler_id: Dict[int, "ClientDescriptor"] = {}
-worker_classes: Dict[str, Type[QueueProcessingWorker]] = {}
-queues: Dict[str, Dict[str, Type[QueueProcessingWorker]]] = {}
+worker_classes: Dict[str, Type["QueueProcessingWorker"]] = {}
+queues: Dict[str, Dict[str, Type["QueueProcessingWorker"]]] = {}
-AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional[LDAPSearch] = None
+AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional["LDAPSearch"] = None
Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
2020-04-22 01:09:50 +02:00
|
|
|
AUTH_LDAP_CONNECTION_OPTIONS: Dict[int, object] = {}
|
2019-11-13 01:22:15 +01:00
|
|
|
# Disable django-auth-ldap caching, to prevent problems with OU changes.
|
|
|
|
AUTH_LDAP_CACHE_TIMEOUT = 0
|
|
|
|
# Disable syncing user on each login; Using sync_ldap_user_data cron is recommended.
|
|
|
|
AUTH_LDAP_ALWAYS_UPDATE_USER = False
|
|
|
|
# Development-only settings for fake LDAP authentication; used to
|
|
|
|
# support local development of LDAP auth without an LDAP server.
|
|
|
|
# Detailed docs in zproject/dev_settings.py.
|
python: Convert assignment type annotations to Python 3.6 style.
This commit was split by tabbott; this piece covers the vast majority
of files in Zulip, but excludes scripts/, tools/, and puppet/ to help
ensure we at least show the right error messages for Xenial systems.
We can likely further refine the remaining pieces with some testing.
Generated by com2ann, with whitespace fixes and various manual fixes
for runtime issues:
- invoiced_through: Optional[LicenseLedger] = models.ForeignKey(
+ invoiced_through: Optional["LicenseLedger"] = models.ForeignKey(
-_apns_client: Optional[APNsClient] = None
+_apns_client: Optional["APNsClient"] = None
- notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- signup_notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ signup_notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- author: Optional[UserProfile] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
+ author: Optional["UserProfile"] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
- bot_owner: Optional[UserProfile] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
+ bot_owner: Optional["UserProfile"] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
- default_sending_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
- default_events_register_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_sending_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_events_register_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
-descriptors_by_handler_id: Dict[int, ClientDescriptor] = {}
+descriptors_by_handler_id: Dict[int, "ClientDescriptor"] = {}
-worker_classes: Dict[str, Type[QueueProcessingWorker]] = {}
-queues: Dict[str, Dict[str, Type[QueueProcessingWorker]]] = {}
+worker_classes: Dict[str, Type["QueueProcessingWorker"]] = {}
+queues: Dict[str, Dict[str, Type["QueueProcessingWorker"]]] = {}
-AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional[LDAPSearch] = None
+AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional["LDAPSearch"] = None
Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
2020-04-22 01:09:50 +02:00
|
|
|
FAKE_LDAP_MODE: Optional[str] = None
|
2019-11-13 01:22:15 +01:00
|
|
|
FAKE_LDAP_NUM_USERS = 8
|
2021-08-15 18:32:51 +02:00
|
|
|
AUTH_LDAP_ADVANCED_REALM_ACCESS_CONTROL: Optional[Dict[str, Any]] = None
|
2019-11-13 01:22:15 +01:00
|
|
|
|
|
|
|
# Social auth; we support providing values for some of these
|
|
|
|
# settings in zulip-secrets.conf instead of settings.py in development.
|
2021-02-12 08:20:45 +01:00
|
|
|
SOCIAL_AUTH_GITHUB_KEY = get_secret("social_auth_github_key", development_only=True)
|
python: Convert assignment type annotations to Python 3.6 style.
This commit was split by tabbott; this piece covers the vast majority
of files in Zulip, but excludes scripts/, tools/, and puppet/ to help
ensure we at least show the right error messages for Xenial systems.
We can likely further refine the remaining pieces with some testing.
Generated by com2ann, with whitespace fixes and various manual fixes
for runtime issues:
- invoiced_through: Optional[LicenseLedger] = models.ForeignKey(
+ invoiced_through: Optional["LicenseLedger"] = models.ForeignKey(
-_apns_client: Optional[APNsClient] = None
+_apns_client: Optional["APNsClient"] = None
- notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- signup_notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ signup_notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- author: Optional[UserProfile] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
+ author: Optional["UserProfile"] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
- bot_owner: Optional[UserProfile] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
+ bot_owner: Optional["UserProfile"] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
- default_sending_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
- default_events_register_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_sending_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_events_register_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
-descriptors_by_handler_id: Dict[int, ClientDescriptor] = {}
+descriptors_by_handler_id: Dict[int, "ClientDescriptor"] = {}
-worker_classes: Dict[str, Type[QueueProcessingWorker]] = {}
-queues: Dict[str, Dict[str, Type[QueueProcessingWorker]]] = {}
+worker_classes: Dict[str, Type["QueueProcessingWorker"]] = {}
+queues: Dict[str, Dict[str, Type["QueueProcessingWorker"]]] = {}
-AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional[LDAPSearch] = None
+AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional["LDAPSearch"] = None
Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
2020-04-22 01:09:50 +02:00
|
|
|
SOCIAL_AUTH_GITHUB_ORG_NAME: Optional[str] = None
|
|
|
|
SOCIAL_AUTH_GITHUB_TEAM_ID: Optional[str] = None
|
2021-02-12 08:20:45 +01:00
|
|
|
SOCIAL_AUTH_GITLAB_KEY = get_secret("social_auth_gitlab_key", development_only=True)
|
python: Convert assignment type annotations to Python 3.6 style.
This commit was split by tabbott; this piece covers the vast majority
of files in Zulip, but excludes scripts/, tools/, and puppet/ to help
ensure we at least show the right error messages for Xenial systems.
We can likely further refine the remaining pieces with some testing.
Generated by com2ann, with whitespace fixes and various manual fixes
for runtime issues:
- invoiced_through: Optional[LicenseLedger] = models.ForeignKey(
+ invoiced_through: Optional["LicenseLedger"] = models.ForeignKey(
-_apns_client: Optional[APNsClient] = None
+_apns_client: Optional["APNsClient"] = None
- notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- signup_notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ signup_notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- author: Optional[UserProfile] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
+ author: Optional["UserProfile"] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
- bot_owner: Optional[UserProfile] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
+ bot_owner: Optional["UserProfile"] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
- default_sending_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
- default_events_register_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_sending_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_events_register_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
-descriptors_by_handler_id: Dict[int, ClientDescriptor] = {}
+descriptors_by_handler_id: Dict[int, "ClientDescriptor"] = {}
-worker_classes: Dict[str, Type[QueueProcessingWorker]] = {}
-queues: Dict[str, Dict[str, Type[QueueProcessingWorker]]] = {}
+worker_classes: Dict[str, Type["QueueProcessingWorker"]] = {}
+queues: Dict[str, Dict[str, Type["QueueProcessingWorker"]]] = {}
-AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional[LDAPSearch] = None
+AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional["LDAPSearch"] = None
Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
2020-04-22 01:09:50 +02:00
|
|
|
SOCIAL_AUTH_SUBDOMAIN: Optional[str] = None
|
2022-09-05 13:30:17 +02:00
|
|
|
SOCIAL_AUTH_AZUREAD_OAUTH2_KEY = get_secret("social_auth_azuread_oauth2_key", development_only=True)
|
2021-02-12 08:20:45 +01:00
|
|
|
SOCIAL_AUTH_GOOGLE_KEY = get_secret("social_auth_google_key", development_only=True)
|
2019-11-13 01:22:15 +01:00
|
|
|
# SAML:
|
python: Convert assignment type annotations to Python 3.6 style.
This commit was split by tabbott; this piece covers the vast majority
of files in Zulip, but excludes scripts/, tools/, and puppet/ to help
ensure we at least show the right error messages for Xenial systems.
We can likely further refine the remaining pieces with some testing.
Generated by com2ann, with whitespace fixes and various manual fixes
for runtime issues:
- invoiced_through: Optional[LicenseLedger] = models.ForeignKey(
+ invoiced_through: Optional["LicenseLedger"] = models.ForeignKey(
-_apns_client: Optional[APNsClient] = None
+_apns_client: Optional["APNsClient"] = None
- notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- signup_notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ signup_notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- author: Optional[UserProfile] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
+ author: Optional["UserProfile"] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
- bot_owner: Optional[UserProfile] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
+ bot_owner: Optional["UserProfile"] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
- default_sending_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
- default_events_register_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_sending_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_events_register_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
-descriptors_by_handler_id: Dict[int, ClientDescriptor] = {}
+descriptors_by_handler_id: Dict[int, "ClientDescriptor"] = {}
-worker_classes: Dict[str, Type[QueueProcessingWorker]] = {}
-queues: Dict[str, Dict[str, Type[QueueProcessingWorker]]] = {}
+worker_classes: Dict[str, Type["QueueProcessingWorker"]] = {}
+queues: Dict[str, Dict[str, Type["QueueProcessingWorker"]]] = {}
-AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional[LDAPSearch] = None
+AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional["LDAPSearch"] = None
Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
2020-04-22 01:09:50 +02:00
|
|
|
SOCIAL_AUTH_SAML_SP_ENTITY_ID: Optional[str] = None
|
2021-02-12 08:20:45 +01:00
|
|
|
SOCIAL_AUTH_SAML_SP_PUBLIC_CERT = ""
|
|
|
|
SOCIAL_AUTH_SAML_SP_PRIVATE_KEY = ""
|
python: Convert assignment type annotations to Python 3.6 style.
This commit was split by tabbott; this piece covers the vast majority
of files in Zulip, but excludes scripts/, tools/, and puppet/ to help
ensure we at least show the right error messages for Xenial systems.
We can likely further refine the remaining pieces with some testing.
Generated by com2ann, with whitespace fixes and various manual fixes
for runtime issues:
- invoiced_through: Optional[LicenseLedger] = models.ForeignKey(
+ invoiced_through: Optional["LicenseLedger"] = models.ForeignKey(
-_apns_client: Optional[APNsClient] = None
+_apns_client: Optional["APNsClient"] = None
- notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- signup_notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ signup_notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- author: Optional[UserProfile] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
+ author: Optional["UserProfile"] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
- bot_owner: Optional[UserProfile] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
+ bot_owner: Optional["UserProfile"] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
- default_sending_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
- default_events_register_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_sending_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_events_register_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
-descriptors_by_handler_id: Dict[int, ClientDescriptor] = {}
+descriptors_by_handler_id: Dict[int, "ClientDescriptor"] = {}
-worker_classes: Dict[str, Type[QueueProcessingWorker]] = {}
-queues: Dict[str, Dict[str, Type[QueueProcessingWorker]]] = {}
+worker_classes: Dict[str, Type["QueueProcessingWorker"]] = {}
+queues: Dict[str, Dict[str, Type["QueueProcessingWorker"]]] = {}
-AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional[LDAPSearch] = None
+AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional["LDAPSearch"] = None
Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
2020-04-22 01:09:50 +02:00
|
|
|
SOCIAL_AUTH_SAML_ORG_INFO: Optional[Dict[str, Dict[str, str]]] = None
|
|
|
|
SOCIAL_AUTH_SAML_TECHNICAL_CONTACT: Optional[Dict[str, str]] = None
|
|
|
|
SOCIAL_AUTH_SAML_SUPPORT_CONTACT: Optional[Dict[str, str]] = None
|
2022-09-24 06:44:08 +02:00
|
|
|
SOCIAL_AUTH_SAML_ENABLED_IDPS: Dict[str, SAMLIdPConfigDict] = {}
|
python: Convert assignment type annotations to Python 3.6 style.
This commit was split by tabbott; this piece covers the vast majority
of files in Zulip, but excludes scripts/, tools/, and puppet/ to help
ensure we at least show the right error messages for Xenial systems.
We can likely further refine the remaining pieces with some testing.
Generated by com2ann, with whitespace fixes and various manual fixes
for runtime issues:
- invoiced_through: Optional[LicenseLedger] = models.ForeignKey(
+ invoiced_through: Optional["LicenseLedger"] = models.ForeignKey(
-_apns_client: Optional[APNsClient] = None
+_apns_client: Optional["APNsClient"] = None
- notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- signup_notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ signup_notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- author: Optional[UserProfile] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
+ author: Optional["UserProfile"] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
- bot_owner: Optional[UserProfile] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
+ bot_owner: Optional["UserProfile"] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
- default_sending_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
- default_events_register_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_sending_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_events_register_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
-descriptors_by_handler_id: Dict[int, ClientDescriptor] = {}
+descriptors_by_handler_id: Dict[int, "ClientDescriptor"] = {}
-worker_classes: Dict[str, Type[QueueProcessingWorker]] = {}
-queues: Dict[str, Dict[str, Type[QueueProcessingWorker]]] = {}
+worker_classes: Dict[str, Type["QueueProcessingWorker"]] = {}
+queues: Dict[str, Dict[str, Type["QueueProcessingWorker"]]] = {}
-AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional[LDAPSearch] = None
+AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional["LDAPSearch"] = None
Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
2020-04-22 01:09:50 +02:00
|
|
|
SOCIAL_AUTH_SAML_SECURITY_CONFIG: Dict[str, Any] = {}
|
2020-04-16 12:05:26 +02:00
|
|
|
# Set this to True to enforce that any configured IdP needs to specify
|
|
|
|
# the limit_to_subdomains setting to be considered valid:
|
|
|
|
SAML_REQUIRE_LIMIT_TO_SUBDOMAINS = False
|
2019-11-13 01:22:15 +01:00
|
|
|
# Historical name for SOCIAL_AUTH_GITHUB_KEY; still allowed in production.
|
python: Convert assignment type annotations to Python 3.6 style.
This commit was split by tabbott; this piece covers the vast majority
of files in Zulip, but excludes scripts/, tools/, and puppet/ to help
ensure we at least show the right error messages for Xenial systems.
We can likely further refine the remaining pieces with some testing.
Generated by com2ann, with whitespace fixes and various manual fixes
for runtime issues:
- invoiced_through: Optional[LicenseLedger] = models.ForeignKey(
+ invoiced_through: Optional["LicenseLedger"] = models.ForeignKey(
-_apns_client: Optional[APNsClient] = None
+_apns_client: Optional["APNsClient"] = None
- notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- signup_notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ signup_notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- author: Optional[UserProfile] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
+ author: Optional["UserProfile"] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
- bot_owner: Optional[UserProfile] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
+ bot_owner: Optional["UserProfile"] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
- default_sending_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
- default_events_register_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_sending_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_events_register_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
-descriptors_by_handler_id: Dict[int, ClientDescriptor] = {}
+descriptors_by_handler_id: Dict[int, "ClientDescriptor"] = {}
-worker_classes: Dict[str, Type[QueueProcessingWorker]] = {}
-queues: Dict[str, Dict[str, Type[QueueProcessingWorker]]] = {}
+worker_classes: Dict[str, Type["QueueProcessingWorker"]] = {}
+queues: Dict[str, Dict[str, Type["QueueProcessingWorker"]]] = {}
-AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional[LDAPSearch] = None
+AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional["LDAPSearch"] = None
Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
2020-04-22 01:09:50 +02:00
|
|
|
GOOGLE_OAUTH2_CLIENT_ID: Optional[str] = None
|
2019-11-13 01:22:15 +01:00
|
|
|
|
2020-06-09 12:04:21 +02:00
|
|
|
# Apple:
|
2021-02-12 08:20:45 +01:00
|
|
|
SOCIAL_AUTH_APPLE_SERVICES_ID = get_secret("social_auth_apple_services_id", development_only=True)
|
|
|
|
SOCIAL_AUTH_APPLE_APP_ID = get_secret("social_auth_apple_app_id", development_only=True)
|
|
|
|
SOCIAL_AUTH_APPLE_KEY = get_secret("social_auth_apple_key", development_only=True)
|
|
|
|
SOCIAL_AUTH_APPLE_TEAM = get_secret("social_auth_apple_team", development_only=True)
|
|
|
|
SOCIAL_AUTH_APPLE_SCOPE = ["name", "email"]
|
2020-06-09 12:04:21 +02:00
|
|
|
SOCIAL_AUTH_APPLE_EMAIL_AS_USERNAME = True
|
|
|
|
|
2021-05-21 16:45:43 +02:00
|
|
|
# Generic OpenID Connect:
|
2022-09-24 06:44:08 +02:00
|
|
|
SOCIAL_AUTH_OIDC_ENABLED_IDPS: Dict[str, OIDCIdPConfigDict] = {}
|
2021-05-23 12:00:20 +02:00
|
|
|
SOCIAL_AUTH_OIDC_FULL_NAME_VALIDATED = False
|
2021-05-21 16:45:43 +02:00
|
|
|
|
2021-05-31 14:48:12 +02:00
|
|
|
SOCIAL_AUTH_SYNC_CUSTOM_ATTRS_DICT: Dict[str, Dict[str, Dict[str, str]]] = {}
|
|
|
|
|
2019-11-13 01:22:15 +01:00
|
|
|
# Other auth
|
python: Convert assignment type annotations to Python 3.6 style.
This commit was split by tabbott; this piece covers the vast majority
of files in Zulip, but excludes scripts/, tools/, and puppet/ to help
ensure we at least show the right error messages for Xenial systems.
We can likely further refine the remaining pieces with some testing.
Generated by com2ann, with whitespace fixes and various manual fixes
for runtime issues:
- invoiced_through: Optional[LicenseLedger] = models.ForeignKey(
+ invoiced_through: Optional["LicenseLedger"] = models.ForeignKey(
-_apns_client: Optional[APNsClient] = None
+_apns_client: Optional["APNsClient"] = None
- notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- signup_notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ signup_notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- author: Optional[UserProfile] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
+ author: Optional["UserProfile"] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
- bot_owner: Optional[UserProfile] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
+ bot_owner: Optional["UserProfile"] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
- default_sending_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
- default_events_register_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_sending_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_events_register_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
-descriptors_by_handler_id: Dict[int, ClientDescriptor] = {}
+descriptors_by_handler_id: Dict[int, "ClientDescriptor"] = {}
-worker_classes: Dict[str, Type[QueueProcessingWorker]] = {}
-queues: Dict[str, Dict[str, Type[QueueProcessingWorker]]] = {}
+worker_classes: Dict[str, Type["QueueProcessingWorker"]] = {}
+queues: Dict[str, Dict[str, Type["QueueProcessingWorker"]]] = {}
-AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional[LDAPSearch] = None
+AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional["LDAPSearch"] = None
Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
2020-04-22 01:09:50 +02:00
|
|
|
SSO_APPEND_DOMAIN: Optional[str] = None
|
2022-07-08 02:27:56 +02:00
|
|
|
CUSTOM_HOME_NOT_LOGGED_IN: Optional[str] = None
|
2019-11-13 01:22:15 +01:00
|
|
|
|
2021-02-12 08:20:45 +01:00
|
|
|
VIDEO_ZOOM_CLIENT_ID = get_secret("video_zoom_client_id", development_only=True)
|
|
|
|
VIDEO_ZOOM_CLIENT_SECRET = get_secret("video_zoom_client_secret")
|
2019-11-16 09:26:28 +01:00
|
|
|
|
2019-11-13 01:22:15 +01:00
|
|
|
# Email gateway
|
2021-02-12 08:20:45 +01:00
|
|
|
EMAIL_GATEWAY_PATTERN = ""
|
python: Convert assignment type annotations to Python 3.6 style.
This commit was split by tabbott; this piece covers the vast majority
of files in Zulip, but excludes scripts/, tools/, and puppet/ to help
ensure we at least show the right error messages for Xenial systems.
We can likely further refine the remaining pieces with some testing.
Generated by com2ann, with whitespace fixes and various manual fixes
for runtime issues:
- invoiced_through: Optional[LicenseLedger] = models.ForeignKey(
+ invoiced_through: Optional["LicenseLedger"] = models.ForeignKey(
-_apns_client: Optional[APNsClient] = None
+_apns_client: Optional["APNsClient"] = None
- notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- signup_notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ signup_notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- author: Optional[UserProfile] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
+ author: Optional["UserProfile"] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
- bot_owner: Optional[UserProfile] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
+ bot_owner: Optional["UserProfile"] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
- default_sending_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
- default_events_register_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_sending_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_events_register_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
-descriptors_by_handler_id: Dict[int, ClientDescriptor] = {}
+descriptors_by_handler_id: Dict[int, "ClientDescriptor"] = {}
-worker_classes: Dict[str, Type[QueueProcessingWorker]] = {}
-queues: Dict[str, Dict[str, Type[QueueProcessingWorker]]] = {}
+worker_classes: Dict[str, Type["QueueProcessingWorker"]] = {}
+queues: Dict[str, Dict[str, Type["QueueProcessingWorker"]]] = {}
-AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional[LDAPSearch] = None
+AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional["LDAPSearch"] = None
Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
2020-04-22 01:09:50 +02:00
|
|
|
EMAIL_GATEWAY_LOGIN: Optional[str] = None
|
|
|
|
EMAIL_GATEWAY_IMAP_SERVER: Optional[str] = None
|
|
|
|
EMAIL_GATEWAY_IMAP_PORT: Optional[int] = None
|
|
|
|
EMAIL_GATEWAY_IMAP_FOLDER: Optional[str] = None
|
2019-11-13 01:22:15 +01:00
|
|
|
# Not documented for in /etc/zulip/settings.py, since it's rarely needed.
|
python: Convert assignment type annotations to Python 3.6 style.
This commit was split by tabbott; this piece covers the vast majority
of files in Zulip, but excludes scripts/, tools/, and puppet/ to help
ensure we at least show the right error messages for Xenial systems.
We can likely further refine the remaining pieces with some testing.
Generated by com2ann, with whitespace fixes and various manual fixes
for runtime issues:
- invoiced_through: Optional[LicenseLedger] = models.ForeignKey(
+ invoiced_through: Optional["LicenseLedger"] = models.ForeignKey(
-_apns_client: Optional[APNsClient] = None
+_apns_client: Optional["APNsClient"] = None
- notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- signup_notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ signup_notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- author: Optional[UserProfile] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
+ author: Optional["UserProfile"] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
- bot_owner: Optional[UserProfile] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
+ bot_owner: Optional["UserProfile"] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
- default_sending_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
- default_events_register_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_sending_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_events_register_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
-descriptors_by_handler_id: Dict[int, ClientDescriptor] = {}
+descriptors_by_handler_id: Dict[int, "ClientDescriptor"] = {}
-worker_classes: Dict[str, Type[QueueProcessingWorker]] = {}
-queues: Dict[str, Dict[str, Type[QueueProcessingWorker]]] = {}
+worker_classes: Dict[str, Type["QueueProcessingWorker"]] = {}
+queues: Dict[str, Dict[str, Type["QueueProcessingWorker"]]] = {}
-AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional[LDAPSearch] = None
+AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional["LDAPSearch"] = None
Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
2020-04-22 01:09:50 +02:00
|
|
|
EMAIL_GATEWAY_EXTRA_PATTERN_HACK: Optional[str] = None
|
2019-11-13 01:22:15 +01:00
|
|
|
|
|
|
|
# Error reporting
|
|
|
|
ERROR_REPORTING = True
|
|
|
|
BROWSER_ERROR_REPORTING = False
|
|
|
|
LOGGING_SHOW_MODULE = False
|
|
|
|
LOGGING_SHOW_PID = False
|
|
|
|
|
2020-07-02 02:20:55 +02:00
|
|
|
# Sentry.io error defaults to off
|
|
|
|
SENTRY_DSN: Optional[str] = None
|
|
|
|
|
2019-11-13 01:22:15 +01:00
|
|
|
# File uploads and avatars
|
2021-05-29 09:04:19 +02:00
|
|
|
# TODO: Rename MAX_FILE_UPLOAD_SIZE to have unit in name.
|
2021-02-12 08:20:45 +01:00
|
|
|
DEFAULT_AVATAR_URI = "/static/images/default-avatar.png"
|
|
|
|
DEFAULT_LOGO_URI = "/static/images/logo/zulip-org-logo.svg"
|
|
|
|
S3_AVATAR_BUCKET = ""
|
|
|
|
S3_AUTH_UPLOADS_BUCKET = ""
|
2021-08-15 18:32:51 +02:00
|
|
|
S3_REGION: Optional[str] = None
|
|
|
|
S3_ENDPOINT_URL: Optional[str] = None
|
2022-03-23 21:47:53 +01:00
|
|
|
S3_SKIP_PROXY = True
|
python: Convert assignment type annotations to Python 3.6 style.
This commit was split by tabbott; this piece covers the vast majority
of files in Zulip, but excludes scripts/, tools/, and puppet/ to help
ensure we at least show the right error messages for Xenial systems.
We can likely further refine the remaining pieces with some testing.
Generated by com2ann, with whitespace fixes and various manual fixes
for runtime issues:
- invoiced_through: Optional[LicenseLedger] = models.ForeignKey(
+ invoiced_through: Optional["LicenseLedger"] = models.ForeignKey(
-_apns_client: Optional[APNsClient] = None
+_apns_client: Optional["APNsClient"] = None
- notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- signup_notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ signup_notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- author: Optional[UserProfile] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
+ author: Optional["UserProfile"] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
- bot_owner: Optional[UserProfile] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
+ bot_owner: Optional["UserProfile"] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
- default_sending_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
- default_events_register_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_sending_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_events_register_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
-descriptors_by_handler_id: Dict[int, ClientDescriptor] = {}
+descriptors_by_handler_id: Dict[int, "ClientDescriptor"] = {}
-worker_classes: Dict[str, Type[QueueProcessingWorker]] = {}
-queues: Dict[str, Dict[str, Type[QueueProcessingWorker]]] = {}
+worker_classes: Dict[str, Type["QueueProcessingWorker"]] = {}
+queues: Dict[str, Dict[str, Type["QueueProcessingWorker"]]] = {}
-AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional[LDAPSearch] = None
+AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional["LDAPSearch"] = None
Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
2020-04-22 01:09:50 +02:00
|
|
|
LOCAL_UPLOADS_DIR: Optional[str] = None
|
2019-11-13 01:22:15 +01:00
|
|
|
MAX_FILE_UPLOAD_SIZE = 25
|
|
|
|
|
|
|
|
# Jitsi Meet video call integration; set to None to disable integration.
|
2022-07-18 22:06:39 +02:00
|
|
|
JITSI_SERVER_URL: Optional[str] = "https://meet.jit.si"
|
2019-11-13 01:22:15 +01:00
|
|
|
|
2021-03-19 13:21:18 +01:00
|
|
|
# GIPHY API key.
|
|
|
|
GIPHY_API_KEY = get_secret("giphy_api_key")
|
|
|
|
|
2020-04-27 22:41:31 +02:00
|
|
|
# Allow setting BigBlueButton settings in zulip-secrets.conf in
|
|
|
|
# development; this is useful since there are no public BigBlueButton servers.
|
2021-02-12 08:20:45 +01:00
|
|
|
BIG_BLUE_BUTTON_URL = get_secret("big_blue_button_url", development_only=True)
|
2020-04-27 22:41:31 +02:00
|
|
|
|
2019-11-13 01:22:15 +01:00
|
|
|
# Max state storage per user
|
|
|
|
# TODO: Add this to zproject/prod_settings_template.py once stateful bots are fully functional.
|
|
|
|
USER_STATE_SIZE_LIMIT = 10000000
|
|
|
|
# Max size of a single configuration entry of an embedded bot.
|
|
|
|
BOT_CONFIG_SIZE_LIMIT = 10000
|
|
|
|
|
|
|
|
# External service configuration
|
2021-02-12 08:20:45 +01:00
|
|
|
CAMO_URI = ""
|
|
|
|
MEMCACHED_LOCATION = "127.0.0.1:11211"
|
2020-06-19 04:12:53 +02:00
|
|
|
MEMCACHED_USERNAME = None if get_secret("memcached_password") is None else "zulip@localhost"
|
2021-02-12 08:20:45 +01:00
|
|
|
RABBITMQ_HOST = "127.0.0.1"
|
|
|
|
RABBITMQ_USERNAME = "zulip"
|
|
|
|
REDIS_HOST = "127.0.0.1"
|
2019-11-13 01:22:15 +01:00
|
|
|
REDIS_PORT = 6379
|
2021-02-12 08:20:45 +01:00
|
|
|
REMOTE_POSTGRES_HOST = ""
|
|
|
|
REMOTE_POSTGRES_PORT = ""
|
|
|
|
REMOTE_POSTGRES_SSLMODE = ""
|
2019-11-13 01:22:15 +01:00
|
|
|
THUMBNAIL_IMAGES = False
|
python: Convert assignment type annotations to Python 3.6 style.
This commit was split by tabbott; this piece covers the vast majority
of files in Zulip, but excludes scripts/, tools/, and puppet/ to help
ensure we at least show the right error messages for Xenial systems.
We can likely further refine the remaining pieces with some testing.
Generated by com2ann, with whitespace fixes and various manual fixes
for runtime issues:
- invoiced_through: Optional[LicenseLedger] = models.ForeignKey(
+ invoiced_through: Optional["LicenseLedger"] = models.ForeignKey(
-_apns_client: Optional[APNsClient] = None
+_apns_client: Optional["APNsClient"] = None
- notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- signup_notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ signup_notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- author: Optional[UserProfile] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
+ author: Optional["UserProfile"] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
- bot_owner: Optional[UserProfile] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
+ bot_owner: Optional["UserProfile"] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
- default_sending_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
- default_events_register_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_sending_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_events_register_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
-descriptors_by_handler_id: Dict[int, ClientDescriptor] = {}
+descriptors_by_handler_id: Dict[int, "ClientDescriptor"] = {}
-worker_classes: Dict[str, Type[QueueProcessingWorker]] = {}
-queues: Dict[str, Dict[str, Type[QueueProcessingWorker]]] = {}
+worker_classes: Dict[str, Type["QueueProcessingWorker"]] = {}
+queues: Dict[str, Dict[str, Type["QueueProcessingWorker"]]] = {}
-AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional[LDAPSearch] = None
+AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional["LDAPSearch"] = None
Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
2020-04-22 01:09:50 +02:00
|
|
|
SENDFILE_BACKEND: Optional[str] = None
|
2019-11-13 01:22:15 +01:00
|
|
|
|
2020-09-17 00:30:45 +02:00
|
|
|
TORNADO_PORTS: List[int] = []
|
|
|
|
USING_TORNADO = True
|
2020-09-15 01:35:44 +02:00
|
|
|
|
2019-11-13 01:22:15 +01:00
|
|
|
# ToS/Privacy templates
|
2021-11-03 21:36:54 +01:00
|
|
|
POLICIES_DIRECTORY: str = "zerver/policies_absent"
|
2019-11-13 01:22:15 +01:00
|
|
|
|
|
|
|
# Security
|
|
|
|
ENABLE_FILE_LINKS = False
|
|
|
|
ENABLE_GRAVATAR = True
|
|
|
|
INLINE_IMAGE_PREVIEW = True
|
|
|
|
INLINE_URL_EMBED_PREVIEW = True
|
|
|
|
NAME_CHANGES_DISABLED = False
|
|
|
|
AVATAR_CHANGES_DISABLED = False
|
|
|
|
PASSWORD_MIN_LENGTH = 6
|
|
|
|
PASSWORD_MIN_GUESSES = 10000
|
python: Convert assignment type annotations to Python 3.6 style.
This commit was split by tabbott; this piece covers the vast majority
of files in Zulip, but excludes scripts/, tools/, and puppet/ to help
ensure we at least show the right error messages for Xenial systems.
We can likely further refine the remaining pieces with some testing.
Generated by com2ann, with whitespace fixes and various manual fixes
for runtime issues:
- invoiced_through: Optional[LicenseLedger] = models.ForeignKey(
+ invoiced_through: Optional["LicenseLedger"] = models.ForeignKey(
-_apns_client: Optional[APNsClient] = None
+_apns_client: Optional["APNsClient"] = None
- notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- signup_notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ signup_notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- author: Optional[UserProfile] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
+ author: Optional["UserProfile"] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
- bot_owner: Optional[UserProfile] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
+ bot_owner: Optional["UserProfile"] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
- default_sending_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
- default_events_register_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_sending_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_events_register_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
-descriptors_by_handler_id: Dict[int, ClientDescriptor] = {}
+descriptors_by_handler_id: Dict[int, "ClientDescriptor"] = {}
-worker_classes: Dict[str, Type[QueueProcessingWorker]] = {}
-queues: Dict[str, Dict[str, Type[QueueProcessingWorker]]] = {}
+worker_classes: Dict[str, Type["QueueProcessingWorker"]] = {}
+queues: Dict[str, Dict[str, Type["QueueProcessingWorker"]]] = {}
-AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional[LDAPSearch] = None
+AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional["LDAPSearch"] = None
Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
2020-04-22 01:09:50 +02:00
|
|
|
PUSH_NOTIFICATION_BOUNCER_URL: Optional[str] = None
|
2019-11-13 01:22:15 +01:00
|
|
|
PUSH_NOTIFICATION_REDACT_CONTENT = False
|
|
|
|
SUBMIT_USAGE_STATISTICS = True
|
2021-03-05 18:39:02 +01:00
|
|
|
PROMOTE_SPONSORING_ZULIP = True
|
2019-11-13 01:22:15 +01:00
|
|
|
RATE_LIMITING = True
|
2019-08-01 15:09:27 +02:00
|
|
|
RATE_LIMITING_AUTHENTICATE = True
|
rate_limit: Add a flag to lump all TOR exit node IPs together.
TOR users are legitimate users of the system; however, that system can
also be used for abuse -- specifically, by evading IP-based
rate-limiting.
For the purposes of IP-based rate-limiting, add a
RATE_LIMIT_TOR_TOGETHER flag, defaulting to false, which lumps all
requests from TOR exit nodes into the same bucket. This may allow a
TOR user to deny other TOR users access to the find-my-account and
new-realm endpoints, but this is a low cost for cutting off a
significant potential abuse vector.
If enabled, the list of TOR exit nodes is fetched from their public
endpoint once per hour, via a cron job, and cached on disk. Django
processes load this data from disk, and cache it in memcached.
Requests are spared from the burden of checking disk on failure via a
circuitbreaker, which trips of there are two failures in a row, and
only begins trying again after 10 minutes.
2021-11-03 21:43:02 +01:00
|
|
|
RATE_LIMIT_TOR_TOGETHER = False
|
2019-11-13 01:22:15 +01:00
|
|
|
SEND_LOGIN_EMAILS = True
|
|
|
|
EMBEDDED_BOTS_ENABLED = False
|
|
|
|
|
2022-11-05 23:55:11 +01:00
|
|
|
DEFAULT_RATE_LIMITING_RULES = {
|
2022-12-06 21:09:58 +01:00
|
|
|
# Limits total number of API requests per unit time by each user.
|
|
|
|
# Rate limiting general API access protects the server against
|
|
|
|
# clients causing unreasonable server load.
|
2022-11-05 23:55:11 +01:00
|
|
|
"api_by_user": [
|
2022-12-06 21:09:58 +01:00
|
|
|
# 200 requests per limit
|
|
|
|
(60, 200),
|
2022-11-05 23:55:11 +01:00
|
|
|
],
|
2022-12-06 21:09:58 +01:00
|
|
|
# Limits total number of unauthenticated API requests (primarily
|
|
|
|
# used by the public access option). Since these are
|
|
|
|
# unauthenticated requests, each IP address is a separate bucket.
|
2022-11-05 23:55:11 +01:00
|
|
|
"api_by_ip": [
|
|
|
|
(60, 100),
|
|
|
|
],
|
2022-12-06 21:09:58 +01:00
|
|
|
# Limits total requests to the Mobile Push Notifications Service
|
|
|
|
# by each individual Zulip server that is using the service. This
|
|
|
|
# is a Zulip Cloud setting that has no effect on self-hosted Zulip
|
|
|
|
# servers that are not hosting their own copy of the push
|
|
|
|
# notifications service.
|
2022-11-05 23:55:11 +01:00
|
|
|
"api_by_remote_server": [
|
|
|
|
(60, 1000),
|
|
|
|
],
|
2022-12-06 21:09:58 +01:00
|
|
|
# Limits how many authentication attempts with login+password can
|
|
|
|
# be made to a single username. This applies to the authentication
|
|
|
|
# backends such as LDAP or email+password where a login+password
|
|
|
|
# gets submitted to the Zulip server. No limit is applied for
|
|
|
|
# external authentication methods (like GitHub SSO), since with
|
|
|
|
# those authentication backends, we only receive a username if
|
|
|
|
# authentication is successful.
|
2022-11-05 23:55:11 +01:00
|
|
|
"authenticate_by_username": [
|
2022-12-06 21:09:58 +01:00
|
|
|
# 5 failed login attempts within 30 minutes
|
|
|
|
(1800, 5),
|
2022-11-05 23:55:11 +01:00
|
|
|
],
|
2022-12-06 21:09:58 +01:00
|
|
|
# Limits how many requests a user can make to change their email
|
|
|
|
# address. A low/strict limit is recommended here, since there is
|
|
|
|
# not real use case for triggering several of these from a single
|
|
|
|
# user account, and by definition, the emails are sent to an email
|
|
|
|
# address that does not already have a relationship with Zulip, so
|
|
|
|
# this feature can be abused to attack the server's spam
|
|
|
|
# reputation. Applies in addition to sends_email_by_ip.
|
2022-11-05 23:55:11 +01:00
|
|
|
"email_change_by_user": [
|
2022-12-06 21:09:58 +01:00
|
|
|
# 2 emails per hour, and up to 5 per day.
|
|
|
|
(3600, 2),
|
|
|
|
(86400, 5),
|
2022-11-05 23:55:11 +01:00
|
|
|
],
|
2022-12-06 21:09:58 +01:00
|
|
|
# Limits how many requests to send password reset emails can be
|
|
|
|
# made for a single email address. A low/strict limit is
|
|
|
|
# desirable, since this feature could be used to spam users with
|
|
|
|
# password reset emails, given their email address. Applies in
|
|
|
|
# addition to sends_email_by_ip, below.
|
2022-11-05 23:55:11 +01:00
|
|
|
"password_reset_form_by_email": [
|
2022-12-06 21:09:58 +01:00
|
|
|
# 2 emails per hour, and up to 5 per day.
|
|
|
|
(3600, 2),
|
|
|
|
(86400, 5),
|
2022-11-05 23:55:11 +01:00
|
|
|
],
|
2022-12-06 21:09:58 +01:00
|
|
|
# This limit applies to all requests which directly trigger the
|
|
|
|
# sending of an email, restricting the number per IP address. This
|
|
|
|
# is a general anti-spam measure.
|
2022-11-05 23:55:11 +01:00
|
|
|
"sends_email_by_ip": [
|
|
|
|
(86400, 5),
|
|
|
|
],
|
2022-12-06 21:09:58 +01:00
|
|
|
# Limits access to uploaded files, in web-public contexts, done by
|
|
|
|
# unauthenticated users. Each file gets its own bucket, and every
|
|
|
|
# access to the file by an unauthenticated user counts towards the
|
|
|
|
# limit. This is important to prevent abuse of Zulip's file
|
|
|
|
# uploads feature for file distribution.
|
2022-11-05 23:55:11 +01:00
|
|
|
"spectator_attachment_access_by_file": [
|
2022-12-06 21:09:58 +01:00
|
|
|
# 1000 per day per file
|
|
|
|
(86400, 1000),
|
2022-11-05 23:55:11 +01:00
|
|
|
],
|
|
|
|
}
|
|
|
|
# Rate limiting defaults can be individually overridden by adding
|
|
|
|
# entries in this object, which is merged with
|
|
|
|
# DEFAULT_RATE_LIMITING_RULES.
|
|
|
|
RATE_LIMITING_RULES: Dict[str, List[Tuple[int, int]]] = {}
|
|
|
|
|
2020-10-23 02:43:28 +02:00
|
|
|
# Two factor authentication is not yet implementation-complete
|
2019-11-13 01:22:15 +01:00
|
|
|
TWO_FACTOR_AUTHENTICATION_ENABLED = False
|
|
|
|
|
|
|
|
# This is used to send all hotspots for convenient manual testing
|
|
|
|
# in development mode.
|
|
|
|
ALWAYS_SEND_ALL_HOTSPOTS = False
|
|
|
|
|
2021-03-11 17:19:49 +01:00
|
|
|
# The new user tutorial is enabled by default, but can be disabled for
|
|
|
|
# self-hosters who want to disable the tutorial entirely on their system.
|
|
|
|
TUTORIAL_ENABLED = True
|
|
|
|
|
2019-11-13 01:22:15 +01:00
|
|
|
# In-development search pills feature.
|
2020-06-25 01:58:20 +02:00
|
|
|
SEARCH_PILLS_ENABLED = False
|
2019-11-13 01:22:15 +01:00
|
|
|
|
|
|
|
# We log emails in development environment for accessing
|
|
|
|
# them easily through /emails page
|
|
|
|
DEVELOPMENT_LOG_EMAILS = DEVELOPMENT
|
|
|
|
|
|
|
|
|
|
|
|
# These settings are not documented in prod_settings_template.py.
|
|
|
|
# They should either be documented here, or documented there.
|
|
|
|
#
|
|
|
|
# Settings that it makes sense to document here instead of in
|
|
|
|
# prod_settings_template.py are those that
|
|
|
|
# * don't make sense to change in production, but rather are intended
|
|
|
|
# for dev and test environments; or
|
|
|
|
# * don't make sense to change on a typical production server with
|
|
|
|
# one or a handful of realms, though they might on an installation
|
2020-06-09 00:58:42 +02:00
|
|
|
# like Zulip Cloud or to work around a problem on another server.
|
2019-11-13 01:22:15 +01:00
|
|
|
|
2021-02-12 08:20:45 +01:00
|
|
|
NOTIFICATION_BOT = "notification-bot@zulip.com"
|
|
|
|
EMAIL_GATEWAY_BOT = "emailgateway@zulip.com"
|
|
|
|
NAGIOS_SEND_BOT = "nagios-send-bot@zulip.com"
|
|
|
|
NAGIOS_RECEIVE_BOT = "nagios-receive-bot@zulip.com"
|
|
|
|
WELCOME_BOT = "welcome-bot@zulip.com"
|
|
|
|
REMINDER_BOT = "reminder-bot@zulip.com"
|
2020-06-10 05:55:57 +02:00
|
|
|
|
2019-11-13 01:22:15 +01:00
|
|
|
# The following bots are optional system bots not enabled by
|
2020-01-03 07:07:51 +01:00
|
|
|
# default. The default ones are defined in INTERNAL_BOTS, in settings.py.
|
2019-11-13 01:22:15 +01:00
|
|
|
|
|
|
|
# ERROR_BOT sends Django exceptions to an "errors" stream in the
|
|
|
|
# system realm.
|
python: Convert assignment type annotations to Python 3.6 style.
This commit was split by tabbott; this piece covers the vast majority
of files in Zulip, but excludes scripts/, tools/, and puppet/ to help
ensure we at least show the right error messages for Xenial systems.
We can likely further refine the remaining pieces with some testing.
Generated by com2ann, with whitespace fixes and various manual fixes
for runtime issues:
- invoiced_through: Optional[LicenseLedger] = models.ForeignKey(
+ invoiced_through: Optional["LicenseLedger"] = models.ForeignKey(
-_apns_client: Optional[APNsClient] = None
+_apns_client: Optional["APNsClient"] = None
- notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- signup_notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ signup_notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- author: Optional[UserProfile] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
+ author: Optional["UserProfile"] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
- bot_owner: Optional[UserProfile] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
+ bot_owner: Optional["UserProfile"] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
- default_sending_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
- default_events_register_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_sending_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_events_register_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
-descriptors_by_handler_id: Dict[int, ClientDescriptor] = {}
+descriptors_by_handler_id: Dict[int, "ClientDescriptor"] = {}
-worker_classes: Dict[str, Type[QueueProcessingWorker]] = {}
-queues: Dict[str, Dict[str, Type[QueueProcessingWorker]]] = {}
+worker_classes: Dict[str, Type["QueueProcessingWorker"]] = {}
+queues: Dict[str, Dict[str, Type["QueueProcessingWorker"]]] = {}
-AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional[LDAPSearch] = None
+AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional["LDAPSearch"] = None
Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
2020-04-22 01:09:50 +02:00
|
|
|
ERROR_BOT: Optional[str] = None
|
2019-11-13 01:22:15 +01:00
|
|
|
# These are extra bot users for our end-to-end Nagios message
|
|
|
|
# sending tests.
|
2021-02-12 08:20:45 +01:00
|
|
|
NAGIOS_STAGING_SEND_BOT = "nagios-staging-send-bot@zulip.com" if PRODUCTION else None
|
|
|
|
NAGIOS_STAGING_RECEIVE_BOT = "nagios-staging-receive-bot@zulip.com" if PRODUCTION else None
|
2019-11-13 01:22:15 +01:00
|
|
|
# SYSTEM_BOT_REALM would be a constant always set to 'zulip',
|
2020-06-09 00:58:42 +02:00
|
|
|
# except that it isn't that on Zulip Cloud. We will likely do a
|
2019-11-13 01:22:15 +01:00
|
|
|
# migration and eliminate this parameter in the future.
|
2021-02-12 08:20:45 +01:00
|
|
|
SYSTEM_BOT_REALM = "zulipinternal"
|
2019-11-13 01:22:15 +01:00
|
|
|
|
|
|
|
# Structurally, we will probably eventually merge
|
|
|
|
# analytics into part of the main server, rather
|
|
|
|
# than a separate app.
|
2021-02-12 08:20:45 +01:00
|
|
|
EXTRA_INSTALLED_APPS = ["analytics"]
|
2019-11-13 01:22:15 +01:00
|
|
|
|
|
|
|
# Used to construct URLs to point to the Zulip server. Since we
|
|
|
|
# only support HTTPS in production, this is just for development.
|
|
|
|
EXTERNAL_URI_SCHEME = "https://"
|
|
|
|
|
|
|
|
# Whether anyone can create a new organization on the Zulip server.
|
|
|
|
OPEN_REALM_CREATION = False
|
|
|
|
|
2021-09-21 19:49:12 +02:00
|
|
|
# Whether it's possible to create web-public streams on this server.
|
|
|
|
WEB_PUBLIC_STREAMS_ENABLED = False
|
|
|
|
|
2019-11-13 01:22:15 +01:00
|
|
|
# Setting for where the system bot users are. Likely has no
|
|
|
|
# purpose now that the REALMS_HAVE_SUBDOMAINS migration is finished.
|
|
|
|
SYSTEM_ONLY_REALMS = {"zulip"}
|
|
|
|
|
2021-09-02 01:05:30 +02:00
|
|
|
# Default deadline for demo organizations
|
|
|
|
DEMO_ORG_DEADLINE_DAYS = 30
|
|
|
|
|
2019-11-13 01:22:15 +01:00
|
|
|
# Alternate hostnames to serve particular realms on, in addition to
|
|
|
|
# their usual subdomains. Keys are realm string_ids (aka subdomains),
|
|
|
|
# and values are alternate hosts.
|
|
|
|
# The values will also be added to ALLOWED_HOSTS.
|
python: Convert assignment type annotations to Python 3.6 style.
This commit was split by tabbott; this piece covers the vast majority
of files in Zulip, but excludes scripts/, tools/, and puppet/ to help
ensure we at least show the right error messages for Xenial systems.
We can likely further refine the remaining pieces with some testing.
Generated by com2ann, with whitespace fixes and various manual fixes
for runtime issues:
- invoiced_through: Optional[LicenseLedger] = models.ForeignKey(
+ invoiced_through: Optional["LicenseLedger"] = models.ForeignKey(
-_apns_client: Optional[APNsClient] = None
+_apns_client: Optional["APNsClient"] = None
- notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- signup_notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ signup_notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- author: Optional[UserProfile] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
+ author: Optional["UserProfile"] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
- bot_owner: Optional[UserProfile] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
+ bot_owner: Optional["UserProfile"] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
- default_sending_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
- default_events_register_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_sending_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_events_register_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
-descriptors_by_handler_id: Dict[int, ClientDescriptor] = {}
+descriptors_by_handler_id: Dict[int, "ClientDescriptor"] = {}
-worker_classes: Dict[str, Type[QueueProcessingWorker]] = {}
-queues: Dict[str, Dict[str, Type[QueueProcessingWorker]]] = {}
+worker_classes: Dict[str, Type["QueueProcessingWorker"]] = {}
+queues: Dict[str, Dict[str, Type["QueueProcessingWorker"]]] = {}
-AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional[LDAPSearch] = None
+AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional["LDAPSearch"] = None
Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
2020-04-22 01:09:50 +02:00
|
|
|
REALM_HOSTS: Dict[str, str] = {}
|
2019-11-13 01:22:15 +01:00
|
|
|
|
2020-06-25 20:43:48 +02:00
|
|
|
# Map used to rewrite the URIs for certain realms during mobile
|
|
|
|
# authentication. This, combined with adding the relevant hosts to
|
|
|
|
# ALLOWED_HOSTS, can be used for environments where security policies
|
|
|
|
# mean that a different hostname must be used for mobile access.
|
|
|
|
REALM_MOBILE_REMAP_URIS: Dict[str, str] = {}
|
|
|
|
|
2020-10-23 02:43:28 +02:00
|
|
|
# Whether the server is using the PGroonga full-text search
|
2019-11-13 01:22:15 +01:00
|
|
|
# backend. Plan is to turn this on for everyone after further
|
|
|
|
# testing.
|
|
|
|
USING_PGROONGA = False
|
|
|
|
|
2020-01-03 07:07:51 +01:00
|
|
|
# How Django should send emails. Set for most contexts in settings.py, but
|
2019-11-13 01:22:15 +01:00
|
|
|
# available for sysadmin override in unusual cases.
|
python: Convert assignment type annotations to Python 3.6 style.
This commit was split by tabbott; this piece covers the vast majority
of files in Zulip, but excludes scripts/, tools/, and puppet/ to help
ensure we at least show the right error messages for Xenial systems.
We can likely further refine the remaining pieces with some testing.
Generated by com2ann, with whitespace fixes and various manual fixes
for runtime issues:
- invoiced_through: Optional[LicenseLedger] = models.ForeignKey(
+ invoiced_through: Optional["LicenseLedger"] = models.ForeignKey(
-_apns_client: Optional[APNsClient] = None
+_apns_client: Optional["APNsClient"] = None
- notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- signup_notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ signup_notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- author: Optional[UserProfile] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
+ author: Optional["UserProfile"] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
- bot_owner: Optional[UserProfile] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
+ bot_owner: Optional["UserProfile"] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
- default_sending_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
- default_events_register_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_sending_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_events_register_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
-descriptors_by_handler_id: Dict[int, ClientDescriptor] = {}
+descriptors_by_handler_id: Dict[int, "ClientDescriptor"] = {}
-worker_classes: Dict[str, Type[QueueProcessingWorker]] = {}
-queues: Dict[str, Dict[str, Type[QueueProcessingWorker]]] = {}
+worker_classes: Dict[str, Type["QueueProcessingWorker"]] = {}
+queues: Dict[str, Dict[str, Type["QueueProcessingWorker"]]] = {}
-AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional[LDAPSearch] = None
+AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional["LDAPSearch"] = None
Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
2020-04-22 01:09:50 +02:00
|
|
|
EMAIL_BACKEND: Optional[str] = None
|
2019-11-13 01:22:15 +01:00
|
|
|
|
|
|
|
# Whether to give admins a warning in the web app that email isn't set up.
|
2020-01-03 07:07:51 +01:00
|
|
|
# Set in settings.py when email isn't configured.
|
2019-11-13 01:22:15 +01:00
|
|
|
WARN_NO_EMAIL = False
|
|
|
|
|
|
|
|
# If True, disable rate-limiting and other filters on sending error messages
|
|
|
|
# to admins, and enable logging on the error-reporting itself. Useful
|
|
|
|
# mainly in development.
|
|
|
|
DEBUG_ERROR_REPORTING = False
|
|
|
|
|
|
|
|
# Whether to flush memcached after data migrations. Because of
|
|
|
|
# how we do deployments in a way that avoids reusing memcached,
|
|
|
|
# this is disabled in production, but we need it in development.
|
|
|
|
POST_MIGRATION_CACHE_FLUSHING = False
|
|
|
|
|
|
|
|
# Settings for APNS. Only needed on push.zulipchat.com or if
|
|
|
|
# rebuilding the mobile app with a different push notifications
|
|
|
|
# server.
|
python: Convert assignment type annotations to Python 3.6 style.
This commit was split by tabbott; this piece covers the vast majority
of files in Zulip, but excludes scripts/, tools/, and puppet/ to help
ensure we at least show the right error messages for Xenial systems.
We can likely further refine the remaining pieces with some testing.
Generated by com2ann, with whitespace fixes and various manual fixes
for runtime issues:
- invoiced_through: Optional[LicenseLedger] = models.ForeignKey(
+ invoiced_through: Optional["LicenseLedger"] = models.ForeignKey(
-_apns_client: Optional[APNsClient] = None
+_apns_client: Optional["APNsClient"] = None
- notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- signup_notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ signup_notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- author: Optional[UserProfile] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
+ author: Optional["UserProfile"] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
- bot_owner: Optional[UserProfile] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
+ bot_owner: Optional["UserProfile"] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
- default_sending_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
- default_events_register_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_sending_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_events_register_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
-descriptors_by_handler_id: Dict[int, ClientDescriptor] = {}
+descriptors_by_handler_id: Dict[int, "ClientDescriptor"] = {}
-worker_classes: Dict[str, Type[QueueProcessingWorker]] = {}
-queues: Dict[str, Dict[str, Type[QueueProcessingWorker]]] = {}
+worker_classes: Dict[str, Type["QueueProcessingWorker"]] = {}
+queues: Dict[str, Dict[str, Type["QueueProcessingWorker"]]] = {}
-AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional[LDAPSearch] = None
+AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional["LDAPSearch"] = None
Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
2020-04-22 01:09:50 +02:00
|
|
|
APNS_CERT_FILE: Optional[str] = None
|
2019-11-13 01:22:15 +01:00
|
|
|
APNS_SANDBOX = True
|
2021-02-12 08:20:45 +01:00
|
|
|
APNS_TOPIC = "org.zulip.Zulip"
|
|
|
|
ZULIP_IOS_APP_ID = "org.zulip.Zulip"
|
2019-11-13 01:22:15 +01:00
|
|
|
|
|
|
|
# Limits related to the size of file uploads; last few in MB.
|
|
|
|
DATA_UPLOAD_MAX_MEMORY_SIZE = 25 * 1024 * 1024
|
2021-05-29 08:51:07 +02:00
|
|
|
MAX_AVATAR_FILE_SIZE_MIB = 5
|
2021-05-29 08:55:34 +02:00
|
|
|
MAX_ICON_FILE_SIZE_MIB = 5
|
2021-05-29 08:59:21 +02:00
|
|
|
MAX_LOGO_FILE_SIZE_MIB = 5
|
2021-05-29 09:04:19 +02:00
|
|
|
MAX_EMOJI_FILE_SIZE_MIB = 5
|
2019-11-13 01:22:15 +01:00
|
|
|
|
|
|
|
# Limits to help prevent spam, in particular by sending invitations.
|
|
|
|
#
|
|
|
|
# A non-admin user who's joined an open realm this recently can't invite at all.
|
|
|
|
INVITES_MIN_USER_AGE_DAYS = 3
|
|
|
|
# Default for a realm's `max_invites`; which applies per day,
|
|
|
|
# and only applies if OPEN_REALM_CREATION is true.
|
|
|
|
INVITES_DEFAULT_REALM_DAILY_MAX = 100
|
|
|
|
# Global rate-limit (list of pairs (days, max)) on invites from new realms.
|
|
|
|
# Only applies if OPEN_REALM_CREATION is true.
|
|
|
|
INVITES_NEW_REALM_LIMIT_DAYS = [(1, 100)]
|
|
|
|
# Definition of a new realm for INVITES_NEW_REALM_LIMIT.
|
|
|
|
INVITES_NEW_REALM_DAYS = 7
|
|
|
|
|
|
|
|
# Controls for which links are published in portico footers/headers/etc.
|
python: Convert assignment type annotations to Python 3.6 style.
This commit was split by tabbott; this piece covers the vast majority
of files in Zulip, but excludes scripts/, tools/, and puppet/ to help
ensure we at least show the right error messages for Xenial systems.
We can likely further refine the remaining pieces with some testing.
Generated by com2ann, with whitespace fixes and various manual fixes
for runtime issues:
- invoiced_through: Optional[LicenseLedger] = models.ForeignKey(
+ invoiced_through: Optional["LicenseLedger"] = models.ForeignKey(
-_apns_client: Optional[APNsClient] = None
+_apns_client: Optional["APNsClient"] = None
- notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- signup_notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ signup_notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- author: Optional[UserProfile] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
+ author: Optional["UserProfile"] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
- bot_owner: Optional[UserProfile] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
+ bot_owner: Optional["UserProfile"] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
- default_sending_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
- default_events_register_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_sending_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_events_register_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
-descriptors_by_handler_id: Dict[int, ClientDescriptor] = {}
+descriptors_by_handler_id: Dict[int, "ClientDescriptor"] = {}
-worker_classes: Dict[str, Type[QueueProcessingWorker]] = {}
-queues: Dict[str, Dict[str, Type[QueueProcessingWorker]]] = {}
+worker_classes: Dict[str, Type["QueueProcessingWorker"]] = {}
+queues: Dict[str, Dict[str, Type["QueueProcessingWorker"]]] = {}
-AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional[LDAPSearch] = None
+AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional["LDAPSearch"] = None
Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
2020-04-22 01:09:50 +02:00
|
|
|
REGISTER_LINK_DISABLED: Optional[bool] = None
|
2019-11-13 01:22:15 +01:00
|
|
|
LOGIN_LINK_DISABLED = False
|
|
|
|
FIND_TEAM_LINK_DISABLED = True
|
|
|
|
|
|
|
|
# What domains to treat like the root domain
|
2021-08-23 15:14:05 +02:00
|
|
|
ROOT_SUBDOMAIN_ALIASES = ["www"]
|
2019-11-13 01:22:15 +01:00
|
|
|
# Whether the root domain is a landing page or can host a realm.
|
|
|
|
ROOT_DOMAIN_LANDING_PAGE = False
|
|
|
|
|
|
|
|
# If using the Zephyr mirroring supervisord configuration, the
|
|
|
|
# hostname to connect to in order to transfer credentials from webathena.
|
python: Convert assignment type annotations to Python 3.6 style.
This commit was split by tabbott; this piece covers the vast majority
of files in Zulip, but excludes scripts/, tools/, and puppet/ to help
ensure we at least show the right error messages for Xenial systems.
We can likely further refine the remaining pieces with some testing.
Generated by com2ann, with whitespace fixes and various manual fixes
for runtime issues:
- invoiced_through: Optional[LicenseLedger] = models.ForeignKey(
+ invoiced_through: Optional["LicenseLedger"] = models.ForeignKey(
-_apns_client: Optional[APNsClient] = None
+_apns_client: Optional["APNsClient"] = None
- notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- signup_notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ signup_notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- author: Optional[UserProfile] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
+ author: Optional["UserProfile"] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
- bot_owner: Optional[UserProfile] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
+ bot_owner: Optional["UserProfile"] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
- default_sending_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
- default_events_register_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_sending_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_events_register_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
-descriptors_by_handler_id: Dict[int, ClientDescriptor] = {}
+descriptors_by_handler_id: Dict[int, "ClientDescriptor"] = {}
-worker_classes: Dict[str, Type[QueueProcessingWorker]] = {}
-queues: Dict[str, Dict[str, Type[QueueProcessingWorker]]] = {}
+worker_classes: Dict[str, Type["QueueProcessingWorker"]] = {}
+queues: Dict[str, Dict[str, Type["QueueProcessingWorker"]]] = {}
-AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional[LDAPSearch] = None
+AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional["LDAPSearch"] = None
Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
2020-04-22 01:09:50 +02:00
|
|
|
PERSONAL_ZMIRROR_SERVER: Optional[str] = None
|
2019-11-13 01:22:15 +01:00
|
|
|
|
|
|
|
# When security-relevant links in emails expire.
|
|
|
|
CONFIRMATION_LINK_DEFAULT_VALIDITY_DAYS = 1
|
|
|
|
INVITATION_LINK_VALIDITY_DAYS = 10
|
|
|
|
REALM_CREATION_LINK_VALIDITY_DAYS = 7
|
|
|
|
|
|
|
|
# Version number for ToS. Change this if you want to force every
|
|
|
|
# user to click through to re-accept terms of service before using
|
|
|
|
# Zulip again on the web.
|
2021-12-07 02:23:24 +01:00
|
|
|
TERMS_OF_SERVICE_VERSION: Optional[str] = None
|
2021-12-19 15:24:47 +01:00
|
|
|
# HTML template path (e.g. "corporate/zulipchat_migration_tos.html")
|
|
|
|
# displayed to users when increasing TERMS_OF_SERVICE_VERSION when a
|
|
|
|
# user is to accept the terms of service for the first time, but
|
|
|
|
# already has an account. This primarily comes up when doing a data
|
|
|
|
# import.
|
2021-12-10 20:16:42 +01:00
|
|
|
FIRST_TIME_TERMS_OF_SERVICE_TEMPLATE: Optional[str] = None
|
2021-12-19 15:24:47 +01:00
|
|
|
# Custom message (HTML allowed) to be displayed to explain why users
|
|
|
|
# need to re-accept the terms of service when a new major version is
|
|
|
|
# written.
|
|
|
|
TERMS_OF_SERVICE_MESSAGE: Optional[str] = None
|
2019-11-13 01:22:15 +01:00
|
|
|
|
|
|
|
# Hostname used for Zulip's statsd logging integration.
|
2021-02-12 08:20:45 +01:00
|
|
|
STATSD_HOST = ""
|
2019-11-13 01:22:15 +01:00
|
|
|
|
|
|
|
# Configuration for JWT auth.
|
2022-09-24 06:44:08 +02:00
|
|
|
JWT_AUTH_KEYS: Dict[str, JwtAuthKey] = {}
|
2019-11-13 01:22:15 +01:00
|
|
|
|
2021-11-05 20:26:37 +01:00
|
|
|
# https://docs.djangoproject.com/en/3.2/ref/settings/#std:setting-SERVER_EMAIL
|
2019-11-13 01:22:15 +01:00
|
|
|
# Django setting for what from address to use in error emails.
|
|
|
|
SERVER_EMAIL = ZULIP_ADMINISTRATOR
|
|
|
|
# Django setting for who receives error emails.
|
|
|
|
ADMINS = (("Zulip Administrator", ZULIP_ADMINISTRATOR),)
|
|
|
|
|
|
|
|
# From address for welcome emails.
|
python: Convert assignment type annotations to Python 3.6 style.
This commit was split by tabbott; this piece covers the vast majority
of files in Zulip, but excludes scripts/, tools/, and puppet/ to help
ensure we at least show the right error messages for Xenial systems.
We can likely further refine the remaining pieces with some testing.
Generated by com2ann, with whitespace fixes and various manual fixes
for runtime issues:
- invoiced_through: Optional[LicenseLedger] = models.ForeignKey(
+ invoiced_through: Optional["LicenseLedger"] = models.ForeignKey(
-_apns_client: Optional[APNsClient] = None
+_apns_client: Optional["APNsClient"] = None
- notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- signup_notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ signup_notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- author: Optional[UserProfile] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
+ author: Optional["UserProfile"] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
- bot_owner: Optional[UserProfile] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
+ bot_owner: Optional["UserProfile"] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
- default_sending_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
- default_events_register_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_sending_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_events_register_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
-descriptors_by_handler_id: Dict[int, ClientDescriptor] = {}
+descriptors_by_handler_id: Dict[int, "ClientDescriptor"] = {}
-worker_classes: Dict[str, Type[QueueProcessingWorker]] = {}
-queues: Dict[str, Dict[str, Type[QueueProcessingWorker]]] = {}
+worker_classes: Dict[str, Type["QueueProcessingWorker"]] = {}
+queues: Dict[str, Dict[str, Type["QueueProcessingWorker"]]] = {}
-AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional[LDAPSearch] = None
+AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional["LDAPSearch"] = None
Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
2020-04-22 01:09:50 +02:00
|
|
|
WELCOME_EMAIL_SENDER: Optional[Dict[str, str]] = None
|
2019-11-13 01:22:15 +01:00
|
|
|
# Whether we should use users' own email addresses as the from
|
|
|
|
# address when sending missed-message emails. Off by default
|
|
|
|
# because some transactional email providers reject sending such
|
|
|
|
# emails since they can look like spam.
|
|
|
|
SEND_MISSED_MESSAGE_EMAILS_AS_USER = False
|
|
|
|
# Whether to send periodic digests of activity.
|
|
|
|
SEND_DIGEST_EMAILS = True
|
|
|
|
|
|
|
|
# Used to change the Zulip logo in portico pages.
|
python: Convert assignment type annotations to Python 3.6 style.
This commit was split by tabbott; this piece covers the vast majority
of files in Zulip, but excludes scripts/, tools/, and puppet/ to help
ensure we at least show the right error messages for Xenial systems.
We can likely further refine the remaining pieces with some testing.
Generated by com2ann, with whitespace fixes and various manual fixes
for runtime issues:
- invoiced_through: Optional[LicenseLedger] = models.ForeignKey(
+ invoiced_through: Optional["LicenseLedger"] = models.ForeignKey(
-_apns_client: Optional[APNsClient] = None
+_apns_client: Optional["APNsClient"] = None
- notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- signup_notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ signup_notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- author: Optional[UserProfile] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
+ author: Optional["UserProfile"] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
- bot_owner: Optional[UserProfile] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
+ bot_owner: Optional["UserProfile"] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
- default_sending_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
- default_events_register_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_sending_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_events_register_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
-descriptors_by_handler_id: Dict[int, ClientDescriptor] = {}
+descriptors_by_handler_id: Dict[int, "ClientDescriptor"] = {}
-worker_classes: Dict[str, Type[QueueProcessingWorker]] = {}
-queues: Dict[str, Dict[str, Type[QueueProcessingWorker]]] = {}
+worker_classes: Dict[str, Type["QueueProcessingWorker"]] = {}
+queues: Dict[str, Dict[str, Type["QueueProcessingWorker"]]] = {}
-AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional[LDAPSearch] = None
+AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional["LDAPSearch"] = None
Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
2020-04-22 01:09:50 +02:00
|
|
|
CUSTOM_LOGO_URL: Optional[str] = None
|
2019-11-13 01:22:15 +01:00
|
|
|
|
|
|
|
# Random salt used when deterministically generating passwords in
|
|
|
|
# development.
|
python: Convert assignment type annotations to Python 3.6 style.
This commit was split by tabbott; this piece covers the vast majority
of files in Zulip, but excludes scripts/, tools/, and puppet/ to help
ensure we at least show the right error messages for Xenial systems.
We can likely further refine the remaining pieces with some testing.
Generated by com2ann, with whitespace fixes and various manual fixes
for runtime issues:
- invoiced_through: Optional[LicenseLedger] = models.ForeignKey(
+ invoiced_through: Optional["LicenseLedger"] = models.ForeignKey(
-_apns_client: Optional[APNsClient] = None
+_apns_client: Optional["APNsClient"] = None
- notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- signup_notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ signup_notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- author: Optional[UserProfile] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
+ author: Optional["UserProfile"] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
- bot_owner: Optional[UserProfile] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
+ bot_owner: Optional["UserProfile"] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
- default_sending_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
- default_events_register_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_sending_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_events_register_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
-descriptors_by_handler_id: Dict[int, ClientDescriptor] = {}
+descriptors_by_handler_id: Dict[int, "ClientDescriptor"] = {}
-worker_classes: Dict[str, Type[QueueProcessingWorker]] = {}
-queues: Dict[str, Dict[str, Type[QueueProcessingWorker]]] = {}
+worker_classes: Dict[str, Type["QueueProcessingWorker"]] = {}
+queues: Dict[str, Dict[str, Type["QueueProcessingWorker"]]] = {}
-AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional[LDAPSearch] = None
+AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional["LDAPSearch"] = None
Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
2020-04-22 01:09:50 +02:00
|
|
|
INITIAL_PASSWORD_SALT: Optional[str] = None
|
2019-11-13 01:22:15 +01:00
|
|
|
|
2022-02-08 00:13:33 +01:00
|
|
|
# Settings configuring the special instrumentation of the send_event
|
2019-12-11 12:03:20 +01:00
|
|
|
# code path used in generating API documentation for /events.
|
|
|
|
LOG_API_EVENT_TYPES = False
|
|
|
|
|
2019-11-13 01:22:15 +01:00
|
|
|
# Used to control whether certain management commands are run on
|
|
|
|
# the server.
|
|
|
|
# TODO: Replace this with a smarter "run on only one server" system.
|
|
|
|
STAGING = False
|
|
|
|
|
|
|
|
# How long to wait before presence should treat a user as offline.
|
|
|
|
# TODO: Figure out why this is different from the corresponding
|
|
|
|
# value in static/js/presence.js. Also, probably move it out of
|
|
|
|
# default_settings, since it likely isn't usefully user-configurable.
|
|
|
|
OFFLINE_THRESHOLD_SECS = 5 * 60
|
|
|
|
|
2021-05-05 13:15:13 +02:00
|
|
|
# Specifies the number of active users in the realm
|
|
|
|
# above which sending of presence update events will be disabled.
|
|
|
|
USER_LIMIT_FOR_SENDING_PRESENCE_UPDATE_EVENTS = 100
|
|
|
|
|
2019-11-13 01:22:15 +01:00
|
|
|
# How many days deleted messages data should be kept before being
|
|
|
|
# permanently deleted.
|
2021-11-18 02:24:40 +01:00
|
|
|
ARCHIVED_DATA_VACUUMING_DELAY_DAYS = 30
|
2019-11-13 01:22:15 +01:00
|
|
|
|
|
|
|
# Enables billing pages and plan-based feature gates. If False, all features
|
|
|
|
# are available to all realms.
|
|
|
|
BILLING_ENABLED = False
|
|
|
|
|
2021-02-12 08:20:45 +01:00
|
|
|
FREE_TRIAL_DAYS: Optional[int] = int(get_secret("free_trial_days", "0"))
|
2020-04-23 20:10:15 +02:00
|
|
|
|
2020-05-21 16:36:14 +02:00
|
|
|
# Custom message (supports HTML) to be shown in the navbar of landing pages. Used mainly for
|
|
|
|
# making announcements.
|
|
|
|
LANDING_PAGE_NAVBAR_MESSAGE: Optional[str] = None
|
|
|
|
|
2019-11-13 01:22:15 +01:00
|
|
|
# Automatically catch-up soft deactivated users when running the
|
|
|
|
# `soft-deactivate-users` cron. Turn this off if the server has 10Ks of
|
|
|
|
# users, and you would like to save some disk space. Soft-deactivated
|
|
|
|
# returning users would still be caught-up normally.
|
|
|
|
AUTO_CATCH_UP_SOFT_DEACTIVATED_USERS = True
|
2020-05-08 06:37:58 +02:00
|
|
|
|
|
|
|
# Enables Google Analytics on selected portico pages.
|
|
|
|
GOOGLE_ANALYTICS_ID: Optional[str] = None
|
2020-06-08 04:08:04 +02:00
|
|
|
|
|
|
|
# This is overridden by dev_settings.py for droplets.
|
|
|
|
IS_DEV_DROPLET = False
|
2020-06-10 05:36:01 +02:00
|
|
|
|
|
|
|
# Used by puppet/zulip_ops/files/cron.d/check_send_receive_time.
|
|
|
|
NAGIOS_BOT_HOST = EXTERNAL_HOST
|
2020-06-10 06:06:57 +02:00
|
|
|
|
2020-06-21 13:18:08 +02:00
|
|
|
# Use half of the available CPUs for data import purposes.
|
|
|
|
DEFAULT_DATA_EXPORT_IMPORT_PARALLELISM = (len(os.sched_getaffinity(0)) // 2) or 1
|
2021-04-24 13:25:20 +02:00
|
|
|
|
2021-04-27 21:45:10 +02:00
|
|
|
# How long after the last upgrade to nag users that the server needs
|
|
|
|
# to be upgraded because of likely security releases in the meantime.
|
|
|
|
# Default is 18 months, constructed as 12 months before someone should
|
|
|
|
# upgrade, plus 6 months for the system administrator to get around to it.
|
2021-04-28 02:15:16 +02:00
|
|
|
SERVER_UPGRADE_NAG_DEADLINE_DAYS = 30 * 18
|
2021-05-05 09:22:41 +02:00
|
|
|
|
|
|
|
# How long servers have to respond to outgoing webhook requests
|
|
|
|
OUTGOING_WEBHOOK_TIMEOUT_SECONDS = 10
|
2021-06-03 15:04:22 +02:00
|
|
|
|
|
|
|
# Maximum length of message content allowed.
|
|
|
|
# Any message content exceeding this limit will be truncated.
|
2022-04-14 23:50:10 +02:00
|
|
|
# See: `_internal_prep_message` function in zerver/actions/message_send.py.
|
2021-06-03 15:04:22 +02:00
|
|
|
MAX_MESSAGE_LENGTH = 10000
|
2021-07-24 06:56:56 +02:00
|
|
|
|
|
|
|
# The maximum number of drafts to send in the response to /register.
|
|
|
|
# More drafts, should they exist for some crazy reason, could be
|
|
|
|
# fetched in a separate request.
|
|
|
|
MAX_DRAFTS_IN_REGISTER_RESPONSE = 1000
|