mirror of https://github.com/zulip/zulip.git
docs: Add missing space to compound verbs “log in”, “set up”, etc.
Noun: backup, checkout, cleanup, login, logout, setup, shutdown, signup, timeout. Verb: back up, check out, clean up, log in, log out, set up, shut down, sign up, time out. Signed-off-by: Anders Kaseorg <anders@zulip.com>
This commit is contained in:
parent
e3f2ffa681
commit
6060d0d364
|
@ -75,7 +75,7 @@ working on a proposal until 2 weeks before the deadline.
|
||||||
|
|
||||||
## Getting started
|
## Getting started
|
||||||
|
|
||||||
We have an easy-to-setup development environment, and a library of
|
We have an easy-to-set-up development environment, and a library of
|
||||||
tasks that are great for first-time contributors. Use
|
tasks that are great for first-time contributors. Use
|
||||||
[our first-time Zulip developer guide](../overview/contributing.html#your-first-codebase-contribution)
|
[our first-time Zulip developer guide](../overview/contributing.html#your-first-codebase-contribution)
|
||||||
to get your Zulip development environment set up and to find your first issue. If you have any
|
to get your Zulip development environment set up and to find your first issue. If you have any
|
||||||
|
|
|
@ -210,14 +210,14 @@ environment directory without worrying about tests.
|
||||||
Zulip uses [django-two-factor-auth][0] as a beta 2FA integration.
|
Zulip uses [django-two-factor-auth][0] as a beta 2FA integration.
|
||||||
|
|
||||||
To enable 2FA, set `TWO_FACTOR_AUTHENTICATION_ENABLED` in settings to
|
To enable 2FA, set `TWO_FACTOR_AUTHENTICATION_ENABLED` in settings to
|
||||||
`True`, then log into Zulip and add otp device from settings
|
`True`, then log in to Zulip and add an OTP device from the settings
|
||||||
page. Once the device is added, password based authentication will ask
|
page. Once the device is added, password based authentication will ask
|
||||||
for one-time-password. In the development environment., this
|
for a one-time-password. In the development environment, this
|
||||||
one-time-password will be printed to the console when you try to
|
one-time-password will be printed to the console when you try to
|
||||||
login. Just copy-paste it into the form field to continue.
|
log in. Just copy-paste it into the form field to continue.
|
||||||
|
|
||||||
Direct development logins don't prompt for 2FA one-time-passwords, so
|
Direct development logins don't prompt for 2FA one-time-passwords, so
|
||||||
to test 2FA in development, make sure that you login using a
|
to test 2FA in development, make sure that you log in using a
|
||||||
password. You can get the passwords for the default test users using
|
password. You can get the passwords for the default test users using
|
||||||
`./manage.py print_initial_password`.
|
`./manage.py print_initial_password`.
|
||||||
|
|
||||||
|
|
|
@ -59,7 +59,7 @@ ignoring the parts about `vagrant` (since you're not using it).
|
||||||
|
|
||||||
## Installing directly on Windows 10 with WSL 2
|
## Installing directly on Windows 10 with WSL 2
|
||||||
|
|
||||||
Zulip's development environment is most easily setup on Windows using
|
Zulip's development environment is most easily set up on Windows using
|
||||||
the [WSL 2](https://docs.microsoft.com/en-us/windows/wsl/wsl2-about)
|
the [WSL 2](https://docs.microsoft.com/en-us/windows/wsl/wsl2-about)
|
||||||
installation method described here.
|
installation method described here.
|
||||||
|
|
||||||
|
@ -122,7 +122,7 @@ installation method described here.
|
||||||
|
|
||||||
```eval_rst
|
```eval_rst
|
||||||
.. note::
|
.. note::
|
||||||
If you shutdown WSL, after starting it again, you will have to manually start
|
If you shut down WSL, after starting it again, you will have to manually start
|
||||||
the services using ``./tools/wsl/start_services``.
|
the services using ``./tools/wsl/start_services``.
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -1097,7 +1097,7 @@ Zulip installations; it has minimal changes for existing servers.
|
||||||
- Upgraded to modern versions of most of our stale dependencies.
|
- Upgraded to modern versions of most of our stale dependencies.
|
||||||
- Updated our CSS toolchain to support hot module reloading.
|
- Updated our CSS toolchain to support hot module reloading.
|
||||||
- Updated numerous pages within the /help/ site.
|
- Updated numerous pages within the /help/ site.
|
||||||
- We no longer require re-authing to signup after trying to log in with
|
- We no longer require re-authing to sign up after trying to log in with
|
||||||
an OAuth authentication backend (GitHub or Google).
|
an OAuth authentication backend (GitHub or Google).
|
||||||
- Made major improvements to the Help Center.
|
- Made major improvements to the Help Center.
|
||||||
- Improved system for configuring the S3 file uploads backend.
|
- Improved system for configuring the S3 file uploads backend.
|
||||||
|
|
|
@ -137,7 +137,7 @@ of the following configurations:
|
||||||
the `zproject.backends.ZulipLDAPAuthBackend` auth backend, in
|
the `zproject.backends.ZulipLDAPAuthBackend` auth backend, in
|
||||||
`AUTHENTICATION_BACKENDS` in `/etc/zulip/settings.py`. After doing so
|
`AUTHENTICATION_BACKENDS` in `/etc/zulip/settings.py`. After doing so
|
||||||
(and as always [restarting the Zulip server](settings.md) to ensure
|
(and as always [restarting the Zulip server](settings.md) to ensure
|
||||||
your settings changes take effect), you should be able to log into
|
your settings changes take effect), you should be able to log in to
|
||||||
Zulip by entering your email address and LDAP password on the Zulip
|
Zulip by entering your email address and LDAP password on the Zulip
|
||||||
login form.
|
login form.
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@ email addresses and send notifications.
|
||||||
|
|
||||||
1. Fill out the section of `/etc/zulip/settings.py` headed "Outgoing
|
1. Fill out the section of `/etc/zulip/settings.py` headed "Outgoing
|
||||||
email (SMTP) settings". This includes the hostname and typically
|
email (SMTP) settings". This includes the hostname and typically
|
||||||
the port to reach your SMTP provider, and the username to log into
|
the port to reach your SMTP provider, and the username to log in to
|
||||||
it. You'll also want to fill out the noreply email section.
|
it. You'll also want to fill out the noreply email section.
|
||||||
|
|
||||||
1. Put the password for the SMTP user account in
|
1. Put the password for the SMTP user account in
|
||||||
|
|
|
@ -12,7 +12,7 @@ these first, before beginning the user-facing downtime. However, if
|
||||||
you'd like to watch the downtime phase of the upgrade closely, you
|
you'd like to watch the downtime phase of the upgrade closely, you
|
||||||
can run them manually before starting the upgrade:
|
can run them manually before starting the upgrade:
|
||||||
|
|
||||||
1. Log into your Zulip server as the `zulip` user (or as `root` and
|
1. Log in to your Zulip server as the `zulip` user (or as `root` and
|
||||||
then run `su zulip` to drop privileges), and `cd
|
then run `su zulip` to drop privileges), and `cd
|
||||||
/home/zulip/deployments/current`
|
/home/zulip/deployments/current`
|
||||||
2. Run `./manage.py dbshell`. This will open a shell connected to the
|
2. Run `./manage.py dbshell`. This will open a shell connected to the
|
||||||
|
|
|
@ -70,7 +70,7 @@ The backup tool provides the following options:
|
||||||
console output will show the path to the output tarball.
|
console output will show the path to the output tarball.
|
||||||
- `--skip-db`: Skip backup of the database. Useful if you're using a
|
- `--skip-db`: Skip backup of the database. Useful if you're using a
|
||||||
remote PostgreSQL host with its own backup system and just need to
|
remote PostgreSQL host with its own backup system and just need to
|
||||||
backup non-database state.
|
back up non-database state.
|
||||||
- `--skip-uploads`: If `LOCAL_UPLOADS_DIR` is set, user-uploaded files
|
- `--skip-uploads`: If `LOCAL_UPLOADS_DIR` is set, user-uploaded files
|
||||||
in that directory will be ignored.
|
in that directory will be ignored.
|
||||||
|
|
||||||
|
@ -126,7 +126,7 @@ server, including the database, settings, secrets from
|
||||||
`/etc/zulip`, and user-uploaded files stored on the Zulip server.
|
`/etc/zulip`, and user-uploaded files stored on the Zulip server.
|
||||||
|
|
||||||
The following data is not included in these backup archives,
|
The following data is not included in these backup archives,
|
||||||
and you may want to backup separately:
|
and you may want to back up separately:
|
||||||
|
|
||||||
* The server access/error logs from `/var/log/zulip`. The Zulip
|
* The server access/error logs from `/var/log/zulip`. The Zulip
|
||||||
server only appends to logs, and they can be very large compared to
|
server only appends to logs, and they can be very large compared to
|
||||||
|
|
|
@ -55,7 +55,7 @@ install process:
|
||||||
puppet-agent[29873]: Could not request certificate: Failed to open TCP connection to puppet:8140
|
puppet-agent[29873]: Could not request certificate: Failed to open TCP connection to puppet:8140
|
||||||
```
|
```
|
||||||
|
|
||||||
So you'll need to shutdown any Puppet servers.
|
So you'll need to shut down any Puppet servers.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
$ sudo service puppet-agent stop
|
$ sudo service puppet-agent stop
|
||||||
|
|
|
@ -69,7 +69,7 @@ actual email clients. This is important because web email clients
|
||||||
have limited CSS functionality, autolinkify things, and otherwise
|
have limited CSS functionality, autolinkify things, and otherwise
|
||||||
mutate the HTML email one can see previewed on `/emails`.
|
mutate the HTML email one can see previewed on `/emails`.
|
||||||
|
|
||||||
To do this sort of testing, you need to setup an outgoing SMTP
|
To do this sort of testing, you need to set up an outgoing SMTP
|
||||||
provider. Our production advice for
|
provider. Our production advice for
|
||||||
[Gmail](../production/email.html#using-gmail-for-outgoing-email) and
|
[Gmail](../production/email.html#using-gmail-for-outgoing-email) and
|
||||||
[transactional email
|
[transactional email
|
||||||
|
|
|
@ -149,7 +149,7 @@ structure of the system, when thinking about changes to it:
|
||||||
following a topic (to get notifications for messages only within
|
following a topic (to get notifications for messages only within
|
||||||
that topic in a stream). There are a lot of different workflows
|
that topic in a stream). There are a lot of different workflows
|
||||||
possible with Zulip's threading, and it's important to make it easy
|
possible with Zulip's threading, and it's important to make it easy
|
||||||
for users to setup Zulip's notification to fit as many of those
|
for users to set up Zulip's notification to fit as many of those
|
||||||
workflows as possible.
|
workflows as possible.
|
||||||
* **Message editing**. Zulip supports editing messages, and that
|
* **Message editing**. Zulip supports editing messages, and that
|
||||||
interacts with notifications in ways that require careful handling:
|
interacts with notifications in ways that require careful handling:
|
||||||
|
|
|
@ -5,7 +5,7 @@ used for a variety of purposes:
|
||||||
|
|
||||||
* Asynchronously doing expensive operations like sending email
|
* Asynchronously doing expensive operations like sending email
|
||||||
notifications which can take seconds per email and thus would
|
notifications which can take seconds per email and thus would
|
||||||
otherwise timeout when 100s are triggered at once (E.g. inviting a
|
otherwise time out when 100s are triggered at once (E.g. inviting a
|
||||||
lot of new users to a realm).
|
lot of new users to a realm).
|
||||||
|
|
||||||
* Asynchronously doing non-time-critical somewhat expensive operations
|
* Asynchronously doing non-time-critical somewhat expensive operations
|
||||||
|
|
|
@ -57,6 +57,6 @@ if [ -z "$QUIET" ]; then
|
||||||
echo
|
echo
|
||||||
echo " /home/zulip/deployments/current/manage.py generate_realm_creation_link"
|
echo " /home/zulip/deployments/current/manage.py generate_realm_creation_link"
|
||||||
echo
|
echo
|
||||||
echo "This generates a secure, single-use link that you you can use to setup "
|
echo "This generates a secure, single-use link that you you can use to set up "
|
||||||
echo "a Zulip organization from the convenience of your web browser."
|
echo "a Zulip organization from the convenience of your web browser."
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -99,7 +99,7 @@ function report_error(
|
||||||
|
|
||||||
last_report_attempt.set(key, Date.now());
|
last_report_attempt.set(key, Date.now());
|
||||||
|
|
||||||
// TODO: If an exception gets thrown before we setup ajax calls
|
// TODO: If an exception gets thrown before we set up ajax calls
|
||||||
// to include the CSRF token, our ajax call will fail. The
|
// to include the CSRF token, our ajax call will fail. The
|
||||||
// elegant thing to do in that case is to either wait until that
|
// elegant thing to do in that case is to either wait until that
|
||||||
// setup is done or do it ourselves and then retry.
|
// setup is done or do it ourselves and then retry.
|
||||||
|
|
|
@ -592,7 +592,7 @@ export function end_message_row_edit(row) {
|
||||||
const listeners = currently_editing_messages.get(message.id).listeners;
|
const listeners = currently_editing_messages.get(message.id).listeners;
|
||||||
const edit_box = document.querySelector(`#message_edit_content_${CSS.escape(message.id)}`);
|
const edit_box = document.querySelector(`#message_edit_content_${CSS.escape(message.id)}`);
|
||||||
if (listeners !== undefined) {
|
if (listeners !== undefined) {
|
||||||
// Event listeners to cleanup are only set in some edit types
|
// Event listeners to clean up are only set in some edit types
|
||||||
edit_box.removeEventListener("mousedown", listeners[0]);
|
edit_box.removeEventListener("mousedown", listeners[0]);
|
||||||
document.body.removeEventListener("mouseup", listeners[1]);
|
document.body.removeEventListener("mouseup", listeners[1]);
|
||||||
}
|
}
|
||||||
|
|
|
@ -222,7 +222,7 @@ function do_reload_app(send_after_reload, save_pointer, save_narrow, save_compos
|
||||||
try {
|
try {
|
||||||
server_events.cleanup_event_queue();
|
server_events.cleanup_event_queue();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
blueslip.error("Failed to cleanup before reloading", undefined, error.stack);
|
blueslip.error("Failed to clean up before reloading", undefined, error.stack);
|
||||||
}
|
}
|
||||||
|
|
||||||
window.location.reload(true);
|
window.location.reload(true);
|
||||||
|
|
|
@ -308,7 +308,7 @@ export function initialize() {
|
||||||
}
|
}
|
||||||
|
|
||||||
export function cleanup_event_queue() {
|
export function cleanup_event_queue() {
|
||||||
// Submit a request to the server to cleanup our event queue
|
// Submit a request to the server to clean up our event queue
|
||||||
if (page_params.event_queue_expired === true || page_params.no_event_queue === true) {
|
if (page_params.event_queue_expired === true || page_params.no_event_queue === true) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,7 +39,7 @@
|
||||||
{{#if page_params.two_fa_enabled }}
|
{{#if page_params.two_fa_enabled }}
|
||||||
<p for="two_factor_auth" class="inline-block title">
|
<p for="two_factor_auth" class="inline-block title">
|
||||||
{{t "Two factor authentication" }}: {{#if page_params.two_fa_enabled_user }}{{t "Enabled" }}{{else}}{{t "Disabled" }}{{/if}}
|
{{t "Two factor authentication" }}: {{#if page_params.two_fa_enabled_user }}{{t "Enabled" }}{{else}}{{t "Disabled" }}{{/if}}
|
||||||
<a target="_blank" rel="noopener noreferrer" id="two_factor_auth" href="/account/two_factor/" title="{{t 'Setup two factor authentication' }}">[{{t "Setup" }}]</a>
|
<a target="_blank" rel="noopener noreferrer" id="two_factor_auth" href="/account/two_factor/" title="{{t 'Set up two factor authentication' }}">[{{t "Setup" }}]</a>
|
||||||
</p>
|
</p>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if login_link_disabled %}
|
{% if login_link_disabled %}
|
||||||
{% else %}
|
{% else %}
|
||||||
<li><a href="{{ login_url }}">{{ _("Login") }}</a></li>
|
<li><a href="{{ login_url }}">{{ _("Log in") }}</a></li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if register_link_disabled %}
|
{% if register_link_disabled %}
|
||||||
{% elif only_sso %}
|
{% elif only_sso %}
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
Zulip supports using SAML authentication for single sign-on, both when
|
Zulip supports using SAML authentication for single sign-on, both when
|
||||||
self-hosting or on the Zulip Cloud Plus plan.
|
self-hosting or on the Zulip Cloud Plus plan.
|
||||||
|
|
||||||
This page documents details on how to setup SAML authentication with
|
This page documents details on how to set up SAML authentication with
|
||||||
Zulip with various common SAML Identity Providers.
|
Zulip with various common SAML Identity Providers.
|
||||||
|
|
||||||
## Configure SAML with Okta
|
## Configure SAML with Okta
|
||||||
|
|
|
@ -26,7 +26,7 @@ The Zulip plugin is now registered with Redmine!
|
||||||
|
|
||||||
1. On your {{ settings_html|safe }}, create a new Redmine bot.
|
1. On your {{ settings_html|safe }}, create a new Redmine bot.
|
||||||
|
|
||||||
2. Log into your Redmine instance, click on **Administration** in the top-left
|
2. Log in to your Redmine instance, click on **Administration** in the top-left
|
||||||
corner, then click on **Plugins**.
|
corner, then click on **Plugins**.
|
||||||
|
|
||||||
3. Find the **Redmine Zulip** plugin, and click **Configure**. Fill
|
3. Find the **Redmine Zulip** plugin, and click **Configure**. Fill
|
||||||
|
|
|
@ -43,7 +43,7 @@
|
||||||
{% if login_link_disabled %}
|
{% if login_link_disabled %}
|
||||||
{% else %}
|
{% else %}
|
||||||
<li>
|
<li>
|
||||||
<a href="/login/">Login</a>
|
<a href="/login/">Log in</a>
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if register_link_disabled %}
|
{% if register_link_disabled %}
|
||||||
|
|
|
@ -137,9 +137,10 @@ class BaseDocumentationSpider(scrapy.Spider):
|
||||||
|
|
||||||
def _make_requests(self, url: str) -> Iterator[Request]:
|
def _make_requests(self, url: str) -> Iterator[Request]:
|
||||||
# These URLs are for Zulip's webapp, which with recent changes
|
# These URLs are for Zulip's webapp, which with recent changes
|
||||||
# can be accessible without login an account. While we do
|
# can be accessible without logging into an account. While we
|
||||||
# crawl documentation served by the webapp (E.g. /help/), we
|
# do crawl documentation served by the webapp (e.g. /help/),
|
||||||
# don't want to crawl the webapp itself, so we exclude these.
|
# we don't want to crawl the webapp itself, so we exclude
|
||||||
|
# these.
|
||||||
if (
|
if (
|
||||||
url in ["http://localhost:9981/", "http://localhost:9981"]
|
url in ["http://localhost:9981/", "http://localhost:9981"]
|
||||||
or url.startswith("http://localhost:9981/#")
|
or url.startswith("http://localhost:9981/#")
|
||||||
|
|
|
@ -19,7 +19,7 @@ API token.
|
||||||
## Step 2: Create your DigitalOcean API token
|
## Step 2: Create your DigitalOcean API token
|
||||||
|
|
||||||
Once you've been added to the Zulip team,
|
Once you've been added to the Zulip team,
|
||||||
[login](https://cloud.digitalocean.com/droplets) to the DigitalOcean control
|
[log in](https://cloud.digitalocean.com/droplets) to the DigitalOcean control
|
||||||
panel and [create your personal API token][do-create-api-token]. **Make sure
|
panel and [create your personal API token][do-create-api-token]. **Make sure
|
||||||
you create your API token under the Zulip team.** (It should look something
|
you create your API token under the Zulip team.** (It should look something
|
||||||
like [this][image-zulip-team]).
|
like [this][image-zulip-team]).
|
||||||
|
@ -135,7 +135,7 @@ Rough steps:
|
||||||
1. `tools/run-dev.py`, and check that `base.zulipdev.org:9991` is up and running.
|
1. `tools/run-dev.py`, and check that `base.zulipdev.org:9991` is up and running.
|
||||||
1. `> ~/.bash_history && history -c && sudo shutdown -h now` to clear any command
|
1. `> ~/.bash_history && history -c && sudo shutdown -h now` to clear any command
|
||||||
line history (To reduce chance of confusing new contributors in case you made a typo)
|
line history (To reduce chance of confusing new contributors in case you made a typo)
|
||||||
and shutdown the droplet.
|
and shut down the droplet.
|
||||||
1. Go to the Images tab on DigitalOcean, and "Take a Snapshot".
|
1. Go to the Images tab on DigitalOcean, and "Take a Snapshot".
|
||||||
1. Wait for several minutes.
|
1. Wait for several minutes.
|
||||||
1. Do something like `curl -X GET -H "Content-Type: application/json"
|
1. Do something like `curl -X GET -H "Content-Type: application/json"
|
||||||
|
@ -157,7 +157,7 @@ Rough steps:
|
||||||
1. Log in to the Zulip organization view, rather than via your personal account.
|
1. Log in to the Zulip organization view, rather than via your personal account.
|
||||||
1. Create a new droplet in DigitalOcean with 2GB RAM and `base.zulipdev.org` as the
|
1. Create a new droplet in DigitalOcean with 2GB RAM and `base.zulipdev.org` as the
|
||||||
SSH authentication key.
|
SSH authentication key.
|
||||||
1. Login to the droplet as root user. Make sure to point the SSH program to the private
|
1. Log in to the droplet as root user. Make sure to point the SSH program to the private
|
||||||
key of `base.zulipdev.org` during this step.
|
key of `base.zulipdev.org` during this step.
|
||||||
1. Create a user called `zulipdev` and add it to the `sudo` group.
|
1. Create a user called `zulipdev` and add it to the `sudo` group.
|
||||||
1. Make sudo of `zulipdev` user passwordless by including
|
1. Make sudo of `zulipdev` user passwordless by including
|
||||||
|
|
|
@ -24,7 +24,7 @@ work correctly. These secrets are passed as environment variables to the GitHub
|
||||||
|
|
||||||
Also pass the following as environment variables in `.github/workflows/update-oneclick-apps.yml`.
|
Also pass the following as environment variables in `.github/workflows/update-oneclick-apps.yml`.
|
||||||
* `PYTHON_DIGITALOCEAN_REQUEST_TIMEOUT_SEC` - This configures the maximum number of seconds
|
* `PYTHON_DIGITALOCEAN_REQUEST_TIMEOUT_SEC` - This configures the maximum number of seconds
|
||||||
to wait before the requests made by `python-digitalocean` timeout. If not configured, it's
|
to wait before the requests made by `python-digitalocean` time out. If not configured, it's
|
||||||
common for the requests to take 20+ minutes before getting timed out.
|
common for the requests to take 20+ minutes before getting timed out.
|
||||||
|
|
||||||
### Verifying the one click app image
|
### Verifying the one click app image
|
||||||
|
|
|
@ -448,7 +448,7 @@ def do_login(request: HttpRequest, user_profile: UserProfile) -> None:
|
||||||
request._requestor_for_logs = user_profile.format_requestor_for_logs()
|
request._requestor_for_logs = user_profile.format_requestor_for_logs()
|
||||||
process_client(request, user_profile, is_browser_view=True)
|
process_client(request, user_profile, is_browser_view=True)
|
||||||
if settings.TWO_FACTOR_AUTHENTICATION_ENABLED:
|
if settings.TWO_FACTOR_AUTHENTICATION_ENABLED:
|
||||||
# Login with two factor authentication as well.
|
# Log in with two factor authentication as well.
|
||||||
do_two_factor_login(request, user_profile)
|
do_two_factor_login(request, user_profile)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -194,7 +194,8 @@ NON_EXPORTED_TABLES = {
|
||||||
"zerver_scheduledemail_users",
|
"zerver_scheduledemail_users",
|
||||||
"zerver_scheduledmessage",
|
"zerver_scheduledmessage",
|
||||||
# These tables are related to a user's 2FA authentication
|
# These tables are related to a user's 2FA authentication
|
||||||
# configuration, which will need to be re-setup on the new server.
|
# configuration, which will need to be set up again on the new
|
||||||
|
# server.
|
||||||
"two_factor_phonedevice",
|
"two_factor_phonedevice",
|
||||||
"otp_static_staticdevice",
|
"otp_static_staticdevice",
|
||||||
"otp_static_statictoken",
|
"otp_static_statictoken",
|
||||||
|
|
|
@ -16,9 +16,9 @@ class Command(ZulipBaseCommand):
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"--deactivated-only",
|
"--deactivated-only",
|
||||||
action="store_true",
|
action="store_true",
|
||||||
help="Only logout all users who are deactivated",
|
help="Only log out all users who are deactivated",
|
||||||
)
|
)
|
||||||
self.add_realm_args(parser, help="Only logout all users in a particular realm")
|
self.add_realm_args(parser, help="Only log out all users in a particular realm")
|
||||||
|
|
||||||
def handle(self, *args: Any, **options: Any) -> None:
|
def handle(self, *args: Any, **options: Any) -> None:
|
||||||
realm = self.get_realm(options)
|
realm = self.get_realm(options)
|
||||||
|
|
|
@ -145,7 +145,7 @@ class DocPageTest(ZulipTestCase):
|
||||||
if settings.ZILENCER_ENABLED:
|
if settings.ZILENCER_ENABLED:
|
||||||
self._test("/apps/", "Apps for every platform.")
|
self._test("/apps/", "Apps for every platform.")
|
||||||
self._test("/features/", "Beautiful messaging")
|
self._test("/features/", "Beautiful messaging")
|
||||||
self._test("/hello/", "Chat for distributed teams", landing_missing_strings=["Login"])
|
self._test("/hello/", "Chat for distributed teams", landing_missing_strings=["Log in"])
|
||||||
self._test("/why-zulip/", "Why Zulip?")
|
self._test("/why-zulip/", "Why Zulip?")
|
||||||
self._test("/for/open-source/", "for open source projects")
|
self._test("/for/open-source/", "for open source projects")
|
||||||
self._test("/for/research/", "for researchers")
|
self._test("/for/research/", "for researchers")
|
||||||
|
|
|
@ -442,7 +442,7 @@ class SingleUserPresenceTests(ZulipTestCase):
|
||||||
def test_single_user_get(self) -> None:
|
def test_single_user_get(self) -> None:
|
||||||
reset_emails_in_zulip_realm()
|
reset_emails_in_zulip_realm()
|
||||||
|
|
||||||
# First, we setup the test with some data
|
# First, we set up the test with some data
|
||||||
user = self.example_user("othello")
|
user = self.example_user("othello")
|
||||||
self.login_user(user)
|
self.login_user(user)
|
||||||
result = self.client_post("/json/users/me/presence", {"status": "active"})
|
result = self.client_post("/json/users/me/presence", {"status": "active"})
|
||||||
|
@ -637,7 +637,7 @@ class UserPresenceAggregationTests(ZulipTestCase):
|
||||||
|
|
||||||
class GetRealmStatusesTest(ZulipTestCase):
|
class GetRealmStatusesTest(ZulipTestCase):
|
||||||
def test_get_statuses(self) -> None:
|
def test_get_statuses(self) -> None:
|
||||||
# Setup the test by simulating users reporting their presence data.
|
# Set up the test by simulating users reporting their presence data.
|
||||||
othello = self.example_user("othello")
|
othello = self.example_user("othello")
|
||||||
hamlet = self.example_user("hamlet")
|
hamlet = self.example_user("hamlet")
|
||||||
|
|
||||||
|
|
|
@ -1665,7 +1665,7 @@ so we didn't send them an invitation. We did send invitations to everyone else!"
|
||||||
`emails_restricted_to_domains = False`, but later change
|
`emails_restricted_to_domains = False`, but later change
|
||||||
`emails_restricted_to_domains = True`, the invitation should
|
`emails_restricted_to_domains = True`, the invitation should
|
||||||
succeed but the invitee's signup attempt should fail as
|
succeed but the invitee's signup attempt should fail as
|
||||||
users are not allowed to signup using email containing +
|
users are not allowed to sign up using email containing +
|
||||||
when the realm is restricted to domain.
|
when the realm is restricted to domain.
|
||||||
"""
|
"""
|
||||||
zulip_realm = get_realm("zulip")
|
zulip_realm = get_realm("zulip")
|
||||||
|
|
|
@ -4974,7 +4974,7 @@ class GetSubscribersTest(ZulipTestCase):
|
||||||
self.assertTrue(stream_dict["stream_id"] not in unsub_ids)
|
self.assertTrue(stream_dict["stream_id"] not in unsub_ids)
|
||||||
|
|
||||||
# The Rome stream has is_web_public=True, with default
|
# The Rome stream has is_web_public=True, with default
|
||||||
# subscribers not setup by this test, so we do the
|
# subscribers not set up by this test, so we do the
|
||||||
# following check only for the streams we created.
|
# following check only for the streams we created.
|
||||||
if stream_dict["name"] in web_public_streams:
|
if stream_dict["name"] in web_public_streams:
|
||||||
self.assertEqual(len(stream_dict["subscribers"]), len(users_to_subscribe))
|
self.assertEqual(len(stream_dict["subscribers"]), len(users_to_subscribe))
|
||||||
|
|
|
@ -344,7 +344,7 @@ class UserGroupAPITestCase(ZulipTestCase):
|
||||||
members = get_memberships_of_users(user_group, [hamlet, othello, aaron])
|
members = get_memberships_of_users(user_group, [hamlet, othello, aaron])
|
||||||
self.assertEqual(len(members), 3)
|
self.assertEqual(len(members), 3)
|
||||||
|
|
||||||
# For normal testing we again login with hamlet
|
# For normal testing we again log in with hamlet
|
||||||
self.logout()
|
self.logout()
|
||||||
self.login_user(hamlet)
|
self.login_user(hamlet)
|
||||||
# Test remove members
|
# Test remove members
|
||||||
|
|
|
@ -53,7 +53,7 @@ class ZephyrTest(ZulipTestCase):
|
||||||
), self.assertLogs(level="ERROR") as log:
|
), self.assertLogs(level="ERROR") as log:
|
||||||
result = post("zephyr", cred=cred)
|
result = post("zephyr", cred=cred)
|
||||||
|
|
||||||
self.assert_json_error(result, "We were unable to setup mirroring for you")
|
self.assert_json_error(result, "We were unable to set up mirroring for you")
|
||||||
self.assertIn("Error updating the user's ccache", log.output[0])
|
self.assertIn("Error updating the user's ccache", log.output[0])
|
||||||
|
|
||||||
with ccache_mock(return_value=b"1234"), mirror_mock(), ssh_mock() as ssh:
|
with ccache_mock(return_value=b"1234"), mirror_mock(), ssh_mock() as ssh:
|
||||||
|
|
|
@ -249,7 +249,7 @@ class ClientDescriptor:
|
||||||
def cleanup(self) -> None:
|
def cleanup(self) -> None:
|
||||||
# Before we can GC the event queue, we need to disconnect the
|
# Before we can GC the event queue, we need to disconnect the
|
||||||
# handler and notify the client (or connection server) so that
|
# handler and notify the client (or connection server) so that
|
||||||
# they can cleanup their own state related to the GC'd event
|
# they can clean up their own state related to the GC'd event
|
||||||
# queue. Finishing the handler before we GC ensures the
|
# queue. Finishing the handler before we GC ensures the
|
||||||
# invariant that event queues are idle when passed to
|
# invariant that event queues are idle when passed to
|
||||||
# `do_gc_event_queues` is preserved.
|
# `do_gc_event_queues` is preserved.
|
||||||
|
|
|
@ -679,7 +679,7 @@ class TwoFactorLoginView(BaseTwoFactorLoginView):
|
||||||
|
|
||||||
def done(self, form_list: List[Form], **kwargs: Any) -> HttpResponse:
|
def done(self, form_list: List[Form], **kwargs: Any) -> HttpResponse:
|
||||||
"""
|
"""
|
||||||
Login the user and redirect to the desired page.
|
Log in the user and redirect to the desired page.
|
||||||
|
|
||||||
We need to override this function so that we can redirect to
|
We need to override this function so that we can redirect to
|
||||||
realm.uri instead of '/'.
|
realm.uri instead of '/'.
|
||||||
|
|
|
@ -71,6 +71,6 @@ def webathena_kerberos_login(
|
||||||
)
|
)
|
||||||
except subprocess.CalledProcessError:
|
except subprocess.CalledProcessError:
|
||||||
logging.exception("Error updating the user's ccache", stack_info=True)
|
logging.exception("Error updating the user's ccache", stack_info=True)
|
||||||
return json_error(_("We were unable to setup mirroring for you"))
|
return json_error(_("We were unable to set up mirroring for you"))
|
||||||
|
|
||||||
return json_success()
|
return json_success()
|
||||||
|
|
|
@ -102,7 +102,7 @@ ALWAYS_SEND_ALL_HOTSPOTS = False
|
||||||
# FAKE_LDAP_MODE supports using a fake LDAP database in the
|
# FAKE_LDAP_MODE supports using a fake LDAP database in the
|
||||||
# development environment, without needing an LDAP server!
|
# development environment, without needing an LDAP server!
|
||||||
#
|
#
|
||||||
# Three modes are allowed, and each will setup Zulip and the fake LDAP
|
# Three modes are allowed, and each will set up Zulip and the fake LDAP
|
||||||
# database in a way appropriate for the corresponding mode described
|
# database in a way appropriate for the corresponding mode described
|
||||||
# in https://zulip.readthedocs.io/en/latest/production/authentication-methods.html#ldap-including-active-directory
|
# in https://zulip.readthedocs.io/en/latest/production/authentication-methods.html#ldap-including-active-directory
|
||||||
# (A) If users' email addresses are in LDAP and used as username.
|
# (A) If users' email addresses are in LDAP and used as username.
|
||||||
|
|
Loading…
Reference in New Issue