import { ShowModal, ValidateInput, FloatMessage } from "../UI.js";
document.getElementById("permissionHelpButton").addEventListener("click", (ev) => {
ShowModal("Permissions", `Permission groups can be used to restrict access to computers.
A computer with no permission groups will be accessible by anyone. If permissions groups
are applied, only users with one or more matching groups can access it.
All permission groups for the organization are managed in this list.`);
});
document.getElementById("usersHelpButton").addEventListener("click", (ev) => {
ShowModal("Users", `All users for the organization are managed here.
Administrators will have access to this management screen as well as all computers.
Users with no permission groups will only have access to computers that also have
no permission groups.
Users with permission groups will also have access to computers with the same
permission group.`);
});
document.getElementById("invitesHelpButton").addEventListener("click", (ev) => {
ShowModal("Invitations", `All pending invitations will be shown here and can be revoked by deleting them.
If a user does not exist, sending an invite will create their account and send them a password reset email too.
The password reset must be completed before accepting the invitation.
The Admin checkbox determines if the new user will have administrator privileges in this organization
after they accept the invitation.`);
});
document.getElementById("organizationNameInput").addEventListener("input", (ev) => {
var addon = ev.currentTarget.parentElement.querySelector(".fa");
addon.classList.remove("fa-check-circle");
addon.classList.add("fa-edit");
});
document.getElementById("organizationNameInput").addEventListener("blur", (ev) => {
var xhr = new XMLHttpRequest();
xhr.onload = () => {
if (xhr.status == 200) {
var addon = ev.target.parentElement.querySelector(".fa");
addon.classList.remove("fa-edit");
addon.classList.add("fa-check-circle");
}
else if (xhr.status == 400) {
ShowModal("Invalid Request", xhr.responseText);
}
else {
showError(xhr);
}
};
xhr.onerror = () => {
showError(xhr);
};
xhr.open("put", location.origin + "/api/OrganizationManagement/Name");
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(JSON.stringify(ev.currentTarget.value));
});
document.getElementById("removePermissionButton").addEventListener("click", (ev) => {
var selectList = document.getElementById("permissionList");
for (var i = 0; i < selectList.selectedOptions.length; i++) {
let selectedValue = selectList.selectedOptions[i].value;
let xhr = new XMLHttpRequest();
xhr.onload = (ev) => {
console.log(ev.srcElement);
if (xhr.status == 200) {
document.querySelectorAll(`.all-permissions-list option[value='${selectedValue}']`).forEach(option => {
option.remove();
});
document.querySelectorAll(`.user-permissions-list option[value='${selectedValue}']`).forEach(option => {
option.remove();
});
}
else if (xhr.status == 400) {
ShowModal("Invalid Request", xhr.responseText);
}
else {
showError(xhr);
}
};
xhr.onerror = () => {
showError(xhr);
};
xhr.open("delete", location.origin + "/api/OrganizationManagement/Permission");
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(JSON.stringify(selectedValue));
}
});
document.getElementById("permissionInput").addEventListener("keypress", (e) => {
if (e.key.toLowerCase() == "enter") {
document.getElementById("addPermissionButton").click();
}
});
document.getElementById("addPermissionButton").addEventListener("click", () => {
var input = document.getElementById("permissionInput");
if (input.checkValidity() && input.value.length > 0) {
var xhr = new XMLHttpRequest();
xhr.onload = () => {
if (xhr.status == 200) {
document.querySelectorAll(`.all-permissions-list`).forEach((list) => {
var newOption = new Option(input.value, xhr.responseText);
list.options.add(newOption);
});
input.value = "";
}
else if (xhr.status == 400) {
ShowModal("Invalid Request", xhr.responseText);
}
else {
showError(xhr);
}
};
xhr.onerror = () => {
showError(xhr);
};
xhr.open("post", location.origin + "/api/OrganizationManagement/Permission");
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(JSON.stringify({ Name: input.value }));
}
});
document.querySelectorAll(".remove-permission-from-user-button").forEach((removeButton) => {
removeButton.addEventListener("click", (ev) => {
var userID = removeButton.getAttribute("user");
var userPermissionList = document.querySelector(`div.modal[user='${userID}'] .user-permissions-list`);
for (var i = 0; i < userPermissionList.selectedOptions.length; i++) {
let selectedValue = userPermissionList.selectedOptions[i].value;
let xhr = new XMLHttpRequest();
xhr.onload = () => {
if (xhr.status == 200) {
userPermissionList.querySelector(`option[value='${selectedValue}']`).remove();
}
else if (xhr.status == 400) {
ShowModal("Invalid Request", xhr.responseText);
}
else {
showError(xhr);
}
};
xhr.onerror = () => {
showError(xhr);
};
xhr.open("delete", `${location.origin}/api/OrganizationManagement/RemovePermissionFromUser/${userID}/${selectedValue}`);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send();
}
});
});
document.querySelectorAll(".add-permission-to-user-button").forEach((addButton) => {
addButton.addEventListener("click", (ev) => {
var userID = addButton.getAttribute("user");
var userPermissionList = document.querySelector(`div.modal[user='${userID}'] .user-permissions-list`);
var allPermissionsList = document.querySelector(`div.modal[user='${userID}'] .all-permissions-list`);
var xhr = new XMLHttpRequest();
xhr.onload = () => {
if (xhr.status == 200) {
var newOption = new Option(allPermissionsList.selectedOptions[0].text, allPermissionsList.selectedOptions[0].value);
userPermissionList.options.add(newOption);
}
else if (xhr.status == 400) {
ShowModal("Invalid Request", xhr.responseText);
}
else {
showError(xhr);
}
};
xhr.onerror = () => {
showError(xhr);
};
xhr.open("post", location.origin + `/api/OrganizationManagement/AddUserPermission/${userID}`);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(JSON.stringify(allPermissionsList.selectedOptions[0].value));
});
});
document.querySelectorAll(".user-is-admin-checkbox").forEach((checkbox) => {
checkbox.addEventListener("change", (ev) => {
var userID = checkbox.getAttribute("user");
var xhr = new XMLHttpRequest();
xhr.onload = () => {
if (xhr.status == 200) {
}
else if (xhr.status == 400) {
ShowModal("Invalid Request", xhr.responseText);
}
else {
showError(xhr);
}
};
xhr.onerror = () => {
showError(xhr);
};
xhr.open("post", location.origin + `/api/OrganizationManagement/ChangeIsAdmin/${userID}`);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(JSON.stringify(ev.currentTarget.checked));
});
});
document.querySelectorAll(".remove-user-button").forEach((removeButton) => {
removeButton.addEventListener("click", (ev) => {
var result = confirm("Are you sure you want to remove this user from the organization?");
if (result) {
var userID = removeButton.getAttribute("user");
var xhr = new XMLHttpRequest();
xhr.onload = () => {
if (xhr.status == 200) {
document.querySelector(`tr[user='${userID}']`).remove();
}
else if (xhr.status == 400) {
ShowModal("Invalid Request", xhr.responseText);
}
else {
showError(xhr);
}
};
xhr.onerror = () => {
showError(xhr);
};
xhr.open("delete", `${location.origin}/api/OrganizationManagement/RemoveUserFromOrganization/${userID}`);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send();
}
});
});
document.getElementById("sendInviteButton").addEventListener("click", (ev) => {
var inviteUserInput = document.querySelector("#inviteUserInput");
if (!ValidateInput(inviteUserInput)) {
return;
}
var invitedUser = inviteUserInput.value;
inviteUserInput.value = "";
var isAdmin = document.getElementById("inviteIsAdmin").checked;
var xhr = new XMLHttpRequest();
xhr.onload = () => {
if (xhr.status == 200) {
var newInvite = JSON.parse(xhr.responseText);
var tbody = document.querySelector("#invitesTable tbody");
var newRow = document.createElement("tr");
newRow.setAttribute("invite", newInvite.ID);
newRow.innerHTML = `