task-web/assets/js/register.js
2025-04-27 22:13:19 -04:00

121 lines
3.5 KiB
JavaScript

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 = '/';
}