Commit Graph

8891 Commits

Author SHA1 Message Date
Prakhar Pratyush
3cbf0e70a2 push_notification: Add support to send E2EE test push notification.
This commit adds an endpoint `/mobile_push/e2ee/test_notification`
to send an end-to-end encrypted test push notification to the user's
selected mobile device or all of their mobile devices.
2025-08-13 00:13:50 -07:00
Vector73
f1d1d5f1a4 events: Add support for sending presence events in modern format.
If the client has passed `simplified_presence_events` as true
in the `client_capabilities` parameter of the `POST /register`
request, then the server will send `presence` events with the
`presences` field, which has the user presence data in the
modern API format. When that client capability is false, the
`presence` event will be unchanged and sent with the user
presence data in the legacy format.
2025-08-12 12:37:54 -07:00
Vector73
88761f70a2 event_schema: Rename "presence" event to "legacy_presence". 2025-08-12 12:14:56 -07:00
Sahil Batra
5675860707 channel-folders: Send event when reordering channel folders. 2025-08-12 11:17:17 -07:00
Sahil Batra
bcdfcf909d welcome-bot: Only send message with custom text when testing.
We now only send the custom message when using
"Send me a test message" button and not send the
standard welcome bot message.
2025-08-12 00:12:52 -07:00
Prakhar Pratyush
870591e2e5 test_urls: Skip api_docs/unmerged.d/ while testing api doc pages.
We missed to skip `api_docs/unmerged.d/` in 9ec15e99bd,
resulting in test failure in pull requests where it is present.
2025-08-11 14:37:31 -07:00
apoorvapendse
6203861529 zerver: API to create channel.
Fixes #16206.

Co-authored-by: Sahil Batra <sahil@zulip.com>
Co-authored-by: Steve Howell <showell@zulip.com>
Signed-off-by: apoorvapendse <apoorvavpendse@gmail.com>
2025-08-08 19:29:17 -07:00
Tim Abbott
6ef2591b47 test_invite: Fix a test failing with old databases. 2025-08-08 18:59:37 -07:00
Saubhagya Patel
bb5c87e306 bots: Add a setting to customize the Welcome Bot message.
This commit includes the following changes:
- Add an administrator setting to customize the Welcome Bot
message when sending an invitation.
- Add an API endpoint to test the customized Welcome Bot message
by sending a copy of the message to the administrator.

Fixes #27663.

Co-authored-by: Akarsh Jain <akarsh.jain.790@gmail.com>
2025-08-08 18:59:37 -07:00
Mateusz Mandera
254b0ff477 scim: Add support for Groups. 2025-08-08 17:29:11 -07:00
Shubham Padia
5f9860776f test_docs: Remove help specific tests and port rest over to /api.
We do not test relative links here since relative links were only
used in the old help pages. We should probably remove the logic
for relative links after we have done the official cutover to the
starlight help center: #35654.
2025-08-08 11:59:29 -07:00
Shubham Padia
075809b93e test_middleware: Remove help related tests.
Help center is going to cutover to using starlight. We won't have that
help center running during our backend tests for now, that will be done
after cutover. Remove help related opengraph tests. We have replaced
instances from api_docs wherever possible, but for most of the cases, an
equivalent was not found in api_docs.

There is no api_docs file that starts with `{settings_tab` or an
admonition or `{start_tabs}` and thus we need to remove those tests.

test_settings_tab was not testing what it said it was testing,
deactivate-your-account.md did not start with `{settings_tab` anymore.
That was changed in 584124bb45.
2025-08-08 11:59:29 -07:00
Shubham Padia
9ec15e99bd test_urls: Use /api instead of /help pages for some tests.
We are going to move the help center to starlight soon and the tests
won't be able to access that help center until we solve things in a
followup issue. We move some of the urls being tested from /help to /api
to not loose coverage on those tests.
2025-08-08 11:59:29 -07:00
Kislay Verma
f0a88d51cc message_reminders: Add support for notes.
This commit adds the ability for users to include notes
with their message reminders.

