Add lots of things
This commit is contained in:
66
drill-and-practice/routes/controllers/authController.js
Normal file
66
drill-and-practice/routes/controllers/authController.js
Normal file
@@ -0,0 +1,66 @@
|
||||
import * as authServices from "../services/authServices.js";
|
||||
import { bcrypt, validasaur } from "../../deps";
|
||||
|
||||
const validationRules = {
|
||||
email: [validasaur.isEmail, validasaur.required],
|
||||
password: [validasaur.minLength(4), validasaur.required],
|
||||
};
|
||||
|
||||
const showLogin = ({ render }) => {
|
||||
render("login.eta");
|
||||
};
|
||||
|
||||
const showRegister = ({ render }) => {
|
||||
render("register.eta");
|
||||
};
|
||||
|
||||
const createUser = async ({ request, response, render }) => {
|
||||
const body = request.body({ type: "form-data" });
|
||||
const params = await body.value;
|
||||
const userData = {
|
||||
email: params.get("email"),
|
||||
password: params.get("password"),
|
||||
};
|
||||
const [passes, errors] = await validasaur.validate(userData, validationRules);
|
||||
|
||||
if (!passes) {
|
||||
response.status = 422;
|
||||
userData.errors = errors;
|
||||
render("register.eta", userData);
|
||||
return;
|
||||
} else {
|
||||
const hashedPassword = await bcrypt.hash(userData.password);
|
||||
const user = await authServices.createUser(userData.email, hashedPassword);
|
||||
response.direct("/auth/login");
|
||||
}
|
||||
};
|
||||
|
||||
const login = async ({ request, response, state, render }) => {
|
||||
const body = request.body({ type: "form" });
|
||||
const params = await body.value;
|
||||
|
||||
const userDatabase = await authServices.findUser(params.get("email"));
|
||||
|
||||
if (userDatabase.length < 1) {
|
||||
response.status = 422;
|
||||
render("login.eta", { error: "User not found!" });
|
||||
return;
|
||||
}
|
||||
|
||||
const user = userDatabase[0];
|
||||
const passwordCorrect = await bcrypt.compare(
|
||||
params.get("password"),
|
||||
user.password
|
||||
);
|
||||
|
||||
if (!passwordCorrect) {
|
||||
response.status = 422;
|
||||
render("login.eta", { error: "Incorrect password!" });
|
||||
return;
|
||||
}
|
||||
|
||||
await state.session.set("authenticated", user);
|
||||
response.direct("/topics");
|
||||
};
|
||||
|
||||
export { showLogin, showRegister, createUser, login };
|
||||
53
drill-and-practice/routes/controllers/topicController.js
Normal file
53
drill-and-practice/routes/controllers/topicController.js
Normal file
@@ -0,0 +1,53 @@
|
||||
import * as topicService from "../../services/topicService.js";
|
||||
import { validasaur } from "../../deps";
|
||||
|
||||
const validationRules = {
|
||||
name: [validasaur.required, validasaur.minLength(1)],
|
||||
};
|
||||
|
||||
const addTopic = async ({ request, response, render, state }) => {
|
||||
const userId = (await state.session.get("user")).id;
|
||||
const admin = (await state.session.get("user")).admin;
|
||||
const body = request.body({ type: "form-data" });
|
||||
const params = await body.value;
|
||||
const topicData = {
|
||||
admin: admin,
|
||||
name: params.get("name"),
|
||||
};
|
||||
const [passes, errors] = await validasaur.validate(
|
||||
topicData,
|
||||
validationRules
|
||||
);
|
||||
|
||||
if (!passes || !admin) {
|
||||
response.status = 422;
|
||||
topicData.errors = errors;
|
||||
if (!admin) {
|
||||
topicData.errors = { admin: { error: "You are not an admin!" } };
|
||||
}
|
||||
topicData.allTopics = await topicService.getAllTopics();
|
||||
render("topics.eta", topicData);
|
||||
} else {
|
||||
await topicService.addTopic(userId, topicData.name);
|
||||
response.redirect("/topics");
|
||||
}
|
||||
};
|
||||
|
||||
const deleteTopic = async ({ params, response, state }) => {
|
||||
const id = params.id;
|
||||
const admin = (await state.session.get("user")).admin;
|
||||
if (admin) {
|
||||
await topicService.deleteTopic(id);
|
||||
}
|
||||
response.redirect("/topics");
|
||||
};
|
||||
|
||||
const listTopics = async ({ render, state }) => {
|
||||
const user = await state.session.get("user");
|
||||
render("topics.eta", {
|
||||
admin: user.admin,
|
||||
allTopics: await topicService.getAllTopics(),
|
||||
});
|
||||
};
|
||||
|
||||
export { addTopic, deleteTopic, listTopics };
|
||||
Reference in New Issue
Block a user