aboutsummaryrefslogtreecommitdiff
path: root/roomserver/api/perform.go
diff options
context:
space:
mode:
authorNeil Alexander <neilalexander@users.noreply.github.com>2020-05-04 13:53:47 +0100
committerGitHub <noreply@github.com>2020-05-04 13:53:47 +0100
commit5c894efd0ee67bf911b9c3b5428a61ddc58819de (patch)
tree3b576827ad15d26eaa09423492231c00893dec54 /roomserver/api/perform.go
parent36bbb255614d289a3417194d4d2ac129e339f531 (diff)
Roomserver perform join (#1001)
* Add PerformJoin template * Try roomserver perform join * Send correct server name to FS API * Pass through content, try to handle multiple server names * Fix local server checks * Don't refer to non-existent error * Add directory lookups of aliases * Remove unneeded parameters * Don't repeat join events into the roomserver * Unmarshal the content, that would help * Check if the user is already in the room in the fedeationapi too * Return incompatible room version error * Use Membership, don't try more servers than needed * Review comments, make FS API take list of servernames, dedupe them, break out of loop properly on success * Tweaks
Diffstat (limited to 'roomserver/api/perform.go')
-rw-r--r--roomserver/api/perform.go59
1 files changed, 59 insertions, 0 deletions
diff --git a/roomserver/api/perform.go b/roomserver/api/perform.go
new file mode 100644
index 00000000..e60c078b
--- /dev/null
+++ b/roomserver/api/perform.go
@@ -0,0 +1,59 @@
+package api
+
+import (
+ "context"
+
+ commonHTTP "github.com/matrix-org/dendrite/common/http"
+ "github.com/matrix-org/gomatrixserverlib"
+ "github.com/opentracing/opentracing-go"
+)
+
+const (
+ // RoomserverPerformJoinPath is the HTTP path for the PerformJoin API.
+ RoomserverPerformJoinPath = "/api/roomserver/performJoin"
+
+ // RoomserverPerformLeavePath is the HTTP path for the PerformLeave API.
+ RoomserverPerformLeavePath = "/api/roomserver/performLeave"
+)
+
+type PerformJoinRequest struct {
+ RoomIDOrAlias string `json:"room_id_or_alias"`
+ UserID string `json:"user_id"`
+ Content map[string]interface{} `json:"content"`
+ ServerNames []gomatrixserverlib.ServerName `json:"server_names"`
+}
+
+type PerformJoinResponse struct {
+}
+
+func (h *httpRoomserverInternalAPI) PerformJoin(
+ ctx context.Context,
+ request *PerformJoinRequest,
+ response *PerformJoinResponse,
+) error {
+ span, ctx := opentracing.StartSpanFromContext(ctx, "PerformJoin")
+ defer span.Finish()
+
+ apiURL := h.roomserverURL + RoomserverPerformJoinPath
+ return commonHTTP.PostJSON(ctx, span, h.httpClient, apiURL, request, response)
+}
+
+type PerformLeaveRequest struct {
+ RoomID string `json:"room_id"`
+ UserID string `json:"user_id"`
+}
+
+type PerformLeaveResponse struct {
+}
+
+func (h *httpRoomserverInternalAPI) PerformLeave(
+ ctx context.Context,
+ request *PerformLeaveRequest,
+ response *PerformLeaveResponse,
+) error {
+ span, ctx := opentracing.StartSpanFromContext(ctx, "PerformLeave")
+ defer span.Finish()
+
+ apiURL := h.roomserverURL + RoomserverPerformLeavePath
+ return commonHTTP.PostJSON(ctx, span, h.httpClient, apiURL, request, response)
+}