zulip/zerver/lib
Tim Abbott 24f527cb59 home: Don't send /register response for spectators.
In very large communities, computing page_params can be quite
expensive. Because we've moved the homepage for communities with web
public streams enabled to be the Zulip app, and it's common for
automation to frequently poll the homepage of a Zulip organization,
we'd like to keep those homepages cheap (as the login pages are).

We address this by prototyping something we may end up wanting to do
anyway -- having the web application do a `POST /register` API call in
order to fetch most page_params, and merging those with the mostly
webapp configuration page_params that we leave in the / response for
convenience.

This exact implementation is messy in a few ways:

* We rely on the assumption that ui_init.initialize_everything happens
  before all code that needs to inspect the page_params properties we
  are fetching via /register. This is likely mostly true, but nothing
  in the implementation enforces it.
* The bundle of ~25 keys that are in page_params ideally would be
  considered individually, with some moved to the /register API
  response and perhaps others eliminated or namespaced inside a
  webapp_settings object.
* It's weird to have the spectators network sequence different that
  from logged-in users, and potentially a maintainability risk.
* We might be able to arrange that the initial `/` response be
  cacheable, now that we're no longer embedding our metadata inside
  it. We've made no effort to do that as of yet.

Despite those issues, this commit solves an immediate problem and will
give us helpful experience with a model closer to the one we'll want
in order to happily support a web client that can be run locally
against a production Zulip server's data.

