ProxmoxAAS-Dashboard/scripts/utils.js

79 lines
2.0 KiB
JavaScript
Raw Normal View History

2022-12-13 01:12:11 +00:00
export class ResponseError extends Error {
constructor(message) {
super(message);
2022-12-13 00:11:00 +00:00
this.name = "ResponseError";
}
}
2022-12-13 01:12:11 +00:00
export class NetworkError extends Error {
constructor(message) {
super(message);
2022-12-13 00:11:00 +00:00
this.name = "NetworkError";
}
}
2022-12-16 07:40:04 +00:00
function getCookie(cname) {
let name = cname + "=";
let decodedCookie = decodeURIComponent(document.cookie);
let ca = decodedCookie.split(';');
for(let i = 0; i <ca.length; i++) {
let c = ca[i];
while (c.charAt(0) == ' ') {
c = c.substring(1);
}
if (c.indexOf(name) == 0) {
return c.substring(name.length, c.length);
}
}
return "";
}
export async function requestTicket (username, password) {
2022-12-13 00:19:47 +00:00
let response = await request("/access/ticket", "POST", {username: `${username}@pve`, password: password}, false);
2022-12-13 00:21:33 +00:00
return response;
}
2022-12-16 07:15:52 +00:00
export function setTicket (ticket, csrf) {
let d = new Date();
d.setTime(d.getTime() + (2*60*60*1000));
document.cookie = `PVEAuthCookie=${ticket}; path=/; expires=${d.toUTCString()}; domain=.tronnet.net`;
2022-12-16 07:15:52 +00:00
document.cookie = `CSRFPreventionToken=${csrf}; path=/; expires=${d.toUTCString()}; domain=.tronnet.net;`
}
export async function request (path, method, body = null, auth = true) {
let prms = new URLSearchParams(body);
let content = {
method: method,
mode: "cors",
credentials: "include",
headers: {
2022-12-13 00:18:40 +00:00
"Content-Type": "application/x-www-form-urlencoded"
}
}
2022-12-13 00:18:40 +00:00
if(method === "POST") {
content.body = prms.toString();
2022-12-16 07:44:48 +00:00
content.headers.CSRFPreventionToken = getCookie("CSRFPreventionToken");
}
2022-12-13 00:18:40 +00:00
if(auth) {
content.headers.Cookie = document.cookie;
}
let response = await fetch(`https://pve.tronnet.net/api2/json${path}`, content)
.then((response) => {
if (!response.ok) {
throw new ResponseError(`recieved response status code ${response.status}`);
}
return response;
})
.catch((error) => {
2022-12-13 00:09:57 +00:00
if (error instanceof ResponseError) {
throw error;
}
throw new NetworkError(error);
});
let data = await response.json();
return data;
}