Skip to content
This repository has been archived by the owner on Jul 13, 2023. It is now read-only.

Latest commit

 

History

History
1545 lines (990 loc) · 85.9 KB

CHANGELOG.md

File metadata and controls

1545 lines (990 loc) · 85.9 KB

1.38.0 (2017-10-13)

Bug Fixes

  • Handle legacy simplepush records as candidate webpush records (a0c7dfae, closes #1033)

Breaking Changes

  • update dependencies to the latest versions (564c4d87, closes #1040, breaks #)

Features

1.37.0 (2017-10-02)

Features

Bug Fixes

  • dump_rpy_heap before calling objgraph (ece7db1a, closes #1028)
  • Remove discussion comment and useless bool return (243b7d31, closes #1026)

1.36.0 (2017-09-15)

Refactor

  • Reorganize the Rust ping manager (2a1ab5dd)
  • Remove unneeded features from Rust deps (b2d43dd0)

Features

  • 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)

Bug Fixes

  • 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)

1.35.1 (2017-08-29)

Bug Fixes

  • change "enable_simplepush" flag to "disable_simplepush" (f2cdbf0e, closes #994)
  • Add missing metric for notification encoding (74fbf58d, closes #992)

1.35.0 (2017-08-10)

Features

  • remove use of moto dynamodb2 from tests (6efb3669)

Refactor

Bug Fixes

1.34.0 (2017-07-26)

Breaking Changes

  • make simplepush protocol optional (876c9593, breaks #)

Features

  • make simplepush protocol optional (876c9593, breaks #)
  • make cryptography lib optional (c96fea9b, closes #979)

Bug Fixes

  • move metric increments to lowest callbacks (637e246f, closes #958)

Refactor

  • give DatabaseManager some saner defaults (d5c9136a)

Chore

1.33.0 (2017-07-12)

Features

  • 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)

Refactor

  • convert PushState to attrs (e96f8631, closes #632)
  • convert AutopushSettings to attrs (1616d245)
  • split clients and agent off settings (70129bc2)
  • begin tearing apart AutopushSettings (fc66ddcc)

Bug Fixes

  • 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)

Chore

  • update to precise's latest pypy (5e270934)

1.32.2 (2017-06-19)

Bug Fixes

  • ensure simplepush messages log message_id as str (dabfb6d6, closes #925)
  • avoid firehose logger spinning the CPU (d1baa2a1)

1.32.1 (2017-06-19)

Features

  • dump pmap -XX/X if available (fa792a6a)

1.32.0 (2017-06-15)

Bug Fixes

Features

Doc

Refactor

1.31.0 (2017-05-31)

Features

  • 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)

Bug Fixes

  • Ensure 'aps' passes through marshmallow schema check (a1f159e2)
  • Trap for missing Vapid AUTH header token (2fccec64)
  • Serialize Decimal correctly for ios aps (1580e21a)

Refactor

  • convert to inlineCallbacks (71bb8e59)
  • convert handler tests to client/inlineCallbacks (bf80e4f6)
  • bring in cyclone trunk's testing client (a1b8ae72)

1.30.0 (2017-05-17)

Refactor

  • rearrange main around app (MultiService) objects (67742632)

Features

  • 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)

1.29.1 (2017-05-05)

Features

  • update parquet schema for unified parquet logging (2aeefce7, closes #888)

1.29.0 (2017-04-28)

Refactor

  • refine the Handler validation (b1312db7)

Bug Fixes

  • revert registration's strict critical failure check (caf2ed8d)
  • Do not report InvalidSignature as unhandled (0d243556)
  • enforce senderID for gcm/fcm (569dd1ff)

Features

  • add parquet unified schema and cleanup logging messages (63d2981c, closes #882)
  • add tracking for content-encoding (c236f725)
  • Add VAPID Draft 02 support (e17129db)

1.28.0 (2017-04-07)

Refactor

Features

  • Use cryptography based JWT parser for increased speed (fe9b7766)

Bug Fixes

  • APNS may close a socket prematurely, resulting in an AttributeError (ed86e267)
  • Hyphenate content-available; don't send alert 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)

1.27.0 (2017-03-24)

Doc

Chore

Features

  • Add ChannelID report for UAID (71035fa0)
  • Add timeout for internally routed messages. (44d02853)

1.26.0 (2017-03-10)

Bug Fixes

  • 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)

Features

  • new slack channel (569ae32f)
  • also include pypyjit's get_stats_asmmemmgr (fcf5b8b5)
  • capture and metric item not found instead of log (73e084f2, closes #811)

1.25.1 (2017-02-17)

Doc

  • git tag needs an explicit signing flag (and msg) (e8b47821)

Bug Fixes

  • 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)

1.25.0 (2017-02-10)

Features

  • 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)

Bug Fixes

  • 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)

Doc

1.24.0 (2017-01-27)

Features

  • switch proxy_protocol -> proxy_protocol_port (#789) (81e3af47)

Bug Fixes

  • prefer the LogBeginner observer entry point (dc64f8a5)

Test

  • pypy on travis and #560 (#790) (a38660a0)

1.23.0 (2017-01-11)

Bug Fixes

  • avoid the new webpush validation in these tests (#781) (5266bb71)

Features

  • 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)

1.22.0 (2016-11-28)

Features

  • enforce strict crypto header checks (#734) (b4749d1d, closes #188)
  • add topic metric for messages sent with topics. (8c13078b)

Bug Fixes

  • 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)

1.21.2 (2016-11-17)

Chore

1.21.1 (2016-11-17)

Bug Fixes

  • call defer methods with callables (#737) (aff89047)

1.21.0 (2016-11-10)

Breaking Changes

Bug Fixes

  • 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)

Features

  • 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)

1.20.0 (2016-10-28)

Bug Fixes

  • improve handling of JSONResponseErrors (7dcb0a0d)
  • improve handling of JSONResponseErrors (#718) (29ff0fe4)

Features

  • 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)

1.19.3 (2016-10-17)

Bug Fixes

  • use hex formatted ChannelID strings for bridged connections (#709) (8aa1a7eb)
  • kill websocket.Notification (#707) (e564a974)

1.19.2 (2016-10-13)

Bug Fixes

  • 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)

Doc

  • minor updates to the release workflow (#690) (cc7cc306)

1.19.1 (2016-10-10)

Chore

Bug Fixes

  • validated methods ignore raw arguments (dbbd0816)

1.19.0 (2016-10-07)

Features

  • 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)

Chore

  • remove the wsaccel dependency on pypy (#683) (aa047f36)
  • fix travis' virtualenv giving us an older python (#664) (f47b7435)

Bug Fixes

1.18.0 (2016-09-20)

Bug Fixes

  • 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)

Features

Breaking Changes

  • Add multiple cert handlers for APNs (7eed1ffe, closes #655, breaks #)

1.17.2 (2016-08-31)

Test

  • clarify where we mean IRouter vs db.Router (33244055)

Chore

  • break out base deps into their own req file (001e0da4)
  • git mv a break out of the base deps (abc63330)

Bug Fixes

  • 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)

Features

Refactor

  • extract a simple BaseHandler (a794e20f)
  • cleanup of Handler initialize/ap_settings (031e1446)

1.17.1 (2016-08-22)

Refactor

  • prefer immutable class vars (follow up to 97a133a4) (7ec831e7)

Features

  • 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)

Bug Fixes

  • 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)

Doc

1.17.0 (2016-08-05)

Refactor

  • clarify intent of write methods returning nothing (94ab2134)
  • utilize console_script's sys.exit return value to kill a mock (1c7de067)

Doc

Test

  • don't hide wait_for_times test failures (fe98d4c6)

Bug Fixes

  • 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)

Chore

  • more gitignores (d5585c6c)
  • Dockerfile: apt-get update before installing (#545) (5c6cb3ce)

Features

  • 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)

1.16.1 (2016-07-19)

Bug Fixes

  • 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)

1.16.0 (2016-07-15)

Bug Fixes

  • 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)

Test

  • lower time-outs for failed notification checks (ed7a69f4)
  • fix/add remaining tests for 100% test coverage (c505edf7)

Breaking Changes

  • add AMI instance ID to the logged information (058c601b, closes #483, breaks #)
  • add AMI instance ID to the logged information (663eec02, closes #483, breaks #)

Features

  • 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)

Chore

  • 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:
    • die quickly if build command fails (#476) (1cb329fa)
    • die quickly if build command fails (#476) (aecedaf6)

1.15.0 (2016-05-16)

Doc

  • Use shields.io image for code coverage (4e767a71)

Chore

  • update all libs to latest versions and fix jws conflict (1cbf94f3, closes #453)

Bug Fixes

  • 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)

Breaking Changes

  • Correct documents to strongly recommend well formatted UUIDs (b58e6339, closes #392, breaks #)

Features

  • 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)

Refactor

  • Remove duplicate validation logic in the GCM and APNs routers. (c9fe7627)

1.14.2 (2016-04-07)

Bug Fixes

1.14.1 (2016-03-28)

Chore

Bug Fixes

  • update cffi dep and ensure test reqs matches reqs (669e1b24)

1.14.0 (2016-03-28)

Chore

Bug Fixes

  • 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)

Features

  • 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)

1.13.2 (2016-03-13)

Features

  • validate v0 tokens more thoroughly (77373cd6, closes #406)

Bug Fixes

  • Clear corrupted router records (5580e0d2, closes #400)
  • clear only the node_id in the router record (a1ee817c, closes #401)

1.13.1 (2016-03-10)

Test

  • fix timing issue in last connect test (c4039df1)

Chore

  • fix changelog and clog for past commit oopsies (90c3ab16)
  • update version for 1.13.1 (7a960b4c)

Bug Fixes

  • default api_ver to v0 for message endpoint (86ba66d4, closes #395)

1.13 (2016-03-07)

Features

  • allow channels to register with public key (3d15b9bb, closes #326)
  • accept nack messages, log code for ack/unreg/nack (2030a4df, closes #380)

Bug Fixes

  • 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)

1.12.1 (2016-02-25)

Bug Fixes

  • 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)

1.12.0 (2016-02-23)

Doc

  • add text and links for 400:111 errors (515be293)
  • update CONTRIBUTING.md doc to match our style (214e8a77)

Features

  • upgrade autobahn/twisted to 0.12/15.5 (47597a0d, closes #180)
  • add user-agent logging to acks (1dbe3460)

Bug Fixes

  • allow webpush w/no ttl & cleanup 400 logging (1f01cd70, closes #358)

Chore

  • bring project up to standard guidelines (c2baf49f, closes #344)

1.11.0 (2016-02-16)

Features

  • 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.

Bug Fixes

  • 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.

Backwards Incompatibilities

  • The TTL header is now required for all subscription updates. Messages without this header will return a 400 error (errno 111).

1.10.1 (2016-02-01)

Bug Fixes

  • 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.

1.10.0 (2016-01-29)

Features

  • 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.

Bug Fixes

  • Increase the type of connection loss exceptions caught by autopush that occur during deploys and node losses. Issue #306.

1.9.3 (2016-01-23)

  • Fix issue with users connecting with an invalid UAID that didn't exist in the database. Issue #304.

1.9.2 (2016-01-22)

Bug Fixes

  • Reduce new UAID's to a single write, this time for real. Issue #300.

1.9.1 (2016-01-22)

Bug Fixes

  • Reduce new UAID's to a single write on connect. Issue #300.
  • Fixes for GCM JSON encoding rejections and ID assignment. Issue #297.

1.9.0 (2016-01-15)

Features

  • 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.

Bug Fixes

  • 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

WebPush

Configuration Changes

  • It is recommended that the following config options be moved to .autopush_shared.ini --gcm_enabled --senderid_list --senderid_expry

Backwards Incompatibilities

  • The previous Bridge HTTP API has been removed.
  • The Push message update mechanism has been removed. Issue #279.

Deprecated

  • The following configuration options have been deprecated and will soon be removed: --log_level --external_router (replaced by --apns_enabled) --max_message_size

1.8.1 (2015-11-16)

Features

  • Convert proprietary AUTH to use Bearer Token for client REST interfaces. Issue #238.

Bug Fixes

WebPush

Configuration Changes

  • 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

1.8.0 (2015-11-13)

Features

  • 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.

Bug Fixes

  • 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.)

WebPush

Backwards Incompatibilities

  • 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.

1.7.2 (2015-10-24)

Bug Fixes

  • Set SSL mode properly for release buffers.

1.7.1 (2015-10-23)

Bug Fixes

  • Change HOSTNAME env name to not conflict with AWS env. Issue #198
  • Move endpoint_* marks to shared variables.

1.7.0 (2015-10-21)

Features

  • 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.

Bug Fixes

  • 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.

WebPush

  • Add Push message update mechanism. Issue #141.

1.6.0 (2015-09-14)

Bug Fixes

  • 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.

WebPush

  • Add an endpoint for deleting undelivered messages. PR #131.

1.5.1 (2015-09-02)

Bug Fixes

  • Don't require nose to be installed to run.

1.5.0 (2015-09-02)

Bug Fixes

  • 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.

Features

  • 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.

1.4.1 (2015-08-31)

Bug Fixes

  • 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.

1.4.0 (2015-08-27)

Bug Fixes

  • 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.

Features

  • 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.

1.3.3 (2015-08-18)

  • Handle None values in ack updates.

1.3.2 (2015-08-11)

Bug Fixes

  • 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.

Features

  • Integrate simplepush_test smoke-test client with the main autopush test-suite into the test-runner. Issue #119.

1.3.1 (2015-08-04)

Bug Fixes

  • 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.

1.3.0 (2015-07-29)

Features

  • 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.

Bug Fixes

  • Increase test coverage of utils for 100% test coverage.
  • Move all dependencies into requirements.txt and freeze them all explicitly.

Internal

  • 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.

Backward Incompatibilities

  • bridge option is now external_router.

1.2.3 (2015-06-02)

Features

  • Additional logging/metrics on auto-ping and connection aborting.

1.2.2 (2015-05-27)

Features

  • Add additional metrics for writers/readers to indicate what twisted is still tracking connection-wise.

Bug Fixes

  • Correct trap for TCP connection closer

1.2.1 (2015-05-20)

Bug Fixes

  • Fix error with blank UAIDs being rejected as "already registered"

1.2.0 (2015-05-19)

Features

  • 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).

Bug Fixes

  • 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)

Backwards Incompatibility

  • Removed min_ping_interval config option.
  • Removed pong_delay config option.

1.1rc2 (2015-05-15)

Features

  • Add structured logging output for the endpoint for additional request metadata. Resolves Issue #67.

Bug Fixes

  • 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.

1.0rc1 (2015-04-29)

Features

  • 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.

Bug Fixes

  • Capture and log exceptions in websocket protocol functions.
  • Fix bug with 'settings' in cyclone overriding cyclone's settings. Resolves Issue #13.