mirror of
https://github.com/matrix-org/dendrite.git
synced 2025-12-26 00:03:09 -06:00
Add internal api handler
This commit is contained in:
parent
b825671362
commit
45573b1b46
|
|
@ -147,6 +147,9 @@ type RoomserverInternalAPI interface {
|
||||||
response *PerformBackfillResponse,
|
response *PerformBackfillResponse,
|
||||||
) error
|
) error
|
||||||
|
|
||||||
|
// PerformForget forgets a rooms history for a specific user
|
||||||
|
PerformForget(ctx context.Context, req *PerformForgetRequest, resp *PerformForgetResponse) error
|
||||||
|
|
||||||
// Asks for the default room version as preferred by the server.
|
// Asks for the default room version as preferred by the server.
|
||||||
QueryRoomVersionCapabilities(
|
QueryRoomVersionCapabilities(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
|
|
|
||||||
|
|
@ -194,6 +194,16 @@ func (t *RoomserverInternalAPITrace) PerformBackfill(
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (t *RoomserverInternalAPITrace) PerformForget(
|
||||||
|
ctx context.Context,
|
||||||
|
req *PerformForgetRequest,
|
||||||
|
res *PerformForgetResponse,
|
||||||
|
) error {
|
||||||
|
err := t.Impl.PerformForget(ctx, req, res)
|
||||||
|
util.GetLogger(ctx).WithError(err).Infof("PerformForget req=%+v res=%+v", js(req), js(res))
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
func (t *RoomserverInternalAPITrace) QueryRoomVersionCapabilities(
|
func (t *RoomserverInternalAPITrace) QueryRoomVersionCapabilities(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
req *QueryRoomVersionCapabilitiesRequest,
|
req *QueryRoomVersionCapabilitiesRequest,
|
||||||
|
|
|
||||||
|
|
@ -159,3 +159,11 @@ type PerformPublishResponse struct {
|
||||||
// If non-nil, the publish request failed. Contains more information why it failed.
|
// If non-nil, the publish request failed. Contains more information why it failed.
|
||||||
Error *PerformError
|
Error *PerformError
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PerformForgetRequest is a request to PerformForget
|
||||||
|
type PerformForgetRequest struct {
|
||||||
|
RoomID string `json:"room_id"`
|
||||||
|
UserID string `json:"user_id"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type PerformForgetResponse struct{}
|
||||||
|
|
|
||||||
|
|
@ -140,7 +140,9 @@ type QueryMembershipForUserResponse struct {
|
||||||
// True if the user is in room.
|
// True if the user is in room.
|
||||||
IsInRoom bool `json:"is_in_room"`
|
IsInRoom bool `json:"is_in_room"`
|
||||||
// The current membership
|
// The current membership
|
||||||
Membership string
|
Membership string `json:"membership"`
|
||||||
|
// True if the user asked to forget this room.
|
||||||
|
IsRoomForgotten bool `json:"is_room_forgotten"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// QueryMembershipsForRoomRequest is a request to QueryMembershipsForRoom
|
// QueryMembershipsForRoomRequest is a request to QueryMembershipsForRoom
|
||||||
|
|
@ -160,6 +162,8 @@ type QueryMembershipsForRoomResponse struct {
|
||||||
// True if the user has been in room before and has either stayed in it or
|
// True if the user has been in room before and has either stayed in it or
|
||||||
// left it.
|
// left it.
|
||||||
HasBeenInRoom bool `json:"has_been_in_room"`
|
HasBeenInRoom bool `json:"has_been_in_room"`
|
||||||
|
// True if the user asked to forget this room.
|
||||||
|
IsRoomForgotten bool `json:"is_room_forgotten"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// QueryServerJoinedToRoomRequest is a request to QueryServerJoinedToRoom
|
// QueryServerJoinedToRoomRequest is a request to QueryServerJoinedToRoom
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@ type RoomserverInternalAPI struct {
|
||||||
*perform.Leaver
|
*perform.Leaver
|
||||||
*perform.Publisher
|
*perform.Publisher
|
||||||
*perform.Backfiller
|
*perform.Backfiller
|
||||||
|
*perform.Forgetter
|
||||||
DB storage.Database
|
DB storage.Database
|
||||||
Cfg *config.RoomServer
|
Cfg *config.RoomServer
|
||||||
Producer sarama.SyncProducer
|
Producer sarama.SyncProducer
|
||||||
|
|
@ -112,6 +113,9 @@ func (r *RoomserverInternalAPI) SetFederationSenderAPI(fsAPI fsAPI.FederationSen
|
||||||
// than trying random servers
|
// than trying random servers
|
||||||
PreferServers: r.PerspectiveServerNames,
|
PreferServers: r.PerspectiveServerNames,
|
||||||
}
|
}
|
||||||
|
r.Forgetter = &perform.Forgetter{
|
||||||
|
DB: r.DB,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *RoomserverInternalAPI) PerformInvite(
|
func (r *RoomserverInternalAPI) PerformInvite(
|
||||||
|
|
@ -143,3 +147,11 @@ func (r *RoomserverInternalAPI) PerformLeave(
|
||||||
}
|
}
|
||||||
return r.WriteOutputEvents(req.RoomID, outputEvents)
|
return r.WriteOutputEvents(req.RoomID, outputEvents)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (r *RoomserverInternalAPI) PerformForget(
|
||||||
|
ctx context.Context,
|
||||||
|
req *api.PerformForgetRequest,
|
||||||
|
resp *api.PerformForgetResponse,
|
||||||
|
) error {
|
||||||
|
return r.DB.ForgetRoom(ctx, req.UserID, req.RoomID, true)
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -86,7 +86,7 @@ func (r *Inviter) PerformInvite(
|
||||||
|
|
||||||
var isAlreadyJoined bool
|
var isAlreadyJoined bool
|
||||||
if info != nil {
|
if info != nil {
|
||||||
_, isAlreadyJoined, err = r.DB.GetMembership(ctx, info.RoomNID, *event.StateKey())
|
_, isAlreadyJoined, _, err = r.DB.GetMembership(ctx, info.RoomNID, *event.StateKey())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("r.DB.GetMembership: %w", err)
|
return nil, fmt.Errorf("r.DB.GetMembership: %w", err)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -204,11 +204,13 @@ func (r *Queryer) QueryMembershipForUser(
|
||||||
return fmt.Errorf("QueryMembershipForUser: unknown room %s", request.RoomID)
|
return fmt.Errorf("QueryMembershipForUser: unknown room %s", request.RoomID)
|
||||||
}
|
}
|
||||||
|
|
||||||
membershipEventNID, stillInRoom, err := r.DB.GetMembership(ctx, info.RoomNID, request.UserID)
|
membershipEventNID, stillInRoom, isRoomforgotten, err := r.DB.GetMembership(ctx, info.RoomNID, request.UserID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
response.IsRoomForgotten = isRoomforgotten
|
||||||
|
|
||||||
if membershipEventNID == 0 {
|
if membershipEventNID == 0 {
|
||||||
response.HasBeenInRoom = false
|
response.HasBeenInRoom = false
|
||||||
return nil
|
return nil
|
||||||
|
|
@ -241,11 +243,13 @@ func (r *Queryer) QueryMembershipsForRoom(
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
membershipEventNID, stillInRoom, err := r.DB.GetMembership(ctx, info.RoomNID, request.Sender)
|
membershipEventNID, stillInRoom, isRoomforgotten, err := r.DB.GetMembership(ctx, info.RoomNID, request.Sender)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
response.IsRoomForgotten = isRoomforgotten
|
||||||
|
|
||||||
if membershipEventNID == 0 {
|
if membershipEventNID == 0 {
|
||||||
response.HasBeenInRoom = false
|
response.HasBeenInRoom = false
|
||||||
response.JoinEvents = nil
|
response.JoinEvents = nil
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,7 @@ const (
|
||||||
RoomserverPerformLeavePath = "/roomserver/performLeave"
|
RoomserverPerformLeavePath = "/roomserver/performLeave"
|
||||||
RoomserverPerformBackfillPath = "/roomserver/performBackfill"
|
RoomserverPerformBackfillPath = "/roomserver/performBackfill"
|
||||||
RoomserverPerformPublishPath = "/roomserver/performPublish"
|
RoomserverPerformPublishPath = "/roomserver/performPublish"
|
||||||
|
RoomserverPerformForgetPath = "/roomserver/performForget"
|
||||||
|
|
||||||
// Query operations
|
// Query operations
|
||||||
RoomserverQueryLatestEventsAndStatePath = "/roomserver/queryLatestEventsAndState"
|
RoomserverQueryLatestEventsAndStatePath = "/roomserver/queryLatestEventsAndState"
|
||||||
|
|
@ -492,3 +493,12 @@ func (h *httpRoomserverInternalAPI) QueryServerBannedFromRoom(
|
||||||
apiURL := h.roomserverURL + RoomserverQueryServerBannedFromRoomPath
|
apiURL := h.roomserverURL + RoomserverQueryServerBannedFromRoomPath
|
||||||
return httputil.PostJSON(ctx, span, h.httpClient, apiURL, req, res)
|
return httputil.PostJSON(ctx, span, h.httpClient, apiURL, req, res)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (h *httpRoomserverInternalAPI) PerformForget(ctx context.Context, req *api.PerformForgetRequest, res *api.PerformForgetResponse) error {
|
||||||
|
span, ctx := opentracing.StartSpanFromContext(ctx, "PerformForget")
|
||||||
|
defer span.Finish()
|
||||||
|
|
||||||
|
apiURL := h.roomserverURL + RoomserverPerformForgetPath
|
||||||
|
return httputil.PostJSON(ctx, span, h.httpClient, apiURL, req, res)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -251,6 +251,20 @@ func AddRoutes(r api.RoomserverInternalAPI, internalAPIMux *mux.Router) {
|
||||||
return util.JSONResponse{Code: http.StatusOK, JSON: &response}
|
return util.JSONResponse{Code: http.StatusOK, JSON: &response}
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
|
internalAPIMux.Handle(
|
||||||
|
RoomserverPerformForgetPath,
|
||||||
|
httputil.MakeInternalAPI("PerformForget", func(req *http.Request) util.JSONResponse {
|
||||||
|
var request api.PerformForgetRequest
|
||||||
|
var response api.PerformForgetResponse
|
||||||
|
if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
|
||||||
|
return util.ErrorResponse(err)
|
||||||
|
}
|
||||||
|
if err := r.PerformForget(req.Context(), &request, &response); err != nil {
|
||||||
|
return util.ErrorResponse(err)
|
||||||
|
}
|
||||||
|
return util.JSONResponse{Code: http.StatusOK, JSON: &response}
|
||||||
|
}),
|
||||||
|
)
|
||||||
internalAPIMux.Handle(
|
internalAPIMux.Handle(
|
||||||
RoomserverQueryRoomVersionCapabilitiesPath,
|
RoomserverQueryRoomVersionCapabilitiesPath,
|
||||||
httputil.MakeInternalAPI("QueryRoomVersionCapabilities", func(req *http.Request) util.JSONResponse {
|
httputil.MakeInternalAPI("QueryRoomVersionCapabilities", func(req *http.Request) util.JSONResponse {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue