89 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import apx from "./apx.js";
 | |
| import { getOldestPrivatriids } from "./utils.js";
 | |
| 
 | |
| const bodyEl = document.querySelector("body");
 | |
| const aliasListContainerEl = document.querySelector("#aliasListContainer");
 | |
| 
 | |
| let aliasesArray = [];
 | |
| 
 | |
| const newAlias = async (alias) => {
 | |
|     let aliasTemplate = "";
 | |
| 
 | |
|     await fetch("./alias.mustache")
 | |
|         .then(res => res.text())
 | |
|         .then(template => {
 | |
|             aliasTemplate = template;
 | |
|         });
 | |
| 
 | |
|     return Mustache.render(aliasTemplate, { alias });
 | |
| };
 | |
| 
 | |
| const displayToastAlert = async (message) => {
 | |
|     let toastAlertTemplate = "";
 | |
| 
 | |
|     await fetch("./toastAlert.mustache")
 | |
|         .then(res => res.text())
 | |
|         .then(template => {
 | |
|             toastAlertTemplate = template;
 | |
|         });
 | |
| 
 | |
|     return Mustache.render(toastAlertTemplate, { message });
 | |
| };
 | |
| 
 | |
| (async () => {
 | |
|     const params = new URLSearchParams(window.location.search);
 | |
|     const uuid = params.get("uuid");
 | |
| 
 | |
|     const privateKey = (await apx.indexedDB.get("privatri", "threads", uuid)).privateKey;
 | |
|     
 | |
|     const privatriidArray = await getOldestPrivatriids("privatri", "messages");
 | |
|     
 | |
|     privatriidArray.forEach(async privatriid => {
 | |
|         if (privatriid.split("_")[0] === uuid) {
 | |
|             aliasesArray = (await apx.indexedDB.get("privatri", "messages", privatriid)).aliases;
 | |
|             const ownerAlias = (await apx.indexedDB.get("privatri", "messages", privatriid)).owner;
 | |
|             
 | |
|             for (const alias of aliasesArray) {
 | |
|                 aliasListContainerEl.insertAdjacentHTML("beforeend", await newAlias({
 | |
|                     decrypted: (await apx.crypto.decryptMessage(alias, privateKey)).data,
 | |
|                     crypted: alias
 | |
|                 }));
 | |
|             };
 | |
| 
 | |
|             document.querySelectorAll("button.removeAliasBtn").forEach(btn => {
 | |
|                 btn.addEventListener("click", async () => {
 | |
|                     if (JSON.parse(localStorage.getItem("apx")).data.headers.xalias === (await apx.crypto.decryptMessage(ownerAlias, privateKey)).data) {
 | |
|                         if (btn.getAttribute("data-alias") !== ownerAlias) {
 | |
|                             const alias = btn.getAttribute("data-alias");
 | |
|                             aliasesArray = aliasesArray.filter(a => a !== alias);
 | |
|                             btn.parentElement.parentElement.remove();
 | |
|                 
 | |
|                             privatriidArray.forEach(async privatriid => {
 | |
|                                 if (privatriid.split("_")[0] === uuid) {
 | |
|                                     const messageObj = await apx.indexedDB.get("privatri", "messages", privatriid);
 | |
|                                     messageObj.aliases = aliasesArray;
 | |
|                                     
 | |
|                                     await apx.indexedDB.set("privatri", "messages", messageObj);
 | |
|                                 };
 | |
|                             });
 | |
|                         } else {
 | |
|                             bodyEl.insertAdjacentHTML("beforeend", await displayToastAlert("You cannot remove the owner of the thread."));
 | |
| 
 | |
|                             setTimeout(() => {
 | |
|                                 bodyEl.lastElementChild.remove();
 | |
|                             }, 3000);
 | |
|                         };
 | |
|                     } else {
 | |
|                         bodyEl.insertAdjacentHTML("beforeend", await displayToastAlert("You don't have the permissions to remove this alias."));
 | |
| 
 | |
|                         setTimeout(() => {
 | |
|                             bodyEl.lastElementChild.remove();
 | |
|                         }, 3000);
 | |
|                     };
 | |
|                 });
 | |
|             });
 | |
|         };
 | |
|     });
 | |
| })();
 | |
| 
 |