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

Function SetVisibility

clientapi/routing/directory.go:267–318  ·  view source on GitHub ↗

SetVisibility implements PUT /directory/list/room/{roomID} TODO: Allow admin users to edit the room visibility

(
	req *http.Request, rsAPI roomserverAPI.ClientRoomserverAPI, dev *userapi.Device,
	roomID string,
)

Source from the content-addressed store, hash-verified

265// SetVisibility implements PUT /directory/list/room/{roomID}
266// TODO: Allow admin users to edit the room visibility
267func SetVisibility(
268 req *http.Request, rsAPI roomserverAPI.ClientRoomserverAPI, dev *userapi.Device,
269 roomID string,
270) util.JSONResponse {
271 resErr := checkMemberInRoom(req.Context(), rsAPI, dev.UserID, roomID)
272 if resErr != nil {
273 return *resErr
274 }
275
276 queryEventsReq := roomserverAPI.QueryLatestEventsAndStateRequest{
277 RoomID: roomID,
278 StateToFetch: []gomatrixserverlib.StateKeyTuple{{
279 EventType: gomatrixserverlib.MRoomPowerLevels,
280 StateKey: "",
281 }},
282 }
283 var queryEventsRes roomserverAPI.QueryLatestEventsAndStateResponse
284 err := rsAPI.QueryLatestEventsAndState(req.Context(), &queryEventsReq, &queryEventsRes)
285 if err != nil || len(queryEventsRes.StateEvents) == 0 {
286 util.GetLogger(req.Context()).WithError(err).Error("could not query events from room")
287 return jsonerror.InternalServerError()
288 }
289
290 // NOTSPEC: Check if the user's power is greater than power required to change m.room.canonical_alias event
291 power, _ := gomatrixserverlib.NewPowerLevelContentFromEvent(queryEventsRes.StateEvents[0].Event)
292 if power.UserLevel(dev.UserID) < power.EventLevel(gomatrixserverlib.MRoomCanonicalAlias, true) {
293 return util.JSONResponse{
294 Code: http.StatusForbidden,
295 JSON: jsonerror.Forbidden("userID doesn't have power level to change visibility"),
296 }
297 }
298
299 var v roomVisibility
300 if reqErr := httputil.UnmarshalJSONRequest(req, &v); reqErr != nil {
301 return *reqErr
302 }
303
304 var publishRes roomserverAPI.PerformPublishResponse
305 rsAPI.PerformPublish(req.Context(), &roomserverAPI.PerformPublishRequest{
306 RoomID: roomID,
307 Visibility: v.Visibility,
308 }, &publishRes)
309 if publishRes.Error != nil {
310 util.GetLogger(req.Context()).WithError(publishRes.Error).Error("PerformPublish failed")
311 return publishRes.Error.JSONResponse()
312 }
313
314 return util.JSONResponse{
315 Code: http.StatusOK,
316 JSON: struct{}{},
317 }
318}

Callers 1

SetupFunction · 0.85

Calls 6

checkMemberInRoomFunction · 0.85
ContextMethod · 0.80
JSONResponseMethod · 0.80
PerformPublishMethod · 0.65
ErrorMethod · 0.45

Tested by

no test coverage detected