Commit message (Collapse) | Author | Age | Files | Lines | |
---|---|---|---|---|---|
* | Configurable maximum number of events requested by /sync and /messages (#2220) | Pablo Saavedra | 2017-05-13 | 3 | -0/+15 |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | Set the limit on the returned events in the timeline in the get and sync operations. The default value is -1, means no upper limit. For example, using `filter_timeline_limit: 5000`: POST /_matrix/client/r0/user/user:id/filter { room: { timeline: { limit: 1000000000000000000 } } } GET /_matrix/client/r0/user/user:id/filter/filter:id { room: { timeline: { limit: 5000 } } } The server cuts down the room.timeline.limit. | ||||
* | Modify register/available to be GET with query param | Luke Barnard | 2017-05-10 | 1 | -5/+4 |
| | | | | | | | - GET is now the method for register/available - a query parameter "username" is now used Also, empty usernames are now handled with an error message on registration or via register/available: `User ID cannot be empty` | ||||
* | Change register/available to POST (from GET) | Luke Barnard | 2017-05-10 | 1 | -1/+1 |
| | |||||
* | Merge pull request #2183 from matrix-org/luke/username-availability | Luke Barnard | 2017-05-04 | 1 | -0/+41 |
|\ | | | | | Implement username availability checker | ||||
| * | Appease the flake8 gods | Luke Barnard | 2017-05-03 | 1 | -5/+10 |
| | | |||||
| * | Implement username availability checker | Luke Barnard | 2017-05-03 | 1 | -0/+36 |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Outlined here: https://github.com/vector-im/riot-web/issues/3605#issuecomment-298679388 ```HTTP GET /_matrix/.../register/available { "username": "desiredlocalpart123" } ``` If available, the response looks like ```HTTP HTTP/1.1 200 OK { "available": true } ``` Otherwise, ```HTTP HTTP/1.1 429 { "errcode": "M_LIMIT_EXCEEDED", "error": "Too Many Requests", "retry_after_ms": 2000 } ``` or ```HTTP HTTP/1.1 400 { "errcode": "M_USER_IN_USE", "error": "User ID already taken." } ``` or ```HTTP HTTP/1.1 400 { "errcode": "M_INVALID_USERNAME", "error": "Some reason for username being invalid" } ``` | ||||
* | | Add more granular event send metrics | Erik Johnston | 2017-05-02 | 1 | -0/+1 |
|/ | |||||
* | Merge pull request #2163 from matrix-org/erikj/fix_invite_state | Erik Johnston | 2017-04-27 | 1 | -0/+1 |
|\ | | | | | Fix invite state to always include all events | ||||
| * | Comment and remove spurious logging | Erik Johnston | 2017-04-27 | 1 | -1/+0 |
| | | |||||
| * | Fix invite state to always include all events | Erik Johnston | 2017-04-26 | 1 | -0/+2 |
| | | |||||
* | | Merge pull request #2130 from APwhitehat/roomexists | Erik Johnston | 2017-04-27 | 1 | -1/+5 |
|\ \ | |/ |/| | Check that requested room_id exists | ||||
| * | Check that requested room_id exists | Anant Prakash | 2017-04-14 | 1 | -1/+5 |
| | | |||||
* | | Reduce size of joined_user cache | Erik Johnston | 2017-04-25 | 1 | -1/+7 |
| | | | | | | | | | | | | | | | | The _get_joined_users_from_context cache stores a mapping from user_id to avatar_url and display_name. Instead of storing those in a dict, store them in a namedtuple as that uses much less memory. We also try converting the string to ascii to further reduce the size. | ||||
* | | Fix code for reporting old verify keys in synapse | Mark Haines | 2017-04-24 | 1 | -3/+2 |
| | | |||||
* | | m.read_marker -> m.fully_read (#2128) | Luke Barnard | 2017-04-18 | 2 | -5/+5 |
| | | | | | | | | | | | | Also: - change the REST endpoint to have a "S" on the end (so it's now /read_markers) - change the content of the m.read_up_to event to have the key "event_id" instead of "marker". | ||||
* | | More null-guard changes | Luke Barnard | 2017-04-12 | 1 | -4/+4 |
| | | |||||
* | | Remove Unused ref to hs | Luke Barnard | 2017-04-12 | 1 | -1/+0 |
| | | |||||
* | | Move a space | Luke Barnard | 2017-04-12 | 1 | -2/+2 |
| | | |||||
* | | flake8 | Luke Barnard | 2017-04-11 | 2 | -3/+3 |
| | | |||||
* | | Finish implementing RM endpoint | Luke Barnard | 2017-04-11 | 3 | -9/+14 |
| | | | | | | | | | | - This change causes a 405 to be sent if "m.read_marker" is set via /account_data - This also fixes-up the RM endpoint so that it actually Works. | ||||
* | | Initial commit of RM server-side impl | lukebarnard | 2017-04-11 | 1 | -0/+71 |
|/ | | | | (See https://docs.google.com/document/d/1UWqdS-e1sdwkLDUY0wA4gZyIkRp-ekjsLZ8k6g_Zvso/edit#heading=h.lndohpg8at5u) | ||||
* | Merge pull request #2011 from matrix-org/matthew/turn_allow_guests | Erik Johnston | 2017-03-31 | 1 | -1/+4 |
|\ | | | | | add setting (on by default) to support TURN for guests | ||||
| * | add setting (on by default) to support TURN for guests | Matthew Hodgson | 2017-03-15 | 1 | -1/+4 |
| | | |||||
* | | Merge pull request #1986 from matrix-org/matthew/enable_guest_3p | Erik Johnston | 2017-03-31 | 1 | -4/+4 |
|\ \ | | | | | | | enable guest access for the 3pl/3pid APIs | ||||
| * | | switch to allow_guest=True for authing 3Ps as per PR feedback | Matthew Hodgson | 2017-03-31 | 1 | -0/+8 |
| | | | |||||
| * | | enable guest access for the 3pl/3pid APIs | Matthew Hodgson | 2017-03-12 | 1 | -8/+0 |
| | | | |||||
* | | | Merge pull request #2057 from matrix-org/rav/missing_yield_2 | Richard van der Hoff | 2017-03-24 | 1 | -1/+1 |
|\ \ \ | | | | | | | | | Add another missing yield on check_device_registered | ||||
| * | | | Add another missing yield on check_device_registered | Richard van der Hoff | 2017-03-23 | 1 | -1/+1 |
| | | | | |||||
* | | | | Fix token request for addition of phone numbers | David Baker | 2017-03-23 | 1 | -1/+1 |
|/ / / | |||||
* | | | Don't recreate so many sets | Erik Johnston | 2017-03-16 | 1 | -2/+1 |
| | | | |||||
* | | | Remove unused import | Erik Johnston | 2017-03-15 | 1 | -1/+0 |
| | | | |||||
* | | | Format presence events on the edges instead of reformatting them multiple times | Erik Johnston | 2017-03-15 | 2 | -6/+16 |
| | | | |||||
* | | | Merge pull request #1997 from matrix-org/dbkr/cas_partialdownload | David Baker | 2017-03-15 | 1 | -1/+8 |
|\ \ \ | |_|/ |/| | | Handle PartialDownloadError in CAS login | ||||
| * | | Handle PartialDownloadError in CAS login | David Baker | 2017-03-14 | 1 | -1/+8 |
| | | | |||||
* | | | Merge pull request #1994 from matrix-org/dbkr/msisdn_signin_2 | Erik Johnston | 2017-03-15 | 3 | -42/+297 |
|\ \ \ | | | | | | | | | Phone number registration / login support v2 | ||||
| * | | | Use extend instead of += | David Baker | 2017-03-14 | 1 | -4/+4 |
| | | | | |||||
| * | | | Oops, remove print | David Baker | 2017-03-14 | 1 | -1/+0 |
| | | | | |||||
| * | | | Fix registration for broken clients | David Baker | 2017-03-13 | 1 | -4/+22 |
| | | | | | | | | | | | | | | | | Only offer msisdn flows if the x_show_msisdn option is given. | ||||
| * | | | Support registration / login with phone number | David Baker | 2017-03-13 | 3 | -42/+280 |
| | | | | | | | | | | | | | | | | Changes from https://github.com/matrix-org/synapse/pull/1971 | ||||
* | | | | Merge pull request #1992 from matrix-org/rav/fix_media_loop | Richard van der Hoff | 2017-03-14 | 2 | -10/+46 |
|\ \ \ \ | |_|/ / |/| | | | Fix routing loop when fetching remote media | ||||
| * | | | Address review comments | Richard van der Hoff | 2017-03-14 | 1 | -15/+17 |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | - don't blindly proxy all HTTPRequestExceptions - log unexpected exceptions at error - avoid `isinstance` - improve docs on `from_http_response_exception` | ||||
| * | | | Fix routing loop when fetching remote media | Richard van der Hoff | 2017-03-13 | 2 | -4/+38 |
| |/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When we proxy a media request to a remote server, add a query-param, which will tell the remote server to 404 if it doesn't recognise the server_name. This should fix a routing loop where the server keeps forwarding back to itself. Also improves the error handling on remote media fetches, so that we don't always return a rather obscure 502. | ||||
* | | | Implement _simple_delete_many_txn, use it to delete devices | Luke Barnard | 2017-03-13 | 1 | -11/+9 |
| | | | | | | | | | | | | | | | | | | (But this doesn't implement the same for deleting access tokens or e2e keys. Also respond to code review. | ||||
* | | | Flake | Luke Barnard | 2017-03-13 | 1 | -0/+2 |
| | | | |||||
* | | | Implement delete_devices API | Luke Barnard | 2017-03-13 | 1 | -0/+47 |
|/ / | | | | | | | This implements the proposal here https://docs.google.com/document/d/1C-25Gqz3TXy2jIAoeOKxpNtmme0jI4g3yFGqv5GlAAk for deleting multiple devices at once in a single request. | ||||
* / | Revert "Support registration & login with phone number" | Erik Johnston | 2017-03-13 | 3 | -280/+42 |
|/ | |||||
* | Comment when our 3pids would be incomplete | David Baker | 2017-03-08 | 1 | -0/+2 |
| | |||||
* | Not any more, it doesn't | David Baker | 2017-03-08 | 1 | -1/+0 |
| | |||||
* | Better error message | David Baker | 2017-03-08 | 1 | -1/+3 |
| | |||||
* | pep8 | David Baker | 2017-03-08 | 1 | -1/+1 |
| | |||||
* | Pull out datastore in initialiser | David Baker | 2017-03-08 | 1 | -5/+10 |
| | |||||
* | Minor fixes from PR feedback | David Baker | 2017-03-08 | 2 | -5/+3 |
| | |||||
* | Typos | David Baker | 2017-03-08 | 1 | -2/+2 |
| | |||||
* | Refector out assert_params_in_request | David Baker | 2017-03-08 | 2 | -37/+17 |
| | | | | and replace requestEmailToken where we meant requestMsisdnToken | ||||
* | Factor out msisdn canonicalisation | David Baker | 2017-03-08 | 3 | -40/+10 |
| | | | | Plus a couple of other minor fixes | ||||
* | Fix pep8 | David Baker | 2017-03-08 | 3 | -6/+6 |
| | |||||
* | Support new login format | David Baker | 2017-03-07 | 1 | -6/+91 |
| | | | | https://docs.google.com/document/d/1-6ZSSW5YvCGhVFDyD2QExAUAdpCWjccvJT5xiyTTG2Y/edit# | ||||
* | Add msisdns as 3pids during registration | David Baker | 2017-03-03 | 1 | -0/+47 |
| | | | | and support binding them with the bind_msisdn param | ||||
* | Merge remote-tracking branch 'origin/develop' into dbkr/msisdn_signin | David Baker | 2017-03-01 | 3 | -4/+19 |
|\ | |||||
| * | Merge pull request #1945 from jkolo/fix_dynamic_thumbnails_aspect | Erik Johnston | 2017-02-27 | 1 | -0/+3 |
| |\ | | | | | | | Fix #1677 (dynamic thumbnails aspect) | ||||
| | * | Fix dynamic thumbnails aspect | Jurek | 2017-02-24 | 1 | -0/+3 |
| | | | |||||
| * | | Remove unused param | Erik Johnston | 2017-02-20 | 1 | -1/+0 |
| | | | |||||
| * | | Merge pull request #1917 from matrix-org/dbkr/make_ban_reasons_work | David Baker | 2017-02-14 | 1 | -0/+5 |
| |\ \ | | | | | | | | | Make kick & ban reasons work | ||||
| | * | | Make kick & ban reasons work | David Baker | 2017-02-14 | 1 | -0/+5 |
| | | | | | | | | | | | | | | | | | | | | | | | | We somehow specced APIs with reason strings, preserve the content in the events and even have the clients display them, but failed to actually pass the parameter through to the event content. | ||||
| * | | | Ordering is important on errbacks so add the cleanup func before creating an ↵ | Kegan Dougal | 2017-02-13 | 1 | -7/+7 |
| | | | | | | | | | | | | | | | | ObservableDeferred | ||||
| * | | | Pop the txn from the map in case it has already been deleted somehow | Kegan Dougal | 2017-02-13 | 1 | -1/+1 |
| | | | | |||||
| * | | | Don't cache errors at all | Kegan Dougal | 2017-02-13 | 1 | -10/+9 |
| | | | | |||||
| * | | | http txns: Do not cache error responses | Kegan Dougal | 2017-02-13 | 1 | -1/+10 |
| |/ / | | | | | | | | | | | | | Previously we did. This meant that, amongst other errors, rate-limiting errors would be cached and prevent messages with that txn ID being sent. | ||||
* / / | WIP support for msisdn 3pid proxy methods | David Baker | 2017-02-14 | 2 | -13/+163 |
|/ / | |||||
* | | Merge pull request #1784 from morteza-araby/user-admin | Erik Johnston | 2017-02-06 | 2 | -2/+224 |
|\ \ | | | | | | | Administration functionalities | ||||
| * | | admin,storage: added more administrator functionalities | Morteza Araby | 2017-02-02 | 2 | -2/+224 |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | administrators can now: - Set displayname of users - Update user avatars - Search for users by user_id - Browse all users in a paginated API - Reset user passwords - Deactivate users Helpers for doing paginated queries has also been added to storage Signed-off-by: Morteza Araby <morteza.araby@ericsson.com> | ||||
* | | | sets aren't JSON serializable | Erik Johnston | 2017-02-02 | 1 | -1/+1 |
|/ / | |||||
* | | Fix email push in pusher worker | Erik Johnston | 2017-02-02 | 2 | -2/+6 |
| | | | | | | | | | | | | This was broken when device list updates were implemented, as Mailer could no longer instantiate an AuthHandler due to a dependency on federation sending. | ||||
* | | Include newly joined users in /keys/changes API | Erik Johnston | 2017-02-01 | 1 | -1/+1 |
| | | |||||
* | | Comment | Erik Johnston | 2017-02-01 | 1 | -1/+1 |
| | | |||||
* | | Comment | Erik Johnston | 2017-02-01 | 1 | -1/+12 |
| | | |||||
* | | Implement /keys/changes | Erik Johnston | 2017-02-01 | 1 | -0/+38 |
| | | |||||
* | | Add basic implementation of local device list changes | Erik Johnston | 2017-01-25 | 1 | -1/+5 |
| | | |||||
* | | Added username and password for turn server | Marvin Steadfast | 2017-01-19 | 1 | -9/+17 |
| | | | | | | | | | | It makes it possible to use a turn server that needs a username and password instead of a token. | ||||
* | | Lowercase all email addresses before querying db | David Baker | 2017-01-18 | 2 | -1/+12 |
|/ | | | | | Since we store all emails in the DB in lowercase (https://github.com/matrix-org/synapse/pull/1170) | ||||
* | Fix spurious Unhandled Error log lines | Erik Johnston | 2017-01-12 | 1 | -1/+5 |
| | |||||
* | Log which files we saved attachments to in the media_repository | Mark Haines | 2017-01-10 | 3 | -0/+11 |
| | |||||
* | Merge pull request #1787 from matrix-org/erikj/linearize_member | Erik Johnston | 2017-01-10 | 1 | -11/+17 |
|\ | | | | | Linearize updates to membership via PUT /state/ | ||||
| * | Linearize updates to membership via PUT /state/ | Erik Johnston | 2017-01-09 | 1 | -11/+17 |
| | | |||||
* | | Name linearizer's for better logs | Erik Johnston | 2017-01-09 | 1 | -1/+1 |
|/ | |||||
* | Add /account/3pid/delete endpoint | David Baker | 2016-12-20 | 1 | -1/+35 |
| | | | | Also fix a typo in a comment | ||||
* | Fix crash in url preview when html tag has no text | Marcin Bachry | 2016-12-14 | 1 | -1/+4 |
| | | | | Signed-off-by: Marcin Bachry <hegel666@gmail.com> | ||||
* | Merge pull request #1676 from matrix-org/erikj/room_list | Erik Johnston | 2016-12-12 | 2 | -1/+52 |
|\ | | | | | Add new API appservice specific public room list | ||||
| * | Add new API appservice specific public room list | Erik Johnston | 2016-12-06 | 2 | -1/+52 |
| | | |||||
* | | Remove unspecced GET endpoints for e2e keys | Richard van der Hoff | 2016-12-12 | 1 | -39/+4 |
| | | | | | | | | | | | | | | | | GET /keys/claim is a terrible idea, since it isn't idempotent; also it throws 500 errors if you call it without all the right params. GET /keys/query is arguable, but it's unspecced, so let's get rid of it too to stop people relying on unspecced APIs. | ||||
* | | Add /room/<room_id>/joined_members API | Erik Johnston | 2016-12-08 | 1 | -0/+19 |
| | | | | | | | | | | | | This returns the currently joined members in the room with their display names and avatar urls. This is more efficient than /members for large rooms where you don't need the full events. | ||||
* | | Add joined_rooms servlet | Erik Johnston | 2016-12-08 | 1 | -0/+17 |
|/ | |||||
* | preview_url_resource: Ellipsis must be in unicode string | Johannes Löthberg | 2016-12-01 | 1 | -1/+1 |
| | | | | Signed-off-by: Johannes Löthberg <johannes@kyriasis.com> | ||||
* | Fix doc-string | Richard van der Hoff | 2016-12-01 | 1 | -2/+1 |
| | | | | Remove refresh_token reference | ||||
* | Rip out more refresh_token code | Richard van der Hoff | 2016-11-30 | 2 | -25/+3 |
| | | | | | | | | We might as well treat all refresh_tokens as invalid. Just return a 403 from /tokenrefresh, so that we don't have a load of dead, untestable code hanging around. Still TODO: removing the table from the schema. | ||||
* | Merge branch 'develop' into rav/no_more_refresh_tokens | Richard van der Hoff | 2016-11-30 | 5 | -25/+24 |
|\ | |||||
| * | Merge pull request #1656 from matrix-org/rav/remove_time_caveat | Richard van der Hoff | 2016-11-30 | 1 | -12/+0 |
| |\ | | | | | | | Stop putting a time caveat on access tokens | ||||
| | * | Stop putting a time caveat on access tokens | Richard van der Hoff | 2016-11-29 | 1 | -12/+0 |
| | | | | | | | | | | | | | | | | | | | | | | | | The 'time' caveat on the access tokens was something of a lie, since we weren't enforcing it; more pertinently its presence stops us ever adding useful time caveats. Let's move in the right direction by not lying in our caveats. | ||||
| * | | Merge pull request #1653 from matrix-org/rav/guest_e2e | Richard van der Hoff | 2016-11-29 | 4 | -13/+24 |
| |\ \ | | |/ | |/| | Implement E2E for guests | ||||
| | * | Allow guest access to endpoints for E2E | Richard van der Hoff | 2016-11-25 | 3 | -9/+9 |
| | | | | | | | | | | | | | | | Expose /devices, /keys, and /sendToDevice to guest users, so that they can use E2E. | ||||
| | * | Give guest users a device_id | Richard van der Hoff | 2016-11-25 | 1 | -4/+15 |
| | | | | | | | | | | | | | | | We need to create devices for guests so that they can use e2e, but we don't have anywhere to store it, so just use a fixed one. | ||||
* | | | Stop generating refresh tokens | Richard van der Hoff | 2016-11-28 | 2 | -21/+12 |
|/ / | | | | | | | | | | | | | Since we're not doing refresh tokens any more, we should start killing off the dead code paths. /tokenrefresh itself is a bit of a thornier subject, since there might be apps out there using it, but we can at least not generate refresh tokens on new logins. | ||||
* / | Shuffle receipt handler around so that worker apps don't need to load it | Erik Johnston | 2016-11-23 | 1 | -1/+1 |
|/ | |||||
* | Merge pull request #1638 from matrix-org/kegan/sync-event-fields | Kegsay | 2016-11-22 | 1 | -10/+13 |
|\ | | | | | Implement "event_fields" in filters | ||||
| * | Glue only_event_fields into the sync rest servlet | Kegan Dougal | 2016-11-22 | 1 | -10/+13 |
| | | |||||
* | | Fix flake8 | Mark Haines | 2016-11-18 | 1 | -1/+0 |
| | | |||||
* | | Work around client replacing reg params | David Baker | 2016-11-18 | 1 | -0/+12 |
|/ | | | | | Works around https://github.com/vector-im/vector-android/issues/715 and equivalent for iOS | ||||
* | Clean transactions based on time. Add HttpTransactionCache tests. | Kegan Dougal | 2016-11-14 | 3 | -7/+21 |
| | |||||
* | Move .observe() up to the cache to make things neater | Kegan Dougal | 2016-11-14 | 3 | -33/+11 |
| | |||||
* | Review comments | Kegan Dougal | 2016-11-11 | 5 | -158/+119 |
| | |||||
* | More flake8 | Kegan Dougal | 2016-11-11 | 1 | -1/+3 |
| | |||||
* | Flake8 and fix whoopsie | Kegan Dougal | 2016-11-11 | 1 | -4/+8 |
| | |||||
* | Use ObservableDeferreds instead of Deferreds as they behave as intended | Kegan Dougal | 2016-11-11 | 2 | -30/+31 |
| | |||||
* | Use observable deferreds because they are sane | Kegan Dougal | 2016-11-11 | 1 | -3/+4 |
| | |||||
* | Flake8 | Kegan Dougal | 2016-11-10 | 2 | -4/+4 |
| | |||||
* | Store Promise<Response> instead of Response for HTTP API transactions | Kegan Dougal | 2016-11-10 | 4 | -88/+68 |
| | | | | | | | | | | | | | | | | | | This fixes a race whereby: - User hits an endpoint. - No cached transaction so executes main code. - User hits same endpoint. - No cache transaction so executes main code. - Main code finishes executing and caches response and returns. - Main code finishes executing and caches response and returns. This race is common in the wild when Synapse is struggling under load. This commit fixes the race by: - User hits an endpoint. - Caches the promise to execute the main code and executes main code. - User hits same endpoint. - Yields on the same promise as the first request. - Main code finishes executing and returns, unblocking both requests. | ||||
* | Set CORs headers on responses from the media repo | Mark Haines | 2016-11-02 | 2 | -2/+4 |
| | |||||
* | Merge pull request #1164 from pik/error-codes | Erik Johnston | 2016-10-19 | 1 | -6/+6 |
|\ | | | | | Clarify Error codes for GET /filter/ | ||||
| * | Refactor test_filter to use real DataStore | pik | 2016-10-18 | 1 | -2/+2 |
| | | | | | | | | * add tests for filter api errors | ||||
| * | Error codes for filters | Alexander Maznev | 2016-10-14 | 1 | -4/+4 |
| | | | | | | | | | | | | * add tests Signed-off-by: Alexander Maznev <alexander.maznev@gmail.com> | ||||
* | | Merge pull request #1168 from matrix-org/rav/ui_auth_on_device_delete | Richard van der Hoff | 2016-10-13 | 1 | -5/+20 |
|\ \ | | | | | | | User-interactive auth on delete device | ||||
| * | | Handle delete device requests with no body | Richard van der Hoff | 2016-10-12 | 1 | -2/+11 |
| | | | | | | | | | | | | | | | We should probably return a 401 rather than a 400 for existing clients that don't know they have to do the UIA dance to delete a device. | ||||
| * | | User-interactive auth on delete device | Richard van der Hoff | 2016-10-12 | 1 | -5/+11 |
| | | | |||||
* | | | Merge pull request #1167 from matrix-org/markjh/fingerprints | Mark Haines | 2016-10-12 | 1 | -13/+8 |
|\ \ \ | |/ / |/| | | Add config option for adding additional TLS fingerprints | ||||
| * | | Improve comment formatting | Mark Haines | 2016-10-12 | 1 | -3/+6 |
| | | | |||||
| * | | Add config option for adding additional TLS fingerprints | Mark Haines | 2016-10-11 | 1 | -12/+4 |
| |/ | |||||
* | | Merge pull request #1157 from Rugvip/nolimit | Erik Johnston | 2016-10-11 | 1 | -4/+7 |
|\ \ | |/ |/| | Remove rate limiting from app service senders and fix get_or_create_user requester | ||||
| * | rest/client/v1/register: use the correct requester in createUser | Patrik Oldsberg | 2016-10-06 | 1 | -3/+6 |
| | | | | | | | | Signed-off-by: Patrik Oldsberg <patrik.oldsberg@ericsson.com> | ||||
| * | storage/appservice: make appservice methods only relying on the cache ↵ | Patrik Oldsberg | 2016-10-06 | 1 | -1/+1 |
| | | | | | | | | synchronous | ||||
* | | window.postmessage for Interactive Auth fallback | Richard van der Hoff | 2016-10-06 | 1 | -1/+3 |
|/ | | | | | If you're a webapp running the fallback in an iframe, you can't set set a window.onAuthDone function. Let's post a message back to window.opener instead. | ||||
* | Time out typing over federation | Erik Johnston | 2016-09-23 | 1 | -1/+4 |
| | |||||
* | Support /initialSync in synchrotron worker | Erik Johnston | 2016-09-21 | 2 | -5/+4 |
| | |||||
* | Enable guest access to POST /publicRooms | Erik Johnston | 2016-09-17 | 1 | -2/+2 |
| | |||||
* | Make POST /publicRooms require auth | Erik Johnston | 2016-09-16 | 1 | -2/+1 |
| | |||||
* | Change the way we calculate new_limit in /publicRooms and add POST API | Erik Johnston | 2016-09-15 | 1 | -0/+29 |
| | |||||
* | Remove default public rooms limit | Erik Johnston | 2016-09-15 | 1 | -1/+1 |
| | |||||
* | By default limit /publicRooms to 100 entries | Erik Johnston | 2016-09-15 | 1 | -1/+1 |
| | |||||
* | Pass since/from parameters over federation | Erik Johnston | 2016-09-15 | 1 | -3/+3 |
| | |||||
* | Allow paginating both forwards and backwards | Erik Johnston | 2016-09-15 | 1 | -3/+15 |
| | |||||
* | Remove support for aggregate room lists | Erik Johnston | 2016-09-15 | 1 | -1/+1 |
| | |||||
* | Move the E2E key handling into the e2e handler | Mark Haines | 2016-09-13 | 1 | -112/+16 |
| | |||||
* | Add a timeout parameter for end2end key queries. | Mark Haines | 2016-09-12 | 1 | -26/+51 |
| | | | | | | | | | | Add a timeout parameter for controlling how long synapse will wait for responses from remote servers. For servers that fail include how they failed to make it easier to debug. Fetch keys from different servers in parallel rather than in series. Set the default timeout to 10s. | ||||
* | Conform better to the CAS protocol specification | Shell Turner | 2016-09-09 | 1 | -5/+2 |
| | | | | | | | Redirect to CAS's /login endpoint properly, and don't require an <attributes> element. Signed-off-by: Shell Turner <cam.turn@gmail.com> | ||||
* | Merge pull request #1096 from matrix-org/markjh/get_access_token | Mark Haines | 2016-09-09 | 5 | -20/+16 |
|\ | | | | | Add helper function for getting access_tokens from requests | ||||
| * | Add helper function for getting access_tokens from requests | Mark Haines | 2016-09-09 | 5 | -20/+16 |
| | | | | | | | | | | | | Rather than reimplementing the token parsing in the various places. This will make it easier to change the token parsing to allow access_tokens in HTTP headers. | ||||
* | | Merge pull request #1091 from matrix-org/paul/third-party-lookup | Paul Evans | 2016-09-09 | 1 | -0/+24 |
|\ \ | | | | | | | Improvements to 3PE lookup API | ||||
| * | | appease pep8 | Paul "LeoNerd" Evans | 2016-09-09 | 1 | -1/+2 |
| | | | |||||
| * | | Python isn't JavaScript; have to quote dict keys | Paul "LeoNerd" Evans | 2016-09-09 | 1 | -1/+1 |
| | | | |||||
| * | | Efficiency fix for lookups of a single protocol | Paul "LeoNerd" Evans | 2016-09-09 | 1 | -1/+3 |
| | | | |||||
| * | | Allow lookup of a single 3PE protocol query metadata | Paul "LeoNerd" Evans | 2016-09-09 | 1 | -0/+21 |
| | | | |||||
* | | | Filter returned events for client-facing format | Paul "LeoNerd" Evans | 2016-09-09 | 1 | -2/+3 |
| | | | |||||
* | | | Allow clients to specify the format a room state event is returned in | Paul "LeoNerd" Evans | 2016-09-09 | 1 | -1/+7 |
| |/ |/| | |||||
* | | Merge pull request #1081 from matrix-org/dbkr/notifications_only_highlight | Matthew Hodgson | 2016-09-09 | 1 | -1/+2 |
|\ \ | |/ |/| | Implement `only=highlight` on `/notifications` | ||||
| * | Implement `only=highlight` on `/notifications` | David Baker | 2016-09-08 | 1 | -1/+2 |
| | | |||||
* | | Merge pull request #1082 from matrix-org/erikj/remote_public_rooms | Erik Johnston | 2016-09-08 | 1 | -6/+17 |
|\ \ | | | | | | | Add server param to /publicRooms | ||||
| * | | Use parse_string | Erik Johnston | 2016-09-08 | 1 | -2/+2 |
| | | | |||||
| * | | Add server param to /publicRooms | Erik Johnston | 2016-09-08 | 1 | -5/+16 |
| |/ | |||||
* | | Merge branch 'develop' into markjh/direct_to_device_federation | Mark Haines | 2016-09-08 | 1 | -1/+8 |
|\| | |||||
| * | Add quotes and be explicity about script-src | Erik Johnston | 2016-09-05 | 1 | -1/+2 |
| | | |||||
| * | Allow PDF to be rendered from media repo | Erik Johnston | 2016-09-05 | 1 | -1/+7 |
| | | |||||
* | | Send device messages over federation | Mark Haines | 2016-09-06 | 1 | -26/+7 |
|/ | |||||
* | Fix up the calls to the notifier for device messages | Mark Haines | 2016-09-01 | 1 | -1/+1 |
| | |||||
* | Add a replication stream for direct to device messages | Mark Haines | 2016-08-31 | 1 | -2/+8 |
| | |||||
* | Merge remote-tracking branch 'origin/develop' into markjh/direct_to_device | Mark Haines | 2016-08-26 | 1 | -1/+1 |
|\ | |||||
| * | Move ThirdPartyEntityKind into api.constants so the expectation becomes that ↵ | Paul "LeoNerd" Evans | 2016-08-25 | 1 | -1/+1 |
| | | | | | | | | the value is significant | ||||
* | | Merge branch 'develop' into markjh/direct_to_device | Mark Haines | 2016-08-25 | 2 | -4/+21 |
|\| | |||||
| * | Merge pull request #1041 from matrix-org/paul/third-party-lookup | Paul Evans | 2016-08-25 | 1 | -2/+20 |
| |\ | | | | | | | Extend 3PE lookup APIs for metadata query | ||||
| | * | Move static knowledge of protocol metadata into AS handler; cache the result | Paul "LeoNerd" Evans | 2016-08-24 | 1 | -20/+1 |
| | | | |||||
| | * | Declare 'gitter' known protocol, with user lookup | Paul "LeoNerd" Evans | 2016-08-24 | 1 | -0/+3 |
| | | | |||||
| | * | Initial hack at the 3PN protocols metadata lookup API | Paul "LeoNerd" Evans | 2016-08-24 | 1 | -0/+34 |
| | | | |||||
| | * | Move 3PU/3PL lookup APIs into /thirdparty containing entity | Paul "LeoNerd" Evans | 2016-08-24 | 1 | -2/+2 |
| | | | |||||
| * | | Preserve some logcontexts | Erik Johnston | 2016-08-24 | 1 | -2/+1 |
| |/ | |||||
* | | Add some TODOs | Mark Haines | 2016-08-25 | 1 | -0/+4 |
| | | |||||
* | | Fix the deduplication of incoming direct-to-device messages | Mark Haines | 2016-08-25 | 1 | -1/+12 |
| | | |||||
* | | Add store-and-forward direct-to-device messaging | Mark Haines | 2016-08-25 | 3 | -3/+77 |
|/ | |||||
* | Pass through user-supplied content in /join/$room_id | Kegan Dougal | 2016-08-23 | 1 | -0/+1 |
| | | | | | | | It was always intended to allow custom keys on the join event, but this has at some point been lost. Restore it. If the user specifies keys like "avatar_url" then they will be clobbered. | ||||
* | Merge branch 'develop' into dbkr/notifications_api | Matthew Hodgson | 2016-08-20 | 2 | -0/+80 |
|\ | |||||
| * | Avoid so much copypasta between 3PU and 3PL query by unifying around a ↵ | Paul "LeoNerd" Evans | 2016-08-18 | 1 | -2/+7 |
| | | | | | | | | ThirdPartyEntityKind enumeration | ||||
| * | Authenticate 3PE lookup requests | Paul "LeoNerd" Evans | 2016-08-18 | 1 | -0/+6 |
| | | |||||
| * | Copypasta the 3PU support code to also do 3PL | Paul "LeoNerd" Evans | 2016-08-18 | 1 | -0/+20 |
| | | |||||
| * | Remove TODO note about request fields being strings - they're always strings | Paul "LeoNerd" Evans | 2016-08-18 | 1 | -2/+0 |
| | | |||||
| * | Merge remote-tracking branch 'origin/develop' into paul/thirdpartylookup | Paul "LeoNerd" Evans | 2016-08-18 | 11 | -164/+285 |
| |\ | |||||
| * | | Ensure that 3PU lookup request fields actually get passed in | Paul "LeoNerd" Evans | 2016-08-18 | 1 | -1/+5 |
| | | | |||||
| * | | Thread 3PU lookup through as far as the AS API object; which currently noöps it | Paul "LeoNerd" Evans | 2016-08-17 | 1 | -2/+9 |
| | | | |||||
| * | | Initial empty implementation that just registers an API endpoint handler | Paul "LeoNerd" Evans | 2016-08-17 | 2 | -0/+40 |
| | | | |||||
* | | | Use tuple comparison | David Baker | 2016-08-18 | 1 | -4/+3 |
| | | | | | | | | | | | | Hopefully easier to read | ||||
* | | | Merge remote-tracking branch 'origin/develop' into dbkr/notifications_api | David Baker | 2016-08-18 | 12 | -165/+286 |
|\ \ \ | | |/ | |/| | |||||
| * | | Set `Content-Security-Policy` on media repo | Erik Johnston | 2016-08-17 | 1 | -0/+1 |
| | | | | | | | | | | | | | | | This is to inform browsers that they should sandbox the returned media. This is particularly cruical for javascript/HTML files. | ||||
| * | | Add None check to _iterate_over_text | Erik Johnston | 2016-08-17 | 1 | -1/+1 |
| | | | |||||
| * | | Flake8 | Erik Johnston | 2016-08-16 | 1 | -4/+1 |
| | | | |||||
| * | | Fix up preview URL API. Add tests. | Erik Johnston | 2016-08-16 | 1 | -157/+196 |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | This includes: - Splitting out methods of a class into stand alone functions, to make them easier to test. - Adding unit tests to split out functions, testing HTML -> preview. - Handle the fact that elements in lxml may have tail text. | ||||
| * | | Make synchrotron accept /events | Erik Johnston | 2016-08-12 | 1 | -5/+4 |
| | | | |||||
| * | | Dont invoke get_handlers fromClientV1RestServlet | Erik Johnston | 2016-08-12 | 9 | -1/+86 |
| |/ | | | | | | | | | | | hs.get_handlers() can not be invoked from split out processes. Moving the invocations down a level means that we can slowly split out individual servlets. | ||||
| * | Don't change status_msg on /sync | Will Hunt | 2016-08-10 | 1 | -1/+1 |
| | | |||||
* | | Merge remote-tracking branch 'origin/develop' into dbkr/notifications_api | David Baker | 2016-08-11 | 22 | -534/+973 |
|\| | |||||
| * | Don't print stack traces when failing to get remote keys | Erik Johnston | 2016-08-10 | 1 | -1/+3 |
| | | |||||
| * | Merge pull request #995 from matrix-org/rav/clean_up_cas_login | David Baker | 2016-08-09 | 1 | -125/+33 |
| |\ | | | | | | | Clean up CAS login code | ||||
| | * | Clean up CAS login code | Richard van der Hoff | 2016-08-08 | 1 | -125/+33 |
| | | | | | | | | | | | | | | | | | | | | | Remove some apparently unused code. Clean up parse_cas_response, mostly to catch the exception if the CAS response isn't valid XML. | ||||
| * | | Fix CAS login | Richard van der Hoff | 2016-08-08 | 1 | -0/+1 |
| |/ | | | | | | | Attempting to log in with CAS was giving a 500 error. | ||||
| * | Don't include html comments in description | Erik Johnston | 2016-08-05 | 1 | -1/+2 |
| | | |||||
| * | Typo | Erik Johnston | 2016-08-04 | 1 | -1/+1 |
| | | |||||
| * | Test summarization | Erik Johnston | 2016-08-04 | 1 | -52/+54 |
| | | |||||
| * | Merge branch 'develop' of github.com:matrix-org/synapse into erikj/xpath_fix | Erik Johnston | 2016-08-04 | 1 | -42/+8 |
| |\ | |||||
| | * | Merge branch 'rav/null_default_device_displayname' into develop | Richard van der Hoff | 2016-08-03 | 1 | -3/+1 |
| | |\ | |||||
| | | * | Default device_display_name to null | Richard van der Hoff | 2016-08-03 | 1 | -3/+1 |
| | | | | | | | | | | | | | | | | | | | | | | | | It turns out that it's more useful to return a null device display name (and let clients decide how to handle it: eg, falling back to device_id) than using a constant string like "unknown device". | ||||
| | * | | Merge branch 'develop' into rav/refactor_device_query | Mark Haines | 2016-08-03 | 1 | -9/+7 |
| | |\| | |||||
| | * | | Move e2e query logic into a handler | Richard van der Hoff | 2016-08-01 | 1 | -39/+7 |
| | | | | |||||
| * | | | Don't infer paragrahs from newlines | Erik Johnston | 2016-08-02 | 1 | -2/+1 |
| | | | | |||||
| * | | | Comment on why we clone | Erik Johnston | 2016-08-02 | 1 | -0/+1 |
| | | | | |||||
| * | | | Spelling. | Erik Johnston | 2016-08-02 | 1 | -3/+3 |
| | | | | |||||
| * | | | Make it actually compile | Erik Johnston | 2016-08-02 | 1 | -1/+1 |
| | | | | |||||
| * | | | Change the way we summarize URLs | Erik Johnston | 2016-08-02 | 1 | -11/+67 |
| | |/ | |/| | | | | | | | | | | | | | | | | | | | Using XPath is slow on some machines (for unknown reasons), so use a different approach to get a list of text nodes. Try to generate a summary that respect paragraph and then word boundaries, adding ellipses when appropriate. | ||||
| * | | Fix adding emails on registration | David Baker | 2016-07-29 | 1 | -9/+7 |
| |/ | | | | | | | Synapse was not adding email addresses to accounts registered with an email address, due to too many different variables called 'result'. Rename both of them. Also remove the defer.returnValue() with no params because that's not a thing. | ||||
| * | Add r0.1.0 to the "supported versions" list | Richard van der Hoff | 2016-07-28 | 1 | -0/+1 |
| | | |||||
| * | Add r0.2.0 to the "supported versions" list | Richard van der Hoff | 2016-07-28 | 1 | -1/+4 |
| | | |||||
| * | key upload tweaks | Richard van der Hoff | 2016-07-27 | 1 | -7/+5 |
| | | | | | | | | | | | | | | 1. Add v2_alpha URL back in, since things seem to be using it. 2. Don't reject the request if the device_id in the upload request fails to match that in the access_token. | ||||
| * | Delete e2e keys on device delete | Richard van der Hoff | 2016-07-27 | 1 | -4/+9 |
| | | |||||
| * | Make the device id on e2e key upload optional | Richard van der Hoff | 2016-07-26 | 1 | -12/+35 |
| | | | | | | | | | | | | | | | | | | | | | | | | We should now be able to get our device_id from the access_token, so the device_id on the upload request is optional. Where it is supplied, we should check that it matches. For active access_tokens without an associated device_id, we ought to register the device in the devices table. Also update the table on upgrade so that all of the existing e2e keys are associated with real devices. | ||||
| * | Add `create_requester` function | Richard van der Hoff | 2016-07-26 | 1 | -6/+4 |
| | | | | | | | | | | Wrap the `Requester` constructor with a function which provides sensible defaults, and use it throughout | ||||
| * | Implement updating devices | Richard van der Hoff | 2016-07-26 | 1 | -7/+17 |
| | | | | | | | | You can update the displayname of devices now. | ||||
| * | Implement deleting devices | Richard van der Hoff | 2016-07-26 | 3 | -8/+29 |
| | | |||||
| * | Merge pull request #943 from matrix-org/rav/get_device_api | David Baker | 2016-07-21 | 1 | -0/+25 |
| |\ | | | | | | | Implement GET /device/{deviceId} | ||||
| | * | Implement GET /device/{deviceId} | Richard van der Hoff | 2016-07-21 | 1 | -0/+25 |
| | | | |||||
| * | | Merge pull request #942 from matrix-org/rav/fix_register_deviceid | David Baker | 2016-07-21 | 1 | -11/+10 |
| |\ \ | | |/ | |/| | Preserve device_id from first call to /register | ||||
| | * | Preserve device_id from first call to /register | Richard van der Hoff | 2016-07-21 | 1 | -11/+10 |
| | | | | | | | | | | | | | | | device_id may only be passed in the first call to /register, so make sure we fish it out of the register `params` rather than the body of the final call. | ||||
| * | | Merge branch 'develop' into rav/get_devices_api | Richard van der Hoff | 2016-07-20 | 1 | -15/+39 |
| |\| | | | | | | | | | | (pick up PR #938 in the hope of fixing the UTs) | ||||
| | * | Register a device_id in the /v2/register flow. | Richard van der Hoff | 2016-07-20 | 1 | -15/+39 |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This doesn't cover *all* of the registration flows, but it does cover the most common ones: in particular: shared_secret registration, appservice registration, and normal user/pass registration. Pull device_id from the registration parameters. Register the device in the devices table. Associate the device with the returned access and refresh tokens. Profit. | ||||
| * | | GET /devices endpoint | Richard van der Hoff | 2016-07-20 | 3 | -4/+62 |
| |/ | | | | | | | | | | | | | implement a GET /devices endpoint which lists all of the user's devices. It also returns the last IP where we saw that device, so there is some dancing to fish that out of the user_ips table. | ||||
| * | Merge pull request #933 from matrix-org/rav/type_annotations | Richard van der Hoff | 2016-07-20 | 3 | -0/+17 |
| |\ | | | | | | | Type annotations | ||||
| | * | Type annotations | Richard van der Hoff | 2016-07-19 | 3 | -0/+17 |
| | | | | | | | | | | | | | | | Add some type annotations to help PyCharm (in particular) to figure out the types of a bunch of things. | ||||
| * | | Merge pull request #932 from matrix-org/rav/register_refactor | David Baker | 2016-07-20 | 2 | -14/+40 |
| |\ \ | | | | | | | | | Further registration refactoring | ||||
| | * | | Further registration refactoring | Richard van der Hoff | 2016-07-19 | 2 | -14/+40 |
| | |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * `RegistrationHandler.appservice_register` no longer issues an access token: instead it is left for the caller to do it. (There are two of these, one in `synapse/rest/client/v1/register.py`, which now simply calls `AuthHandler.issue_access_token`, and the other in `synapse/rest/client/v2_alpha/register.py`, which is covered below). * In `synapse/rest/client/v2_alpha/register.py`, move the generation of access_tokens into `_create_registration_details`. This means that the normal flow no longer needs to call `AuthHandler.issue_access_token`; the shared-secret flow can tell `RegistrationHandler.register` not to generate a token; and the appservice flow continues to work despite the above change. | ||||
| * | | Merge pull request #922 from matrix-org/erikj/file_api2 | Erik Johnston | 2016-07-20 | 1 | -1/+10 |
| |\ \ | | |/ | |/| | Feature: Add filter to /messages. Add 'contains_url' to filter. | ||||
| | * | Add filter param to /messages API | Erik Johnston | 2016-07-14 | 1 | -1/+10 |
| | | | |||||
| * | | Merge pull request #931 from matrix-org/rav/refactor_register | David Baker | 2016-07-19 | 1 | -78/+102 |
| |\ \ | | | | | | | | | rest/client/v2_alpha/register.py: Refactor flow somewhat. | ||||
| | * | | Don't bind email unless threepid contains expected fields | Richard van der Hoff | 2016-07-19 | 1 | -28/+25 |
| | | | | |||||
| | * | | rest/client/v2_alpha/register.py: Refactor flow somewhat. | Richard van der Hoff | 2016-07-19 | 1 | -75/+102 |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is meant to be an *almost* non-functional change, with the exception that it fixes what looks a lot like a bug in that it only calls `auth_handler.add_threepid` and `add_pusher` once instead of three times. The idea is to move the generation of the `access_token` out of `registration_handler.register`, because `access_token`s now require a device_id, and we only want to generate a device_id once registration has been successful. | ||||
| * | | | Add device_id support to /login | Richard van der Hoff | 2016-07-18 | 2 | -6/+43 |
| |/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add a 'devices' table to the storage, as well as a 'device_id' column to refresh_tokens. Allow the client to pass a device_id, and initial_device_display_name, to /login. If login is successful, then register the device in the devices table if it wasn't known already. If no device_id was supplied, make one up. Associate the device_id with the access token and refresh token, so that we can get at it again later. Ensure that the device_id is copied from the refresh token to the access_token when the token is refreshed. | ||||
| * | | Merge pull request #928 from matrix-org/rav/refactor_login | Richard van der Hoff | 2016-07-18 | 1 | -18/+23 |
| |\ \ | | | | | | | | | Refactor login flow | ||||
| | * | | Refactor login flow | Richard van der Hoff | 2016-07-18 | 1 | -18/+23 |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Make sure that we have the canonical user_id *before* calling get_login_tuple_for_user_id. Replace login_with_password with a method which just validates the password, and have the caller call get_login_tuple_for_user_id. This brings the password flow into line with the other flows, and will give us a place to register the device_id if necessary. | ||||
| * | | | Use body.get to check for 'user' | Will Hunt | 2016-07-16 | 1 | -2/+1 |
| | | | | |||||
| * | | | Fall back to 'username' if 'user' is not given for appservice reg. | Will Hunt | 2016-07-16 | 1 | -3/+5 |
| |/ / | |||||
| * | | Merge pull request #921 from matrix-org/erikj/account_deactivate | Erik Johnston | 2016-07-14 | 1 | -0/+44 |
| |\ \ | | | | | | | | | Feature: Add an /account/deactivate endpoint | ||||
| | * | | Add hs object | Erik Johnston | 2016-07-14 | 1 | -0/+1 |
| | | | | |||||
| | * | | Only accept password auth | Erik Johnston | 2016-07-14 | 1 | -12/+0 |
| | | | | |||||
| | * | | Add an /account/deactivate endpoint | Erik Johnston | 2016-07-14 | 1 | -0/+55 |
| | |/ | |||||
| * | | Merge pull request #918 from negzi/bugfix_for_token_expiry | Erik Johnston | 2016-07-14 | 1 | -1/+1 |
| |\ \ | | |/ | |/| | Bug fix: expire invalid access tokens | ||||
| | * | Bug fix: expire invalid access tokens | Negar Fazeli | 2016-07-13 | 1 | -1/+1 |
| | | | |||||
| * | | be more pythonic | David Baker | 2016-07-12 | 1 | -1/+1 |
| | | | |||||
| * | | on_OPTIONS isn't neccessary | David Baker | 2016-07-12 | 2 | -10/+1 |
| | | |