let userAccessLevels = { // Name | Text Colour | Background Colour | Border Colour
"-3": ["Banned", "#fff", "#2e2e2e", "#727272"],
"-2": ["Banned", "#fff", "#2e2e2e", "#727272"],
"-1": ["Banned", "#fff", "#2e2e2e", "#727272"],
"0": ["Member", "#fff", "#047205", "#00a003"],
"1": ["Tester", "#fff", "#0c98a2", "#01c9d7"],
"2": ["Moderator", "#000", "#00dc04", "#067708"],
"3": ["Admin", "#fff", "#920606", "#c80404"],
}
function updateUserDataDisplay(data) {
document.getElementById("display-name").textContent = data["mii"]["name"];
document.getElementById("sfid").textContent = `SFID: ${data["user_id"]}`;
document.getElementById("email").innerHTML = `Email: ${data["email"]["address"]}`;
document.getElementById("dob").innerHTML = `Date of Birth: ${data["birth_date"]}`;
let createdAt = new Date(data["create_date"] + "Z");
document.getElementById("created-at").innerHTML = `Created: ${createdAt.toLocaleString()}`
document.getElementById("tz").innerHTML = `Timezone: ${data["tz_name"]}`;
document.getElementById("region").innerHTML = `Country/Region: ${data["country"]}`;
document.getElementById("user-info").style.display = "flex";
let miiLink = `https://mii.spfn.net/${data["pid"]}/main.png`
document.getElementById("mii-img").src = miiLink;
let level = userAccessLevels[data["account_level"]];
if (!level) level = ["Unknown", "#fff", "#000000ff", "#ffffffff"]; // Refer to comment on userAccessLevels for a formatting guide
document.getElementById("access-level").textContent = level[0];
document.getElementById("access-level").style = `color: ${level[1]}; background-color: ${level[2]}; border-color: ${level[3]}`;
}
function logOut() {
sessionStorage.clear();
window.location.href = "/account/login?redirect=/account"
}
// Check if there is an active login
window.onload = async function() {
let expiryStr = sessionStorage.getItem("authExpires");
if (expiryStr) {
let expiry = new Date(expiryStr);
if (expiry > new Date()) { // Hasn't expired - Get user data
let token = sessionStorage.getItem("authToken");
const response = await fetch("https://account.spfn.net/api/v2/users/@me/profile", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
}
})
if (!response.ok) throw new Error("Network Response was not okay when requesting Profile")
const data = await response.json();
updateUserDataDisplay(data);
document.getElementById("loading-screen").style.display = "none";
} else { // Has expired - Prompt user to log back in
window.location.href = "/account/login?redirect=/account"
}
} else { // User has never logged in for this session
window.location.href = "/account/login?redirect=/account"
}
}
function showDeleteWarning() {
document.getElementById("confirm-delete").style = ""
document.getElementById("user-info").style = "display: none;"
}
function hideDeleteWarning() {
document.getElementById("user-info").style = ""
document.getElementById("confirm-delete").style = "display: none;"
}
async function deleteAccount() {
let token;
let expiryStr = sessionStorage.getItem("authExpires");
if (expiryStr) { // Expiry exists so token should exist
token = sessionStorage.getItem("authToken");
let expiry = new Date(expiryStr);
if (expiry < new Date()) { // Expired token
window.location.href = "/account/login?redirect=/account"
} else if (!token) { // Expiry Saved but No Token (shouldn't be possible but it'll be caught if it happens)
window.location.href = "/account/login?redirect=/account"
}
} else { // Token Never Saved in Session
window.location.href = "/account/login?redirect=/account"
}
const response = await fetch("https://account.spfn.net/api/v2/users/@me/delete", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
}
})
if (!response.ok) {
loginError(await response.text(), response.status);
throw new Error("Network Response was not okay when requesting Account Deletion");
}
document.getElementById("confirm-delete").style = "display: none;"
document.getElementById("delete-success").style = ""
}