Fix login and membership list

This commit is contained in:
Hericode 2025-07-17 20:07:26 +02:00
parent 4f415b6190
commit bbeb7d0ff0
5 changed files with 26 additions and 45 deletions

View file

@ -84,7 +84,7 @@ class Context {
var user = sessionStorage.getItem("user");
if (user) {
var rawUser = JSON.parse(user);
this.user = User.fromData(rawUser.host, rawUser.data);
this.user = User.fromData(rawUser.host, rawUser.data, rawUser.membershipData);
}
var hostConfig = sessionStorage.getItem("host");
if (hostConfig) {

View file

@ -1,31 +1,24 @@
class User {
static fromData(host, content) {
static fromData(host, content, membershipContent) {
if (typeof content === "string") {
content = JSON.parse(content);
}
if (typeof membershipContent === "string") {
membershipContent = JSON.parse(membershipContent);
}
var user = new User();
user.host = host;
user.data = content;
user.membershipData = membershipContent;
user.memberships = [];
if (content.memberships) {
content.memberships.forEach(m => {
if (membershipContent) {
membershipContent.forEach(m => {
user.memberships.push(Membership.fromData(host, m));
});
}
return user;
}
getMemberships() {
var memberships = [];
var host = this.host;
if (this.data.memberships) {
this.data.memberships.forEach(m => {
memberships.push(Membership.fromData(host, m));
});
}
return memberships;
}
findMyGroup(groupUsername) {
var membership = this.memberships.find(m => m.group.username === groupUsername);
if (membership) {
@ -72,7 +65,7 @@ class Membership {
if (content.group) {
membership.group = Group.fromData(host, content.group.data);
return membership;
} else if (content.parent.type === "GROUP") {
} else if (content.parent) {
membership.group = Group.fromData(host, content.parent);
return membership;
}

View file

@ -74,22 +74,22 @@ class PageIndex extends Page {
return true;
}
login() {
var host = document.getElementById("user-host").value;
if (host.startsWith("http://")) {
host = host.substring(7);
} else if (host.startsWith("https://")) {
host = host.substring(8);
this.requestHost = document.getElementById("user-host").value;
if (this.requestHost.startsWith("http://")) {
this.requestHost = host.substring(7);
} else if (this.requestHost.startsWith("https://")) {
this.requestHost = host.substring(8);
}
var email = document.getElementById("user-email").value;
var password = document.getElementById("user-password").value;
requestLogin(host, email, password, this.loginCallback.bind(this));
requestLogin(this.requestHost, email, password, this.loginCallback.bind(this));
return false;
}
loginCallback(request, status, result) {
if (status === 200) {
CTX.setUser(result);
requestHostConfig(host, this.hostConfigCallback.bind(this));
requestTimezones(host, this.hostTimezonesCallback.bind(this));
requestHostConfig(this.requestHost, this.hostConfigCallback.bind(this));
requestTimezones(this.requestHost, this.hostTimezonesCallback.bind(this));
} else if (status === 404) {
}
@ -97,7 +97,7 @@ class PageIndex extends Page {
// TODO: See promise for mutex https://developer.mozilla.org/fr/docs/Web/JavaScript/Guide/Using_promises
hostConfigCallback(request, status, result) {
if (status === 200) {
this.hostConfig = HostConfig.formConfigData(result);
this.hostConfig = HostConfig.fromConfigData(this.requestHost, result);
if (this.timezonesData) {
this.hostConfig.setTimezonesFromData(this.timezoneData);
this.loginFinished();
@ -115,6 +115,7 @@ class PageIndex extends Page {
}
}
loginFinished() {
this.requestHost = undefined;
location.replace("index.html");
}
}

View file

@ -1,4 +1,4 @@
function requestHostConfig(host) {
function requestHostConfig(host, callback) {
var request = new XMLHttpRequest();
request.onreadystatechange = function() {
if (request.readyState === XMLHttpRequest.DONE) {
@ -182,7 +182,7 @@ function requestHostConfig(host) {
request.send(JSON.stringify(content));
}
function requestTimezones(host) {
function requestTimezones(host, callback) {
var request = new XMLHttpRequest();
request.onreadystatechange = function() {
if (request.readyState === XMLHttpRequest.DONE) {

View file

@ -20,8 +20,7 @@ function requestLogin(host, email, password, callback) {
callback(request, 500, "No login data");
return;
}
var user = User.fromData(host, data["login"]);
requestLoggedMembership(host, user, callback);
requestLoggedMembership(host, data["login"], callback);
return;
}
callback(request, request.status, request.responseText);
@ -52,7 +51,7 @@ function requestLogin(host, email, password, callback) {
request.send(JSON.stringify(content));
}
function requestLoggedMembership(host, loggedUser, callback) {
function requestLoggedMembership(host, userData, callback) {
var request = new XMLHttpRequest();
request.onreadystatechange = function() {
if (request.readyState === XMLHttpRequest.DONE) {
@ -75,17 +74,8 @@ function requestLoggedMembership(host, loggedUser, callback) {
return;
}
data = data["loggedUser"]["memberships"]["elements"];
var memberships = [];
data.forEach(d => {
var m = Membership.fromData(host, d);
if (m) {
memberships.push(m);
} else {
console.error("Could not parse membership from " + d);
}
});
loggedUser.memberships = memberships;
callback(request, request.status, loggedUser);
let user = User.fromData(host, userData, data);
callback(request, request.status, user);
return;
}
callback(request, request.status, request.responseText);
@ -93,7 +83,7 @@ function requestLoggedMembership(host, loggedUser, callback) {
};
request.open("POST", "https://" + host + "/api");
request.setRequestHeader("Content-type", "application/json");
request.setRequestHeader("authorization", "Bearer " + loggedUser.data.accessToken);
request.setRequestHeader("authorization", "Bearer " + userData.accessToken);
var content = {
operationName:"LoggedUserMemberships",
variables:{},
@ -113,10 +103,8 @@ function requestLoggedMembership(host, loggedUser, callback) {
...ActorFragment
organizedEvents {
elements {
id
title
picture {
id
url
__typename
}
@ -142,7 +130,6 @@ function requestLoggedMembership(host, loggedUser, callback) {
fragment ActorFragment on Actor {
id
avatar {
id
url
__typename
}