Commit Graph

1150 Commits

Author SHA1 Message Date
Kegsay
8ccff1e40f Log fatal errors at error level and return generic 500s (#34)
Previously, the error responses:
 - were not valid matrix errors (no `errcode`)
 - returned the `err.Error()` message which may contain sensitive information.
 - did not get logged (at all, let alone set the level correctly).

Now the error responses:
 - return valid matrix errors (`M_UNKNOWN`)
 - return a generic "Internal Server Error" string
 - get logged at `ERROR` level.
2017-03-10 16:50:41 +00:00
Kegsay
2fcf6fd6eb Send /createRoom events to kafka (#33) 2017-03-10 16:19:23 +00:00
Kegsay
49ed708ca4 Create the initial set of state events for room creation (#32) 2017-03-10 11:32:53 +00:00
Mark Haines
e667f17e14 Include the requested current state alongside the latest events in the query API. (#30)
* Return the requested portions of current state in the query API

* Use Unique from github.com/matrix-org/util

* rewrite bulkSelectFilteredStateBlockEntries to use append for clarity

* Add test for stateKeyTupleSorter

* Replace current with a new StateEntryList rather than individually setting the fields
2017-03-09 15:07:18 +00:00
Kegsay
e82090e277 Update gomatrixserverlib dep and add basic /createRoom validation (#31) 2017-03-09 11:47:06 +00:00
Mark Haines
1d18da1189 Move the functions for reading room state to a separate package. (#29)
This should:
    1) Make the input package a bit cleaner.
    2) Allow use to reuse the state reading code from the query package.
2017-03-08 15:10:26 +00:00
Mark Haines
84682b33c9 Use Unique from github.com/matrix-org/util (#28)
* Update github.com/matrix-org/util

* Use Unique from github.com/matrix-org/util
2017-03-08 13:27:21 +00:00
Kegsay
8ba9d4af04 Add /createRoom endpoint and unmarshal HTTP body (#27) 2017-03-07 16:11:08 +00:00
Kegsay
5552e1f3a8 Extract access tokens from HTTP requests (#15) 2017-03-07 13:43:32 +00:00
Mark Haines
8084beb6f7 Add helper method for preparing lists of statements. (#25)
* Add helper method for preparing lists of statements.
2017-03-07 10:37:41 +00:00
Mark Haines
96fc9294cc Track the current state of the room (#24)
* Add method for calculating the room state after a list of events

* Fill out AddsState and RemovesState fields in the output event

* comment on return value

* Fix whitespace

* Clarify the meaning of LastEventIDSent

* Be more explicit on what the snapshot is

* Fix comments

* Comment on why we want the state after the previous events
2017-03-07 10:25:01 +00:00
Mark Haines
9a8a8aedcb Add a query API to the roomserver for getting the latest events in a room. (#23)
* Start implementing a query API for go using net/rpc

* Use a conventional JSON POST API rather than go net/rpc

net/rpc doesn't automatically handle reconnecting and we have better
logging and metrics infrastructure for monitoring HTTP apis.

* Implement the query API and add it to the integration tests

* Increase the timeout, travis seems to be a bit slow

* Clarify that state events are the things that are not returned if they are not requested

* Add utility function for converting arrays of numeric event IDs to pq Int64Arrays

* Warn people against requesting empty state keys by accident
2017-03-06 14:29:39 +00:00
Mark Haines
37e0b6c4c6 Add integration tests for roomserver to travis (#21)
* Add integration tests for roomserver to travis

* Try setting the dist trusty to see if that helps with postgres

* Pretty print the test input JSON

* Add comment as to why we are using trusty
2017-03-01 14:55:27 +00:00
Tyler Gillies
276cc8cad6 Update README.md (#22)
Typo
2017-03-01 09:39:05 +00:00
Mark Haines
237b912cf5 Write to an output kafka log for new room events in the roomserver. (#20)
* Track which events have been sent and the last event sent for each room

* Write output events

* comment that an event could be sent twice
2017-02-27 11:25:35 +00:00
Kegsay
45d1e61a9d Update to use util.JSONResponse (#18) 2017-02-24 12:32:27 +00:00
Mark Haines
a9b296c522 Get the SQL working, and make it more idempotent (#17)
* Get the SQL working, and make it more idempotent
2017-02-22 16:51:10 +00:00
Mark Haines
c96d3eec0c Marshal and Unmarshal methods for roomserver input api (#16)
* Marshal and Unmarshal methods for roomserver input api

* Comments for why we don't json.marshal the InputRoomEvent directly

* More comments

* s/m.room.create/the first event/
2017-02-22 16:05:18 +00:00
Mark Haines
094345830e gb vendor fetch github.com/gorilla/context 2017-02-22 13:01:05 +00:00
Kegan Dougal
9e6127d12a Update util dep 2017-02-21 17:18:06 +00:00
Mark Haines
51f9741b34 Track which events are the latest events in the room. (#14)
* Track which events are the latest events in the room.
2017-02-21 14:50:30 +00:00
Kegsay
966d3b95b7 Add error package and some Matrix errors (#13)
Terse function names are used to make usage not stutter. For example:

```go
err := error.Forbidden("you shall not pass")
```

At the moment they are all the same fundamental `MatrixError` type. This will
be bad if we ever want to `switch` based on the kind of error. I'm hoping we
won't ever need to introspect into errors like this: ideally these errors would
be created purely for immediately being returned in an HTTP response.

`MatrixError` implements the `error` interface.
2017-02-20 17:20:49 +00:00
Kegan Dougal
434e525ff3 Remove coveralls. It doesn't work with gb 2017-02-20 17:19:27 +00:00
Kegsay
d32397fbc8 Add coverage badge 2017-02-20 17:14:56 +00:00
Kegan Dougal
b8cee07d0b Add coveralls.io? 2017-02-20 17:13:59 +00:00
Kegsay
c165aff29d Add build badge 2017-02-20 16:57:55 +00:00
Kegsay
5c34caa1c1 Implement logging to file via dugong (#12) 2017-02-20 16:14:23 +00:00
Kegan Dougal
0bd3af8115 Add dugong to support writing to disk/rotations 2017-02-20 15:46:30 +00:00
Kegsay
f1bb59d24a Use gorilla/mux to route HTTP requests (#11)
* Add basic routing based on matched paths
* Make /sync and /send use the right API paths
2017-02-20 15:41:29 +00:00
Kegan Dougal
154110b7c2 Add gorilla/mux 2017-02-17 16:59:14 +00:00
Mark Haines
450e0f1570 Move the SQL into separate files for each table. (#7)
* Move partition offsets sql to a separate file

* Move event types sql to a separate file

* Move event state key sql to a separate file

* Move room sql to a separate file

* Move events sql to a separate file

* Move event json sql to a separate file

* Move state snapshot sql to a separate file

* Move state block sql to a separate file
2017-02-15 14:43:19 +00:00
Mark Haines
39264cbf4b Calculate and store the state at each event (#6)
* Calculate and store the state at each event

* Use type aliases for numeric IDs
2017-02-15 11:05:45 +00:00
Mark Haines
832f604b94 Fix go version 2017-02-10 11:01:12 +00:00
Mark Haines
309f2f0a5c Add .travis.yaml 2017-02-10 10:54:07 +00:00
Mark Haines
c72a44097f Move the auth checks to a separate file (#5) 2017-02-10 10:44:38 +00:00
Matthew Hodgson
a3e1774987 Update README.md 2017-02-09 23:50:18 +00:00
Mark Haines
fc4eb85379 Check that events pass authentication checks. (#4)
* Check that events pass authentication checks.

Record the list of events that the event passes authentication checks
against.
2017-02-09 16:48:14 +00:00
Mark Haines
600f56b4b8 Store outlier room events. (#3)
* Storage functions for event types
* Consume outlier room events
2017-02-07 17:20:05 +00:00
Mark Haines
a45a824f41 gb vendor fetch github.com/matrix-org/gomatrixserverlib/ 2017-02-06 14:56:16 +00:00
Kegsay
5b5c2091bf Merge pull request #2 from matrix-org/kegan/client-webserver
Add stub clientapi webserver with readers/writers packages
2017-02-03 16:33:41 +00:00
Kegan Dougal
b04dfae9c5 Add comments 2017-02-03 16:32:55 +00:00
Kegan Dougal
225cce9c77 Prefix /api as per standards 2017-02-03 16:28:11 +00:00
Kegan Dougal
c3d549f618 Merge branch 'master' into kegan/client-webserver 2017-02-03 16:12:28 +00:00
Kegan Dougal
f87f7676bb Update matrix-org/util 2017-02-03 16:12:18 +00:00
Kegan Dougal
aafaf6ede6 Add stub clientapi webserver with readers/writers packages
As per RL discussion with Mjark
2017-02-03 16:05:46 +00:00
Kegan Dougal
63d1bcd66a Add logrus, prometheus client and matrix-org/util 2017-02-03 15:41:25 +00:00
Mark Haines
41c6a3737e A kafkaesque room event consumer for the roomserver. (#1)
* A kafkaesque room event consumer for the roomserver.

Implement the main input loop for the roomserver.

It will receive events from a kafkaesque event source and track
where it is in the stream.

It currently does nothing with the events it consumes.
2017-02-03 13:52:32 +00:00
Mark Haines
a78e0cba8e Add kafka and postgres clients to vendor directory 2017-02-02 18:26:18 +00:00
Matthew Hodgson
2f965c6b33 typo 2017-01-30 23:11:20 +00:00
Mark Haines
855f8628e1 Add README 2017-01-20 18:25:51 +00:00