const url = "https://task-api.fstropii.com"; const localhostUrl = "http://localhost:8000"; const registerBtn = document.getElementById('register-submit-btn'); const tooltip = document.getElementById('tooltip'); registerBtn.addEventListener("click", function(e) { e.preventDefault(); const name = document.querySelector(".register-name-input").value; const username = document.querySelector(".register-username-input").value; const email = document.querySelector(".register-email-input").value; const password = document.querySelector(".register-password-input").value; const verifyPassword = document.querySelector(".register-verify-password-input").value; // register the user in the db. will return a promise const registerUserPromise = registerUser(name, username, email, password, verifyPassword); registerUserPromise.then((res) => res.json()).then((json => { if (json.detail == "Email already registered") { setTooltip("error", "Email already registered"); return; } else if (json.detail == "Username already registered") { setTooltip("error", "Username already registered"); return; } setTooltip("success", "Account created"); // get user token. will return a promise const tokenPromise = getUserToken(); tokenPromise.then((res) => res.json()).then((json => { const token = json.access_token; const type = json.token_type; const expiresInDays = json.expires_days; // save a cookie const cookieText = `token=${token},type=${type},expires_days=${expiresInDays}`; setCookie(token, type, expiresInDays); // return to home. at a later point set it to the user page window.location.href = '/'; })); })) }); const setTooltip = (type, message) => { tooltip.classList.add(type); tooltip.classList.add('visible'); tooltip.innerText = message tooltip.style.display = "block"; }; const registerUser = (name, username, email, password, verifyPassword) => { if (verifyPassword != password) { setTooltip("error", "The passwords do not match"); return null; } const res = fetch(`${localhostUrl}/user/create`, { method: "POST", body: JSON.stringify({ name: name, username: username, email: email, password: password }), headers: { "Content-type": "application/json" } }); return res; } const getUserToken = async () => { const form = document.getElementById("register-form"); const formData = new FormData(form); const res = fetch(`${localhostUrl}/token`, { method: "POST", body: formData, }); return res; } const setCookie = (token, type, expires_days) => { const d = new Date(); d.setTime(d.getTime() + (expires_days*24*60*60*1000)) let expires = `expires=${d.toUTCString()}`; document.cookie = `token=${token},type=${type},${expires}; path=/`; } const getCookie = (returnType) => { let decodedCookie = decodeURIComponent(document.cookie); if (decodedCookie == "") { return; } let ca = decodedCookie.split(','); const token = ca[0].split("token=")[1]; const type = ca[1].split("type=")[1]; const expiresDay = ca[2].split("expires=")[1]; const expiresDate = ca[3] const expires = `${expiresDay}${expiresDate}` if (returnType == "token") { return token; } else if (returnType == "type") { return type } else if (returnType == "expires") { return expires; } return null; } const token = getCookie("token"); if (token != undefined) { window.location.href = '/'; }