Fix login and membership list
This commit is contained in:
parent
4f415b6190
commit
bbeb7d0ff0
5 changed files with 26 additions and 45 deletions
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue