summary refs log tree commit diff
Commit message (Expand)AuthorAgeFilesLines
* Wait for events if the incremental sync is empty and a timeout is givenMark Haines2015-01-273-8/+61
* Start implementing incremental initial syncMark Haines2015-01-273-34/+241
* Start implementing the non-incremental sync portion of the v2 /sync APIMark Haines2015-01-264-54/+146
* Merge branch 'develop' into client_v2_syncMark Haines2015-01-268-21/+60
|\
| * Merge pull request #34 from matrix-org/remove_serialize_event_from_hsMark Haines2015-01-267-21/+45
| |\
| | * Remove unused import from server.pyMark Haines2015-01-261-1/+0
| | * Pass the current time to serialize event, rather than passing anMark Haines2015-01-267-20/+45
| * | Create (empty) v2_alpha REST tests directoryPaul "LeoNerd" Evans2015-01-261-0/+15
| |/
* | Add handler for /sync APIMark Haines2015-01-261-0/+110
* | Merge branch 'develop' into client_v2_syncMark Haines2015-01-262-1/+7
|\|
| * Add client v2_alpha resource to synapse server resource treeMark Haines2015-01-236-1/+132
| * Stop complaining about Synapse Angular SDK 0.6.1Paul "LeoNerd" Evans2015-01-231-1/+1
| * Update .gitignoreErik Johnston2015-01-231-0/+6
* | Add client v2_alpha resource to synapse server resource treeMark Haines2015-01-232-1/+7
* | Start implementing the v2_alpha sync APIMark Haines2015-01-235-0/+272
|/
* Merge pull request #33 from matrix-org/extract_rest_servlet_from_client_v1Mark Haines2015-01-2312-72/+100
|\
| * Add RestServlet base class in synapse/http/servlet.pyMark Haines2015-01-231-0/+56
| * Extract the client v1 base RestServlet to a separate classMark Haines2015-01-2311-72/+44
|/
* Merge pull request #32 from matrix-org/remove_parse_id_from_hsMark Haines2015-01-2335-179/+168
|\
| * Remove hs.parse_eventidMark Haines2015-01-231-9/+0
| * Replace hs.parse_roomalias with RoomAlias.from_stringMark Haines2015-01-238-26/+18
| * Replace hs.parse_roomid with RoomID.from_stringMark Haines2015-01-238-21/+15
| * Replace hs.parse_userid with UserID.from_stringMark Haines2015-01-2331-133/+145
|/
* Merge pull request #31 from matrix-org/client_api_resourceMark Haines2015-01-235-28/+18
|\
| * Merge rest servlets into the client json resource objectMark Haines2015-01-235-28/+18
* | Rename MockedDatastoreTestCase to MockedDatastorePresenceTestCase since it is...Paul "LeoNerd" Evans2015-01-221-3/+3
* | Much merging of test case setUp() methods to make them much morePaul "LeoNerd" Evans2015-01-221-273/+193
|/
* Merge pull request #30 from matrix-org/client_api_restructureMark Haines2015-01-2237-62/+118
|\
| * Move client rest tests back under restMark Haines2015-01-229-5/+19
| * Move rest APIs back under the rest directoryMark Haines2015-01-2231-19/+33
| * Move client v1 api rest servlets into a "client/v1" directoryMark Haines2015-01-2223-24/+52
|/
* Fix manifest. Ignore contrib and docs directories when checking manifest agai...Mark Haines2015-01-223-5/+9
* Add demo and scripts to python manifestMark Haines2015-01-221-2/+11
* update .gitignore, set media-store-path in demoMark Haines2015-01-222-9/+5
* Move experiments, graph and cmdclient into contribMark Haines2015-01-226-0/+0
* Remove jsfiddlesMark Haines2015-01-2216-1079/+0
* Move scripts into scriptsMark Haines2015-01-226-2/+2
* Abstract out the room ID from presence tests, so it's stored in selfPaul "LeoNerd" Evans2015-01-211-8/+10
* Use common base class for two Presence unit-tests, avoiding boilerplate copyp...Paul "LeoNerd" Evans2015-01-211-54/+25
* Only start the notifier timeout once we've had a chance to check for updates....Mark Haines2015-01-191-2/+2
* Fix pyflakes errorsMark Haines2015-01-191-1/+1
* Fix syntaxMark Haines2015-01-191-2/+3
* Allow ':memory:' as the database path for sqlite3Mark Haines2015-01-192-2/+11
* Finish renaming "context" to "room_id" in federation codebaseMark Haines2015-01-167-99/+62
* Fold _do_request_for_transaction into the methods that called it since it was...Mark Haines2015-01-161-44/+11
* Split transport layer into client and server partsMark Haines2015-01-163-272/+321
* Remove temporary debug logging that was accidentally committedMark Haines2015-01-161-2/+0
* Have /join/:room_id return the room ID in response anyway, for consistency of...Paul "LeoNerd" Evans2015-01-131-1/+1
* Have MockClock detect attempts to cancel expired timers, to prevent a repeat ...Paul "LeoNerd" Evans2015-01-131-4/+16
* Don't try to cancel already-expired timers - SYN-230Paul "LeoNerd" Evans2015-01-131-2/+8
* Remove unused functionsMark Haines2015-01-134-30/+0
* get_room_events isn't called anywhereMark Haines2015-01-131-30/+0
* Fix stream token orderingMark Haines2015-01-131-72/+101
* Merge branch 'hotfixes-v0.6.1b' of github.com:matrix-org/synapse into developErik Johnston2015-01-133-3/+3
|\
| * Bump versionErik Johnston2015-01-132-2/+2
| * Insert 'age' into top level when returning events to clientsErik Johnston2015-01-131-1/+1
* | Use float rather than integer divisions to turn msec into sec - so timeouts u...Paul "LeoNerd" Evans2015-01-121-1/+1
* | Check that setting typing notification still works after explicit timeout at ...Paul "LeoNerd" Evans2015-01-121-1/+50
* | Make typing notification timeouts print a (debug) logging messagePaul "LeoNerd" Evans2015-01-121-1/+7
* | Don't make @unittest.DEBUG print the huge amount of verbosity generated by th...Paul "LeoNerd" Evans2015-01-121-0/+2
* | Check that setting typing notification still works after explicit timeout - S...Paul "LeoNerd" Evans2015-01-121-0/+26
* | SYN-178: Fix off by one.Kegan Dougal2015-01-121-2/+6
* | Add copyrighter script for sqlMark Haines2015-01-121-0/+33
* | don't clobber pythonpathMatthew Hodgson2015-01-091-2/+2
* | oopsMatthew Hodgson2015-01-081-1/+1
* | spell out that local libs may need to be explicitly given priorityMatthew Hodgson2015-01-081-0/+9
* | Check the existance and versions of necessary modules when starting synapse, ...Mark Haines2015-01-082-0/+85
* | SYN-142: Rotate logs if logging to file. Fixed to a 4 file rotate with 100MB/...Kegan Dougal2015-01-081-1/+4
* | make our JPEG thumbnail quality less horrifically uglyMatthew Hodgson2015-01-081-1/+1
* | Add raw query param for scrollback.Kegan Dougal2015-01-082-3/+9
* | Add better help message for --server-name config option.Erik Johnston2015-01-081-2/+6
* | Return the raw federation event rather than adding extra keys for federation ...Kegan Dougal2015-01-086-19/+27
* | Add missing continuation indent.Erik Johnston2015-01-081-1/+2
* | Add 'raw' query parameter to expose the event graph and signatures to savvy c...Kegan Dougal2015-01-086-16/+28
* | Add optional limit to graph scriptErik Johnston2015-01-081-6/+24
* | Merge branch 'master' into developMark Haines2015-01-083-5/+5
|\|
| * Merge branch 'hotfixes-v0.6.1' v0.6.1aMark Haines2015-01-083-5/+5
| |\
| | * Bump versionMark Haines2015-01-082-2/+2
| | * SYN-231: User agent header brokenMark Haines2015-01-081-3/+3
| |/
| * Merge branch 'release-v0.6.1' of github.com:matrix-org/synapse v0.6.1Erik Johnston2015-01-07137-310/+601
| |\
* | | Log server version on startupErik Johnston2015-01-071-0/+3
* | | Change error message for missing pillow libs.Kegan Dougal2015-01-071-2/+4
* | | PEP8 and pyflakes warningsKegan Dougal2015-01-072-2/+4
* | | Update testsKegan Dougal2015-01-071-1/+1
* | | SYN-154: Tweak how the m.room.create check is done.Kegan Dougal2015-01-072-12/+12
* | | SYN-154: Better error messages when joining an unknown room by ID.Kegan Dougal2015-01-073-6/+17
* | | *cough*Matthew Hodgson2015-01-071-1/+1
* | | Merge branch 'release-v0.6.1' of github.com:matrix-org/synapse into developErik Johnston2015-01-073-2/+10
|\ \ \ | | |/ | |/|
| * | Improve change logErik Johnston2015-01-071-2/+2
| * | Bump version and changelogErik Johnston2015-01-073-2/+10
|/ /
* | Remove unused importErik Johnston2015-01-071-2/+0
* | Merge branch 'erikj-perf' of github.com:matrix-org/synapse into developErik Johnston2015-01-072-9/+16
|\ \
| * \ Merge branch 'develop' of github.com:matrix-org/synapse into erikj-perfErik Johnston2015-01-072-1/+2
| |\ \ | |/ / |/| |
* | | Merge branch 'master' into developMark Haines2015-01-062-1/+2
|\ \ \ | | |/ | |/|
| * | Merge branch 'hotfixes-v0.6.0a' v0.6.0bMark Haines2014-12-291-0/+1
| |\ \
| | * | Return the argument passed to the callback in a deferred callback, otherwise ...Mark Haines2014-12-291-0/+1
| * | | improve error msgMatthew Hodgson2014-12-241-1/+1
| |/ /
| | * Optimize FrozenEvent creationErik Johnston2015-01-062-9/+16
| |/ |/|
* | Use time.time() instead of time.clock()Erik Johnston2015-01-061-4/+4
* | Fix typo where we used wrong var.Erik Johnston2015-01-061-2/+2
* | Only fetch the columns we need.Erik Johnston2015-01-061-1/+1
* | RoomsForUser now has sender instead of user_idErik Johnston2015-01-061-1/+1
* | Add delta and bump DB versionErik Johnston2015-01-062-1/+17
* | Add index on transaction_id to sent_transcationsErik Johnston2015-01-062-4/+1
* | Actually time that functionErik Johnston2015-01-061-0/+1
* | Time how long calls to _get_destination_retry_timings takeErik Johnston2015-01-062-12/+64
* | Don't include None's in _get_events_txnErik Johnston2015-01-061-1/+3
* | Merge branch 'erikj-perf' of github.com:matrix-org/synapse into developErik Johnston2015-01-062-26/+54
|\ \
| * | Name 'user_rooms_intersect' transactionErik Johnston2015-01-061-16/+18
| * | We don't need the full events for get_rooms_for_user_where_membership_isErik Johnston2015-01-062-10/+36
* | | SYN-32 Use the ANTIALIAS resize method for thumbnailing imagesMark Haines2015-01-061-3/+3
* | | Add some logging for when we are sending transactions.Matrix2015-01-061-0/+6
* | | Increase default maximum attachment size to 10MMark Haines2015-01-061-1/+1
* | | Merge pull request #28 from matrix-org/erikj-perfMark Haines2015-01-065-111/+118
|\| |
| * | PEP8Erik Johnston2015-01-062-3/+4
| * | Remove debug linesErik Johnston2015-01-061-7/+0
| * | Don't do batching when getting events.Erik Johnston2015-01-061-35/+4
| * | Only fetch prev_content when a client is streaming/paginating. Use transactio...Erik Johnston2015-01-062-86/+92
| * | Temporarily turn off 'redacted_because' and 'prev_content' keysErik Johnston2015-01-061-0/+2
| * | More debug loggingErik Johnston2015-01-061-0/+4
| * | Add some debug loggingErik Johnston2015-01-061-0/+12
| * | ReformatErik Johnston2015-01-061-13/+14
| * | Add RoomMemberStore.get_users_in_room, so that we can get the list of joined ...Erik Johnston2015-01-062-8/+18
| * | Merge branch 'develop' of github.com:matrix-org/synapse into erikj-perfErik Johnston2015-01-066-7/+46
| |\ \
| * \ \ Merge branch 'master' of github.com:matrix-org/synapse into erikj-perfErik Johnston2014-12-214-6/+26
| |\ \ \ | | | |/ | | |/|
| * | | Merge branch 'hotfixes-v0.6.0' of github.com:matrix-org/synapse into erikj-perfErik Johnston2014-12-198-15/+72
| |\ \ \
| * \ \ \ Merge branch 'release-v0.6.0' of github.com:matrix-org/synapse into erikj-perfErik Johnston2014-12-185-44/+79
| |\ \ \ \
| * | | | | Test some ideas that might help performance a bitErik Johnston2014-12-174-23/+32
* | | | | | Update copyright noticesMark Haines2015-01-06132-128/+212
* | | | | | Set a content-length for JSON responsesMark Haines2015-01-061-0/+1
* | | | | | SYN-208/SYN-228: Add runtime checks on startup to enforce that JPEG/PNG suppo...Kegan Dougal2015-01-061-0/+29
* | | | | | SYN-229: Include Content-Length when downloading filesMark Haines2015-01-063-7/+23
| |_|_|_|/ |/| | | |
* | | | | spell out that VoIP needs TURNMatthew Hodgson2014-12-241-0/+3
* | | | | clarify these instructions a media-repo specificMatthew Hodgson2014-12-241-1/+3
* | | | | spell out that upgrading is just installing over the topMatthew Hodgson2014-12-241-0/+5
* | | | | Include version in User-Agent and Server headersMark Haines2014-12-224-6/+35
| |_|_|/ |/| | |
* | | | Merge branch 'hotfixes-v0.6.0' v0.6.0aMark Haines2014-12-198-13/+42
|\ \ \ \
| * | | | Mock ratelimiter to make tests pass.Kegan Dougal2014-12-192-4/+16
| * | | | more changelogsMatthew Hodgson2014-12-191-0/+6
| * | | | Rate limit display names and avatar urls per request rather than per event.Kegan Dougal2014-12-191-2/+4
| | |_|/ | |/| |
| * | | Set a state_key for the topic and room name, otherwise they won't be treated ...Mark Haines2014-12-191-0/+2
| * | | Look for name, topic in the event content rather than the event itself when p...Mark Haines2014-12-191-4/+4
| * | | bump_presence_active_time when sending a message eventMark Haines2014-12-191-0/+6
| * | | Don't ratelimit room create eventsMark Haines2014-12-192-3/+4
|/ / /
* | | Merge branch 'release-v0.6.0' v0.6.0Mark Haines2014-12-19101-2219/+4746
|\ \ \
| * | | Bump web sdk version to 0.6.0Mark Haines2014-12-191-2/+2
| * | | Set display name when joining via aliasMark Haines2014-12-191-0/+5
| * | | Remove unneeded federation keys from eventsMark Haines2014-12-191-0/+3
| * | | SYN-203: Handle requests for thunbnails for images that are smallMark Haines2014-12-191-5/+14
| * | | s/user_id/sender/Mark Haines2014-12-191-1/+1
| * | | Merge branch 'develop' into release-v0.6.0Mark Haines2014-12-191-0/+31
| |\ \ \ | | |_|/ | |/| |
| | * | Update README.rstKegsay2014-12-181-0/+9
| | * | Update README.rstKegsay2014-12-181-0/+22
| * | | Supply auth_chain along with current state in '/state/', fetch auth events fr...Mark Haines2014-12-184-31/+55
| * | | Replace distributor deferred list, with a simple for loop until I understand ...Mark Haines2014-12-182-14/+25
| * | | Don't yield on sending the event accross federation.Mark Haines2014-12-181-2/+2
| | |/ | |/|
| * | Use _get_events_txn instead of _parse_events_txnErik Johnston2014-12-161-7/+1
| * | Fix where we pulled in event.state_events from hotfixes branchErik Johnston2014-12-161-1/+1
| * | Merge branch 'hotfixes-v0.5.4a' of github.com:matrix-org/synapse into release...Erik Johnston2014-12-162-10/+14
| |\ \
| | * | Add FIXMEErik Johnston2014-12-161-0/+1
| | * | Fix bug where we did not send the full auth chain to people that joined over ...Erik Johnston2014-12-162-10/+13
| |/ / |/| |
* | | Merge branch 'hotfixes-v0.5.4' of github.com:matrix-org/synapse v0.5.4aErik Johnston2014-12-134-4/+10
|\ \ \
| | * | Make error messages slightly more helpfulErik Johnston2014-12-161-5/+5
| | * | Merge branch 'develop' of github.com:matrix-org/synapse into release-v0.6.0Erik Johnston2014-12-1615-322/+99
| | |\|
| | | * Merge branch 'release-v0.6.0' into developMark Haines2014-12-1610-53/+194
| | | |\
| | | * | SYN-142: Use a default log file 'homeserver.log' so people get logging by def...Kegan Dougal2014-12-161-1/+1
| | | * | Remove send_message since nothing was calling it. Remove Snapshot because onl...Mark Haines2014-12-162-118/+0
| | | * | Construct the EventContext in the state handler rather than constructing one ...Mark Haines2014-12-166-59/+50
| | | * | clean up coding style a bitMark Haines2014-12-168-26/+26
| | | * | Remove annotate_event_with_state as nothing was using it. Update state tests ...Mark Haines2014-12-162-135/+39
| | * | | Use is_outlier() so that we don't get AttributeErrorErik Johnston2014-12-163-7/+5
| | * | | Don't assume an event existsErik Johnston2014-12-161-2/+4
| | * | | Mention that we should pull in new deps before running upgrade scriptErik Johnston2014-12-161-0/+4
| | | |/ | | |/|
| | * | Change upgrade script to not check hashes or signaturesErik Johnston2014-12-161-46/+53
| | * | Enable rate limiting for all eventsErik Johnston2014-12-161-0/+5
| | * | Fix typo where we thought a list was a dictErik Johnston2014-12-161-3/+4
| | * | Fix upgrade script to run all the missing deltas.Erik Johnston2014-12-162-1/+77
| | * | Do run all deltas up to missing delta 10Erik Johnston2014-12-161-4/+4
| | * | Bump UPGRADES and CHANGESErik Johnston2014-12-163-0/+27
| | * | Make failure to run appropraite upgrade scripts more helpful.Erik Johnston2014-12-162-3/+22
| | * | Fix bugs in upgrade script.Erik Johnston2014-12-161-1/+5
| | * | Rename upgrade scriptErik Johnston2014-12-161-0/+0
| | * | Include database bump in upgrade scriptErik Johnston2014-12-161-0/+2
| | * | Bump database versionErik Johnston2014-12-161-1/+1
| | * | Bump versionErik Johnston2014-12-162-2/+2
| | |/
| | * Merge pull request #25 from matrix-org/events_refactorMark Haines2014-12-1660-1812/+2114
| | |\
| | | * Fix pyflakesErik Johnston2014-12-161-2/+0
| | | * Remove FrozenEncoderErik Johnston2014-12-161-8/+0
| | | * Better english in docstrings are helpful.Erik Johnston2014-12-161-2/+2
| | | * Update upgrade scriptErik Johnston2014-12-162-3/+12
| | | * Persist internal_metadataErik Johnston2014-12-164-5/+13
| | | * Add basic docstring to annotate_context_with_stateErik Johnston2014-12-161-0/+11
| | | * Kill off synapse.api.events.*Erik Johnston2014-12-1626-925/+74
| | | * Add fixme to raising of AuthError in federation landErik Johnston2014-12-161-0/+1
| | | * Fix pyflakesErik Johnston2014-12-151-2/+0
| | | * Merge branch 'develop' of github.com:matrix-org/synapse into events_refactorErik Johnston2014-12-152-8/+26
| | | |\
| | | * | Use frozenutilsErik Johnston2014-12-152-34/+5
| | | * | User.is_mine is no longer a thing. Use hs.is_mine instead.Erik Johnston2014-12-151-1/+1
| | | * | Rename MessageHandler.handle_event. Add a few comments.Erik Johnston2014-12-157-14/+32
| | | * | Remove unused functionsErik Johnston2014-12-151-42/+0
| | | * | Finish up upgrade scriptErik Johnston2014-12-152-31/+95
| | | * | Get current member state from current_state snapshot. Fix leave test.Erik Johnston2014-12-152-4/+15
| | | * | Merge branch 'develop' of github.com:matrix-org/synapse into events_refactorErik Johnston2014-12-1513-56/+449
| | | |\ \
| | | * | | Add beginnings of upgrade scriptErik Johnston2014-12-151-0/+223
| | | * | | Fix bug where we ignored event_edge_hashes tableErik Johnston2014-12-155-7/+10
| | | * | | Remove unused importsErik Johnston2014-12-123-3/+0
| | | * | | Make auth module use EventTypes constantsErik Johnston2014-12-121-27/+23
| | | * | | Fix tests and remove debug loggingErik Johnston2014-12-122-6/+7
| | | * | | Consistently url decode and decode as utf 8 the URL partsErik Johnston2014-12-125-43/+35
| | | * | | Store json as UTF-8 and not bytesErik Johnston2014-12-121-1/+1
| | | * | | PyflakesErik Johnston2014-12-121-1/+0
| | | * | | Fix membership handler testErik Johnston2014-12-121-82/+97
| | | * | | Fix test.Erik Johnston2014-12-121-1/+1
| | | * | | Validate message, topic and name event contentsErik Johnston2014-12-123-1/+27
| | | * | | Fix stream test. Make sure we add join to auth_events for invitiationsErik Johnston2014-12-122-4/+6
| | | * | | Merge branch 'develop' of github.com:matrix-org/synapse into events_refactorErik Johnston2014-12-1127-20/+1422
| | | |\ \ \
| | | * | | | Fix replication testsErik Johnston2014-12-111-12/+6
| | | * | | | Fix federation testErik Johnston2014-12-112-19/+25
| | | * | | | Fix room creation testErik Johnston2014-12-111-34/+34
| | | * | | | Fix public room joining by making sure replaces_state never points to itself.Erik Johnston2014-12-113-10/+13
| | | * | | | Fix prev_contentErik Johnston2014-12-113-3/+16
| | | * | | | Fix redaction testsErik Johnston2014-12-111-6/+8
| | | * | | | Fix redactions. Fix 'age' keyErik Johnston2014-12-116-30/+83
| | | * | | | Fix some testsErik Johnston2014-12-105-130/+120
| | | * | | | .from_string() no longer takes a HSErik Johnston2014-12-101-2/+2
| | | * | | | Remove dead codeErik Johnston2014-12-102-27/+0
| | | * | | | Add some basic event validationErik Johnston2014-12-102-10/+27
| | | * | | | Add new event graphing toolErik Johnston2014-12-101-0/+138
| | | * | | | Fix bug where we clobbered old state group valuesErik Johnston2014-12-103-2/+13
| | | * | | | Actually fix bug when uploading state with empty state_keyErik Johnston2014-12-102-2/+3
| | | * | | | Fix bug when uploading state with empty state_keyErik Johnston2014-12-106-88/+29
| | | * | | | Merge branch 'develop' of github.com:matrix-org/synapse into events_refactorErik Johnston2014-12-1015-27/+311
| | | |\ \ \ \
| | | * | | | | Fix AttributeErrorErik Johnston2014-12-102-1/+4
| | | * | | | | Make depth increase.Erik Johnston2014-12-101-1/+1
| | | * | | | | Add __str__ to FrozenEventErik Johnston2014-12-101-0/+5
| | | * | | | | Try and figure out how and why signatures are being changed.Erik Johnston2014-12-109-34/+86
| | | * | | | | This is to test jenkinsErik Johnston2014-12-091-1/+0
| | | * | | | | This is to test jenkinsErik Johnston2014-12-091-1/+1
| | | * | | | | This is to test jenkinsErik Johnston2014-12-091-0/+1
| | | * | | | | This is to test jenkinsErik Johnston2014-12-091-0/+0
| | | * | | | | Merge branch 'develop' of github.com:matrix-org/synapse into events_refactorErik Johnston2014-12-091-3/+3
| | | |\ \ \ \ \
| | | * | | | | | PEP8Erik Johnston2014-12-092-2/+2
| | | * | | | | | Fix joining from an inviteErik Johnston2014-12-094-17/+20
| | | * | | | | | Change the way we implement get_events to be less suckyErik Johnston2014-12-092-36/+22
| | | * | | | | | Delete test fileErik Johnston2014-12-091-1/+0
| | | * | | | | | This is to test jenkinsErik Johnston2014-12-091-1/+1
| | | * | | | | | This is to test jenkinsErik Johnston2014-12-091-1/+1
| | | * | | | | | This is to test jenkinsErik Johnston2014-12-091-1/+1
| | | * | | | | | This is to test jenkinsErik Johnston2014-12-091-1/+1
| | | * | | | | | This is to test jenkinsErik Johnston2014-12-091-1/+1