86 lines
2.3 KiB
JavaScript
86 lines
2.3 KiB
JavaScript
import * as authService from "../../services/authService.js";
|
|
import { bcrypt, validasaur } from "../../deps.js";
|
|
|
|
const validationRules = {
|
|
username: [validasaur.required],
|
|
password: [validasaur.minLength(8), validasaur.required],
|
|
};
|
|
|
|
const showLogin = ({ render }) => {
|
|
render("login.eta");
|
|
};
|
|
|
|
const showRegister = ({ render }) => {
|
|
render("register.eta");
|
|
};
|
|
|
|
const register = async ({ request, response, render }) => {
|
|
const body = request.body({ type: "form" });
|
|
const params = await body.value;
|
|
const userData = {
|
|
username: params.get("username"),
|
|
password: params.get("password"),
|
|
};
|
|
|
|
const userDatabase = await authService.findUser(userData.username);
|
|
if (userDatabase.length > 0) {
|
|
response.status = 422;
|
|
render("register.eta", {
|
|
errors: { error: { message: "Username already registered!" } },
|
|
});
|
|
return;
|
|
}
|
|
|
|
const [passes, errors] = await validasaur.validate(userData, validationRules);
|
|
|
|
if (!passes) {
|
|
response.status = 422;
|
|
userData.errors = errors;
|
|
render("register.eta", userData);
|
|
} else {
|
|
const hashedPassword = await bcrypt.hash(userData.password);
|
|
await authService.createUser(userData.username, hashedPassword);
|
|
render("register.eta", {
|
|
errors: { error: { message: "Registration successful!" } },
|
|
});
|
|
}
|
|
};
|
|
|
|
const login = async ({ request, response, state, render }) => {
|
|
const body = request.body({ type: "form" });
|
|
const params = await body.value;
|
|
const username = params.get("username");
|
|
const userDatabase = await authService.findUser(username);
|
|
if (userDatabase.length < 1) {
|
|
response.status = 422;
|
|
render("login.eta", {
|
|
errors: { error: { message: "Please enter correct username!" } },
|
|
});
|
|
return;
|
|
}
|
|
|
|
const user = userDatabase[0];
|
|
const passwordCorrect = await bcrypt.compare(
|
|
params.get("password"),
|
|
user.password
|
|
);
|
|
|
|
if (!passwordCorrect) {
|
|
response.status = 422;
|
|
render("login.eta", {
|
|
errors: { error: { message: "Please enter correct password!" } },
|
|
});
|
|
return;
|
|
}
|
|
|
|
await state.session.set("user", user);
|
|
response.redirect("/index");
|
|
};
|
|
|
|
const logout = async ({ response, state }) => {
|
|
await state.session.set("user", null);
|
|
response.redirect("/");
|
|
};
|
|
|
|
export { showLogin, showRegister, register, login, logout };
|