Fixes #35070.

Co-Authored-By: Aman Agrawal <amanagr@zulip.com>
2025-08-07 17:13:12 -07:00
Shubham Padia
c4cb75979a channel-folders: Order by order field in GET method. 2025-08-06 16:34:40 -07:00
Shubham Padia
22b231ab6f channel-folders: Add PATCH method to reorder channel folders.
The test cases are copied from ReorderCustomProfileFieldTest since we
are imitating the reordering mechanism from custom profile fields to
channel folders.
2025-08-06 16:34:40 -07:00
Shubham Padia
d609bd44a9 channel-folders: Setup data in class instead of each test.
We used the data setup from the get test case since it needed the most
number of folders.
2025-08-06 16:34:40 -07:00
Alex Vandiver
d6f1526086 transfer: Upload thumbnails for image files.
Fixes: #35029.
2025-08-06 15:46:07 -07:00
Alex Vandiver
ad915679ad tests: Add tests for transferred file metadata. 2025-08-06 15:46:07 -07:00
Alex Vandiver
a590cfdbe8 tests: Add tests for S3 image metadata, and lack therof on thumbnails. 2025-08-06 15:46:07 -07:00
Alex Vandiver
2909d4917c send_zulip_update_announcements: Log updates in the post-deploy hook. 2025-08-06 09:52:45 -07:00
Alex Vandiver
b98d3fc7c4 tests: Clarify why encoding test uses NamedTemporaryFile. 2025-08-06 09:41:44 -07:00
Alex Vandiver
3325c21e7f tests: Add clarifying comment about "wrong" charset. 2025-08-06 09:41:44 -07:00
Alex Vandiver
218bbe041e upload: Adjust minimum encoding confidence thresholds.
UTF-8 is far and wide the dominant encoding, so we assume that
encoding if we have more than 66% confidence -- this allows it to be
guessed even for short files.  ISO-8859-1 caps at 73% confidence, so
we assume that if it's the best option and it hits that max.
Otherwise, we still require 90% confidence.
2025-08-06 09:41:44 -07:00
Prakhar Pratyush
787d73f018 push_notification: Update the payload data that gets encrypted.
This commit updates the data that gets encrypted to be
the same on both android and iOS.

The data and its format is almost the same as what we send
as FCM payload to android clients with no E2EE support,
changes are:

For send push notification payload:
* 'realm_id`, 'server', 'sender_email', and 'realm_uri' fields
  don't exist in the new payload.
* 'event' field renamed to 'type'
* 'stream' and 'stream_id' fields renamed to 'channel_name'
  and 'channel_id' respectively.
* The value of 'recipient_type' will be 'channel' & 'direct'
  instead of 'stream' & 'private' respectively.
* 'zulip_message_id' field renamed to 'message_id'

For remove push notification payload:
* 'realm_id`, 'server', and 'realm_uri' fields don't exist
  in the new payload.
* 'event' field renamed to 'type'
* 'zulip_message_ids' field renamed to 'message_ids' and it's
  value will be a JSON array instead of a string.

In the existing iOS client, we have no code of our own involved
in constructing the notifications in the UI, and instead we
leave it to the iOS SDK to do so.

Since, for clients with E2EE support the data is going to be
interpreted by our own code, not by the iOS SDK - we are free
to keep the same data and format.

Co-authored-by: Tim Abbott <tabbott@zulip.com>
2025-08-05 16:54:22 -07:00
Prakhar Pratyush
dd134ef325 push_notification: Remove 'content_truncated' field from FCM payload.
This commit removes the 'content_truncated' field from the FCM
payload to send push notification as it was unused by clients.
2025-08-05 16:54:22 -07:00
Prakhar Pratyush
c9edb9c9ce push_notification: Remove 'zulip_message_id' from FCM payload.
This commit removes the 'zulip_message_id' field from the FCM
payload for remove push notification.

