From e6150a01fef7cb8614f1337abbc9630be373aac5 Mon Sep 17 00:00:00 2001 From: curly Date: Mon, 15 Jul 2024 13:42:35 -0600 Subject: login/out --- src/main.js | 229 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 229 insertions(+) create mode 100644 src/main.js (limited to 'src/main.js') diff --git a/src/main.js b/src/main.js new file mode 100644 index 0000000..2b880a2 --- /dev/null +++ b/src/main.js @@ -0,0 +1,229 @@ +// const host = window.location.protocol + "//" + window.location.host; +const server = window.location.protocol + "//" + window.location.hostname + ":8000"; +const host = window.location.protocol + "//" + window.location.host; +const client_id = "POKO Web 0.0" + +async function xhttp_get(url) { + try { + const response = await fetch(url); + if (!response.ok) { + throw new Error(`Response status: ${response.status}`); + } + + try { + return new Response(response.status, await response.clone().json()) + } catch { + return new Response(response.status, await response.text()) + } + } catch (error) { + console.error(error.message); + } +} + +async function xhttp_post(url, body) { + try { + const response = await fetch(url, { + method: "POST", + body: JSON.stringify(body), + headers: { + "Content-Type": "application/json", + }, + }); + + try { + return new Response(response.status, await response.clone().json()) + } catch { + return new Response(response.status, await response.text()) + } + + } catch (error) { + console.error(error.message) + } +} + +class Response { + constructor(status, body) { + this.status = status; + this.body = body; + } +} + +async function register() { + const username = document.getElementById("username").value; + const password = document.getElementById("password").value; + const id = document.getElementById("id").value; + + const url = server + "/user/register/" + var body; + if (id == "") { + body = {"name": username, "password": password} + } else { + body = {"name": username, "password": password, "id": id} + } + const req = await xhttp_post(url, body); + + if (req.status == 201) { + await login(req.body.id, password) + window.location.href = host + } else { + alert(req.status + ": " + req.body) + } +} + +function password_validator() { + const password = document.getElementById("password"); +} + +function login_form() { + const id = document.getElementById("id").value; + const password = document.getElementById("password").value; + + login(id, password) +} + +async function login(id, password) { + const url = server + "/user/login" + const body = {"id": id, "password": password, "clientid": client_id}; + const req = await xhttp_post(url, body); + + if (req.status == 200) { + // Set session cookie + set_session(req.body, id) + window.location.href = host; + } else { + alert(req.status + ": " + req.body) + } +} + +function getCookie(cname) { + let name = cname + "="; + let decodedCookie = decodeURIComponent(document.cookie); + let ca = decodedCookie.split(';'); + for(let i = 0; i +

User Info

+

Username: ${req.body.name}

+

ID: ${id}

+ +
+

Tokens Balance

+ ${tokens} +
+
+

Actions

+ + + +
+
+

Users

+ ${users} +
+ `; + } else if (req.status == 404) { + if (req.body == "Not Authenticated") { + del_session() + } + } + } else { + del_session() + } + } else { + content.innerHTML += users; + } +} + +function format_tokovec(tokovec) { + var out = "" + for (t in tokovec) { + out += ` +

${tokovec[t].color}: ${tokovec[t].amount}

+ ` + } + + return out +} + +async function userlist() { + const url = server + "/user/list" + const req = await xhttp_get(url); + + var out = "" + + try { + if (req.status == 200) { + for (u in req.body) { + const user = req.body[u]; + out += `

${user.id} -- ${user.name}` + } + + } else { + return "

User list not available

" + } + + } catch {} + + return out +} \ No newline at end of file -- cgit v1.2.3