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

Function GetEvent

clientapi/routing/getevent.go:39–138  ·  view source on GitHub ↗

GetEvent implements GET /_matrix/client/r0/rooms/{roomId}/event/{eventId} https://matrix.org/docs/spec/client_server/r0.4.0.html#get-matrix-client-r0-rooms-roomid-event-eventid

(
	req *http.Request,
	device *userapi.Device,
	roomID string,
	eventID string,
	cfg *config.ClientAPI,
	rsAPI api.ClientRoomserverAPI,
)

Source from the content-addressed store, hash-verified

37// GetEvent implements GET /_matrix/client/r0/rooms/{roomId}/event/{eventId}
38// https://matrix.org/docs/spec/client_server/r0.4.0.html#get-matrix-client-r0-rooms-roomid-event-eventid
39func GetEvent(
40 req *http.Request,
41 device *userapi.Device,
42 roomID string,
43 eventID string,
44 cfg *config.ClientAPI,
45 rsAPI api.ClientRoomserverAPI,
46) util.JSONResponse {
47 eventsReq := api.QueryEventsByIDRequest{
48 EventIDs: []string{eventID},
49 }
50 var eventsResp api.QueryEventsByIDResponse
51 err := rsAPI.QueryEventsByID(req.Context(), &eventsReq, &eventsResp)
52 if err != nil {
53 util.GetLogger(req.Context()).WithError(err).Error("queryAPI.QueryEventsByID failed")
54 return jsonerror.InternalServerError()
55 }
56
57 if len(eventsResp.Events) == 0 {
58 // Event not found locally
59 return util.JSONResponse{
60 Code: http.StatusNotFound,
61 JSON: jsonerror.NotFound("The event was not found or you do not have permission to read this event"),
62 }
63 }
64
65 requestedEvent := eventsResp.Events[0].Event
66
67 r := getEventRequest{
68 req: req,
69 device: device,
70 roomID: roomID,
71 eventID: eventID,
72 cfg: cfg,
73 requestedEvent: requestedEvent,
74 }
75
76 stateReq := api.QueryStateAfterEventsRequest{
77 RoomID: r.requestedEvent.RoomID(),
78 PrevEventIDs: r.requestedEvent.PrevEventIDs(),
79 StateToFetch: []gomatrixserverlib.StateKeyTuple{{
80 EventType: gomatrixserverlib.MRoomMember,
81 StateKey: device.UserID,
82 }},
83 }
84 var stateResp api.QueryStateAfterEventsResponse
85 if err := rsAPI.QueryStateAfterEvents(req.Context(), &stateReq, &stateResp); err != nil {
86 util.GetLogger(req.Context()).WithError(err).Error("queryAPI.QueryStateAfterEvents failed")
87 return jsonerror.InternalServerError()
88 }
89
90 if !stateResp.RoomExists {
91 util.GetLogger(req.Context()).Errorf("Expected to find room for event %s but failed", r.requestedEvent.EventID())
92 return jsonerror.InternalServerError()
93 }
94
95 if !stateResp.PrevEventsExist {
96 // Missing some events locally; stateResp.StateEvents unavailable.

Callers 1

SetupFunction · 0.70

Calls 6

IsInterestedInUserIDMethod · 0.95
ContextMethod · 0.80
PrevEventIDsMethod · 0.80
QueryEventsByIDMethod · 0.65
QueryStateAfterEventsMethod · 0.65
ErrorMethod · 0.45

Tested by

no test coverage detected