OpenAuth_server/views/src/register/register.js

160 lines
4.4 KiB
JavaScript
Raw Normal View History

2018-11-06 19:48:50 +00:00
import "inputs";
import sha from "sha512";
2020-08-07 14:16:39 +00:00
import fireEvent from "event";
2018-11-06 19:48:50 +00:00
(() => {
2020-08-07 14:16:39 +00:00
const translations = JSON.parse(
document.getElementById("error_codes").innerText
);
2018-11-06 19:48:50 +00:00
2020-08-07 14:16:39 +00:00
const regcode = document.getElementById("regcode");
regcode.value = new URL(window.location.href).searchParams.get("regcode");
2018-11-06 19:48:50 +00:00
fireEvent(regcode, "change");
function showError(element, message) {
if (typeof element === "string")
2020-08-07 14:16:39 +00:00
element = document.getElementById(element);
2018-11-06 19:48:50 +00:00
2020-08-07 14:16:39 +00:00
if (!element) console.error("Element not found,", element);
2018-11-06 19:48:50 +00:00
element.innerText = message;
if (!message) {
if (!element.classList.contains("invisible"))
2020-08-07 14:16:39 +00:00
element.classList.add("invisible");
2018-11-06 19:48:50 +00:00
} else {
element.classList.remove("invisible");
}
}
function makeid(length) {
var text = "";
2020-08-07 14:16:39 +00:00
var possible =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
2018-11-06 19:48:50 +00:00
for (var i = 0; i < length; i++)
text += possible.charAt(Math.floor(Math.random() * possible.length));
return text;
}
2020-08-07 14:16:39 +00:00
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");
2018-11-06 19:48:50 +00:00
2020-08-07 14:16:39 +00:00
const radio_male = document.getElementById("radio-male");
const radio_female = document.getElementById("radio-female");
const radio_other = document.getElementById("radio-other");
2018-11-06 19:48:50 +00:00
2020-08-07 14:16:39 +00:00
const registerButton = document.getElementById("registerbutton");
2018-11-06 19:48:50 +00:00
registerButton.onclick = () => {
2020-08-07 14:16:39 +00:00
console.log("Register");
2018-11-06 19:48:50 +00:00
showError("error");
let error = false;
if (!regcode.value) {
2020-08-07 14:16:39 +00:00
showError("err_regcode", translations["noregcode"]);
2018-11-06 19:48:50 +00:00
error = true;
} else {
2020-08-07 14:16:39 +00:00
showError("err_regcode");
2018-11-06 19:48:50 +00:00
}
if (!username.value) {
2020-08-07 14:16:39 +00:00
showError("err_username", translations["nousername"]);
2018-11-06 19:48:50 +00:00
error = true;
} else {
2020-08-07 14:16:39 +00:00
showError("err_username");
2018-11-06 19:48:50 +00:00
}
if (!name.value) {
2020-08-07 14:16:39 +00:00
showError("err_name", translations["noname"]);
2018-11-06 19:48:50 +00:00
error = true;
} else {
2020-08-07 14:16:39 +00:00
showError("err_name");
2018-11-06 19:48:50 +00:00
}
if (!mail.value) {
2020-08-07 14:16:39 +00:00
showError("err_mail", translations["nomail"]);
2018-11-06 19:48:50 +00:00
error = true;
} else {
2020-08-07 14:16:39 +00:00
showError("err_mail");
2018-11-06 19:48:50 +00:00
}
if (!password.value) {
2020-08-07 14:16:39 +00:00
showError("err_password", translations["nopassword"]);
2018-11-06 19:48:50 +00:00
error = true;
} else {
2020-08-07 14:16:39 +00:00
showError("err_password");
2018-11-06 19:48:50 +00:00
}
if (password.value !== passwordrep.value) {
2020-08-07 14:16:39 +00:00
showError("err_passwordrep", translations["nomatch"]);
2018-11-06 19:48:50 +00:00
error = true;
} else {
2020-08-07 14:16:39 +00:00
showError("err_passwordrep");
2018-11-06 19:48:50 +00:00
}
if (error) return;
let gender;
if (radio_male.checked) {
2020-08-07 14:16:39 +00:00
gender = "male";
2018-11-06 19:48:50 +00:00
} else if (radio_female.checked) {
2020-08-07 14:16:39 +00:00
gender = "female";
2018-11-06 19:48:50 +00:00
} else {
2020-08-07 14:16:39 +00:00
gender = "other";
2018-11-06 19:48:50 +00:00
}
2020-08-07 14:16:39 +00:00
let salt = makeid(10);
2018-11-06 19:48:50 +00:00
//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,
2020-08-07 14:16:39 +00:00
password: sha(salt + password.value),
};
2018-11-06 19:48:50 +00:00
fetch("/api/user/register", {
method: "POST",
body: JSON.stringify(body),
headers: {
2020-08-07 14:16:39 +00:00
"content-type": "application/json",
2018-11-06 19:48:50 +00:00
},
2020-08-07 14:16:39 +00:00
})
.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>"));
2018-11-06 19:48:50 +00:00
}
2020-08-07 14:16:39 +00:00
} else {
window.location.href = "/login";
2018-11-06 19:48:50 +00:00
}
2020-08-07 14:16:39 +00:00
})
.catch((e) => {
showError("error", e.message);
});
};
})();