- update circleci to use new docker auth (a4f66c0b)
- return 201 for all push subscription requests. (#1446) (b0279078, closes #1443)
- add docker auth to docker image pulls (3d90ec8d)
- compare VAPID aud to endpoint_url (6a11078a, closes #1434)
- enforce VAPID "aud" compliance. (23bfeb8b, closes 1663922)
- Avoid installing dependencies as editable (8287b52, closes #1431)
- report details of an FCM "INVALID_ARGUMENT" error (377d0c, closes 1373)
- Return HTTP 202 if the WebPush message is stored instead of delivered (80fba108123c1e2bfd7a0d71a54ee45cc35e182d, closes 1428)
- followup for 1408 (#1411) (022070de, closes #1408)
- regression: wrap metric calls in thread handler (31ae364d)
- put markus metric handling on a deferred thread (6436453a, closes #1408)
- Fix CryptoKey.get_label example (f3967b63)
- Add additional logging around APNS HTTP2 connectivity (1c2ee3ea)
- Add integration tests to verify that updates do not alter reg info (6e77bd90, closes #1397)
- do not require
encryption
header for APNsaes128gcm
encoded messages (#1385) (148781c2, closes #1384)
- include CIRCLE_TAG in the cache key (309e6b9d)
- Add pull request template (f2aa3bcd)
- Library update (1cdfcb66)
- update twisted per CVE-2019-12855 (97dcdf1d)
- upgrade dependencies (6bc3eaef, closes #1358)
- Return correct status code/errno for ADM auth failures (e023ad61)
- handle TypeErrors too (79420a9e, closes #1326)
- Fix all_channels to match registration UAID format (bd21f063, closes #1330)
- flake8 fixes (6a42be58)
- added Strict-Transport-Security header to 404s (94b41911)
- No changes since 1.53.0
- add gcm endpoint configuration argument (5fd37e24, closes #1315)
- Use FCM HTTPv1 protocol with twisted async (e111ec10, closes #1291)
- Remove unused secondary global index (1833f5aa)
- make gcm calls use async callbacks (d67dcb45, closes #1291)
- add dockerflow callbacks for endpoint (2a5e7765, closes #1293)
- add ADM support (0d84de62, closes #1275)
- upgrade to pypy6 for debug symbols (b4d5e73e, closes #1288)
- Update cryptography from 2.2.2 to 2.3 (08e3cee6)
- install openssh-client git & git on docker-in-docker (8e435d22)
- emit metrics for Direct messages and client nack codes (3bb227a8, closes #1268)
- remove legacy notification saving to address intermittent fails (9dc1a5f0, closes #878)
- remove rust code (7ab7a14a, closes #1258)
- switch to slog-mozlog-json/mozsvc-common for logging (41fc523a, closes #1247)
- switch Rust startup to Rust only (0ef11b63, closes #1243)
- upgrade Rust dependencies (d4cd1a6e)
- doc fixup (b8c3201e, closes #1260)
- add env_vars for cmd line args missing them (baa1c54a, closes #1262)
- actually pass thru $WITH_RUST (cfc506f9)
- rip most of metrics out of db (9d53f20a)
- prefer impl trait in db.mod when possible (8b6dd7d3)
- fix our odd indents (fd484056)
- prefer impl trait when possible (04cae080)
- minor cleanup (1b2fdcf7)
- remove/rearrange some clones (f8c6e050)
- remove unneeded uaid from Notification (e755bb42)
- move ddb helpers into its own modules (ac4983e2, closes #1238)
- ensure consistent_read on fetch messages fns (ecd09c5f)
- shrink the Docker build (2bffb326)
- remove use of unwrap's by passing current message month (7b1444d9)
- properly set record expiration (e155e34f, closes #1231)
- let the build continue to rustc on cbindgen failures (46f048ad, closes #1235)
- re-rustfmt it all, set expiry on register instead of add with 2x (35b0c62e)
- add Rust + Python mixed integration tests (7a88c736, closes #1221)
- port migrate user to Rust, remove Python calling (9ae1fb59, closes #1206)
- port migrate user to Rust, remove Python calling (733bd464, closes #1206)
- port store messages command to Rust (b9f46248, closes #1208)
- port delete command to Rust (81545523, closes #1204)
- port delete command to Rust (f1879c3a, closes #1204)
- switch from snaek to milksnake (f7734f9b, closes #1045)
- port unregister command to Rust (c52abc09, closes #1205)
- port drop user command to Rust (a9cd4ae4, closes #1207)
- port register command to Rust (4ff17433, closes #1190)
- port hello command to Rust (1b48a473, closes #1188)
- hardcode autopush_rs's AWS creds in local dynamodb mode (6865dede, closes #1201)
- port check storage command into Rust (a9f6fc26, closes #1189)
- some cleanup for #1202 (bd0f37f0)
- rustfmt all the rust (517285b1)
- reject unhyphenated channelIDs from register (2579197e, closes #1225)
- endpoint now returns a JSON-based 404 for all 404's (03029770, closes #756)
- properly catch a null value passed to register (ae97e153, closes #1183)
- don't save legacy messages from the Rust node (a218b5bf, closes #1198)
- Remove unused "expiry" from Router table (72307f16, closes #1211)
- sync endpoint and connection settings during integration testing (53be7e63, closes #1196)
- return simple uaid to hello (ae2f3b4a, closes #1185)
- disable the logger guard for now (27af6965, closes #1184)
- add flag to stop table rotation (ea052116, closes #1172)
- use chrono epoch times instead of monotonic time (7c6f8b90, closes #1180)
- refactor client state machine (86496370, closes #1181)
- fix asserts on client dis/connect and convert inc call to rust (a4819599, closes #1177)
- add a crit log_check to autopush_rs (6a15e11f, closes #1167)
- update dependencies (01f433b8, closes #1170)
- refactor client to remove duplicate logic (47820841, closes #1165)
- add megaphone integration tests (b2132f6e, closes #1129)
- add megaphone API query and repeating service updating (cb21dc90)
- add megaphone broadcast handling, ping check, server tracking (1fe4eebd)
- add megaphone service change tracker (ec13155b)
- add missing setup_module() function to test_db (32668884, closes #1157)
- Add ClientError handler to UnregisterCommand (9b99c285)
- Handle PotentialDataLoss error (7f60f827, closes #1151)
- remove GCM collapse key (65f10032, closes #1149)
- fix _expiry() function to use seconds (cfcad77a, closes #1073)
- have webpush router handle ClientErrors (36ad90f8, closes #1138)
- handle InternalServerErrors (ClientError subclass) (62cbc40a)
- add handler for https://sentry.prod.mozaws.net/operations/autopush-prod/issues/2277621/ (ca5f7274)
- Silence remaining nuisance alarms (3163e2ed)
- bind autopush_rs to all interfaces to match python (b53a0058, closes #1113)
- reverse our filled in stack trace order (73338ac7, closes #1134)
- make autopush_rs's ctrl-c work gracefully (624de2dc, closes #1090)
- drain pending notifications from the client rx queue (09a985a9, closes #1133)
- update python dependencies to the latest versions (edf99233, closes #1104)
- Fix KeyError w/ item["ttl"] and Use environment var AWS_DEFAULT_REGION as region specifier (1990c56c, closes #1124), closes #1127)
- add metric tags (690fcd3e, closes #1054)
- convert
table()
to variable for Message and Router classes (e26cf3a6, closes #1117) - upgrade rust deps to latest (29518cef)
- add /notif/ HTTP API handler (f599ee3b, closes #1062)
- add integration testing for Rust connection node (c4351cc4, closes #1060)
- add error information for debugging connection drops (ffa78654, closes #1002)
- add sentry panic reporting (66554d91, closes #1066)
- track nack's with metrics (35770aec, closes #1063)
- use structured logging and log session info out (1b10e77b, closes #1055)
- fill in missing metrics for autopush_rs (eb37fa06)
- convert to use AWS boto3 (02784722, closes #1049)
- Restore periodicreporter after complex merge dropped it. (d9233f5c, closes #1119)
- make boto3 calls thread safe (04e188d7, closes #1081)
- restore missing test file from Rust integration test PR (24b08b2f)
- Fix diagnostic cli to handle tuple args (ae89a217, closes #1096)
- use the right channel_id value in client_info (bb3be771)
- allow optional use of jemalloc (99b33457, closes #1100)
- include glibc malloc & jemalloc stats in memusage (b3755e42, closes #1101)
- add some metrics for twisted's threadpool (0b7b78a6, closes #1093)
- make memusage's objgraph/dump_rpy_heap optional (850d25e5, closes #1091)
- assimilate the gcm client code (b0b64c10)
- Update docs to include gcmclient, reference to rust (565e4b3d)
- handle an obscure SSLError seen w/ apns (443c3683)
- Update APNs APS block (5ded81ab, closes #1076)
- fix up tests and integration for new gcmclient (996716ac)
- drop users with no router_type recorded (b7f667ab, closes #1058)
- allow WITH_RUST=false to disable the rust build (7da04f10)
- address HTTP2 errors in APNS (acea77c5, closes #1052)
- cache SSLContexts created by ssl.wrap_socket (6dcbba20)
- move tests to pytest (774948f8)
- update dependencies to the latest versions (564c4d87, closes #1040, breaks #)
- upgrade to pypy 5.9.0 (d01f1aa1, closes #1036)
- add Strict-Transport-Security header (4e79dcef, closes #1031)
- dump_rpy_heap before calling objgraph (ece7db1a, closes #1028)
- Remove discussion comment and useless bool return (243b7d31, closes #1026)
- SSL support to the Rust server (59d1c897)
- update cargo deps, and rustfmt all the rust (ead3dd05, closes #1006)
- Add a
/status
handler on the ws port (2430d35e) - use config hostname for Rust websocket binding (2ef718fe, closes #1004)
- remove unused udp wake capability (efc0d256, closes #886)
- initial Rust proof of concept implementation (5bf2de64, closes #978)
- don't check storage for new uaid's (922e3425, closes #1017)
- remove debug assertions (063eb532)
- Correctly schedule pong timeouts (3b5075ac)
- Start ping timeouts once pints are sent (11a30a98)
- ensure lambda script paginates through all table names (d692c7f3, closes #1000)
- resolve hostnames and send pings out (e57932cf, closes #1011)
- ensure we paginate through all table names (f9f0d0bf, closes #1000)
- more lenient /status matching (7506f74a)
- use router ip/port for proper binding in Rust PoC (56facd8e)
- allow only known protocols for /register calls (f9b19d3c, closes #997)
- change "enable_simplepush" flag to "disable_simplepush" (f2cdbf0e, closes #994)
- Add missing metric for notification encoding (74fbf58d, closes #992)
- remove use of moto dynamodb2 from tests (6efb3669)
- settings -> conf (24c0ec85)
- ap_settings -> conf (e53a2ed7)
- .conf -> .router_conf (fe2259ba)
- *from_settings -> from_config (db44b4ab)
- autopush.settings -> autopush.config (4707e57e)
- AutopushSettings -> AutopushConfig (7ef7d732)
- postpone any db table creation/lookup into db.setup() (a75aec9a, closes #956, #928)
- actually defer this requests.post call (3cc67546, closes #877)
- hasher doesn't take UUIDs (69b91de5, closes #984)
- make simplepush protocol optional (876c9593, breaks #)
- make cryptography lib optional (c96fea9b, closes #979)
- give DatabaseManager some saner defaults (d5c9136a)
- upgrade to latest cryptography (e0ae4cb9)
- fix syntax (2d77393e)
- upgrade travis to trusty (abbf7afe)
- explicitly set update on requirements.txt (9c2d8434)
- add a pyup config file (8c634423)
- Use modern metrics (39db9a7d, closes #950)
- Do not do VAPID auth on trusted connections (f9b375a1, closes #938)
- Use cryptography from git to fix a memory leak (615e961e)
- demote info to debug to reduce logging messages (7b5d9d0f, closes #936)
- log EC2 instance ID when using AWS for hostname (d8efd5e1, closes #931)
- accept aes128gcm content encoding (00947d1f, closes #930)
- convert PushState to attrs (e96f8631, closes #632)
- convert AutopushSettings to attrs (1616d245)
- split clients and agent off settings (70129bc2)
- begin tearing apart AutopushSettings (fc66ddcc)
- add logging for register/unregister calls for websocket and bridges (9e82e0d1, closes #953)
- add memory pressure for jwt's cryptography usage (99048cde, closes #917)
- Return 400 if routing token is blank or unspecified (910c7185)
- update to precise's latest pypy (5e270934)
- ensure simplepush messages log message_id as str (dabfb6d6, closes #925)
- avoid firehose logger spinning the CPU (d1baa2a1)
- dump pmap -XX/X if available (fa792a6a)
- upgrade to pypy 5.8.0 (5e8c941f)
- update docs after refactor (ea1dfd84)
- convert to inlineCallbacks (39f09d3d)
- switch to new iOS mutable aps payload (fd1a6b5a)
- avoid triggering validation errors from bridge API (f3641e4f, closes #893)
- update library dependencies to latest (a2a5a1fd, closes #901)
- Ensure 'aps' passes through marshmallow schema check (a1f159e2)
- Trap for missing Vapid AUTH header token (2fccec64)
- Serialize Decimal correctly for ios aps (1580e21a)
- convert to inlineCallbacks (71bb8e59)
- convert handler tests to client/inlineCallbacks (bf80e4f6)
- bring in cyclone trunk's testing client (a1b8ae72)
- rearrange main around app (MultiService) objects (67742632)
- handle JSONResponse errors like provisioned errors (b70a47fe, closes #744)
- add session log summary on connection close (b18ce53e, closes #448)
- update parquet schema for unified parquet logging (c3047e13, closes #888)
- temporarily allow aps data via registration message (4d60b071)
- refine the Handler validation (b1312db7)
- revert registration's strict critical failure check (caf2ed8d)
- Do not report InvalidSignature as unhandled (0d243556)
- enforce
senderID
for gcm/fcm (569dd1ff)
- add parquet unified schema and cleanup logging messages (63d2981c, closes #882)
- add tracking for content-encoding (c236f725)
- Add VAPID Draft 02 support (e17129db)
- Use cryptography based JWT parser for increased speed (fe9b7766)
- APNS may close a socket prematurely, resulting in an AttributeError (ed86e267)
- Hyphenate
content-available
; don't sendalert
for APNs. (103e0945) - Limit exception trapping to known types when processing crypto-key (3576d207)
- Fixes for missing UAID and header values (defb331b)
- Use log.error() to better track exceptions in APNS (8aa510d7)
- Update docs (9520e50d)
- utilize PEP 426 env markers (b0a5983e)
- kill the base requirements (edf927b6)
- kill these to preserve history (5242b3f1)
- peg the pypy version (aa729dc6)
- prefer the create method (e7b34c30)
- Don't send non-priority messages to sentry (94465295)
- Do not attempt to register failed GCM registrations (896b3df1)
- Do not attempt to register failed GCM registrations (39bae0b8)
- new slack channel (569ae32f)
- also include pypyjit's get_stats_asmmemmgr (fcf5b8b5)
- capture and metric item not found instead of log (73e084f2, closes #811)
- git tag needs an explicit signing flag (and msg) (e8b47821)
- impl. a haproxy endpoint that actually wraps SSL (f39886dd)
- Correct docs to use correct HTTP method for subscription updates (7b07c87f)
- try to avoid build failures on pypy w/ with_gmp=no (ebaeeb34)
- really fix coverage (da614eb9)
- a few minor type sig changes (f8929dff)
- add a /_memusage API on a separate (internal port) (6a9336ce)
- add gcdump.py from pypy's tools (a6360ea1)
- add thorough jwt exp validation (97d42136, closes #794)
- fix coverage (0bca3d18)
- VAPID errors should return 401, not 404; handle InvalidToken exception for parse_endpoint (03c513be)
- ensure our LoopingCall failures are logged (ac1e7a78)
- APNs library requires parameters to be strings (332505e1)
- zero pad months in table names (f7d7c1c3)
- Update to latest cryptography library (d537fd83)
- switch proxy_protocol -> proxy_protocol_port (#789) (81e3af47)
- prefer the LogBeginner observer entry point (dc64f8a5)
- pypy on travis and #560 (#790) (a38660a0)
- avoid the new webpush validation in these tests (#781) (5266bb71)
- allow log_check/status/health API calls w/out certs (#783) (34dc8842)
- add cache-control header to 410's (#773) (2d386b8a, closes #770)
- log the python version in client_info (#778) (876c3825)
- Typos in docs (#782) (7b25baee)
- update docs and clarify error messages (#779) (37689b33)
- move preflight logic into webpush validation (#772) (d963d181, closes #765)
- Add request timing w/validation breakdown. (b2a491cd, closes #758)
- add a --proxy_protocol for the partner endpoint (f482e64d)
- enforce strict crypto header checks (#734) (b4749d1d, closes #188)
- add topic metric for messages sent with topics. (8c13078b)
- handle CryptoKeyExceptions in new crypto validation (#751) (cefe4788)
- log router_key in web/webpush web/simplepush (18cbfdfa)
- Add exception info to log.info call (#743) (c43788c1)
- kill lingering doc references to S3 (#741) (00a2f9a3)
- tag 1.21.2 (728f2606)
- call defer methods with callables (#737) (aff89047)
- Don't log exceptions that don't want to be logged (8819b3d5)
- reset UAID if too many messages are pending (461a8661)
- Zero pad months in table names (5ca85e07)
- Kill v0 endpoints (99e921c0, closes #492)
- reset users missing a record version or expired version (2ef3762d, closes #711)
- retain date when checking message tables (#727) (04756c44, closes #722)
- spread monthly rotation retry over 30 minutes (#726) (7c084596, closes #723)
- improve handling of JSONResponseErrors (7dcb0a0d)
- improve handling of JSONResponseErrors (#718) (29ff0fe4)
- skip timestamped messages instead of deleting (#720) (c2418107, closes #661)
- Add integration tests for bridges (5bc3abe7)
- add type hints to autopush/utils.py (#713) (12a9b7cd)
- use hex formatted ChannelID strings for bridged connections (#709) (8aa1a7eb)
- kill websocket.Notification (#707) (e564a974)
- correct headers to use transcoded values (0e5e1e34)
- Set TTL to 0 if None when doing expiration checks (#701) (0aab2a95)
- do not return error informtion for 500 errors for router (5206cab6)
- simplify Message validation by passing WebPushNotification (0a3d94da)
- Stop splitting version info when logging for websocket (bd3c2c30)
- normalize channelids to JSON encodable entities (777dff44)
- minor updates to the release workflow (#690) (cc7cc306)
- validated methods ignore raw arguments (dbbd0816)
- move Message and Registration handlers to own validated class (ea3b48c2)
- handle provisioned errors gracefully (#682) (8e5f52ad, closes #658)
- add user record cleanup script (#677) (9e5a95f9, closes #645)
- include timestamps in tests' logs (#675) (a3c3b82a)
- add a new client_certs endpoint config option (58e0cbbd)
- add webpush topics (0fe241bb, closes #643)
- Switch to new http2 based APNS protocol (15fea87d)
- remove the wsaccel dependency on pypy (#683) (aa047f36)
- fix travis' virtualenv giving us an older python (#664) (f47b7435)
- assertRaises -> assert_raises (e417325c)
- assertTrue -> eq_ (c01eb4de)
- assertTrue -> ok_ (db4e6dca)
- adapt asserts to ok/eq_ (e9fd8a1c)
- assert -> ok_ (9b83d9c6)
- remove extra jws_err handler which caused extra write after finish (65c7a3a5)
- label arguments for router.register to prevent misassignment (#648) (b1a7e2db)
- Require auth header for endpoints with v2 (#659) (ee633a50)
- log all drop_user calls with record details when possible (21c76f17, closes #650)
- return webpush style response for bridged users (a0339bbe, closes #651)
- clarify where we mean IRouter vs db.Router (33244055)
- break out base deps into their own req file (001e0da4)
- git mv a break out of the base deps (abc63330)
- provide better logging and fix UAID misreference (704fd814)
- do not try to JSON serialize log output (9861edb6)
- clarify token references in HTTP endpoint docs (8a751472)
- add URI to error messages to aid in bad senderIDs (05e5d00f)
- kill dead_cache, it's no longer used (2135dd8b)
- update Makefile to use correct requirements (ec6418b3)
- handle more errors to connection nodes (3cc24fe8)
- disable log_exception capturing in tests (62074f74)
- trap UnicodeEncodeError (a116def7, closes #606)
- dependency update (03ba5b56, closes #639)
- add docker-compose and revamp docs (b4fb7c67, closes #559)
- reduce warnings in code base (a2308b99)
- prefer immutable class vars (follow up to 97a133a4) (7ec831e7)
- send sentry the current stack when lacking a Failure tb (29a9dce8)
- Limit the size of allowed HTTP bodies & headers (54c4526a, closes #501)
- Validate Encryption/C-Key headers in preflight (0c27efc2, closes #456)
- Allow both "Bearer" and "WebPush" as Auth tokens (1891f913, closes #592)
- better documentation for config files & locations (71869826, closes #572)
- limit max TTL for GCM/FCM (7c14249a)
- Trap BOTO Server exception as 503's (75a8889d, closes #605)
- trap JWS/JWT errors from being reported as Sentry Errors (3e0dd71c, closes #610)
- Trap BOTO Server exception as 503's (95bc09c2, closes #605)
- return 404 for invalid URL's for consistency (f4c47af7, closes #578)
- Prevent invalid header values from causing key errors in validation (55e08bfc, closes #604)
- Check tokens in constant time (ed7ce2b4, closes #571)
- fixes reference to releasing page (8510397b)
- kill duplicate ssl_key/cert options (2d2e716c)
- remove obsoleted options from sample config files, and mock_s3 which is no longer necessary (aa4b4de4)
- Update FCM handler to more accurately reflect API (5f9c3223)
- clarify intent of write methods returning nothing (94ab2134)
- utilize console_script's sys.exit return value to kill a mock (1c7de067)
- add release process (a5da4491)
- formatting/externalize the links (966ada81)
- updates to installation (aa6729bb)
- updates to intros (efe0c652)
- don't hide wait_for_times test failures (fe98d4c6)
- remove readline from the nix pkg also (e7c8d385)
- Allow old GCM senderID (fe0d19c8)
- fix _base_tags class var usage and make other class vars immutable (97a133a4)
- readline isn't needed (834a2c79)
- Do not remove router_type from UAID info (d74c00c9)
- Fix up FCM library to reject enpdoints with invalid FCM senderids (56633e4c, closes #556)
- Add ValueError trap for extract_jwt (3f2af804)
- Do not record the GCM data overflow error (b4e8ed43, closes #552)
- avoid uaid error in webpush preflight (333d2fff)
- test_bad_senderidlist now requires --gcm_enabled. bandaid handling of make_settings failures for now (949f8d3a)
- Handle URL arguments to OPTIONS and HEAD requests (471137f5)
- nocover the util function (6230f77d)
- kill now unused senderid_list cruft (a2e1f8c8)
- kill mutable default arguments (b405cce6)
- normalize user-agent for datadog and parse for raw logging (8c4c6368, closes #487)
- Add URLs, text to error response messages (da5eca84)
- log all unregister/register calls. also adds assert_called_included for checking calls including kwargs (cb87a82f)
- Add FCM router support (b06c6a75)
- catch InvalidToken exceptions from fernet (b00ae57c, closes #530)
- overwrite existing messages instead of throwing an error (aa738816, closes #535)
- fix up AWS conditional binding and assoc. conditions (9e3fedbe)
- remove use of buggy moto from websocket/db tests (07fd0caf, closes #531)
- ensure router_type is present in all records (aeeea3ab, closes #526)
- refactor register uaid lookup to verify proper records (a01dabd7, closes #523)
- restore pragma line for full coverage (677e72dd)
- Invalidate UAIDs that are not lowercase or contain dashes (265d7689, closes #519)
- log message errors as info instead of debug (ccc2d685, closes #518)
- remove shared file inclusion for tests (465bcb34, closes #515)
- include webpush handler in endpoint config (b4493acb)
- Elevate GCM reported error states (04080539)
- handle different behavior in rotating table tests at month-end (19973721, closes #502)
- remove failing key check from sentry logging (6c90f8dc)
- add integration testing and verification of sentry reporting (ee4e3398, closes #493)
- Elevate GCM reported error states (fb5ae0b3)
- handle different behavior in rotating table tests at month-end (bd60b39e, closes #502)
- remove failing key check from sentry logging (3782024b)
- add integration testing and verification of sentry reporting (9c70b88f, closes #493)
- lower time-outs for failed notification checks (ed7a69f4)
- fix/add remaining tests for 100% test coverage (c505edf7)
- add AMI instance ID to the logged information (058c601b, closes #483, breaks #)
- add AMI instance ID to the logged information (663eec02, closes #483, breaks #)
- wait for tables to be active in pre-flight check (fb143a9b, closes #433)
- add diagnostic CLI tool for endpoints (a17679f3, closes #509)
- change how bad bridge tokens are handled (0c73fd0b)
- add metrics to bridge protocols (e45b82dd)
- add AMI instance ID to the logged information (058c601b, closes #483, breaks #)
- refactor webpush endpoint for validation schemas (c1923e1c, closes #379)
- refactor simplepush endpoint for validation schemas (050d7038)
- Add endpoint to test logging (824d102d, closes #478)
- change how bad bridge tokens are handled (0eb471b6)
- add metrics to bridge protocols (126203bb)
- add AMI instance ID to the logged information (663eec02, closes #483, breaks #)
- refactor webpush endpoint for validation schemas (f5f366fc, closes #379)
- refactor simplepush endpoint for validation schemas (d66102b7)
- Add endpoint to test logging (0684d898, closes #478)
- add python27 dockerfile (#495) (bfc4f16a)
- add requirements - gnureadline for pypy (#477) (58f9919d)
- add default.nix for nix/nixos users (62454d65)
- add python27 dockerfile (#495) (183d2984)
- add requirements - gnureadline for pypy (#477) (d2baf047)
- add default.nix for nix/nixos users (19e939b6)
- Dockerfile:
- Use shields.io image for code coverage (4e767a71)
- Normalize padding handling for restricted subscriptions (17e885bf, closes #466)
- Fix logging message inconsistencies (37d09b30, closes #460)
- Check connected month bounds for preflight (63ff016c, closes #461)
- Log status_code & errno for all errors (d2c36fcd, closes #457)
- Strip padding from key content (ec48a6cc, closes #451)
- Correct documents to strongly recommend well formatted UUIDs (b58e6339, closes #392, breaks #)
- Use static UAIDs for preflight, clean up after. (e19329d5, closes #434)
- Canonicalize Base64 URL-encoded values per RFC 7515. (9406e0d6)
- use gnureadline instead of readline (e2a6b727)
- Add extended err message for old encryption (a236c90a)
- Support app server keys via the HTTP interface. (88b1f037, closes #423)
- Remove duplicate validation logic in the GCM and APNs routers. (c9fe7627)
- flatten JWT for logging. (f56f8f1a)
- tag 1.14.1 (8cf95035)
- update cffi dep and ensure test reqs matches reqs (669e1b24)
- limit valid months to acceptable range (a06c5ad6, closes #350)
- enforce fail.value.message to string (c3b39161)
- fix dockerfile for automated builds (b4f1dcef, closes #414)
- Allow arbitrary args for options and head functions (46d2c1dc)
- decode and process crypto-key header correctly (f546ed78, closes #410)
- allow logging to batch send to aws firehose (cad54238, closes #421)
- update logging for newstyle twisted and file output (547eb1ed, closes #419)
- bump autobahn/twisted reqs to 0.13/16.0 for utf8 fix (89dc0c28, closes #351)
- Clear corrupted router records (5580e0d2, closes #400)
- clear only the node_id in the router record (a1ee817c, closes #401)
- fix timing issue in last connect test (c4039df1)
- allow channels to register with public key (3d15b9bb, closes #326)
- accept nack messages, log code for ack/unreg/nack (2030a4df, closes #380)
- send raven calls to event loop (d35a78d4, closes #387)
- capture ValueError for empty notifications arrays (ce27f1e3, closes #385)
- don't return 503 for disconnected user (43a2e906, closes #378)
- force header values to lowercase underscored values (b4517aeb, closes #373)
- change message_type to message_source (d603902c)
- pass TTL Header value to GCM (c5ae841c)
- Normalize encryption headers. (b9c3cc57)
- allow stored ttl of None to be treated as 0 (2b75be5f, closes #366)
- silence missing TTL errors from sentry log (c167ee2f)
- add text and links for 400:111 errors (515be293)
- update CONTRIBUTING.md doc to match our style (214e8a77)
- upgrade autobahn/twisted to 0.12/15.5 (47597a0d, closes #180)
- add user-agent logging to acks (1dbe3460)
- Log notifications out of autopush nodes for data on when they were actually delivered to clients. Issue #331.
- Added VAPID auth support to incoming Push POSTs. Issue #325. This does not yet use token caches since that will introduce database changes as well as impact a fair bit more code.
- Require TTL header for all incoming subscription updates. Issue #329.
- Added "Location" header to all successful outbound webpush subscription update responses. Issue #338.
- Whitelist the "Authorization" header for CORS requests. PR #341.
- Add a "WWW-Authenticate" header for 401 responses. PR #341.
- Use appropriate 400, 404, 410 status codes for differing message endpoint results, rather than always a 404. Issue #312.
- Do not send useless 'ver' across GCM bridge. Issue #323.
- The TTL header is now required for all subscription updates. Messages without this header will return a 400 error (errno 111).
- Use non-conditional update for save_messages as put_item relies on a flakey conditional check that doesn't apply in our case. Issue #320.
- Run looping task call to update message table objects on the endpoint as well as the connection node. Issue #319.
- Tag logged notifications based on whether they're for a webpush user or not. Issue #315.
- Add maintenance.py script for use in AWS Lambda. Issue #254.
- Add use_webpush base tag for websocket connections using web_push. Issue #205.
- Add log message if routing connection is refused. Issue #283.
- Increase the type of connection loss exceptions caught by autopush that occur during deploys and node losses. Issue #306.
- Fix issue with users connecting with an invalid UAID that didn't exist in the database. Issue #304.
- Reduce new UAID's to a single write, this time for real. Issue #300.
- Reduce new UAID's to a single write on connect. Issue #300.
- Fixes for GCM JSON encoding rejections and ID assignment. Issue #297.
- Utilize router last_connect index to track whether a user has connected in the current month. Issue #253.
- Add message table rotation for webpush users. Issue #191.
- Capture Authorization header for endpoint requests for logging. Issue #232.
- New Bridge HTTP API. Issues #238, #250, #251. In cooperation with the GCM client work the HTTP Bridge API has been simplified. The new method has been detailed in /api/endpoint.py. In essence: The API is now bearer token based, and uses the form /v1/{BridgeType}/{BridgeToken}/registration[/{uaid}/[subscription/[{chid}]]]
- Tag endpoint requests with a unique ID. Issue #268.
- Fixed document reference to HTTP API to be a deep link.
- Pass either Encryption-Key or Crypto-Key per WebPush spec change. Issue #258.
- Removed refences to obsolete simplepush_test package.
- Convert outbound GCM data to base64. This should resolve potential transcription issues with binary encoded data going over the bridge. Issue #289.
- Record Requesting Hostname to metrics. Issue #228.
- Add key hash for UAIDs NOTE: enabling this will break all currently stored UAID records.
- Fix bug in GCM router call not getting appropriate params dict. Issue #271.
- Ensure rotating message table exists on startup. Issue #266.
- Fix Running documents to reflect usage of local DynamoDB JAR server. Issue #265.
- Fixed scope issue around the Bridge API delete functions.
- Fix db test bug with month addition to properly handle December. Issue #261.
- Relax endpoint TLS cert requirement for https scheme. Issue #249.
- Add endpoint names to the docs. Issue #223.
- Moved Obsolete command arguments out of required path, and allow tester to ignore local configuration files. Issue #246
- It is recommended that the following config options be moved to .autopush_shared.ini --gcm_enabled --senderid_list --senderid_expry
- The previous Bridge HTTP API has been removed.
- The Push message update mechanism has been removed. Issue #279.
- The following configuration options have been deprecated and will soon be removed: --log_level --external_router (replaced by --apns_enabled) --max_message_size
- Convert proprietary AUTH to use Bearer Token for client REST interfaces. Issue #238.
- Please include the new --auth_key which is the base token set for generating bearer tokens. This uses the same format as the --crypto_key, but should be a different value to prevent possible key detection. The key can be generated using the same bin/autokey tool used to generate the crypto_key
- Server provided SenderID values for GCM router using clients The GCM router will randomly select one of a list of SenderIDs stored in S3 under the "oms-autopush"/"senderids" key. The values can be loaded into S3 either via the S3 console, or by running an instance of autopush and passing the values as the "senderid_list" argument. Issue #185.
- REST Registration will now return a valid ChannelID if one is not specified. Issue #182.
- Add hello timeout. Issue #169.
- Convert proprietary AUTH to use HAWK for client REST interfaces. Issue #201.
- Add DELETE /uaid[/chid] functions to client REST interfaces. Issue #183.
- Add .editorconfig for consistent styling in editors. Issue #218.
- Added --human_logs to display more human friendly logging.
- If you specify the --s3_bucket=None, the app will only use local memory and will not call out to the S3 repository. It is STRONGLY suggested that you specify the full --senderid_list data set.
- You may now specify multiple keys for the crypto_key value. Values should be a list ordered from newest to oldest allowed key.
- Capture all ProvisionedException errors in websocket and endpoint correctly. Issue #175.
- Clean-up several recent deferToLater calls that didn't have their cancelled exceptions ignored. Issue #208.
- Fix improper attribute reference in delete call. Issue #211.
- Always include TTL header in response to a WebPush notification. Issue #194.
- Increased unit test coverage due to removal of proprietary AUTH.
- Fixed issue with local senderid data cache. (discovered while debugging.)
- Do not specify values for boolean flags.
- 'cors' is now enabled by default. In it's place use --nocors if you wish to disable CORS. Please remove "cors" flag from configuration files.
- Do not specify --gcm_apikey. Instead, store the API key and senderid as values in S3. The data may still be written as a JSON string such as: ' "_senderID_": {"auth": "_api_key"}}' activate the GCM bridge by specifying --gcm_enabled.
- Set SSL mode properly for release buffers.
- Change HOSTNAME env name to not conflict with AWS env. Issue #198
- Move endpoint_* marks to shared variables.
- Add UDP Wake support. Some devices which use SimplePush routing offer a feature to wake on a carrier provided UDP ping. Issue #106.
- Provide service environment information to help clients identify the service environment, server provides it along with the hello message. Issue #50.
- Add actionable JSON errors to the Endpoint responses. Issue #178.
- Reset UAIDs for clients that change their router type. PR #167.
- Respond with status code 413 for payloads that exceed the maximum size, 404 for invalid tokens, and 400 for missing encryption headers. PR #170.
- Add Push message update mechanism. Issue #141.
- log_exception no longer re-raises the exception, which was causing onClose to not return thus letting the connectionCount not be decremented.
- Check for stale connection nodes when routing. Issue #163.
- Remove logging of sendClose, as its unactionable noise. Add metric for sendClose success. Remove final verifyNuke as its never run in the several months it was in, indicating that abortConnection is 100% effective. Issue #161.
- Rename SimplePushServerProtocol to PushServerProtocol. Issue #117.
- Add an endpoint for deleting undelivered messages. PR #131.
- Don't require nose to be installed to run.
- Don't cancel a deferred that was already called.
- Restore logging of simplepush successfull/stored delivery based on status.
- Restore updates.handled endpoint timer to track time to deliver.
- Memory profile benchmarking on a connection, displays in test results. Issue #142.
- Refactor of attribute assignment to the Websocket instance to avoid memory increases due to Python reallocating the underlying dict datastructure. Issue #149.
- Add close_handshake_timeout option, with default of 0 to let our own close timer handle clean-up.
- Up default close handshake timer to 10 seconds for slower clients.
- Add channel id logging to endpoint.
- Expose Web Push headers for CORS requests. PR #148.
- Expose argument for larger websocket message sizes (to fix issue #151) Clients with a large number of channelIDs (50+) can cause the initial connection to fail. A proper solution is to modify the client to not send ChannelIDs as part of the "hello" message, but being able to increase the message size on the server should keep the server from dying up front. This fix should only impact clients with large numbers of registered channels, notably, devs.
- Fix _notify_node to not attempt delivering to ourselves at the end of the client connection.
- Remove adaptive ping entirely. Send special close code and drop clients that ping more frequently than 55 seconds (approx 1 min). This will result in clients that ping too much being turned away for awhile, but will alleviate data/battery issues in buggy mobile clients. Issue #103.
- Store and transmit encrypted Web Push messages as Base64-encoded strings. PR #135.
- Add /status HTTP endpoint for autopush. Issue #136.
- Log all disconnects, whether they were clean, the code, and the reason.
- Allow encryption headers to be omitted for blank messages. Issue #132.
- Handle None values in ack updates.
- Fix deferToLater to not call the function if it was cancelled using a canceller function.
- Fix finish_webpush_notifications to not immediately call process_notifications as that will be called as needed after ack's have been completed.
- Fix process_ack to not call process_notifications when using webpush if there are still remaining notifications to ack.
- Integrate simplepush_test smoke-test client with the main autopush test-suite into the test-runner. Issue #119.
- Fix RouterException to allow for non-logged responses. Change RouterException's to only log actual exceptions that should be address in bug-fixes. Issue #125.
- Add WebPush TTL scheme per spec (as of July 28th 2015). Issue #56.
- Add WebPush style data delivery with crypto headers to connected clients. Each message is stored independently in a new message table, with the version and channel id still required to ack a message. The version is a UUID4 hex which is also echo'd back to the AppServer as a Location URL per the current WebPush spec (as of July 28th 2015). Issue #57.
- Add Sphinx docs with ReadTheDocs publishing. Issue #98. This change also includes a slight Metrics refactoring with a IMetrics interface, and renames MetricSink -> SinkMetrics for naming consistency.
- Increase test coverage of utils for 100% test coverage.
- Move all dependencies into requirements.txt and freeze them all explicitly.
-
Refactor proprietary ping handling for modularized dispatch. Issue #82.
Major changes
- RegistrationHandler endpoint is now the sole method for registering for a proprietary wake / transport.
connect
data from websocket hello is ignored.- Unit Testing has been increased to ~ 100% test coverage.
- Proprietary Ping and Bridge terminology has been replaced with the terms router_type / router_data. Router type being one of simplepush / apns / gcm and eventually webpush. Router data is an arbitrary JSON value as appropriate for the router type.
db.py
- Removed previous methods (deleteByToken/get_connection/etc) as all the router data is included as a single JSON blob for DynamoDB to store.
- Change register_user to use UpdateItem to avoid overwriting router data when connecting via websocket.
endpoint.py
- EndpointHandler and RegistrationHandler now both inherit from a common baseclass: AutoendpointHandler. This baseclass implements OPTIONS/HEAD methods, sets the appropriate CORS headers, and has several shared error handlers.
- A notification has been standardized into a Notification namedtuple.
- RegistrationHandler API has been changed to have PUT and POST methods.
- EndpointHandler has been refactored to use the new Router interface.
- EndpointHandler now uses a basic HMAC auth scheme, GET/PUT with existing UAID's require an appropriate HMAC attached with the original derived shared key. (Documented in the RegistrationHandler.get method)
websocket.py
- Removed use of
connect
data in hello message as RegistrationHandler is now the sole method of registering other routers.
router/interface.py (NEW)
- IRouter object that all notification routers must implement. This handles verifying router data during registration, and is responsible for actual delivery of notifications.
- RouterException / RouterResponse objects for returning appropriate data during register/route_notification calls.
router/apnsrouter.py
- Moved from bridge/apns.
- Refactored to use RouterException/RouterResponse.
router/gcm.py
- Moved from bridge/gcm.
- Refactored to use RouterException/RouterResponse.
- Removed internal message retries, now returns a 503 in that case for the Application Server to retry delivery.
router/simple.py
- Moved code out from endpoint.py.
- Refactored existing simplepush routing scheme to use twisted inline deferreds to track the logic with less headaches.
bridge
option is nowexternal_router
.
- Additional logging/metrics on auto-ping and connection aborting.
- Add additional metrics for writers/readers to indicate what twisted is still tracking connection-wise.
- Correct trap for TCP connection closer
- Fix error with blank UAIDs being rejected as "already registered"
- Pong delay can no longer be set, and uses an adaptive value based on the last ping to try and accurately compensate for higher latency connections. This also removes the min_ping_interval option such that if a client is pinging too frequently we will instead leave space for up to the clients timeout of 10-sec (a hardcoded client value).
- Fix 500 errors in endpoint caused by timeouts when trying to deliver to expired nodes in the cluster. Resolves Issue #75.
- Add CancelledError trap to all deferreds in websocket.py. Resolves Issue #74.
- Aggressively delete old TCP connections on device reregistration (#72)
- Removed min_ping_interval config option.
- Removed pong_delay config option.
- Add structured logging output for the endpoint for additional request metadata. Resolves Issue #67.
- Fix bug with deferreds not being tracked, causing access to objects that were cleaned up. Resolves Issue #66.
- kill older, duplicate UAID entries that may still be connected.
- use Websocket Pings to detect dead connections.
- Verify ability to read/write DynamoDB tables on startup. Resolves Issue #46.
- Send un-acknolwedged direct delivery messages to the router if the client is disconnected without ack'ing them. Resolves Issue #36.
- Use IProducer to more precisely monitor when the client has drained the data to immediately resume sending more data. Resolves Issue #28.
- Add /status HTTP endpoint for autoendpoint. Resolves Issue #27.
- Add example stage/prod config files. Resolves Issue #22.
- Switch internal routing from requests to twisted http-client. Resolves Issue #21.
- Add logging for user-agent to metrics tags. Resolves Issue #20.
- Add Datadog stats output. Resolves Issue #17.
- Add GCM and APNS Bridges. Resolves Issue #16.
- Use eliot structured logging for stdout logging that matches ops standard for logging. Resolves Issue #11.
- Allow storage/router table names to be configurable. Resolves Issue #4.
- Added optional CORS headers (use --cors to enable). Resolves Issue #3.
- Add provisioned error metrics to track when throughput is exceeded in AWS DynamoDB. Resolves Issue #2.
- Add Sentry support (SENTRY_DSN must be set in the environment). Resolves Issue #1.
- Capture and log exceptions in websocket protocol functions.
- Fix bug with 'settings' in cyclone overriding cyclone's settings. Resolves Issue #13.