Clients that use `zulip_message_ids` instead have been out for
years and we no longer support older client versions that don't.
2025-08-05 16:54:22 -07:00
Prakhar Pratyush
1a5cab130d push_notification: Remove obsolete fields from APNs payload.
Mobile push notification payloads for APNs no longer contain
the `server` and `realm_id` fields, which were unused.
2025-08-05 16:54:22 -07:00
Vector73
f689dfc3c3 message_move: Mark notification messages as read for acting user.
When moving messages, the notification messages should be
automatically marked as read for the user who moved the messages.
2025-08-05 15:27:08 -07:00
Vector73
9eda1f11ca tests: Use built-in users instead of creating new users in tests. 2025-08-05 14:46:12 -07:00
Vector73
0ac24bd437 api: Add support for passing partial to include_subscribers parameter.
Fixes #35318.
2025-08-04 18:43:14 -07:00
Mateusz Mandera
40b1f6eb4e confirmation: Replace RealmCreationKey - use Confirmation instead.
Fixes #20028.

There's no reason to have a special `RealmCreationKey` class - the
`Confirmation` system already does this job.

This is somewhat complicated by the need to write a migration for
`RealmCreationKey`->`Confirmation` for pre-existing, valid objects, to
avoid breaking realm creation links that haven't been used yet.
2025-08-04 18:41:15 -07:00
Mateusz Mandera
072f234269 confirmation: Rename REALM_CREATION to NEW_REALM_USER_REGISTRATION.
Clears up some naming confusion - `REALM_CREATION_LINK_VALIDITY_DAYS` is
a setting which describes the validaty period of RealmCreationKey, not
of Confirmation with REALM_CREATION type. Now that the latter is called
NEW_REALM_USER_REGISTRATION, there should be no confusion about this.
2025-08-04 18:41:00 -07:00
Sahil Batra
072516c2bb channel-folders: Update unique name constraint.
This commit updates code to require unique names for only
non-archived folders in a realm, which means a folder can
use a name which is being used by an archived folder.
2025-08-04 13:22:11 -07:00
Prakhar Pratyush
55cceeaca1 test_push_notifications: Use assertCountEqual for unordered token list.
The order of token values returned by the database query isn't
guaranteed, so 'assertEqual' fails in a flaky way.

This commit uses 'assertCountEqual' to fix that.
2025-08-04 11:33:53 -07:00
Prakhar Pratyush
6c625a0177 push_notification: Remove "time" field from APNs payload.
This reverts 1862c3d9ab.

The "time" field was added in the APNs payload to log
"Remote queuing latency".

The client doesn't use this field. Ideally, we should have
removed the field from the payload before sending it to APNs.

We no longer log "Remote queuing latency", so it's safe to
remove it from the APNs payload.

Only FCM payload will have this field as it is used by android
clients.
2025-07-30 17:24:57 -07:00
Prakhar Pratyush
2225142554 push_notification: Remove "Remote queue latency" log on bouncer.
We haven't ever inspected those logs, since adding the metric.
2025-07-30 17:24:57 -07:00
Prakhar Pratyush
298a39e457 push_notification: Remove 'modernize_apns_payload'.
The function was used to reformat apns payload sent
by servers older than 613d093d7.

Since we no longer need to worry about servers older
than 1.6.0, it's safe to remove that function.
2025-07-30 17:24:57 -07:00
Alex Vandiver
085d137871 upload: Rename attachment_vips_source, as it's not just for vips_source. 2025-07-29 10:01:40 -07:00
Alex Vandiver
e37ee13577 upload: Add charset even on content-types guessed at download time. 2025-07-29 10:01:40 -07:00
Sahil Batra
8ae9cca3c9 channel_folders: Check max length restrictions while updating.
This commit updates code to make sure we check maximum allowed
length for name and description for channel folders when updating
them.
2025-07-28 23:12:58 -07:00
Sahil Batra
db00ceaeb2 register: Pass channel folder max name and description length.
This commit adds "max_channel_folder_name" and
"max_channel_folder_description" fields to response.

