// Fetch function for applet use case. async function jfetch(url, method, obj={}) { let request = { headers: { "Content-Type": "application/json", "Authorization": `Bearer ${window.localStorage.getItem("token")}`, }, method: method, }; if (!isEmpty(obj)) request["body"] = JSON.stringify(obj); return fetch(url, request) .then((response) => { let contentType = response.headers.get("Content-Type"); let json; if (contentType && contentType.indexOf("application/json" !== -1)) { json = response.json(); } else { // Reprocess non-json into json. json = response.text().then((text) => { return { status: response.status, "message": text }; }); } if (!response.ok) { throw json; } return json; }); } // OAUTH // async function getToken() { let response; if (G_QUERY.code) { response = await jfetch("/api/token", "POST", { code: G_QUERY.code }); } else { response = await jfetch("/api/token", "PATCH", { code: window.localStorage.getItem("refresh_token") }); } window.localStorage.setItem("token", response.access_token); window.localStorage.setItem("token_expiry", (Date.now() + response.expires_in*1000).toString()); window.localStorage.setItem("refresh_token", response.refresh_token); document.cookie = `token=${response.access_token}`; } async function tryRefresh() { if (Date.now() < parseInt(window.localStorage.getItem("token_expiry"))) return; // Not expired. await getToken().catch((err) => { let json = err.json(); if (json.status == 401 && json.code === 0) { // Could not refresh, so refresh token expired. window.localStorage.clear(); alert(`Could not get new session, did you remove access from Gitea?`); window.location = "/"; } else { throw json; } }); }