OpenAuth_server/views/src/register/register.js

149 lines
4.2 KiB
JavaScript

import "inputs";
import sha from "sha512";
import fireEvent from "event"
(() => {
const translations = JSON.parse(document.getElementById("error_codes").innerText)
const regcode = document.getElementById("regcode")
regcode.value = new URL(window.location.href).searchParams.get("regcode")
fireEvent(regcode, "change");
function showError(element, message) {
if (typeof element === "string")
element = document.getElementById(element)
if (!element) console.error("Element not found,", element)
element.innerText = message;
if (!message) {
if (!element.classList.contains("invisible"))
element.classList.add("invisible")
} else {
element.classList.remove("invisible");
}
}
function makeid(length) {
var text = "";
var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
for (var i = 0; i < length; i++)
text += possible.charAt(Math.floor(Math.random() * possible.length));
return text;
}
const username = document.getElementById("username")
const name = document.getElementById("name")
const mail = document.getElementById("mail")
const password = document.getElementById("password")
const passwordrep = document.getElementById("passwordrep")
const radio_male = document.getElementById("radio-male")
const radio_female = document.getElementById("radio-female")
const radio_other = document.getElementById("radio-other")
const registerButton = document.getElementById("registerbutton")
registerButton.onclick = () => {
console.log("Register")
showError("error");
let error = false;
if (!regcode.value) {
showError("err_regcode", translations["noregcode"])
error = true;
} else {
showError("err_regcode")
}
if (!username.value) {
showError("err_username", translations["nousername"])
error = true;
} else {
showError("err_username")
}
if (!name.value) {
showError("err_name", translations["noname"])
error = true;
} else {
showError("err_name")
}
if (!mail.value) {
showError("err_mail", translations["nomail"])
error = true;
} else {
showError("err_mail")
}
if (!password.value) {
showError("err_password", translations["nopassword"])
error = true;
} else {
showError("err_password")
}
if (password.value !== passwordrep.value) {
showError("err_passwordrep", translations["nomatch"])
error = true;
} else {
showError("err_passwordrep")
}
if (error) return;
let gender;
if (radio_male.checked) {
gender = "male"
} else if (radio_female.checked) {
gender = "female"
} else {
gender = "other"
}
let salt = makeid(10)
//username, password, salt, mail, gender, name, birthday, regcode
let body = {
username: username.value,
gender: gender,
mail: mail.value,
name: name.value,
regcode: regcode.value,
salt: salt,
password: sha(salt + password.value)
}
fetch("/api/user/register", {
method: "POST",
body: JSON.stringify(body),
headers: {
'content-type': 'application/json'
},
}).then(async e => {
if (e.status !== 200) return Promise.reject(new Error(await e.text() || e.statusText));
return e.json()
}).then(data => {
if (data.error) {
if (!Array.isArray(data.error)) return Promise.reject(new Error(data.error));
let ce = [];
data.error.forEach(e => {
let ef = document.getElementById("err_" + e.field);
if (!ef) ce.push(e);
else {
showError(ef, e.message);
}
})
if (ce.length > 0) {
showError("error", ce.join("<br>"));
}
} else {
window.location.href = "/login";
}
}).catch(e => {
showError("error", e.message);
})
}
})()