summary refs log tree commit diff
path: root/synapse (follow)
Commit message (Expand)AuthorAgeFilesLines
* key upload tweaksRichard van der Hoff2016-07-271-7/+5
* SQL syntax fixRichard van der Hoff2016-07-271-1/+1
* Delete e2e keys on device deleteRichard van der Hoff2016-07-273-4/+28
* Make the device id on e2e key upload optionalRichard van der Hoff2016-07-262-12/+54
* Add `create_requester` functionRichard van der Hoff2016-07-267-49/+79
* Fix typoRichard van der Hoff2016-07-261-1/+1
* Merge branch 'develop' into rav/delete_refreshtoken_on_delete_deviceRichard van der Hoff2016-07-262-55/+113
|\
| * Merge pull request #951 from matrix-org/rav/flake8Richard van der Hoff2016-07-261-5/+3
| |\
| | * Fix flake8 violationRichard van der Hoff2016-07-261-5/+3
| * | Merge pull request #948 from matrix-org/markjh/auth_fixesMark Haines2016-07-261-50/+110
| |\ \ | | |/ | |/|
| | * Fix how push_actions are redacted.Mark Haines2016-07-261-8/+10
| | * Don't add rejected events if we've seen them befrore. Add some comments to ex...Mark Haines2016-07-261-5/+48
| | * Only update the events and event_json tables for rejected eventsMark Haines2016-07-252-52/+63
| | * Don't add the events to forward extremities if the event is rejectedMark Haines2016-07-251-3/+6
| | * Don't add rejections to the state_group, persist all rejectionsMark Haines2016-07-252-5/+6
* | | Delete refresh tokens when deleting devicesRichard van der Hoff2016-07-262-15/+49
|/ /
* | Merge pull request #949 from matrix-org/rav/update_devicesDavid Baker2016-07-2610-22/+213
|\ \
| * | Implement updating devicesRichard van der Hoff2016-07-263-8/+67
| * | Implement deleting devicesRichard van der Hoff2016-07-269-15/+146
| * | Log when adding listenersRichard van der Hoff2016-07-251-0/+1
* | | typoMatthew Hodgson2016-07-261-1/+1
|/ /
* | Merge pull request #946 from matrix-org/dbkr/log_recaptcha_hostnameDavid Baker2016-07-251-2/+11
|\ \ | |/ |/|
| * Use get to avoid KeyErrorsDavid Baker2016-07-221-1/+1
| * Log the hostname the reCAPTCHA was completed onDavid Baker2016-07-221-2/+11
* | fix: defer.returnValue takes one argumentMark Haines2016-07-251-1/+1
* | background updates: fix assert againRichard van der Hoff2016-07-251-1/+1
* | background updates: Fix assertion to do somethingRichard van der Hoff2016-07-251-2/+2
* | Fix background_update testsRichard van der Hoff2016-07-251-7/+20
* | PEP8Richard van der Hoff2016-07-221-1/+0
* | Create index on user_ips in the backgroundRichard van der Hoff2016-07-223-12/+80
|/
* make /devices return a listRichard van der Hoff2016-07-211-5/+5
* Merge pull request #943 from matrix-org/rav/get_device_apiDavid Baker2016-07-212-9/+62
|\
| * Fix PEP8 errorsRichard van der Hoff2016-07-211-1/+1
| * Implement GET /device/{deviceId}Richard van der Hoff2016-07-212-9/+62
* | Merge pull request #942 from matrix-org/rav/fix_register_deviceidDavid Baker2016-07-211-11/+10
|\ \ | |/ |/|
| * Preserve device_id from first call to /registerRichard van der Hoff2016-07-211-11/+10
* | storage/client_ips: remove some dead codeRichard van der Hoff2016-07-211-3/+0
* | Merge branch 'develop' into rav/get_devices_apiRichard van der Hoff2016-07-204-22/+67
|\|
| * Merge pull request #938 from matrix-org/rav/add_device_id_to_client_ipsRichard van der Hoff2016-07-202-7/+25
| |\
| | * Record device_id in client_ipsRichard van der Hoff2016-07-202-7/+25
| * | Don't explode if we have no snapshots yetErik Johnston2016-07-201-0/+3
| * | Merge pull request #937 from matrix-org/rav/register_device_on_registerDavid Baker2016-07-201-15/+39
| |\ \ | | |/ | |/|
| | * Register a device_id in the /v2/register flow.Richard van der Hoff2016-07-201-15/+39
* | | GET /devices endpointRichard van der Hoff2016-07-207-5/+198
|/ /
* / More doc-commentsRichard van der Hoff2016-07-202-10/+14
|/
* Merge pull request #936 from matrix-org/erikj/log_rssErik Johnston2016-07-204-1/+50
|\
| * Add metrics for psutil derived memory usageErik Johnston2016-07-204-1/+50
* | Merge pull request #935 from matrix-org/erikj/backfill_notifsErik Johnston2016-07-201-5/+6
|\ \
| * | Don't notify pusher pool for backfilled eventsErik Johnston2016-07-201-5/+6
| |/
* | Merge pull request #933 from matrix-org/rav/type_annotationsRichard van der Hoff2016-07-206-0/+46
|\ \
| * | Type annotationsRichard van der Hoff2016-07-196-0/+46
* | | Merge pull request #932 from matrix-org/rav/register_refactorDavid Baker2016-07-204-21/+52
|\ \ \ | |_|/ |/| |
| * | Further registration refactoringRichard van der Hoff2016-07-194-21/+52
| |/
* | Merge pull request #922 from matrix-org/erikj/file_api2Erik Johnston2016-07-206-9/+239
|\ \ | |/ |/|
| * CommentErik Johnston2016-07-201-0/+4
| * Add filter param to /messages APIErik Johnston2016-07-142-5/+22
| * Add support for filters in paginate_room_eventsErik Johnston2016-07-141-1/+51
| * Add 'contains_url' to filterErik Johnston2016-07-141-3/+20
| * Add sender and contains_url field to events tableErik Johnston2016-07-142-0/+142
* | Merge pull request #931 from matrix-org/rav/refactor_registerDavid Baker2016-07-191-78/+102
|\ \
| * | Don't bind email unless threepid contains expected fieldsRichard van der Hoff2016-07-191-28/+25
| * | rest/client/v2_alpha/register.py: Refactor flow somewhat.Richard van der Hoff2016-07-191-75/+102
* | | Merge pull request #929 from matrix-org/rav/support_deviceid_in_loginRichard van der Hoff2016-07-1910-24/+265
|\ \ \ | |/ / |/| |
| * | schema fixRichard van der Hoff2016-07-191-1/+1
| * | Add device_id support to /loginRichard van der Hoff2016-07-1810-24/+265
* | | Summary lineMark Haines2016-07-191-2/+1
* | | Update docstring on Handlers.Mark Haines2016-07-191-3/+15
|/ /
* | Merge pull request #928 from matrix-org/rav/refactor_loginRichard van der Hoff2016-07-182-65/+82
|\ \
| * | Refactor login flowRichard van der Hoff2016-07-182-65/+82
* | | Merge pull request #924 from matrix-org/erikj/purge_historyErik Johnston2016-07-181-19/+15
|\ \ \
| * | | Fix /purge_history bugErik Johnston2016-07-151-19/+15
* | | | Merge pull request #925 from matrix-org/markjh/auth_fixMark Haines2016-07-181-0/+5
|\ \ \ \
| * | | | Fix 500 ISE when sending alias event without a state_keyMark Haines2016-07-151-0/+5
* | | | | Merge pull request #927 from Half-Shot/developErik Johnston2016-07-181-5/+6
|\ \ \ \ \ | |_|_|/ / |/| | | |
| * | | | Use body.get to check for 'user'Will Hunt2016-07-161-2/+1
| * | | | Fall back to 'username' if 'user' is not given for appservice reg.Will Hunt2016-07-161-3/+5
| |/ / /
* / / / Fix a doc-commentRichard van der Hoff2016-07-181-1/+1
|/ / /
* | | Merge pull request #923 from matrix-org/erikj/purge_historyErik Johnston2016-07-152-2/+13
|\| |
| * | Pull out min stream_ordering from ex_outlier_streamErik Johnston2016-07-151-1/+2
| * | event_backwards_extremeties may not be emptyErik Johnston2016-07-151-1/+11
* | | Merge pull request #919 from matrix-org/erikj/auth_fixErik Johnston2016-07-153-5/+35
|\ \ \ | |/ / |/| |
| * | CommentErik Johnston2016-07-152-0/+6
| * | Check sender signed eventErik Johnston2016-07-143-6/+12
| * | Check if alias event's state_key matches sender's domainErik Johnston2016-07-131-0/+11
| * | Check creation event's room_id domain matches sender'sErik Johnston2016-07-131-0/+7
* | | Merge pull request #921 from matrix-org/erikj/account_deactivateErik Johnston2016-07-141-0/+44
|\ \ \
| * | | Add hs objectErik Johnston2016-07-141-0/+1
| * | | Only accept password authErik Johnston2016-07-141-12/+0
| * | | Add an /account/deactivate endpointErik Johnston2016-07-141-0/+55
| | |/ | |/|
* | | Merge pull request #918 from negzi/bugfix_for_token_expiryErik Johnston2016-07-144-6/+10
|\ \ \ | |/ / |/| |
| * | Bug fix: expire invalid access tokensNegar Fazeli2016-07-134-6/+10
| |/
* | Merge pull request #915 from matrix-org/dbkr/more_requesttokensDavid Baker2016-07-133-30/+103
|\ \ | |/ |/|
| * be more pythonicDavid Baker2016-07-121-1/+1
| * on_OPTIONS isn't neccessaryDavid Baker2016-07-122-10/+1
| * Remove other debug loggingDavid Baker2016-07-121-2/+0
| * Separate out requestTokens to separate handlersDavid Baker2016-07-112-65/+93
| * Oops, remove debug loggingDavid Baker2016-07-111-4/+0
| * Implement https://github.com/matrix-org/matrix-doc/pull/346/filesDavid Baker2016-07-082-0/+60
* | Add a comment explaining allow_noneMark Haines2016-07-081-0/+2
* | Ensure that the guest user is in the database when upgrading accountsMark Haines2016-07-081-0/+13
|/
* Merge branch 'master' of github.com:matrix-org/synapse into developErik Johnston2016-07-085-9/+25
|\
| * Merge branch 'hotfixes-v0.16.1' v0.16.1-r1Erik Johnston2016-07-082-6/+11
| |\
| | * Bump version and changelogErik Johnston2016-07-071-1/+1
| | * Fix bug where we did not correctly explode when multiple user_ids were set in...Erik Johnston2016-07-071-5/+10
| * | Merge pull request #886 from matrix-org/markjh/async_commitMark Haines2016-06-293-3/+14
| |\ \
| | * | Optionally make committing to postgres asynchronous.Mark Haines2016-06-203-3/+14
* | | | CommentErik Johnston2016-07-071-0/+3
* | | | Return 400 rather than 500Erik Johnston2016-07-071-1/+4
* | | | Add rest servlet. Fix SQL.Erik Johnston2016-07-062-5/+5
* | | | Merge branch 'develop' of github.com:matrix-org/synapse into erikj/test2Erik Johnston2016-07-061-1/+1
|\ \ \ \
| * \ \ \ Merge pull request #909 from matrix-org/erikj/shared_secretErik Johnston2016-07-063-28/+48
| |\ \ \ \
| * | | | | Update password config commentKent Shikama2016-07-061-1/+1
* | | | | | Merge branch 'erikj/shared_secret' into erikj/test2Erik Johnston2016-07-069-105/+187
|\ \ \ \ \ \ | | |/ / / / | |/| | | |
| * | | | | Check that there are no null bytes in user and passswordErik Johnston2016-07-061-0/+6
| * | | | | Add null separator to hmacErik Johnston2016-07-061-0/+2
| * | | | | Remove spurious txnErik Johnston2016-07-051-9/+0
| * | | | | Fix for postgresErik Johnston2016-07-051-2/+2
| * | | | | Add an admin option to shared secret registrationErik Johnston2016-07-053-24/+42
| * | | | | Protect password when registering using shared secretErik Johnston2016-07-051-4/+7
| |/ / / /
| * | | | Merge pull request #904 from matrix-org/dbkr/register_email_no_untrusted_id_s...David Baker2016-07-052-15/+29
| |\ \ \ \
| | * | | | requestToken updateDavid Baker2016-06-302-15/+29
| * | | | | Merge pull request #906 from matrix-org/markjh/faster_events_aroundMark Haines2016-07-052-60/+102
| |\ \ \ \ \
| | * | | | | Fix typoMark Haines2016-07-051-1/+1
| | * | | | | Make get_events_around more efficient on sqlite3Mark Haines2016-07-051-13/+49
| | * | | | | Use true/false for boolean parameter inclusive to avoid potential for sqli, a...Mark Haines2016-07-052-5/+7
| | * | | | | Use different SQL for postgres and sqlite3 for when using multicolumn indexesMark Haines2016-07-042-59/+59
| | * | | | | Use a query that postgresql optimises better for get_events_aroundMark Haines2016-07-041-12/+16
| | |/ / / /
| * | | | | Remove default password pepper stringKent Shikama2016-07-051-2/+1
| * | | | | Fix password configKent Shikama2016-07-052-3/+3
| * | | | | Fix pep8Kent Shikama2016-07-052-2/+3
| * | | | | Add comment to prompt changing of pepperKent Shikama2016-07-051-0/+1
| * | | | | Add pepper to password hashingKent Shikama2016-07-052-3/+8
* | | | | | Add ReadWriteLock for pagination and history pruneErik Johnston2016-07-052-36/+38
* | | | | | Add ReadWriteLockErik Johnston2016-07-051-0/+82
* | | | | | Add purge_history APIErik Johnston2016-07-054-1/+38
* | | | | | Add storage function to purge history for a roomErik Johnston2016-07-041-0/+140
|/ / / / /
* | | | | Fix style violationsKent Shikama2016-07-042-2/+4
* | | | | Use .get() instead of [] to access password_hashKent Shikama2016-07-041-1/+1
* | | | | Optionally include password hash in createUser endpointKent Shikama2016-07-032-3/+5
|/ / / /
* | | | Feature: Add deactivate account admin APIErik Johnston2016-06-303-0/+40
* | | | Remove raceErik Johnston2016-06-291-11/+0
* | | | Implement purge_media_cache admin APIErik Johnston2016-06-295-20/+130
* | | | Track approximate last access time for remote mediaErik Johnston2016-06-294-1/+71
* | | | Merge pull request #894 from matrix-org/dbkr/push_room_namingDavid Baker2016-06-286-80/+26
|\ \ \ \
| * | | | even more pep8David Baker2016-06-241-0/+1
| * | | | more pep8David Baker2016-06-241-1/+0
| * | | | pep8David Baker2016-06-241-1/+0
| * | | | Use similar naming we use in email notifs for pushDavid Baker2016-06-246-79/+26
* | | | | remove vector.im from default secondary DS listMatthew Hodgson2016-06-271-1/+0
|/ / / /
* | | | Merge branch 'master' into developMark Haines2016-06-232-27/+152
|\| | |
| * | | Merge pull request #889 from matrix-org/markjh/synctl_workersMark Haines2016-06-211-27/+151
| |\ \ \ | | |_|/ | |/| |
| | * | Optionally start or stop workers in synctl.Mark Haines2016-06-211-27/+151
| | |/
| * | Merge branch 'release-v0.16.1' of github.com:matrix-org/synapse v0.16.1Erik Johnston2016-06-2033-504/+545
| |\ \
| * | | point to the CAPTCHA docsMatthew Hodgson2016-06-121-0/+1
* | | | Actually we need to order these properlyDavid Baker2016-06-221-2/+12
* | | | StyleDavid Baker2016-06-221-1/+1
* | | | Put most recent 20 messages in notifDavid Baker2016-06-221-3/+4
* | | | Rework ldap integration with ldap3Martin Weinelt2016-06-223-60/+248
* | | | Merge pull request #888 from matrix-org/markjh/content_repoMark Haines2016-06-213-132/+3
|\ \ \ \
| * | | | Remove the legacy v0 content upload API.Mark Haines2016-06-213-132/+3
| | |_|/ | |/| |
* | | | Merge pull request #879 from matrix-org/erikj/linearize_fed_serverErik Johnston2016-06-202-67/+78
|\ \ \ \ | |_|_|/ |/| | |
| * | | Linearize some federation endpoints based on (origin, room_id)Erik Johnston2016-06-172-67/+78
| |/ /
* | | Bump version and changelogErik Johnston2016-06-201-1/+1
* | | Add the create_profile method back since the tests use itMark Haines2016-06-171-0/+6
* | | Add a comment on why we don't create a profile for upgrading usersMark Haines2016-06-171-0/+1
* | | Remove registered_users from the distributor.Mark Haines2016-06-175-33/+24
|/ /
* | Merge pull request #878 from matrix-org/erikj/ujsonErik Johnston2016-06-171-1/+1
|\ \
| * | Disable responding with canonical json for federationErik Johnston2016-06-171-1/+1
* | | Merge pull request #877 from matrix-org/erikj/frozen_defaultErik Johnston2016-06-171-1/+1
|\ \ \
| * | | Turn use_frozen_events off by defaultErik Johnston2016-06-171-1/+1
| |/ /
* | | Merge pull request #876 from matrix-org/erikj/sign_ownErik Johnston2016-06-172-12/+18
|\ \ \
| * | | Only re-sign our own eventsErik Johnston2016-06-172-12/+18
| |/ /
* | | Fix ``KeyError: 'msgtype'``. Use ``.get``Mark Haines2016-06-171-14/+15
* | | Fix setting gc thresholds in the workersMark Haines2016-06-172-2/+4
|/ /
* | Use worker_ prefixes for worker config, use existing support for multiple con...Mark Haines2016-06-165-79/+33
* | Access the event_cache_size directly from the server object.Mark Haines2016-06-165-21/+10
* | Access replication_url from the worker config directlyMark Haines2016-06-163-8/+6
* | Comment on what's going on in clobber_with_worker_configMark Haines2016-06-161-1/+12
* | Merge remote-tracking branch 'origin/develop' into markjh/worker_configMark Haines2016-06-1610-61/+112
|\ \
| * \ Merge pull request #873 from vt0r/bugfix/bcrypt-utf8-encodeErik Johnston2016-06-161-1/+1
| |\ \
| | * | Fix TypeError in call to bcrypt.hashpwSalvatore LaMendola2016-06-161-1/+1
| * | | Line lengthsErik Johnston2016-06-151-3/+3
| * | | Handle floats as img widthsErik Johnston2016-06-151-1/+1
| * | | Handle og props with not contentErik Johnston2016-06-151-1/+2
| |/ /
| * | Bump version and changelogErik Johnston2016-06-151-1/+1
| * | Linearize fetching of gaps on incoming eventsErik Johnston2016-06-154-37/+58
| * | Merge pull request #870 from matrix-org/rav/work_around_tls_bugRichard van der Hoff2016-06-151-2/+26
| |\ \
| | * | Work around TLS bug in twistedRichard van der Hoff2016-06-151-2/+26
| | |/
| * | Correctly mark backfilled events as backfilledErik Johnston2016-06-151-14/+16
| * | Merge pull request #868 from matrix-org/erikj/invalid_idErik Johnston2016-06-141-1/+4
| |\ \
| | * | Make get_domain_from_id throw SynapseError on invalid IDErik Johnston2016-06-141-1/+4
* | | | Add worker config moduleMark Haines2016-06-161-0/+71
* | | | Inline the synchrotron and pusher configs into the main configMark Haines2016-06-165-291/+154
|/ / /
* | | Merge pull request #863 from matrix-org/markjh/load_configMark Haines2016-06-102-45/+105
|\ \ \ | |/ / |/| |
| * | Add function to load config without generating itMark Haines2016-06-092-45/+105
* | | Merge branch 'master' of github.com:matrix-org/synapse into developErik Johnston2016-06-091-1/+1
|\ \ \ | |/ / |/| / | |/
| * Bump version and changelogErik Johnston2016-06-091-1/+1
* | Merge pull request #862 from matrix-org/erikj/media_remote_errorErik Johnston2016-06-091-4/+10
|\ \
| * | 502 on /thumbnail when can't contact remote serverErik Johnston2016-06-091-4/+10
* | | Merge pull request #860 from negzi/bug_fix_get_or_create_userErik Johnston2016-06-091-2/+2
|\ \ \ | |/ / |/| |
| * | Fix a bug caused by a change in auth_handler functionNegar Fazeli2016-06-081-2/+2
* | | Remove redundant exception log in /eventsErik Johnston2016-06-091-24/+21
|/ /
* | Merge pull request #859 from matrix-org/erikj/public_room_performanceErik Johnston2016-06-081-16/+16
|\ \
| * | Pull full state for each room all at onceErik Johnston2016-06-081-16/+16
* | | Merge branch 'release-v0.16.0' of github.com:matrix-org/synapse into developErik Johnston2016-06-081-1/+1
|\ \ \ | |/ / |/| / | |/
| * Bump version and changelog to v0.16.0-rc2Erik Johnston2016-06-081-1/+1
* | Don't make rooms visibile by defaultErik Johnston2016-06-081-2/+0
* | Fix up federation PublicRoomListErik Johnston2016-06-081-1/+1
* | Merge pull request #856 from matrix-org/erikj/fed_pub_roomsErik Johnston2016-06-082-5/+7
|\ \
| * | Log user that is making /publicRooms callsErik Johnston2016-06-081-0/+7
| * | Enable auth on federation PublicRoomListErik Johnston2016-06-081-5/+0
* | | Merge pull request #854 from matrix-org/erikj/federation_loggingErik Johnston2016-06-081-0/+19
|\ \ \ | |/ / |/| |
| * | Add some logging for when servers ask for missing eventsErik Johnston2016-06-081-0/+19
| |/
* / Don't hit DB for noop replications queriesErik Johnston2016-06-085-0/+15
|/
* Merge pull request #850 from matrix-org/erikj/gc_thresholdErik Johnston2016-06-082-0/+28
|\
| * Add gc_threshold to pusher and synchrotronErik Johnston2016-06-072-0/+28
* | Don't track total objects as its too expensive to calculateErik Johnston2016-06-071-1/+0
* | Record some more GC metricsErik Johnston2016-06-071-0/+5
* | Merge pull request #849 from matrix-org/erikj/gc_thresholdErik Johnston2016-06-074-6/+38
|\|
| * Allow setting of gc.set_thresholdsErik Johnston2016-06-074-6/+38
* | Remove dead code.Mark Haines2016-06-074-54/+0
|/
* Also record number of unreachable objectsErik Johnston2016-06-071-2/+4
* Change the way we do statsErik Johnston2016-06-071-7/+3
* Merge pull request #771 from matrix-org/erikj/gc_tickErik Johnston2016-06-071-0/+26
|\
| * Count number of GC collectsErik Johnston2016-05-161-5/+11
| * Add a commentErik Johnston2016-05-131-0/+5
| * Manually run GC on reactor tick.Erik Johnston2016-05-091-0/+15
* | Notify users for events in rooms they join.Mark Haines2016-06-071-8/+6
* | Fix AS retries, but with correct orderingErik Johnston2016-06-071-2/+2
* | Fix AS retriesErik Johnston2016-06-071-2/+2
* | Merge pull request #845 from matrix-org/markjh/synchrotron_presenceMark Haines2016-06-061-1/+4
|\ \
| * | Fix a KeyError in the synchrotron presenceMark Haines2016-06-061-1/+4
* | | Merge pull request #844 from matrix-org/markjh/yield_on_sleepMark Haines2016-06-062-2/+2
|\ \ \
| * | | Yield on the sleeps intended to backoff replicationMark Haines2016-06-062-2/+2
| |/ /
* | | .values() returns list of setsErik Johnston2016-06-061-1/+2
* | | Fix typosErik Johnston2016-06-061-32/+36
* | | Fire after 30s not 8hErik Johnston2016-06-061-1/+1
|/ /
* | Merge pull request #841 from matrix-org/erikj/event_counterErik Johnston2016-06-061-0/+9
|\ \
| * | Add metric counter for number of persisted eventsErik Johnston2016-06-061-0/+9
* | | Add events to cache when we persist themErik Johnston2016-06-061-0/+41
|/ /
* | Merge pull request #836 from matrix-org/erikj/change_event_cacheErik Johnston2016-06-031-54/+59
|\ \
| * | Don't rely on options when inserting event into cacheErik Johnston2016-06-031-40/+43
| * | Change the way we cache eventsErik Johnston2016-06-031-39/+41
* | | Fix spellingMark Haines2016-06-031-1/+1
* | | Add get_presence_list_accepted to the broken caches in synchrotronMark Haines2016-06-031-4/+9
|/ /
* | Merge pull request #835 from matrix-org/erikj/get_event_txnErik Johnston2016-06-036-199/+74
|\ \
| * | Remove event fetching from DB threadsErik Johnston2016-06-036-199/+74
* | | 3rd time lucky: we'd already calculated it aboveDavid Baker2016-06-031-3/+1
* | | Oops, we're using the dict formDavid Baker2016-06-031-1/+3
* | | Add substitutions to email notif FromDavid Baker2016-06-031-1/+1
|/ /