mirror of
https://github.com/ether/etherpad-lite.git
synced 2025-04-22 08:26:16 -04:00
pad: Simplify reload after .etherpad
import
The old "switch to pad" logic looked buggy, and it complicates pad initialization. Forcing a refresh after importing an `.etherpad` file isn't much of a UX downgrade.
This commit is contained in:
parent
e974622561
commit
5cbbcbcee6
6 changed files with 10 additions and 83 deletions
|
@ -235,8 +235,8 @@ const doImport = async (req, res, padId) => {
|
|||
pad = await padManager.getPad(padId);
|
||||
padManager.unloadPad(padId);
|
||||
|
||||
// direct Database Access means a pad user should perform a switchToPad
|
||||
// and not attempt to receive updated pad data
|
||||
// Direct database access means a pad user should reload the pad and not attempt to receive
|
||||
// updated pad data.
|
||||
if (directDatabaseAccess) return true;
|
||||
|
||||
// tell clients to update
|
||||
|
|
|
@ -283,8 +283,6 @@ exports.handleMessage = async (socket, message) => {
|
|||
} else {
|
||||
messageLogger.warn(`Dropped message, unknown COLLABROOM Data Type ${message.data.type}`);
|
||||
}
|
||||
} else if (message.type === 'SWITCH_TO_PAD') {
|
||||
await handleSwitchToPad(socket, message, authorID);
|
||||
} else {
|
||||
messageLogger.warn(`Dropped message, unknown Message Type ${message.type}`);
|
||||
}
|
||||
|
@ -806,44 +804,6 @@ const _correctMarkersInPad = (atext, apool) => {
|
|||
return builder.toString();
|
||||
};
|
||||
|
||||
const handleSwitchToPad = async (socket, message, _authorID) => {
|
||||
const currentSessionInfo = sessioninfos[socket.id];
|
||||
const padId = currentSessionInfo.padId;
|
||||
|
||||
// Check permissions for the new pad.
|
||||
const newPadIds = await readOnlyManager.getIds(message.padId);
|
||||
const {session: {user} = {}} = socket.client.request;
|
||||
const {accessStatus, authorID} = await securityManager.checkAccess(
|
||||
newPadIds.padId, message.sessionID, message.token, user);
|
||||
if (accessStatus !== 'grant') {
|
||||
// Access denied. Send the reason to the user.
|
||||
socket.json.send({accessStatus});
|
||||
return;
|
||||
}
|
||||
// The same token and session ID were passed to checkAccess in handleMessage, so this second call
|
||||
// to checkAccess should return the same author ID.
|
||||
assert(authorID === _authorID);
|
||||
assert(authorID === currentSessionInfo.author);
|
||||
|
||||
// Check if the connection dropped during the access check.
|
||||
if (sessioninfos[socket.id] !== currentSessionInfo) return;
|
||||
|
||||
// clear the session and leave the room
|
||||
_getRoomSockets(padId).forEach((socket) => {
|
||||
const sinfo = sessioninfos[socket.id];
|
||||
if (sinfo && sinfo.author === currentSessionInfo.author) {
|
||||
// fix user's counter, works on page refresh or if user closes browser window and then rejoins
|
||||
sessioninfos[socket.id] = {};
|
||||
socket.leave(padId);
|
||||
}
|
||||
});
|
||||
|
||||
// start up the new pad
|
||||
const newSessionInfo = sessioninfos[socket.id];
|
||||
createSessionInfoAuth(newSessionInfo, message);
|
||||
await handleClientReady(socket, message, authorID);
|
||||
};
|
||||
|
||||
// Creates/replaces the auth object in the given session info.
|
||||
const createSessionInfoAuth = (sessionInfo, message) => {
|
||||
// Remember this information since we won't
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue