160 lines
4.4 KiB
JavaScript
160 lines
4.4 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);
|
|
});
|
|
};
|
|
})();
|