Co-authored-by: Anders Kaseorg <anders@zulip.com>
2022-05-05 15:20:46 -07:00
..
markdown Correctly hyphenate “non-”. 2022-04-27 22:10:31 -07:00
url_preview python: Use Python 3.8 typing.{Protocol,TypedDict}. 2022-04-27 12:57:49 -07:00
webhooks actions: Split out zerver.actions.message_send. 2022-04-14 17:14:34 -07:00
__init__.py
addressee.py docs: Fix many spelling mistakes. 2022-02-07 18:51:06 -08:00
alert_words.py docs: Remove highlight parameters from links. 2022-02-16 13:15:39 -08:00
async_utils.py requirements: Upgrade Python requirements. 2022-05-03 10:10:06 -07:00
attachments.py python: Fix mypy no_implicit_reexport errors. 2021-07-16 14:02:31 -07:00
avatar.py avatar: Remove ?x=x kludge. 2021-10-14 12:47:43 -07:00
avatar_hash.py typing: Improve typing with assertions. 2021-08-20 05:54:19 -07:00
bot_config.py bot_config: Placate mypy 0.930. 2021-12-28 09:31:55 -08:00
bot_lib.py actions: Split out zerver.actions.message_send. 2022-04-14 17:14:34 -07:00
bot_storage.py
bulk_create.py bulk_create: Copy realm-level defaults in bulk_create_users. 2022-05-04 12:52:43 -07:00
cache.py python: Excise None from pointlessly nullable booleans. 2022-04-27 12:40:14 -07:00
cache_helpers.py session: Enforce that changes cannot happen in a transaction. 2022-03-15 13:52:15 -07:00
camo.py python: Convert "".format to Python 3.6 f-strings. 2021-08-02 15:53:52 -07:00
ccache.py python: Remove default "utf8" argument for encode(), decode(). 2021-08-02 15:53:52 -07:00
compatibility.py compatibility: Shift functions to new module. 2021-06-05 07:33:25 -07:00
context_managers.py
create_user.py bulk_create: Copy realm-level defaults in bulk_create_users. 2022-05-04 12:52:43 -07:00
data_types.py
db.py db: Fix types. 2022-03-24 19:16:52 -07:00
debug.py python: Accept Optional[FrameType] in signal handlers. 2021-12-28 09:31:55 -08:00
dev_ldap_directory.py
digest.py digest: Don't send emails to deactivated users, even if queued. 2022-04-15 14:32:55 -07:00
display_recipient.py python: Use Python 3.8 typing.{Protocol,TypedDict}. 2022-04-27 12:57:49 -07:00
domains.py python: Convert deprecated Django ugettext alias to gettext. 2021-04-15 18:01:34 -07:00
drafts.py actions: Split out zerver.lib.recipient_users. 2022-04-14 17:14:30 -07:00
email_mirror.py actions: Split out zerver.actions.message_send. 2022-04-14 17:14:34 -07:00
email_mirror_helpers.py email_mirror: Move ZulipEmailForwardUserError into email_mirror_helpers. 2021-08-31 16:37:54 -07:00
email_notifications.py email_notifications: Soft reactivate mentioned users. 2022-04-27 16:43:54 -07:00
email_validation.py docs: Fix many spelling mistakes. 2022-02-07 18:51:06 -08:00
emoji.py emoji: Add backend changes to support still image for animated emojis. 2021-09-12 07:13:04 +00:00
error_notify.py actions: Split out zerver.actions.message_send. 2022-04-14 17:14:34 -07:00
event_schema.py backend: Add `org_type` to realm settings updates and events. 2022-04-26 16:29:12 -07:00
events.py events: Add support for spectator access to /register. 2022-05-05 15:20:44 -07:00
exceptions.py zilencer: Stop serving requests from deactivated remote servers. 2022-01-21 14:56:04 -08:00
export.py python: Use Python 3.8 typing.{Protocol,TypedDict}. 2022-04-27 12:57:49 -07:00
external_accounts.py docs: Fix many spelling mistakes. 2022-02-07 18:51:06 -08:00
fix_unreads.py models: Use default db table name for UserTopic. 2021-09-17 12:14:28 -07:00
generate_test_data.py populate_db: Generate resolved topics for testing. 2021-08-03 16:42:09 -07:00
github.py fetch-contributor-data: Use builtin backoff. 2021-09-01 05:34:13 -07:00
home.py home: Don't send /register response for spectators. 2022-05-05 15:20:46 -07:00
hotspots.py hotspots: Remove intro_reply hotspot. 2021-12-07 21:55:59 -08:00
html_diff.py html_diff: Handle empty differences between empty strings. 2021-10-18 18:27:40 -07:00
html_to_text.py
i18n.py i18n: Add function to get default language for new users. 2022-04-28 15:03:26 -07:00
import_realm.py import: Default the S3 metadata user of emoji to the first owner. 2022-04-28 16:51:58 -07:00
initial_password.py initial_password: Add explicit development environment assertion. 2022-03-21 12:05:59 -07:00
integrations.py webhooks: Rename Yo App to Yo. 2021-12-22 14:05:17 -08:00
logging_util.py python: Remove duplicates of global imports inside functions. 2022-01-12 13:50:12 -08:00
management.py management: Remove unnecessary default=SUPPRESS logic. 2022-03-21 12:05:59 -07:00
mdiff.py python: Replace universal_newlines with text. 2022-01-23 22:16:01 -08:00
mention.py performance: Cache stream lookups in MentionBackend. 2021-12-30 11:28:15 -08:00
message.py python: Use Python 3.8 typing.{Protocol,TypedDict}. 2022-04-27 12:57:49 -07:00
migrate.py typing: Replace CursorObj by CursorWrapper. 2021-08-20 05:54:19 -07:00
mobile_auth_otp.py
name_restrictions.py docs: Fix many spelling mistakes. 2022-02-07 18:51:06 -08:00
narrow.py docs: Fix many spelling mistakes. 2022-02-07 18:51:06 -08:00
notes.py docs: Fix many spelling mistakes. 2022-02-07 18:51:06 -08:00
notification_data.py notifications: Move user group mentions helpers together. 2022-04-27 16:43:54 -07:00
onboarding.py onboarding: Override the language of welcome bot PMs with user setting. 2022-04-28 15:03:26 -07:00
outgoing_http.py python: Replace requests.packages.urllib3 alias with urllib3. 2022-01-23 22:14:17 -08:00
outgoing_webhook.py actions: Split out zerver.actions.message_send. 2022-04-14 17:14:34 -07:00
presence.py docs: Fix many spelling mistakes. 2022-02-07 18:51:06 -08:00
profile.py profile: Strengthen decorator types using ParamSpec. 2022-04-14 12:44:35 -07:00
push_notifications.py push_notifications: Soft reactivate mentioned users. 2022-04-27 16:43:54 -07:00
pysa.py
queue.py requirements: Upgrade to Tornado 6. 2022-05-02 17:41:49 -07:00
rate_limiter.py upload: Allow rate limited access to spectators for uploaded files. 2022-03-24 10:50:00 -07:00
realm_description.py markdown: Refactor out additional properties added to Message. 2021-06-24 18:14:53 -07:00
realm_icon.py
realm_logo.py realm: Rename plan type constants to be more descriptive. 2021-10-19 12:20:39 -07:00
recipient_users.py actions: Split out zerver.lib.recipient_users. 2022-04-14 17:14:30 -07:00
redis_utils.py
remote_server.py push_notifs: Log the number of devices notification was sent to. 2021-09-29 15:50:06 -07:00
request.py python: Use Python 3.8 typing.{Protocol,TypedDict}. 2022-04-27 12:57:49 -07:00
response.py backend: Add request as parameter to json_success. 2022-02-04 15:16:56 -08:00
rest.py upload: Allow rate limited access to spectators for uploaded files. 2022-03-24 10:50:00 -07:00
retention.py models: Manage indexes from migration 0001 with Django. 2022-02-23 11:59:45 -08:00
safe_session_cached_db.py session: Enforce that changes cannot happen in a transaction. 2022-03-15 13:52:15 -07:00
scim.py actions: Split out zerver.actions.create_user. 2022-04-14 17:14:35 -07:00
scim_filter.py scim: Order Users by id when queried using filter syntax. 2021-11-26 16:06:16 -08:00
send_email.py requirements: Upgrade Python requirements. 2022-05-03 10:10:06 -07:00
server_initialization.py actions: Split out zerver.actions.users. 2022-04-14 17:14:34 -07:00
sessions.py python: Use Python 3.8 typing.{Protocol,TypedDict}. 2022-04-27 12:57:49 -07:00
singleton_bmemcached.py cache: Instantiate only one BMemcached cache backend. 2022-05-02 17:41:49 -07:00
soft_deactivation.py email_notifications: Soft reactivate mentioned users. 2022-04-27 16:43:54 -07:00
sounds.py actions: Split out zerver.lib.sounds. 2022-04-14 14:26:40 -07:00
sqlalchemy_utils.py sqlalchemy_utils: Remove NonClosingPool.recreate override. 2022-02-10 11:59:41 -08:00
storage.py docs: Fix many spelling mistakes. 2022-02-07 18:51:06 -08:00
stream_color.py streams: Extract stream_color library. 2022-03-14 18:01:36 -07:00
stream_subscription.py performance: Avoid monster query for existing subs. 2021-12-28 12:15:02 -08:00
stream_topic.py docs: Fix many spelling mistakes. 2022-02-07 18:51:06 -08:00
stream_traffic.py streams: Extract stream_traffic library. 2022-03-14 18:01:36 -07:00
streams.py python: Use Python 3.8 typing.{Protocol,TypedDict}. 2022-04-27 12:57:49 -07:00
string_validation.py string_validation: Prohibit non-printable characters in stream names. 2022-02-01 16:04:34 -08:00
subdomains.py python: Reformat with Black 22 (stable). 2022-02-18 18:03:13 -08:00
subscription_info.py actions: Move part into zerver.lib.subscription_info. 2022-04-14 17:14:33 -07:00
templates.py api docs: Replace most markdown files with a common template. 2021-06-24 10:42:08 -07:00
test_classes.py email_notifications: Soft reactivate mentioned users. 2022-04-27 16:43:54 -07:00
test_console_output.py requirements: Upgrade Python requirements. 2022-05-03 10:10:06 -07:00
test_data.source.txt Rename default branch to ‘main’. 2021-09-06 12:56:35 -07:00
test_fixtures.py python: Replace universal_newlines with text. 2022-01-23 22:16:01 -08:00
test_helpers.py help: Add redirect to new public access page. 2022-04-28 12:27:13 -07:00
test_runner.py sqlalchemy_utils: Make get_sqlalchemy_connection a context manager. 2022-02-10 11:59:41 -08:00
tex.py python: Replace universal_newlines with text. 2022-01-23 22:16:01 -08:00
thumbnail.py thumbnail: Remove unused is_camo_url parameter. 2021-08-19 01:51:37 -07:00
timeout.py timeout: Minor comment cleanups. 2022-04-07 17:26:01 -07:00
timestamp.py docs: Add missing space in “time zone”. 2022-02-24 14:05:12 -08:00
timezone.py
topic.py request: Add a var_name parameter to converter. 2022-03-15 13:02:02 -07:00
transfer.py
type_debug.py
types.py python: Use Python 3.8 typing.{Protocol,TypedDict}. 2022-04-27 12:57:49 -07:00
unminify.py
upload.py actions: Split out zerver.actions.uploads. 2022-04-14 17:14:32 -07:00
url_encoding.py hash_util: Move enc/decodeHashComponent to shared. 2022-03-01 18:14:31 -08:00
user_agent.py
user_counts.py actions: Split out zerver.lib.user_counts. 2022-04-14 17:14:30 -07:00
user_groups.py user_groups: Add get_user_group_direct_members function. 2022-04-27 14:17:52 -07:00
user_message.py actions: Split out zerver.lib.user_message. 2022-04-14 17:14:30 -07:00
user_mutes.py typing: Use assertions for function arguments. 2021-07-26 14:48:45 -07:00
user_status.py status: Extract format_user_status helper. 2021-09-02 16:50:25 -07:00
user_topics.py muting: Add a flag to allow user duplicate mutes to silently succeed. 2022-03-24 21:27:11 -07:00
users.py users: Always pass delivery_email in user's own object. 2022-05-04 12:52:43 -07:00
utils.py utils: Remove unused split_by function. 2021-08-19 01:51:37 -07:00
validator.py custom_profile_fields: Clarify an external account error message. 2022-05-04 17:57:44 -07:00
widget.py poll widget: Add server validation. 2021-06-14 17:46:16 -07:00
zcommand.py actions: Split out zerver.actions.user_settings. 2022-04-14 17:14:34 -07:00
zephyr.py