mirror of
https://github.com/matrix-org/dendrite.git
synced 2025-12-23 14:53:10 -06:00
Modify InputRoomEvents to no longer return an error
Errors do not serialise across HTTP boundaries in polylith mode, so instead set fields on the InputRoomEventsResponse. Add `Err()` function to make the API shape basically the same.
This commit is contained in:
parent
19fede75a9
commit
dae9e626a5
|
|
@ -215,7 +215,8 @@ func writeToRoomServer(input []string, roomserverURL string) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return x.InputRoomEvents(context.Background(), &request, &response)
|
x.InputRoomEvents(context.Background(), &request, &response)
|
||||||
|
return response.Err()
|
||||||
}
|
}
|
||||||
|
|
||||||
// testRoomserver is used to run integration tests against a single roomserver.
|
// testRoomserver is used to run integration tests against a single roomserver.
|
||||||
|
|
|
||||||
|
|
@ -89,12 +89,11 @@ func (t *testRoomserverAPI) InputRoomEvents(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
request *api.InputRoomEventsRequest,
|
request *api.InputRoomEventsRequest,
|
||||||
response *api.InputRoomEventsResponse,
|
response *api.InputRoomEventsResponse,
|
||||||
) error {
|
) {
|
||||||
t.inputRoomEvents = append(t.inputRoomEvents, request.InputRoomEvents...)
|
t.inputRoomEvents = append(t.inputRoomEvents, request.InputRoomEvents...)
|
||||||
for _, ire := range request.InputRoomEvents {
|
for _, ire := range request.InputRoomEvents {
|
||||||
fmt.Println("InputRoomEvents: ", ire.Event.EventID())
|
fmt.Println("InputRoomEvents: ", ire.Event.EventID())
|
||||||
}
|
}
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *testRoomserverAPI) PerformInvite(
|
func (t *testRoomserverAPI) PerformInvite(
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ type RoomserverInternalAPI interface {
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
request *InputRoomEventsRequest,
|
request *InputRoomEventsRequest,
|
||||||
response *InputRoomEventsResponse,
|
response *InputRoomEventsResponse,
|
||||||
) error
|
)
|
||||||
|
|
||||||
PerformInvite(
|
PerformInvite(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
|
|
|
||||||
|
|
@ -23,10 +23,10 @@ func (t *RoomserverInternalAPITrace) InputRoomEvents(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
req *InputRoomEventsRequest,
|
req *InputRoomEventsRequest,
|
||||||
res *InputRoomEventsResponse,
|
res *InputRoomEventsResponse,
|
||||||
) error {
|
) {
|
||||||
err := t.Impl.InputRoomEvents(ctx, req, res)
|
t.Impl.InputRoomEvents(ctx, req, res)
|
||||||
util.GetLogger(ctx).WithError(err).Infof("InputRoomEvents req=%+v res=%+v", js(req), js(res))
|
util.GetLogger(ctx).Infof("InputRoomEvents req=%+v res=%+v", js(req), js(res))
|
||||||
return err
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *RoomserverInternalAPITrace) PerformInvite(
|
func (t *RoomserverInternalAPITrace) PerformInvite(
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,8 @@
|
||||||
package api
|
package api
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/matrix-org/gomatrixserverlib"
|
"github.com/matrix-org/gomatrixserverlib"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -87,4 +89,18 @@ type InputRoomEventsRequest struct {
|
||||||
|
|
||||||
// InputRoomEventsResponse is a response to InputRoomEvents
|
// InputRoomEventsResponse is a response to InputRoomEvents
|
||||||
type InputRoomEventsResponse struct {
|
type InputRoomEventsResponse struct {
|
||||||
|
ErrMsg string // set if there was any error
|
||||||
|
NotAllowed bool // true if an event in the input was not allowed.
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *InputRoomEventsResponse) Err() error {
|
||||||
|
if r.ErrMsg == "" {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
if r.NotAllowed {
|
||||||
|
return &gomatrixserverlib.NotAllowed{
|
||||||
|
Message: r.ErrMsg,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return fmt.Errorf("InputRoomEventsResponse: %s", r.ErrMsg)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -187,7 +187,8 @@ func SendInputRoomEvents(
|
||||||
) error {
|
) error {
|
||||||
request := InputRoomEventsRequest{InputRoomEvents: ires}
|
request := InputRoomEventsRequest{InputRoomEvents: ires}
|
||||||
var response InputRoomEventsResponse
|
var response InputRoomEventsResponse
|
||||||
return rsAPI.InputRoomEvents(ctx, &request, &response)
|
rsAPI.InputRoomEvents(ctx, &request, &response)
|
||||||
|
return response.Err()
|
||||||
}
|
}
|
||||||
|
|
||||||
// SendInvite event to the roomserver.
|
// SendInvite event to the roomserver.
|
||||||
|
|
|
||||||
|
|
@ -271,5 +271,6 @@ func (r *RoomserverInternalAPI) sendUpdatedAliasesEvent(
|
||||||
var inputRes api.InputRoomEventsResponse
|
var inputRes api.InputRoomEventsResponse
|
||||||
|
|
||||||
// Send the request
|
// Send the request
|
||||||
return r.InputRoomEvents(ctx, &inputReq, &inputRes)
|
r.InputRoomEvents(ctx, &inputReq, &inputRes)
|
||||||
|
return inputRes.Err()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -110,7 +110,7 @@ func (r *Inputer) InputRoomEvents(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
request *api.InputRoomEventsRequest,
|
request *api.InputRoomEventsRequest,
|
||||||
response *api.InputRoomEventsResponse,
|
response *api.InputRoomEventsResponse,
|
||||||
) error {
|
) {
|
||||||
// Create a wait group. Each task that we dispatch will call Done on
|
// Create a wait group. Each task that we dispatch will call Done on
|
||||||
// this wait group so that we know when all of our events have been
|
// this wait group so that we know when all of our events have been
|
||||||
// processed.
|
// processed.
|
||||||
|
|
@ -156,8 +156,11 @@ func (r *Inputer) InputRoomEvents(
|
||||||
// that back to the caller.
|
// that back to the caller.
|
||||||
for _, task := range tasks {
|
for _, task := range tasks {
|
||||||
if task.err != nil {
|
if task.err != nil {
|
||||||
return task.err
|
response.ErrMsg = task.err.Error()
|
||||||
|
_, rejected := task.err.(*gomatrixserverlib.NotAllowed)
|
||||||
|
response.NotAllowed = rejected
|
||||||
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -183,7 +183,8 @@ func (r *Inviter) PerformInvite(
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
inputRes := &api.InputRoomEventsResponse{}
|
inputRes := &api.InputRoomEventsResponse{}
|
||||||
if err = r.Inputer.InputRoomEvents(context.Background(), inputReq, inputRes); err != nil {
|
r.Inputer.InputRoomEvents(context.Background(), inputReq, inputRes)
|
||||||
|
if err = inputRes.Err(); err != nil {
|
||||||
return nil, fmt.Errorf("r.InputRoomEvents: %w", err)
|
return nil, fmt.Errorf("r.InputRoomEvents: %w", err)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -247,7 +247,8 @@ func (r *Joiner) performJoinRoomByID(
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
inputRes := api.InputRoomEventsResponse{}
|
inputRes := api.InputRoomEventsResponse{}
|
||||||
if err = r.Inputer.InputRoomEvents(ctx, &inputReq, &inputRes); err != nil {
|
r.Inputer.InputRoomEvents(ctx, &inputReq, &inputRes)
|
||||||
|
if err = inputRes.Err(); err != nil {
|
||||||
var notAllowed *gomatrixserverlib.NotAllowed
|
var notAllowed *gomatrixserverlib.NotAllowed
|
||||||
if errors.As(err, ¬Allowed) {
|
if errors.As(err, ¬Allowed) {
|
||||||
return "", &api.PerformError{
|
return "", &api.PerformError{
|
||||||
|
|
|
||||||
|
|
@ -139,7 +139,8 @@ func (r *Leaver) performLeaveRoomByID(
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
inputRes := api.InputRoomEventsResponse{}
|
inputRes := api.InputRoomEventsResponse{}
|
||||||
if err = r.Inputer.InputRoomEvents(ctx, &inputReq, &inputRes); err != nil {
|
r.Inputer.InputRoomEvents(ctx, &inputReq, &inputRes)
|
||||||
|
if err = inputRes.Err(); err != nil {
|
||||||
return nil, fmt.Errorf("r.InputRoomEvents: %w", err)
|
return nil, fmt.Errorf("r.InputRoomEvents: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -149,12 +149,15 @@ func (h *httpRoomserverInternalAPI) InputRoomEvents(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
request *api.InputRoomEventsRequest,
|
request *api.InputRoomEventsRequest,
|
||||||
response *api.InputRoomEventsResponse,
|
response *api.InputRoomEventsResponse,
|
||||||
) error {
|
) {
|
||||||
span, ctx := opentracing.StartSpanFromContext(ctx, "InputRoomEvents")
|
span, ctx := opentracing.StartSpanFromContext(ctx, "InputRoomEvents")
|
||||||
defer span.Finish()
|
defer span.Finish()
|
||||||
|
|
||||||
apiURL := h.roomserverURL + RoomserverInputRoomEventsPath
|
apiURL := h.roomserverURL + RoomserverInputRoomEventsPath
|
||||||
return httputil.PostJSON(ctx, span, h.httpClient, apiURL, request, response)
|
err := httputil.PostJSON(ctx, span, h.httpClient, apiURL, request, response)
|
||||||
|
if err != nil {
|
||||||
|
response.ErrMsg = err.Error()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *httpRoomserverInternalAPI) PerformInvite(
|
func (h *httpRoomserverInternalAPI) PerformInvite(
|
||||||
|
|
|
||||||
|
|
@ -20,9 +20,7 @@ func AddRoutes(r api.RoomserverInternalAPI, internalAPIMux *mux.Router) {
|
||||||
if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
|
if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
|
||||||
return util.MessageResponse(http.StatusBadRequest, err.Error())
|
return util.MessageResponse(http.StatusBadRequest, err.Error())
|
||||||
}
|
}
|
||||||
if err := r.InputRoomEvents(req.Context(), &request, &response); err != nil {
|
r.InputRoomEvents(req.Context(), &request, &response)
|
||||||
return util.ErrorResponse(err)
|
|
||||||
}
|
|
||||||
return util.JSONResponse{Code: http.StatusOK, JSON: &response}
|
return util.JSONResponse{Code: http.StatusOK, JSON: &response}
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue