|
1 | 1 | use axum::extract::State; |
2 | 2 | use futures::{FutureExt, TryFutureExt, TryStreamExt}; |
3 | 3 | use ruma::{ |
4 | | - OwnedEventId, RoomId, UserId, |
| 4 | + OwnedEventId, OwnedRoomAliasId, RoomId, UserId, |
5 | 5 | api::client::state::{get_state_event_for_key, get_state_events, send_state_event}, |
6 | 6 | events::{ |
7 | 7 | AnyStateEventContent, StateEventType, |
@@ -320,36 +320,28 @@ async fn allowed_to_send_state_event( |
320 | 320 | | StateEventType::RoomCanonicalAlias => { |
321 | 321 | match json.deserialize_as_unchecked::<RoomCanonicalAliasEventContent>() { |
322 | 322 | | Ok(canonical_alias_content) => { |
323 | | - let current_aliases = services |
| 323 | + let current_event = services |
324 | 324 | .state_accessor |
325 | 325 | .room_state_get_content::<RoomCanonicalAliasEventContent>( |
326 | 326 | room_id, |
327 | 327 | &StateEventType::RoomCanonicalAlias, |
328 | 328 | "", |
329 | 329 | ) |
330 | 330 | .await |
331 | | - .ok() |
332 | | - .map(|content| { |
333 | | - let mut aliases = content.alt_aliases; |
| 331 | + .ok(); |
334 | 332 |
|
335 | | - if let Some(alias) = content.alias { |
336 | | - aliases.push(alias); |
337 | | - } |
338 | | - |
339 | | - aliases |
340 | | - }) |
| 333 | + let current_aliases: Vec<OwnedRoomAliasId> = current_event |
| 334 | + .map(|content| content.aliases().cloned().collect()) |
341 | 335 | .unwrap_or_default(); |
342 | 336 |
|
343 | 337 | let aliases = canonical_alias_content |
344 | | - .alt_aliases |
345 | | - .iter() |
346 | | - .chain(canonical_alias_content.alias.iter()) |
| 338 | + .aliases() |
347 | 339 | .filter(|alias| !current_aliases.contains(alias)); |
348 | 340 |
|
349 | 341 | for alias in aliases { |
350 | 342 | let (alias_room_id, _servers) = services |
351 | 343 | .alias |
352 | | - .resolve_alias(&alias) |
| 344 | + .resolve_alias(alias) |
353 | 345 | .await |
354 | 346 | .map_err(|e| { |
355 | 347 | err!(Request(BadAlias("Failed resolving alias \"{alias}\": {e}"))) |
|
0 commit comments