mirror of
https://github.com/matrix-org/dendrite.git
synced 2025-12-21 22:03:10 -06:00
Restore PerformError on rsAPI.PerformInvite
This commit is contained in:
parent
e502d6b6d1
commit
29d091b3a2
|
|
@ -402,15 +402,23 @@ func createRoom(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Send the invite event to the roomserver.
|
// Send the invite event to the roomserver.
|
||||||
if err := roomserverAPI.SendInvite(
|
err = roomserverAPI.SendInvite(
|
||||||
req.Context(), rsAPI,
|
req.Context(), rsAPI,
|
||||||
inviteEvent.Headered(roomVersion),
|
inviteEvent.Headered(roomVersion),
|
||||||
strippedState, // invite room state
|
strippedState, // invite room state
|
||||||
cfg.Matrix.ServerName, // send as server
|
cfg.Matrix.ServerName, // send as server
|
||||||
nil, // transaction ID
|
nil, // transaction ID
|
||||||
); err != nil {
|
)
|
||||||
util.GetLogger(req.Context()).WithError(err).Error("SendInvite failed")
|
switch e := err.(type) {
|
||||||
return jsonerror.InternalServerError()
|
case *roomserverAPI.PerformError:
|
||||||
|
return e.JSONResponse()
|
||||||
|
case nil:
|
||||||
|
default:
|
||||||
|
util.GetLogger(req.Context()).WithError(err).Error("roomserverAPI.SendInvite failed")
|
||||||
|
return util.JSONResponse{
|
||||||
|
Code: http.StatusInternalServerError,
|
||||||
|
JSON: jsonerror.InternalServerError(),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -221,17 +221,21 @@ func SendInvite(
|
||||||
cfg.Matrix.ServerName,
|
cfg.Matrix.ServerName,
|
||||||
nil,
|
nil,
|
||||||
)
|
)
|
||||||
if err != nil {
|
switch e := err.(type) {
|
||||||
|
case *roomserverAPI.PerformError:
|
||||||
|
return e.JSONResponse()
|
||||||
|
case nil:
|
||||||
|
return util.JSONResponse{
|
||||||
|
Code: http.StatusOK,
|
||||||
|
JSON: struct{}{},
|
||||||
|
}
|
||||||
|
default:
|
||||||
util.GetLogger(req.Context()).WithError(err).Error("roomserverAPI.SendInvite failed")
|
util.GetLogger(req.Context()).WithError(err).Error("roomserverAPI.SendInvite failed")
|
||||||
return util.JSONResponse{
|
return util.JSONResponse{
|
||||||
Code: http.StatusForbidden,
|
Code: http.StatusInternalServerError,
|
||||||
JSON: jsonerror.Forbidden(err.Error()),
|
JSON: jsonerror.InternalServerError(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return util.JSONResponse{
|
|
||||||
Code: http.StatusOK,
|
|
||||||
JSON: struct{}{},
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func buildMembershipEvent(
|
func buildMembershipEvent(
|
||||||
|
|
|
||||||
|
|
@ -143,17 +143,24 @@ func processInvite(
|
||||||
)
|
)
|
||||||
|
|
||||||
// Add the invite event to the roomserver.
|
// Add the invite event to the roomserver.
|
||||||
if err := api.SendInvite(
|
err = api.SendInvite(
|
||||||
ctx, rsAPI, signedEvent.Headered(roomVer), strippedState, api.DoNotSendToOtherServers, nil,
|
ctx, rsAPI, signedEvent.Headered(roomVer), strippedState, api.DoNotSendToOtherServers, nil,
|
||||||
); err != nil {
|
)
|
||||||
util.GetLogger(ctx).WithError(err).Error("producer.SendInvite failed")
|
switch e := err.(type) {
|
||||||
return jsonerror.InternalServerError()
|
case *api.PerformError:
|
||||||
}
|
return e.JSONResponse()
|
||||||
|
case nil:
|
||||||
// Return the signed event to the originating server, it should then tell
|
// Return the signed event to the originating server, it should then tell
|
||||||
// the other servers in the room that we have been invited.
|
// the other servers in the room that we have been invited.
|
||||||
return util.JSONResponse{
|
return util.JSONResponse{
|
||||||
Code: http.StatusOK,
|
Code: http.StatusOK,
|
||||||
JSON: gomatrixserverlib.RespInviteV2{Event: signedEvent},
|
JSON: gomatrixserverlib.RespInviteV2{Event: signedEvent},
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
util.GetLogger(ctx).WithError(err).Error("api.SendInvite failed")
|
||||||
|
return util.JSONResponse{
|
||||||
|
Code: http.StatusInternalServerError,
|
||||||
|
JSON: jsonerror.InternalServerError(),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -105,6 +105,7 @@ type PerformInviteRequest struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
type PerformInviteResponse struct {
|
type PerformInviteResponse struct {
|
||||||
|
Error *PerformError `json:"error"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// PerformBackfillRequest is a request to PerformBackfill.
|
// PerformBackfillRequest is a request to PerformBackfill.
|
||||||
|
|
|
||||||
|
|
@ -112,6 +112,9 @@ func SendInvite(
|
||||||
}
|
}
|
||||||
response := &PerformInviteResponse{}
|
response := &PerformInviteResponse{}
|
||||||
if err := rsAPI.PerformInvite(ctx, request, response); err != nil {
|
if err := rsAPI.PerformInvite(ctx, request, response); err != nil {
|
||||||
|
if response.Error != nil {
|
||||||
|
return response.Error
|
||||||
|
}
|
||||||
return fmt.Errorf("rsAPI.PerformInvite: %w", err)
|
return fmt.Errorf("rsAPI.PerformInvite: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,6 @@ package internal
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
federationSenderAPI "github.com/matrix-org/dendrite/federationsender/api"
|
federationSenderAPI "github.com/matrix-org/dendrite/federationsender/api"
|
||||||
|
|
@ -48,17 +47,17 @@ func (r *RoomserverInternalAPI) PerformInvite(
|
||||||
}
|
}
|
||||||
if len(inviteState) == 0 {
|
if len(inviteState) == 0 {
|
||||||
if err := event.SetUnsignedField("invite_room_state", struct{}{}); err != nil {
|
if err := event.SetUnsignedField("invite_room_state", struct{}{}); err != nil {
|
||||||
return err
|
return fmt.Errorf("event.SetUnsignedField: %w", err)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if err := event.SetUnsignedField("invite_room_state", inviteState); err != nil {
|
if err := event.SetUnsignedField("invite_room_state", inviteState); err != nil {
|
||||||
return err
|
return fmt.Errorf("event.SetUnsignedField: %w", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
updater, err := r.DB.MembershipUpdater(ctx, roomID, targetUserID, isTargetLocal, req.RoomVersion)
|
updater, err := r.DB.MembershipUpdater(ctx, roomID, targetUserID, isTargetLocal, req.RoomVersion)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return fmt.Errorf("r.DB.MembershipUpdater: %w", err)
|
||||||
}
|
}
|
||||||
succeeded := false
|
succeeded := false
|
||||||
defer func() {
|
defer func() {
|
||||||
|
|
@ -96,7 +95,11 @@ func (r *RoomserverInternalAPI) PerformInvite(
|
||||||
// For now we will implement option 2. Since in the abesence of a retry
|
// For now we will implement option 2. Since in the abesence of a retry
|
||||||
// mechanism it will be equivalent to option 1, and we don't have a
|
// mechanism it will be equivalent to option 1, and we don't have a
|
||||||
// signalling mechanism to implement option 3.
|
// signalling mechanism to implement option 3.
|
||||||
return errors.New("The user is already in the room")
|
res.Error = &api.PerformError{
|
||||||
|
Code: api.PerformErrorNoOperation,
|
||||||
|
Msg: "User is already joined to room",
|
||||||
|
}
|
||||||
|
return res.Error
|
||||||
}
|
}
|
||||||
|
|
||||||
if isOriginLocal {
|
if isOriginLocal {
|
||||||
|
|
@ -108,10 +111,11 @@ func (r *RoomserverInternalAPI) PerformInvite(
|
||||||
"processInviteEvent.checkAuthEvents failed for event",
|
"processInviteEvent.checkAuthEvents failed for event",
|
||||||
)
|
)
|
||||||
if _, ok := err.(*gomatrixserverlib.NotAllowed); ok {
|
if _, ok := err.(*gomatrixserverlib.NotAllowed); ok {
|
||||||
return &api.PerformError{
|
res.Error = &api.PerformError{
|
||||||
Msg: err.Error(),
|
Msg: err.Error(),
|
||||||
Code: api.PerformErrorNotAllowed,
|
Code: api.PerformErrorNotAllowed,
|
||||||
}
|
}
|
||||||
|
return fmt.Errorf("checkAuthEvents: %w", err)
|
||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
@ -128,6 +132,10 @@ func (r *RoomserverInternalAPI) PerformInvite(
|
||||||
}
|
}
|
||||||
fsRes := &federationSenderAPI.PerformInviteResponse{}
|
fsRes := &federationSenderAPI.PerformInviteResponse{}
|
||||||
if err = r.fsAPI.PerformInvite(ctx, fsReq, fsRes); err != nil {
|
if err = r.fsAPI.PerformInvite(ctx, fsReq, fsRes); err != nil {
|
||||||
|
res.Error = &api.PerformError{
|
||||||
|
Msg: err.Error(),
|
||||||
|
Code: api.PerformErrorNoOperation,
|
||||||
|
}
|
||||||
return fmt.Errorf("r.fsAPI.PerformInvite: %w", err)
|
return fmt.Errorf("r.fsAPI.PerformInvite: %w", err)
|
||||||
}
|
}
|
||||||
event = fsRes.SignedEvent
|
event = fsRes.SignedEvent
|
||||||
|
|
@ -137,11 +145,11 @@ func (r *RoomserverInternalAPI) PerformInvite(
|
||||||
unwrapped := event.Unwrap()
|
unwrapped := event.Unwrap()
|
||||||
outputUpdates, err := updateToInviteMembership(updater, &unwrapped, nil, req.Event.RoomVersion)
|
outputUpdates, err := updateToInviteMembership(updater, &unwrapped, nil, req.Event.RoomVersion)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return fmt.Errorf("updateToInviteMembership: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = r.WriteOutputEvents(roomID, outputUpdates); err != nil {
|
if err = r.WriteOutputEvents(roomID, outputUpdates); err != nil {
|
||||||
return err
|
return fmt.Errorf("r.WriteOutputEvents: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
succeeded = true
|
succeeded = true
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue