113 lines
2.8 KiB
JavaScript
113 lines
2.8 KiB
JavaScript
// ENVIRONMENT
|
|
require("dotenv").config();
|
|
|
|
// DATABASE
|
|
const { PrismaClient : CMSClient } = require("../../prisma/clients/cms");
|
|
|
|
const prisma = new CMSClient();
|
|
|
|
const { v4: uuidv4 } = require("uuid");
|
|
const jwt = require("jsonwebtoken");
|
|
const argon2 = require("argon2");
|
|
|
|
const { localTime } = require("../services/time.services.js");
|
|
|
|
// CONSTANTS
|
|
const { successResponse } = require("../res/responses.js");
|
|
const { errorResponse } = require("../res/responses.js");
|
|
const { notFoundResponse } = require("../res/responses.js");
|
|
const { badRequestResponse } = require("../res/responses.js");
|
|
|
|
// ENV
|
|
const { JWT_SECRET_KEY } = process.env;
|
|
|
|
// CONTROLLERS
|
|
exports.adminLogin = async (req, res) => {
|
|
try {
|
|
const { email, password } = req.body;
|
|
|
|
if (!email || !password) {
|
|
return badRequestResponse(
|
|
res,
|
|
"Email and password are required",
|
|
"Missing credentials"
|
|
);
|
|
}
|
|
|
|
const admin = await prisma.adminAccount.findFirst({
|
|
where: {
|
|
Email_AA: email,
|
|
},
|
|
});
|
|
|
|
if (!admin) {
|
|
return notFoundResponse(res, "Admin not found!");
|
|
}
|
|
|
|
if (await argon2.verify(admin.Password_AA, req.body.password)) {
|
|
const accessToken = jwt.sign({ userID: admin.UUID_AA }, JWT_SECRET_KEY, {
|
|
expiresIn: "1d",
|
|
});
|
|
|
|
await prisma.adminAccount.update({
|
|
where: {
|
|
UUID_AA: admin.UUID_AA,
|
|
},
|
|
data: {
|
|
UpdatedAt_AA: localTime(new Date()),
|
|
LastLogin_AA: localTime(new Date()),
|
|
},
|
|
});
|
|
|
|
return successResponse(res, "Authenticated!", {
|
|
admin: {
|
|
id: admin.UUID_AA,
|
|
name: admin.Username_AA,
|
|
email: admin.Email_AA,
|
|
},
|
|
token: accessToken,
|
|
});
|
|
} else {
|
|
return errorResponse(res, "Invalid email or password!");
|
|
}
|
|
} catch (err) {
|
|
return notFoundResponse(res, "Admin account not found", err);
|
|
}
|
|
};
|
|
|
|
exports.adminRegister = async (req, res) => {
|
|
try {
|
|
const { username, email, password } = req.body;
|
|
|
|
if (!username || !email || !password) {
|
|
return badRequestResponse(
|
|
res,
|
|
"Username, email, and password are required",
|
|
"Missing fields"
|
|
);
|
|
}
|
|
|
|
const hashedPassword = await argon2.hash(password);
|
|
|
|
const newAdmin = await prisma.adminAccount.create({
|
|
data: {
|
|
UUID_AA: uuidv4(),
|
|
Username_AA: username,
|
|
Email_AA: email,
|
|
Password_AA: hashedPassword,
|
|
CreatedAt_AA: localTime(new Date()),
|
|
},
|
|
});
|
|
|
|
return successResponse(res, "Admin registered successfully!", {
|
|
admin: {
|
|
id: newAdmin.UUID_AA,
|
|
name: newAdmin.Username_AA,
|
|
email: newAdmin.Email_AA,
|
|
},
|
|
});
|
|
} catch (err) {
|
|
return errorResponse(res, "Error registering admin", err);
|
|
}
|
|
};
|