Also updated webapp to use these fields instead of hardcoding
the values.
2025-07-28 23:12:58 -07:00
Sahil Batra
945e5553e4 test_channel_folders: Add test for long name and description.
This commit add tests for name and description being too long
when creating channel folders.
2025-07-28 23:12:58 -07:00
Prakhar Pratyush
d972bb1ca9 push_notifications: Redact content for older clients if E2EE required.
This commit replaces the `PUSH_NOTIFICATION_REDACT_CONTENT` server
setting with `require_e2ee_push_notifications` realm setting.

If `require_e2ee_push_notifications` set to True:
* Older clients: Content redacted
* Updated clients: Encrypted content

If `require_e2ee_push_notifications` set to False:
* Older clients: Content NOT redacted
* Updated clients: Encrypted content

Note: Older clients refers to clients that don't support E2EE.

Fixes part of #35370.
2025-07-28 17:06:59 -07:00
Prakhar Pratyush
fc6cd9a966 settings: Add require_e2ee_push_notifications realm setting.
This commit adds a realm setting:
"Require end-to-end encryption for push notification content".

This commit just involves backend & UI changes to add the setting,
the impact of this setting is in the next commit.

Fixes part of #35370.
2025-07-28 17:06:59 -07:00
Rohan Gudimetla
cb01bdf0c4 topics: Follow topics that are merged into even after merge.
Previously, when there were two topics -- A and B, and a user
follows topic A, then when messages of topic B are merged into
topic A then topic A loses its follow status.

This is fixed by updating the algorithm for getting the visibility
policy after merge to be followed in the above case.

Fixes #35226
2025-07-28 12:35:30 -07:00
Aman Agrawal
f4dd3aa066 auth: Pass None as default_subdomain to verify the host.
We were not verifying correctly if the host is in the same
subdomain as we never returned None for get_subdomain_from_hostname.
2025-07-28 10:59:38 -07:00
Prakhar Pratyush
5616be4afa test_e2ee_push_notification: Improve tests to cover more cases.
This commit adds a test and updates a few existing tests to
cover more cases related to send push notifications.

* We no longer mock the 'send_push_notifications_legacy' function
  while testing 'send_push_notifications' codepath and vice-versa.
  This makes the tests more realistic as both functions gets called
  in 'handle_push_notification'.

  This covers the case when only old clients (which don't support
  E2EE) exists for a user. Or only updated clients (which supports
  E2EE) exist.

* Adds a test 'test_both_old_and_new_client_coexists' for the case
  when a user has both type of clients at an instant i.e. they have
  updated a few devices only.
2025-07-28 10:39:48 -07:00
Prakhar Pratyush
d91a6be3f1 push_notification: Return early if no device registered - w/o bouncer.
In 'send_push_notifications_legacy', when a user has no registered
devices:
* `uses_notification_bouncer()`=True: we log "Skipping..." and return.

* `uses_notification_bouncer()`=False: we make some function calls,
  which effectively does nothing.

It's better to have a common check (and log) early in the codepath.
This commit makes that change.
2025-07-28 10:39:48 -07:00
Prakhar Pratyush
6ab6df96c8 push_notification: Send a list of push requests.
Earlier, we were passing a map `device_id_to_encrypted_data`
and http headers as separate fields to bouncer.

The downside of that approach is it restricts the bouncer to
process only one type of notice i.e. either notification for
a new message or removal of sent notification, because it
used to receive a fixed priority and push_type for all the
entries in the map.

Also, using map restricts the bouncer to receive only one
request per device_id. Server can't send multiple notices
to a device in a single call to bouncer.

Currently, the server isn't modelled in a way to make a
single call to the bouncer with:
* Both send-notification & remove-notification request data.
* Multiple send-notification request data to the same device.

This commit replaces the old protocol of sending data with
a list of objects where each object has the required data
for bouncer to send it to FCM or APNs.

This makes things a lot flexible and opens possibility for
server to batch requests in a different way if we'd like to.
2025-07-25 12:47:55 -07:00