zulip/tools
Alex Vandiver 1f0cfd4662 email-mirror: Add a standalone server that processes incoming email.
Using postfix to handle the incoming email gateway complicates things
a great deal:

- It cannot verify that incoming email addresses exist in Zulip before
  accepting them; it thus accepts mail at the `RCPT TO` stage which it
  cannot handle, and thus must reject after the `DATA`.

- It is built to handle both incoming and outgoing email, which
  results in subtle errors (1c17583ad5, 79931051bd, a53092687e,
  #18600).

- Rate-limiting happens much too late to avoid denial of
  service (#12501).

- Mis-configurations of the HTTP endpoint can break incoming
  mail (#18105).

Provide a replacement SMTP server which accepts incoming email on port
25, verifies that Zulip can accept the address, and that no
rate-limits are being broken, and then adds it directly to the
relevant queue.

Removes an incorrect comment which implied that missed-message
addresses were only usable once.  We leave rate-limiting to only
channel email addresses, since missed-message addresses are unlikely
to be placed into automated systems, as channel email addresses are.

Also simplifies #7814 somewhat.
2025-05-19 16:39:44 -07:00
..
ci requirements: Migrate to uv. 2025-02-24 22:29:24 -08:00
documentation_crawler requirements: Upgrade Python requirements. 2024-11-19 11:09:34 -08:00
droplets requirements: Migrate to uv. 2025-02-24 22:29:24 -08:00
i18n update-for-legacy-translations: Don’t delete empty strings. 2025-04-05 07:17:47 -07:00
lib registration: Enable import from slack using realm registration form. 2025-05-14 13:24:38 -07:00
linter_lib email-mirror: Add a standalone server that processes incoming email. 2025-05-19 16:39:44 -07:00
node_lib web: Set "type": "module" and convert various CJS files to ESM. 2024-11-13 09:18:56 -08:00
oneclickapps ruff: Fix UP006 Use list instead of List for type annotation. 2024-07-13 22:28:22 -07:00
screenshots generate-integration-docs-screenshot: Support plain/text payloads. 2025-04-16 14:05:29 -07:00
setup kandra: Install PostgreSQL 17 by default. 2025-05-14 09:16:46 -07:00
test-install Remove support for Ubuntu 20.04 and Debian 11. 2024-04-01 13:27:39 -07:00
tests requirements: Migrate to uv. 2025-02-24 22:29:24 -08:00
zulip-export
__init__.py
backport-pull-request backport: Fix the commit-ids that are used. 2024-05-06 14:47:22 -07:00
build-docs tools: Use root-based absolute import for tools.lib, etc. 2021-07-05 12:21:52 -07:00
build-help-center run-dev: Add option to host help center with starlight. 2024-08-02 18:18:01 -07:00
build-release-tarball provision: Ignore Python warnings while building requirements. 2025-03-19 17:15:09 -07:00
cache-zulip-git-version build-release-tarball: Override merge-base for full official releases. 2022-11-15 12:50:41 -08:00
check-capitalization python: Mark regexes as raw strings. 2024-04-26 12:30:31 -07:00
check-frontend-i18n docs: Explain web app translations before server, and use those terms. 2025-01-31 14:32:47 -08:00
check-issue-labels ruff: Fix PLC1802 len(…) used as condition without comparison. 2025-03-14 17:31:50 -07:00
check-openapi openapi: Fix misuse of nullable as sibling of oneOf. 2025-01-24 23:00:21 -08:00
check-provision
check-schemas message_edit: Show typing indicator for message editing. 2025-02-12 15:08:56 -08:00
check-templates ruff: Fix UP035 Import from collections.abc, typing instead. 2024-07-13 22:28:22 -07:00
check-thirdparty check-thirdparty: License under GPLv2+. 2022-06-26 17:33:11 -07:00
clean-branches Rename default branch to ‘main’. 2021-09-06 12:56:35 -07:00
commit-message-lint commit-message-lint: Take release branches into account. 2022-07-22 10:39:05 -07:00
commit-msg commit-msg: Don’t change the current directory for non-Vagrant. 2023-05-23 12:24:44 -07:00
conf.ini-template
convert-help-center-docs-to-mdx help-beta: Convert admonitions to asides and KeyboardTip. 2025-05-15 11:53:40 -07:00
coveragerc coverage: Clean up coverage configuration. 2023-05-31 13:53:04 -07:00
create-api-changelog tools: Use .md extension for temporary API changelog files. 2025-04-13 20:22:53 -07:00
deploy-branch Rename default branch to ‘main’. 2021-09-06 12:56:35 -07:00
diagnose requirements: Migrate to uv. 2025-02-24 22:29:24 -08:00
documentation.vnufilter docs: Update VNU filter to ignore warnings about sphinx-design. 2024-03-22 16:54:57 -07:00
duplicate_commits.json
fetch-contributor-data install: Remove --cacert and CUSTOM_CA_CERTIFICATES. 2025-02-24 22:29:24 -08:00
fetch-pull-request
fetch-rebase-pull-request Rename default branch to ‘main’. 2021-09-06 12:56:35 -07:00
find-unused-css web: Move web app to ‘web’ directory. 2023-02-23 16:04:17 -08:00
lint ruff: Partially reformat Python with Ruff 0.9 (2025 style). 2025-01-14 09:42:16 -08:00
merge-api-changelogs tools: Update files in api_docs folder along with zulip.yaml. 2025-05-12 16:00:29 -07:00
pre-commit
provision requirements: Migrate to uv. 2025-02-24 22:29:24 -08:00
push-to-pull-request push-to-pull-request: Accept intermixed options and arguments again. 2024-02-01 17:08:44 -08:00
python-warnings.bash provision: Ignore Python warnings while building requirements. 2025-03-19 17:15:09 -07:00
README.md
rebuild-dev-database
rebuild-test-database refactor: Rename huddle to direct_message_group in non api files. 2024-07-31 23:25:56 -07:00
release release: Parse version.py using the language it was written in. 2024-07-25 13:17:49 -07:00
release-tarball-exclude.txt puppet: Rename puppet/zulip_ops to puppet/kandra. 2024-02-06 17:56:27 -08:00
renumber-migrations ruff: Fix SIM115 Use a context manager for opening files. 2024-10-20 18:16:27 -07:00
reset-to-pull-request
review ruff: Fix UP006 Use list instead of List for type annotation. 2024-07-13 22:28:22 -07:00
run-codespell dependencies: Switch to pnpm. 2023-03-20 15:48:29 -07:00
run-dev help-beta: Pass allowedHosts when running dev server. 2025-05-08 09:40:12 -07:00
run-mypy ruff: Fix SIM905 Consider using a list literal instead of str.split. 2025-03-14 17:31:50 -07:00
run-tsc
semgrep-py.yml migrations: Backfill is_channel_message. 2025-03-18 09:34:11 -07:00
setup-git-repo
show-profile-results
stop-run-dev
tail-ses ruff: Fix SIM117 Use a single with statement with multiple contexts. 2024-07-14 13:48:32 -07:00
test-all requirements: Migrate to uv. 2025-02-24 22:29:24 -08:00
test-api test-api: Make desdemona consenting to private data export. 2025-03-28 23:05:19 -07:00
test-backend test-backend: Remove outdated reference to MarkdownTest class. 2025-04-01 17:58:22 -07:00
test-documentation ruff: Fix UP035 Import from collections.abc, typing instead. 2024-07-13 22:28:22 -07:00
test-help-documentation ruff: Bump target-version from py38 to py310. 2024-07-13 22:28:22 -07:00
test-js-with-node server_events: Extract interface for compose, transmit to new module. 2025-05-12 11:07:12 -07:00
test-js-with-puppeteer test-js-with-puppeteer: Run with node --experimental-strip-types. 2024-11-13 09:18:56 -08:00
test-migrations
test-queue-worker-reload ruff: Fix UP007 Use X | Y for type annotations. 2024-07-13 22:28:22 -07:00
test-run-dev ruff: Fix UP006 Use list instead of List for type annotation. 2024-07-13 22:28:22 -07:00
test-tools requirements: Migrate to uv. 2025-02-24 22:29:24 -08:00
total-contributions tools: Treat hosted weblate as a bot in contributor counts. 2025-03-25 09:55:20 -07:00
update-prod-static integration-docs: Migrate PythonAPIIntegration docs. 2025-03-26 11:19:31 -07:00
update-zuliprc-api-field python: Replace universal_newlines with text. 2022-01-23 22:16:01 -08:00
upload-release python: Simplify with str.removeprefix, str.removesuffix. 2024-09-03 12:30:16 -07:00
webpack webpack: Allow customizing the 5xx page. 2025-03-24 14:39:47 -07:00
zanitizer
zanitizer_config.pm.sample

This directory contains scripts that are used in building, managing, testing, and other forms of work in a Zulip development environment. Note that tools that are also useful in production belong in scripts/ or should be Django management commands.

For more details, see https://zulip.readthedocs.io/en/latest/overview/directory-structure.html.