MCPcopy Create free account
hub / github.com/daodst/chat / getState

Function getState

federationapi/routing/state.go:97–150  ·  view source on GitHub ↗
(
	ctx context.Context,
	request *gomatrixserverlib.FederationRequest,
	rsAPI api.FederationRoomserverAPI,
	roomID string,
	eventID string,
)

Source from the content-addressed store, hash-verified

95}
96
97func getState(
98 ctx context.Context,
99 request *gomatrixserverlib.FederationRequest,
100 rsAPI api.FederationRoomserverAPI,
101 roomID string,
102 eventID string,
103) (stateEvents, authEvents []*gomatrixserverlib.HeaderedEvent, errRes *util.JSONResponse) {
104 // If we don't think we belong to this room then don't waste the effort
105 // responding to expensive requests for it.
106 if err := ErrorIfLocalServerNotInRoom(ctx, rsAPI, roomID); err != nil {
107 return nil, nil, err
108 }
109
110 event, resErr := fetchEvent(ctx, rsAPI, eventID)
111 if resErr != nil {
112 return nil, nil, resErr
113 }
114
115 if event.RoomID() != roomID {
116 return nil, nil, &util.JSONResponse{Code: http.StatusNotFound, JSON: jsonerror.NotFound("event does not belong to this room")}
117 }
118 resErr = allowedToSeeEvent(ctx, request.Origin(), rsAPI, eventID)
119 if resErr != nil {
120 return nil, nil, resErr
121 }
122
123 var response api.QueryStateAndAuthChainResponse
124 err := rsAPI.QueryStateAndAuthChain(
125 ctx,
126 &api.QueryStateAndAuthChainRequest{
127 RoomID: roomID,
128 PrevEventIDs: []string{eventID},
129 AuthEventIDs: event.AuthEventIDs(),
130 },
131 &response,
132 )
133 if err != nil {
134 resErr := util.ErrorResponse(err)
135 return nil, nil, &resErr
136 }
137
138 if response.IsRejected {
139 return nil, nil, &util.JSONResponse{
140 Code: http.StatusNotFound,
141 JSON: jsonerror.NotFound("Event not found"),
142 }
143 }
144
145 if !response.RoomExists {
146 return nil, nil, &util.JSONResponse{Code: http.StatusNotFound, JSON: nil}
147 }
148
149 return response.StateEvents, response.AuthChainEvents, nil
150}
151
152func getIDsFromEvent(events []*gomatrixserverlib.HeaderedEvent) []string {
153 IDs := make([]string, len(events))

Callers 2

GetStateFunction · 0.85
GetStateIDsFunction · 0.85

Calls 4

fetchEventFunction · 0.85
allowedToSeeEventFunction · 0.85

Tested by

no test coverage detected