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

Method RemoveRoomAlias

roomserver/internal/alias.go:135–233  ·  view source on GitHub ↗

RemoveRoomAlias implements alias.RoomserverInternalAPI

(
	ctx context.Context,
	request *api.RemoveRoomAliasRequest,
	response *api.RemoveRoomAliasResponse,
)

Source from the content-addressed store, hash-verified

133
134// RemoveRoomAlias implements alias.RoomserverInternalAPI
135func (r *RoomserverInternalAPI) RemoveRoomAlias(
136 ctx context.Context,
137 request *api.RemoveRoomAliasRequest,
138 response *api.RemoveRoomAliasResponse,
139) error {
140 roomID, err := r.DB.GetRoomIDForAlias(ctx, request.Alias)
141 if err != nil {
142 return fmt.Errorf("r.DB.GetRoomIDForAlias: %w", err)
143 }
144 if roomID == "" {
145 response.Found = false
146 response.Removed = false
147 return nil
148 }
149
150 response.Found = true
151 creatorID, err := r.DB.GetCreatorIDForAlias(ctx, request.Alias)
152 if err != nil {
153 return fmt.Errorf("r.DB.GetCreatorIDForAlias: %w", err)
154 }
155
156 if creatorID != request.UserID {
157 var plEvent *gomatrixserverlib.HeaderedEvent
158 var pls *gomatrixserverlib.PowerLevelContent
159
160 plEvent, err = r.DB.GetStateEvent(ctx, roomID, gomatrixserverlib.MRoomPowerLevels, "")
161 if err != nil {
162 return fmt.Errorf("r.DB.GetStateEvent: %w", err)
163 }
164
165 pls, err = plEvent.PowerLevels()
166 if err != nil {
167 return fmt.Errorf("plEvent.PowerLevels: %w", err)
168 }
169
170 if pls.UserLevel(request.UserID) < pls.EventLevel(gomatrixserverlib.MRoomCanonicalAlias, true) {
171 response.Removed = false
172 return nil
173 }
174 }
175
176 ev, err := r.DB.GetStateEvent(ctx, roomID, gomatrixserverlib.MRoomCanonicalAlias, "")
177 if err != nil && err != sql.ErrNoRows {
178 return err
179 } else if ev != nil {
180 stateAlias := gjson.GetBytes(ev.Content(), "alias").Str
181 // the alias to remove is currently set as the canonical alias, remove it
182 if stateAlias == request.Alias {
183 res, err := sjson.DeleteBytes(ev.Content(), "alias")
184 if err != nil {
185 return err
186 }
187
188 sender := request.UserID
189 if request.UserID != ev.Sender() {
190 sender = ev.Sender()
191 }
192

Callers

nothing calls this directly

Calls 6

PowerLevelsMethod · 0.80
GetRoomIDForAliasMethod · 0.65
GetCreatorIDForAliasMethod · 0.65
GetStateEventMethod · 0.65
RemoveRoomAliasMethod · 0.65

Tested by

no test coverage detected