81 lines
1.9 KiB
JavaScript
81 lines
1.9 KiB
JavaScript
"use strict";
|
|
|
|
const $ = require("jquery");
|
|
const socket = require("../socket");
|
|
const storage = require("../localStorage");
|
|
const utils = require("../utils");
|
|
const {vueApp, getActiveWindowComponent} = require("../vue");
|
|
|
|
socket.on("auth", function(data) {
|
|
// If we reconnected and serverHash differs, that means the server restarted
|
|
// And we will reload the page to grab the latest version
|
|
if (utils.serverHash > -1 && data.serverHash > -1 && data.serverHash !== utils.serverHash) {
|
|
socket.disconnect();
|
|
vueApp.isConnected = false;
|
|
vueApp.currentUserVisibleError = "Server restarted, reloading…";
|
|
location.reload(true);
|
|
return;
|
|
}
|
|
|
|
if (data.serverHash > -1) {
|
|
utils.serverHash = data.serverHash;
|
|
|
|
vueApp.activeWindow = "SignIn";
|
|
} else {
|
|
getActiveWindowComponent().inFlight = false;
|
|
}
|
|
|
|
let token;
|
|
const user = storage.get("user");
|
|
|
|
if (!data.success) {
|
|
if (vueApp.activeWindow !== "SignIn") {
|
|
socket.disconnect();
|
|
vueApp.isConnected = false;
|
|
vueApp.currentUserVisibleError = "Authentication failed, reloading…";
|
|
location.reload();
|
|
return;
|
|
}
|
|
|
|
storage.remove("token");
|
|
|
|
getActiveWindowComponent().errorShown = true;
|
|
} else if (user) {
|
|
token = storage.get("token");
|
|
|
|
if (token) {
|
|
vueApp.currentUserVisibleError = "Authorizing…";
|
|
$("#loading-page-message").text(vueApp.currentUserVisibleError);
|
|
|
|
let lastMessage = -1;
|
|
|
|
for (const network of vueApp.networks) {
|
|
for (const chan of network.channels) {
|
|
if (chan.messages.length > 0) {
|
|
const id = chan.messages[chan.messages.length - 1].id;
|
|
|
|
if (lastMessage < id) {
|
|
lastMessage = id;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
const openChannel = (vueApp.activeChannel && vueApp.activeChannel.channel.id) || null;
|
|
|
|
socket.emit("auth", {user, token, lastMessage, openChannel});
|
|
}
|
|
}
|
|
|
|
if (token) {
|
|
return;
|
|
}
|
|
|
|
$("#loading").remove();
|
|
$("#footer")
|
|
.find(".sign-in")
|
|
.trigger("click", {
|
|
pushState: false,
|
|
});
|
|
});
|