Greg Price
e077d6fc74
push notifs: Factor out common payload fields for APNs and GCM.
...
This should be a pure refactor, producing exactly the same payloads.
2017-12-18 15:32:56 -08:00
Greg Price
8a432c5134
APNs: Update comment on versions of our APNs payload format.
2017-12-11 20:55:20 -08:00
kunall17
98943a8333
Include data of stream/private sender details in apns push notifications
2017-12-11 20:51:09 -08:00
Tim Abbott
6bc1a682de
notifications: Separate push and email notifications checks.
...
This is an early step in a larger refactor to properly decouple the
email and push notification code paths.
2017-11-28 17:51:18 -08:00
rht
ee546a33a3
zerver/lib: Use python 3 syntax for typing.
...
Edited by tabbott to improve various line-wrapping decisions.
2017-11-28 17:15:14 -08:00
rht
229a8b38c0
zerver/lib: Use Python 3 syntax for typing for several files.
...
This adds a number of annotations that had been missed in previous
passes.
2017-11-28 17:02:24 -08:00
Tim Abbott
982bd9c38d
Fix push notifications for soft-deactivated users.
...
Previously, these push notification events were being generated, but
then ignored in handle_push_notification because there was no
user_message object.
2017-11-09 15:52:29 -08:00
Tim Abbott
c99d20db63
push_notifications: Shrink scope of try/except block.
...
There's no reason this needed to indent the entire function.
2017-11-09 15:30:21 -08:00
Tim Abbott
64b4d83038
push_notifications: Improve debugging of lookup problems.
...
We're having this error being thrown often, and don't know why.
2017-11-09 15:20:24 -08:00
rht
19bd335cbb
Change urllib import to be Python 3-specific.
2017-11-07 10:46:42 -08:00
Steve Howell
8302689789
Extract Message.is_stream_message().
...
This sets us up to denormalize on to Message some notion of
whether a message is for a stream (without having to hit the
Recipient table).
2017-10-28 17:57:39 -07:00
Tim Abbott
fa55d7ed33
retry_event: Remove requirement of failed_tries being already there.
...
This fixes a bug where retries in the signups queue threw an exception.
2017-10-27 18:15:53 -07:00
Tim Abbott
be619fe881
lint: Wrap many very long lines in the Python codebase.
...
This decreases the maximum line length in our Python codebase to 130.
2017-10-26 17:31:58 -07:00
Maarten Rijke
841f02934d
push_notifications: Add setting to redact content.
...
This commit adds a setting that toggles redacting content of push
notifications and replacing it with "***REDACTED***".
2017-10-19 18:16:06 -07:00
Tim Abbott
e98ca0714b
notifications: Simplify how triggers are passed around.
...
This removes the utterly unnecessary `triggers` dict (which always was
a dict with exactly one value True) in favor of a single field,
'trigger'.
Inspired by Kunal Gupta's work in #6659 .
2017-10-18 21:42:05 -07:00
Tim Abbott
b5c107ed27
push_notifications: Remove unnecessary check for no devices.
...
This should have been checked by the caller anyway.
2017-10-13 17:30:20 -07:00
Tim Abbott
27a450b58d
push_notifications: Improve error message for GCM sending issues.
...
This addresses one of the sources of confusion in #6993 .
2017-10-13 17:30:11 -07:00
Tim Abbott
298c59f7fd
push_notifications: Fix error message for unregistered bouncer.
...
Previously, we were just returning a JSON error to the client, when it
was a server problem.
Fixes #6639 .
2017-10-11 19:09:24 -07:00
Harshit Bansal
5a6584890d
push_notifications: Start using `get_mobile_push_content()` function.
2017-10-06 16:47:25 -07:00
Harshit Bansal
28628eeaeb
push_notifications: Add `truncate_content()` function.
...
This function truncates the textual content at correct length.
(It will be updated later to handle corner cases of unicode
combining characters and tags when we start supporting them.)
2017-10-06 16:44:19 -07:00
Harshit Bansal
b5a1aacfb3
push_notifications: Add `get_mobile_push_content()` function.
...
Given the rendered content of a message, this function strips
all the markup replacing emojis with their corresponding unicode
representation.
2017-10-06 16:44:18 -07:00
kunall17
f091823fc8
push_notifications: Set APNS badge as 0 for now.
...
We don't yet have support for tracking the number of open APNS
notifications server-side, so setting this to 0 will at least avoid
confusing users.
2017-10-03 17:07:49 -07:00
derAnfaenger
d1afab7199
Replace deprecated Logging.warn calls with Logging.warning.
2017-10-02 11:11:42 +02:00
Greg Price
7b8f725707
APNs: Accept 1.6-format payloads in bouncer.
...
This is just enough of a quick fix to work with a stock Zulip 1.6
server. We should really also make this robust to arbitrary input
from the remote Zulip server, even though it'll be a little tedious.
2017-09-28 10:01:16 -07:00
rht
f43e54d352
zerver/lib: Remove absolute_import.
2017-09-27 10:00:39 -07:00
kunall17
1436d558a3
APNs: Add message body to notification payload.
...
(Edited by greg to leave the badge logic as is for now.)
2017-09-18 16:37:02 -07:00
Tim Abbott
a33c98f23e
push_notifications: Require the message.triggers fields to exist.
...
The code was already assuming it implicitly, and making it explicit
improves the readability.
2017-09-16 03:14:56 -07:00
Tim Abbott
5722237f59
push: Rename received_pm to private_message.
...
This is a clearer name for this now more broadly used interface.
2017-09-14 05:41:37 -07:00
Sarah
97571a203d
push: Add new formatting for stream message push and add tests.
...
This should make the push notifications for messages to streams with
the new stream push notifications setting enabled make sense.
2017-09-14 05:41:37 -07:00
Sarah
c3a8138f74
user_settings: Add push notifications for all stream messages.
...
Add setting to enable push notifications for all stream messages.
2017-09-14 05:41:37 -07:00
Greg Price
a4bcf1a64b
APNs: Handle HTTP connection errors, and retry.
...
Should help with #6321 as at least a band-aid.
2017-08-29 15:27:41 -07:00
Tim Abbott
00036ac8db
push_notifications: Fix mypy error.
2017-08-26 14:33:43 -07:00
Greg Price
613d093d7d
push notifs: Implement APNs with new API.
...
And it works!
A couple of things still to do:
* When a device token is no longer active, we'll get HTTP status 410.
We should then remove the token from the database so we don't keep
trying to push to it. This is fairly urgent.
* The library we're using has a nice asynchronous API, but this
version doesn't use it. This is OK now, but async will be
essential at scale.
2017-08-26 14:16:05 -07:00
Greg Price
35db1b2f11
push notifs: Organize imports.
2017-08-26 14:16:05 -07:00
Greg Price
ba673526ab
push notifs: Organize the code a bit.
...
This commit only reorders the code in the file, without touching the
insides of any function, and adds some heading comments.
2017-08-26 14:16:05 -07:00
Greg Price
d02101a401
APNs: Rip out the existing, broken implementation.
...
This code empirically doesn't work. It's not entirely clear why, even
having done quite a bit of debugging; partly because the code is quite
convoluted, and because it shows the symptoms of people making changes
over time without really understanding how it was supposed to work.
Moreover, this code targets an old version of the APNs provider API.
Apple deprecated that in 2015, in favor of a shiny new one which uses
HTTP/2 to meet the same needs for concurrency and scale that the old
one had to do a bunch of ad-hoc protocol design for.
So, rip this code out. We'll build a pathway to the new API from
scratch; it's not that complicated.
2017-08-26 14:16:05 -07:00
Greg Price
3bceeec89f
push notifs: Add logging on creating device tokens.
...
We'd been getting errors from APNs that appeared to say that the
device tokens we were trying to send to were invalid. It turned out
that the device tokens didn't match the "topic" (i.e. app ID) we were
sending, which was because the topic was wrong, which was because we
were using the wrong SSL cert. But for a while we thought it might be
that we were somehow messing up the device tokens we put into the
database. This logging helped us work out that wasn't the issue, and
would have helped our debugging sooner.
2017-08-26 14:16:05 -07:00
Umair Khan
a5c05f9812
push_notification: Retry event in case of error.
...
Fixes #5301
2017-08-22 11:16:48 -07:00
Tim Abbott
d6e0960ca2
push_notifications: Fix mypy annotation logic around push tokens.
...
I'm not 100% confident this is long-term correct, but at least it's
consistent.
2017-07-07 10:54:37 -07:00
kunall17
d8310724b6
Use absolute URLs in GCM push notifications.
...
This will eventually allow us to simplify the logic required for the
mobile apps processing GCM notifications.
2017-06-15 03:56:59 -07:00
Steve Howell
e3c6c22269
Optimize push_notifications.response_listener().
...
We were needlessly getting a UserProfile object out of cache,
when we only needed the user_id.
2017-06-10 10:43:57 -07:00
Aditya Bansal
8680c87f56
pep8: Add compliance with rule E261 zerver/lib/push_notifications.py.
2017-05-31 17:07:15 -07:00
Umair Khan
bc15085098
gcm: Increase retries to 10 while pushing.
2017-05-17 12:14:32 -07:00
Umair Khan
38ecc35cd9
push_notifications: Catch IOError while pushing to GCM.
2017-05-17 12:14:32 -07:00
Umair Khan
7e8f4ca4e8
push_notifications: Include GCM in end-to-end test.
2017-05-17 08:09:19 -07:00
Tim Abbott
0b2388bda9
push_notifications: Remove DeviceTokenType logic.
...
The syntax wasn't valid on Python 3.5, and the new code is somewhat
more readable anyway.
2017-05-16 12:26:55 -07:00
Tim Abbott
9d63a5ab3a
push_notification: Delete obsolete DBX_IOS_APP_ID code.
...
I'm not sure that this was ever actually used, but it's definitely
just clutter for Zulip today.
2017-05-16 12:26:55 -07:00
Umair Khan
286f9a40e7
push_notifications: Bring file to 100% coverage.
2017-05-16 12:26:55 -07:00
Umair Khan
fc0b9358e7
handle_push_notification: Remove the if condition.
...
'if apple_devices or android_devices' doesn't servce any purpose.
2017-05-16 12:26:55 -07:00
Umair Khan
ab411ab7b3
push_notifications: Delete remote server tokens in APNs response.
2017-05-16 12:26:55 -07:00
Umair Khan
33332539df
send_android_push_notification: Delete correct tokens.
...
Now this function will delete tokens from RemotePushDeviceToken if it
is running on notification bouncer or PushDeviceToken if it is running
on a server which doesn't use notification bouncer.
2017-05-16 12:26:55 -07:00
Umair Khan
4a864c7515
push_notification: Send data to notification bouncer.
2017-05-16 12:26:55 -07:00
Umair Khan
329b377e6a
push_notification: Add uses_notification_bouncer().
...
This function abstracts the logic to ascertain if we are using
notification bouncer service or not. Makes our code more
maintainable.
2017-05-11 12:04:16 -07:00
Umair Khan
112a67097b
push_notifications: Don't get alert message.
...
Now we set the alert message in the payload functions for both GCM and APNs so
no need to get it here.
2017-05-11 12:04:16 -07:00
Umair Khan
3c32bc6d8a
push_notification: Create get_gcm_payload.
2017-05-11 12:04:16 -07:00
Umair Khan
d90774b9db
push_notifications: Create get_apns_payload.
...
This function creates the payload that we will send to APNs.
2017-05-11 12:04:16 -07:00
Umair Khan
5ff7fdf83a
push_notification: Create get_alert_from_message.
...
This function returns the alert shown by iOS or Android device.
2017-05-11 12:04:16 -07:00
Aditya Bansal
69cf11d786
pep8: Add compliance with rule E261 to push_notifications.py.
2017-05-07 23:21:50 -07:00
Tim Abbott
c0d7e83333
logging: Change missing push notification keys from error to warning.
...
This is a configuration problem, but it just means a feature is not
enabled, not that attention is required, so it should be a warning,
not an error.
2017-04-25 13:52:36 -07:00
Tim Abbott
cddee49e75
Add support infrastructure for push notification bouncer service.
...
This is an incomplete cleaned-up continuation of Lisa Neigut's push
notification bouncer work. It supports registration and
deregistration of individual push tokens with a central push
notification bouncer server.
It still is missing a few things before we can complete this effort:
* A registration form for server admins to configure their server for
this service, with tests.
* Code (and tests) for actually bouncing the notifications.
2017-04-18 23:03:06 -07:00
hackerkid
b2504084ab
Replace timezone.now with timezone_now.
2017-04-16 12:28:56 -07:00
Tim Abbott
89eb7636ba
remove_push_device_token: Remove unused request argument.
2017-03-05 22:01:28 -08:00
Tim Abbott
657dfcbddc
push: Move remove_push_device_token to library.
2017-03-05 19:15:17 -08:00
Tim Abbott
c0ad9c02fd
push: Extract validate_token helper function.
2017-03-05 19:15:17 -08:00
Tim Abbott
271bd5a282
push: Move add_push_device_token to library.
2017-03-05 19:15:16 -08:00
Tim Abbott
410c0626a6
push: Pass apple alert via the zulip dict.
...
This completes the process of simplifying the interface of the
send_*_push_notification functions, so that they can effectively
support a push notification forwarding workflow.
2017-03-05 18:37:00 -08:00
Tim Abbott
fc192d6b3b
push: Don't pass a UserProfile into send_apple_push_notification..
2017-03-05 18:37:00 -08:00
Tim Abbott
393c4d2eaa
push: Don't pass a UserProfile into _do_push_to_apns_service.
2017-03-05 18:37:00 -08:00
Tim Abbott
53c9e3b4ca
push: Don't pass a full UserProfile into APNsMessage.
2017-03-05 18:37:00 -08:00
Tim Abbott
c8bfd568bc
push: Pass devices list into send_apple_push_notification.
2017-03-05 18:36:58 -08:00
Tim Abbott
0ddaf5c610
push: Pass reg_ids list into send_android_push_notification.
...
This refactoring is preparation for being able to forward push
notifications to users on behalf of another Zulip server.
The goal is to remove access to the current server's database from the
send_*_push_notification code paths.
2017-03-05 18:36:07 -08:00
Tim Abbott
b1b2d8d2c7
push: Move handle_push_notifications to push_notifications.py.
2017-03-05 18:32:09 -08:00
Raghav Jajodia
a3a03bd6a5
mypy: Added Dict, List and Set imports.
...
Fixed mypy errors associated with the upgrade.
2017-03-04 14:33:44 -08:00
Tim Abbott
4e171ce787
lint: Clean up E126 PEP-8 rule.
2017-01-23 22:06:13 -08:00
Tim Abbott
de99f48ce7
lint: Clean up E401 PEP-8 rule.
2017-01-23 21:36:39 -08:00
Robert Hönig
0917493588
mypy: Convert zerver/lib to use typing.Text.
2016-12-25 10:33:45 -08:00
Umair Khan
c24fbd28b2
Shift to python-gcm for Android push notifications.
...
Fixes #2650
2016-12-15 12:17:07 -08:00
nikolay
abc2ff4a06
pep8: Fix many rule E128 violations.
...
[Tweaked by tabbott to adjust some approaches used in wrapping]
2016-12-03 13:33:31 -08:00
Umair Khan
acd76eb604
Annotate push_notifications.py.
2016-08-08 15:17:02 -07:00
Umair Khan
0dd7d0dda1
push_notifications: Change name to 'identifier'.
2016-08-08 15:15:29 -07:00
Umair Khan
d33fc0046f
Add APNS feedback server tests.
2016-08-05 10:36:57 -07:00
Umair Khan
40054ce26c
Add APNS response listener test case.
2016-08-05 10:36:57 -07:00
Umair Khan
882bb5558b
Push to APNS in a loop.
2016-08-05 10:36:57 -07:00
Umair Khan
4e8ca0a326
Make sure apns response code is an integer.
2016-08-05 10:36:57 -07:00
Umair Khan
5c41eae7ec
Don't send connection to apns response listener.
2016-08-05 10:36:57 -07:00
Umair Khan
ffaf7cb2ba
Create get_connection function for APNS.
2016-08-05 10:36:57 -07:00
Umair Khan
1d2bdfdfb1
Save user id instead of user profile.
2016-08-05 10:36:57 -07:00
Umair Khan
0cac1aa135
For APNS frame identifier generate random int.
2016-08-05 10:36:57 -07:00
Umair Khan
0b5dc56b8d
Redis key expiry should be an integer.
2016-08-05 10:36:57 -07:00
Umair Khan
cbd53fbac8
Don't import OrderedDict.
2016-08-05 10:36:57 -07:00
Umair Khan
0b88deb640
APNS_SANDBOX should be a bool.
...
Fixes : #1480
2016-08-05 10:36:57 -07:00
Umair Khan
0aae0eab49
Switch to PyAPNS for sending push notifications.
...
Switch to [PyAPNS](https://github.com/djacobs/PyAPNs ).
Fixes #538 .
2016-07-13 10:55:07 -07:00
Taranjeet
a8a4caf2c0
zerver: Fix lines with length greater than 120.
2016-07-08 11:41:43 -07:00
Eklavya Sharma
98553e8caa
zerver/lib/push_notifications.py: Fix strings.
...
Use appropriate string encode/decode operations and fix annotations.
2016-06-15 15:25:28 -07:00
Tim Abbott
1552b9308b
Fix apnsclient import to match version 0.1.8 used in production.
...
Apparently, apnsclient moved Connection to a different module between
0.1.8 and 0.2.1.
2016-06-03 19:28:36 -07:00
Tim Abbott
f97b025a33
push_notifications: Fix incorrect Connection import.
2016-06-03 18:11:53 -07:00
medullaskyline
303bd21068
Annotate zserver.lib.push_notifications.
2016-06-03 17:45:54 -07:00
Tim Abbott
191201bd10
Fix unnecessary whitespace between % and (.
2016-05-04 14:22:52 -07:00
Leo Franchi
0ae8e28635
Exit without exception if this APNS attempt has no connection
...
(imported from commit bbdd9f3e11946739459f34b2580e4a7371b158a0)
2015-02-11 07:20:51 +00:00
Leo Franchi
d865732e0d
Maintain two APNS connections and send correct notifications to each
...
Now we have 2 different Zulip apps out there, and they are signed with
two certs: Zulip and Dropbox. The Dropbox-signed apps are going to need
to be sent APNS notifications from the appropriate APNS connection
(imported from commit 6db50c5811847db4f08e5c997c7bbb4b46cfc462)
2015-02-11 06:57:25 +00:00
Luke Faraone
1c67d05e5f
Handle duplicate GCM registrations by dropping the old ones.
...
While we're at it, lets comment up the function so I know what this is
doing next time :)
(imported from commit e745be75fcd6dbce9997e1d73464619fc8b73996)
2014-01-23 19:21:28 -05:00
Leo Franchi
c0fdbf81cf
Use the feedback connection for getting APNS feedback
...
(imported from commit d371188e0437606b3ff435ee9c005cee2849f6ae)
2014-01-22 13:50:15 -05:00
Leo Franchi
4dac0e7d37
Print out APNS tokens in b64 format for ease of use
...
(imported from commit d38eb1629a599681c42f1f8d817c90229b547516)
2014-01-22 11:59:02 -05:00
Leo Franchi
6903d87809
Retry on APNS failure / retry request
...
(imported from commit b9d1c414731de7a4ad5d3bc93c3dce1286cbdb38)
2014-01-22 11:59:02 -05:00
Leo Franchi
c0d3b2fd89
Remove APNS tokens from our database if we get an invalid token notification
...
(imported from commit 5ec3c053684f9574a31103e7821309de883baa82)
2014-01-22 11:59:02 -05:00
Leo Franchi
226d894257
Prefix apple-specific APNS logs with APNS:
...
(imported from commit 2fa866b3a626c3e42f340bc68e8bc27aef6fd521)
2014-01-22 11:59:02 -05:00
Kevin Mehall
662edc2558
[manual] Backend support for Android GCM push notifications
...
This adds a dependency on gcmclient:
http://gcm-client.readthedocs.org/en/latest/gcmclient.html
pip install gcm-client
or
apt-get install python-gcm-client
(imported from commit 9f1fbf1f793e4a27baed85c6f1aa7a7b03106a10)
2013-12-11 15:37:48 -05:00
Kevin Mehall
e4589700b6
[schema] Modify device token to support both iOS and Android
...
This replaces the AppleDeviceToken table with a generic
PushDeviceToken with a `kind` field to make it easier to add functionality
like per-device/per-stream settings that share code between Android and
iOS devices.
The schema must continue to work on prod with the old table name, so we
add the new table in parallel and can drop the old table once this code
hits prod and any necessary data is copied.
(imported from commit 0209a7013f2850ac6311f23c3d6f92c65ffd19e3)
2013-12-11 15:37:47 -05:00
acrefoot
8800dcdce4
more helpful error message when missing APNS certs
...
(imported from commit e21dc627844b9e28f93a924097176481d4135947)
2013-11-27 18:00:33 -05:00
Tim Abbott
b0dc882f7e
localserver: Add support for not having an APNS_CERT_FILE.
...
(imported from commit 42d8caebb3035bd9e6e19db6359cc33e8ab4f317)
2013-11-12 09:34:25 -05:00
Tim Abbott
68dcc760c3
Clean up some unused imports.
...
(imported from commit 0c5d8e2a55ba1b8909ba807fee3afe863dcdc226)
2013-11-04 11:51:17 -05:00
Leo Franchi
ae104ace25
Only load APNS cert if it exists
...
(imported from commit 8505c9a32feb4c7470dfde6c4ceaaa0a8e8f33a1)
2013-10-24 15:55:42 -04:00
Leo Franchi
7961d4f6b3
Add a push notification module to handle mobile client notifications
...
(imported from commit 3061a6e2d845226d3dce5bb262deb3a896e54f07)
2013-10-24 14:54:30 -04:00