diff options
-rw-r--r-- | CHANGES.rst | 16 | ||||
-rw-r--r-- | MANIFEST.in | 3 | ||||
-rw-r--r-- | README.rst | 53 | ||||
-rw-r--r-- | VERSION | 2 | ||||
-rwxr-xr-x | setup.py | 2 | ||||
-rw-r--r-- | synapse/__init__.py | 2 | ||||
-rw-r--r-- | synapse/handlers/register.py | 3 | ||||
-rw-r--r-- | webclient/components/fileUpload/file-upload-service.js | 7 | ||||
-rw-r--r-- | webclient/components/matrix/matrix-service.js | 3 | ||||
-rw-r--r-- | webclient/room/room.html | 2 | ||||
-rw-r--r-- | webclient/test/README | 30 | ||||
-rw-r--r-- | webclient/test/karma.conf.js | 17 |
12 files changed, 95 insertions, 45 deletions
diff --git a/CHANGES.rst b/CHANGES.rst index 08efbbf244..78c178bafd 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,3 +1,19 @@ +Changes in synapse 0.4.2 (2014-10-31) +===================================== + +Homeserver: + * Fix bugs where we did not notify users of correct presence updates. + * Fix bug where we did not handle sub second event stream timeouts. + +Webclient: + * Add ability to click on messages to see JSON. + * Add ability to redact messages. + * Add ability to view and edit all room state JSON. + * Handle incoming redactions. + * Improve feedback on errors. + * Fix bugs in mobile CSS. + * Fix bugs with desktop notifications. + Changes in synapse 0.4.1 (2014-10-17) ===================================== Webclient: diff --git a/MANIFEST.in b/MANIFEST.in index 73e0eff6e4..e1043fb57c 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,3 +1,4 @@ recursive-include docs * recursive-include tests *.py -recursive-include synapse/persistence/schema *.sql +recursive-include synapse/storage/schema *.sql +recursive-include webclient * diff --git a/README.rst b/README.rst index f40492b8a0..b3b2a94dbf 100644 --- a/README.rst +++ b/README.rst @@ -122,12 +122,12 @@ Thanks for trying Matrix! [2] End-to-end encryption is currently in development - Homeserver Installation ======================= -First, the dependencies need to be installed. Start by installing -'python2.7-dev' and the various tools of the compiler toolchain. +Synapse is written in python but some of the libraries is uses are written in +C. So before we can install synapse itself we need a working C compiler and the +header files for python C extensions. Installing prerequisites on Ubuntu:: @@ -137,29 +137,34 @@ Installing prerequisites on Mac OS X:: $ xcode-select --install -The homeserver has a number of external dependencies, that are easiest -to install by making setup.py do so, in --user mode:: +Synapse uses NaCl (http://nacl.cr.yp.to/) for encryption and digital +signatures. Unfortunately PyNACL currently has a few issues +(https://github.com/pyca/pynacl/issues/53) and +(https://github.com/pyca/pynacl/issues/79) that mean it may not install +correctly. To fix try re-installing from PyPI or directly from (https://github.com/pyca/pynacl):: - $ python setup.py develop --user + $ # Install from PyPI + $ pip install --user --upgrade --force pynacl + $ # Install from github + $ pip install --user https://github.com/pyca/pynacl/tarball/master -You'll need a version of setuptools new enough to know about git, so you -may need to also run:: +On OSX, if you encounter ``clang: error: unknown argument: '-mno-fused-madd'`` +you will need to ``export CFLAGS=-Qunused-arguments``. - $ sudo apt-get install python-pip - $ sudo pip install --upgrade setuptools +To install the synapse homeserver run:: -If you don't have access to github, then you may need to install ``syutil`` -manually by checking it out and running ``python setup.py develop --user`` on -it too. + $ pip install --user --process-dependency-links https://github.com/matrix-org/synapse/tarball/master -If you get errors about ``sodium.h`` being missing, you may also need to -manually install a newer PyNaCl via pip as setuptools installs an old one. Or -you can check PyNaCl out of git directly (https://github.com/pyca/pynacl) and -installing it. Installing PyNaCl using pip may also work (remember to remove -any other versions installed by setuputils in, for example, ~/.local/lib). +This installs synapse, along with the libraries it uses, into +``$HOME/.local/lib/``. -On OSX, if you encounter ``clang: error: unknown argument: '-mno-fused-madd'`` -you will need to ``export CFLAGS=-Qunused-arguments``. +Homeserver Development +====================== + +The homeserver has a number of external dependencies, that are easiest +to install by making setup.py do so, in --user mode:: + + $ python setup.py develop --user This will run a process of downloading and installing into your user's .local/lib directory all of the required dependencies that are @@ -204,11 +209,11 @@ IDs: For the first form, simply pass the required hostname (of the machine) as the --host parameter:: - $ python synapse/app/homeserver.py \ + $ python -m synapse.app.homeserver \ --server-name machine.my.domain.name \ --config-path homeserver.config \ --generate-config - $ python synapse/app/homeserver.py --config-path homeserver.config + $ python -m synapse.app.homeserver --config-path homeserver.config Alternatively, you can run synapse via synctl - running ``synctl start`` to generate a homeserver.yaml config file, where you can then edit server-name to @@ -226,12 +231,12 @@ record would then look something like:: At this point, you should then run the homeserver with the hostname of this SRV record, as that is the name other machines will expect it to have:: - $ python synapse/app/homeserver.py \ + $ python -m synapse.app.homeserver \ --server-name YOURDOMAIN \ --bind-port 8448 \ --config-path homeserver.config \ --generate-config - $ python synapse/app/homeserver.py --config-path homeserver.config + $ python -m synapse.app.homeserver --config-path homeserver.config You may additionally want to pass one or more "-v" options, in order to diff --git a/VERSION b/VERSION index 267577d47e..2b7c5ae018 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.4.1 +0.4.2 diff --git a/setup.py b/setup.py index 660efd5b89..0cb56c400f 100755 --- a/setup.py +++ b/setup.py @@ -28,7 +28,7 @@ def read(fname): setup( name="SynapseHomeServer", version="0.0.1", - packages=find_packages(exclude=["tests"]), + packages=find_packages(exclude=["tests", "tests.*"]), description="Reference Synapse Home Server", install_requires=[ "syutil==0.0.2", diff --git a/synapse/__init__.py b/synapse/__init__.py index 7067188c5b..23ae5f003f 100644 --- a/synapse/__init__.py +++ b/synapse/__init__.py @@ -16,4 +16,4 @@ """ This is a reference implementation of a synapse home server. """ -__version__ = "0.4.1" +__version__ = "0.4.2" diff --git a/synapse/handlers/register.py b/synapse/handlers/register.py index 88eb51a8ed..7df9d9b82d 100644 --- a/synapse/handlers/register.py +++ b/synapse/handlers/register.py @@ -15,7 +15,6 @@ """Contains functions for registering clients.""" from twisted.internet import defer -from twisted.python import log from synapse.types import UserID from synapse.api.errors import ( @@ -129,7 +128,7 @@ class RegistrationHandler(BaseHandler): try: threepid = yield self._threepid_from_creds(c) except: - log.err() + logger.exception("Couldn't validate 3pid") raise RegistrationError(400, "Couldn't validate 3pid") if not threepid: diff --git a/webclient/components/fileUpload/file-upload-service.js b/webclient/components/fileUpload/file-upload-service.js index e0f67b2c6c..b544e29509 100644 --- a/webclient/components/fileUpload/file-upload-service.js +++ b/webclient/components/fileUpload/file-upload-service.js @@ -64,7 +64,8 @@ angular.module('mFileUpload', ['matrixService', 'mUtilities']) var imageMessage = { msgtype: "m.image", url: undefined, - body: { + body: "Image", + info: { size: undefined, w: undefined, h: undefined, @@ -90,7 +91,7 @@ angular.module('mFileUpload', ['matrixService', 'mUtilities']) function(url) { // Update message metadata imageMessage.url = url; - imageMessage.body = { + imageMessage.info = { size: imageFile.size, w: size.width, h: size.height, @@ -101,7 +102,7 @@ angular.module('mFileUpload', ['matrixService', 'mUtilities']) // reuse the original image info for thumbnail data if (!imageMessage.thumbnail_url) { imageMessage.thumbnail_url = imageMessage.url; - imageMessage.thumbnail_info = imageMessage.body; + imageMessage.thumbnail_info = imageMessage.info; } // We are done diff --git a/webclient/components/matrix/matrix-service.js b/webclient/components/matrix/matrix-service.js index d089bf601c..fedfb8910d 100644 --- a/webclient/components/matrix/matrix-service.js +++ b/webclient/components/matrix/matrix-service.js @@ -422,7 +422,8 @@ angular.module('matrixService', []) var content = { msgtype: "m.image", url: image_url, - body: image_body + info: image_body, + body: "Image" }; return this.sendMessage(room_id, msg_id, content); diff --git a/webclient/room/room.html b/webclient/room/room.html index 407daf56ff..ca5669a732 100644 --- a/webclient/room/room.html +++ b/webclient/room/room.html @@ -139,7 +139,7 @@ ng-hide="room.events[$index - 1].user_id === msg.user_id || msg.user_id === state.user_id"/> </td> <td ng-class="(!msg.content.membership && ('m.room.topic' !== msg.type && 'm.room.name' !== msg.type))? (msg.content.msgtype === 'm.emote' ? 'emote text' : 'text') : 'membership text'"> - <div class="bubble" ng-click="openJson(msg)"> + <div class="bubble" ng-dblclick="openJson(msg)"> <span ng-if="'join' === msg.content.membership && msg.changedKey === 'membership'"> {{ msg.content.displayname || members[msg.state_key].displayname || msg.state_key }} joined </span> diff --git a/webclient/test/README b/webclient/test/README index 1a7bc832c7..e7ed4eaa87 100644 --- a/webclient/test/README +++ b/webclient/test/README @@ -1,13 +1,31 @@ -Requires: - - nodejs/npm - - npm install karma +Testing is done using Karma. + + +UNIT TESTING +============ + +Requires the following: + - npm/nodejs + - phantomjs + +Requires the following node packages: - npm install jasmine - - npm install protractor (e2e testing) + - npm install karma + - npm install karma-jasmine + - npm install karma-phantomjs-launcher + - npm install karma-junit-reporter -Setting up continuous integration / run the unit tests (make sure you're in -this directory so it can find the config file): +Make sure you're in this directory so it can find the config file and run: karma start +You should see all the tests pass. + + +E2E TESTING +=========== + +npm install protractor + Setting up e2e tests (only if you don't have a selenium server to run the tests on. If you do, edit the config to point to that url): diff --git a/webclient/test/karma.conf.js b/webclient/test/karma.conf.js index 22c4eaaafa..083c7c7200 100644 --- a/webclient/test/karma.conf.js +++ b/webclient/test/karma.conf.js @@ -23,6 +23,8 @@ module.exports = function(config) { '../js/angular-animate.js', '../js/angular-sanitize.js', '../js/ng-infinite-scroll-matrix.js', + '../js/ui-bootstrap*', + '../js/elastic.js', '../login/**/*.*', '../room/**/*.*', '../components/**/*.*', @@ -35,6 +37,10 @@ module.exports = function(config) { './unit/**/*.js' ], + plugins: [ + 'karma-*', + ], + // list of files to exclude exclude: [ @@ -50,8 +56,11 @@ module.exports = function(config) { // test results reporter to use // possible values: 'dots', 'progress' // available reporters: https://npmjs.org/browse/keyword/karma-reporter - reporters: ['progress'], - + reporters: ['progress', 'junit'], + junitReporter: { + outputFile: 'test-results.xml', + suite: '' + }, // web server port port: 9876, @@ -72,11 +81,11 @@ module.exports = function(config) { // start these browsers // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher - browsers: ['Chrome'], + browsers: ['PhantomJS'], // Continuous Integration mode // if true, Karma captures browsers, runs the tests and exits - singleRun: false + singleRun: true }); }; |