Skip to content
This repository has been archived by the owner on Sep 11, 2024. It is now read-only.

Commit

Permalink
Merge pull request #6872 from AndrewFerr/develop
Browse files Browse the repository at this point in the history
If public room creation fails, retry without publishing it
  • Loading branch information
t3chguy authored Oct 12, 2021
2 parents 193a060 + 9f039b5 commit 34b61ad
Showing 1 changed file with 13 additions and 1 deletion.
14 changes: 13 additions & 1 deletion src/createRoom.ts
Original file line number Diff line number Diff line change
Expand Up @@ -219,7 +219,19 @@ export default async function createRoom(opts: IOpts): Promise<string | null> {
if (opts.spinner) modal = Modal.createDialog(Spinner, null, 'mx_Dialog_spinner');

let roomId;
return client.createRoom(createOpts).finally(function() {
return client.createRoom(createOpts).catch(function(err) {
// NB This checks for the Synapse-specific error condition of a room creation
// having been denied because the requesting user wanted to publish the room,
// but the server denies them that permission (via room_list_publication_rules).
// The check below responds by retrying without publishing the room.
if (err.httpStatus === 403 && err.errcode === "M_UNKNOWN" && err.data.error === "Not allowed to publish room") {
console.warn("Failed to publish room, try again without publishing it");
createOpts.visibility = Visibility.Private;
return client.createRoom(createOpts);
} else {
return Promise.reject(err);
}
}).finally(function() {
if (modal) modal.close();
}).then(function(res) {
roomId = res.room_id;
Expand Down

0 comments on commit 34b61ad

Please sign in to comment.