- Added verify status to user login - Added option to disable email verification - Added roles route - Added role management to users
92 lines
4.4 KiB
JavaScript
92 lines
4.4 KiB
JavaScript
import express from 'express';
|
|
import { error } from '../modules/logManager';
|
|
import { pool } from '../modules/databaseManager';
|
|
import { verifyToken } from '../modules/tokenManager';
|
|
import { respondWithStatus, respondWithStatusJSON } from '../modules/requestHandler';
|
|
import { checkBanned, checkPermissions } from '../modules/permissionManager';
|
|
|
|
const router = express.Router();
|
|
|
|
|
|
// GET role list
|
|
router.get('/', verifyToken, checkBanned, checkPermissions('role', 1), async (req, res) => {
|
|
try {
|
|
const rows = await pool.execute('SELECT * FROM roles');
|
|
if (rows[0].length === 0) return await respondWithStatus(res, 404, 'No roles found');
|
|
return await respondWithStatusJSON(res, rows[0]);
|
|
|
|
}
|
|
catch (err) {
|
|
error(err);
|
|
return await respondWithStatus(res, 500, 'An error has occured');
|
|
}
|
|
});
|
|
|
|
// POST create role
|
|
router.post('/', verifyToken, checkBanned, checkPermissions('role', 2), async (req, res) => {
|
|
const { name, user_bitfield, role_bitfield, verification_code_bitfield, ban_bitfield, patient_bitfield, doctor_bitfield, service_bitfield, company_bitfield, hospital_bitfield, room_bitfield, appointment_bitfield } = req.body;
|
|
if ([ name, user_bitfield, role_bitfield, verification_code_bitfield, ban_bitfield, patient_bitfield, doctor_bitfield, service_bitfield, company_bitfield, hospital_bitfield, room_bitfield, appointment_bitfield ].every(Boolean)) {
|
|
try {
|
|
await pool.execute(
|
|
'INSERT INTO users (name, user_bitfield, role_bitfield, verification_code_bitfield, ban_bitfield, patient_bitfield, doctor_bitfield, service_bitfield, company_bitfield, hospital_bitfield, room_bitfield, appointment_bitfield) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)',
|
|
[ name, user_bitfield, role_bitfield, verification_code_bitfield, ban_bitfield, patient_bitfield, doctor_bitfield, service_bitfield, company_bitfield, hospital_bitfield, room_bitfield, appointment_bitfield ],
|
|
);
|
|
return await respondWithStatus(res, 200, 'Role created successfully');
|
|
}
|
|
catch (err) {
|
|
error(err);
|
|
return await respondWithStatus(res, 500, 'An error has occured');
|
|
}
|
|
}
|
|
else {
|
|
return await respondWithStatus(res, 400, 'Missing fields');
|
|
}
|
|
});
|
|
|
|
// GET role
|
|
router.get('/:id', verifyToken, checkBanned, checkPermissions('role', 1), async (req, res) => {
|
|
try {
|
|
const [rows] = await pool.execute('SELECT * FROM roles WHERE id = ? LIMIT 1', [ req.params.id ]);
|
|
if (rows.length === 0) return await respondWithStatus(res, 404, 'Role not found');
|
|
return await respondWithStatusJSON(res, rows[0]);
|
|
}
|
|
catch (err) {
|
|
error(err);
|
|
return await respondWithStatus(res, 500, 'An error has occured');
|
|
}
|
|
});
|
|
|
|
// PUT update role
|
|
router.put('/:id', verifyToken, checkBanned, checkPermissions('role', 2), async (req, res) => {
|
|
const { name, user_bitfield, role_bitfield, verification_code_bitfield, ban_bitfield, patient_bitfield, doctor_bitfield, service_bitfield, company_bitfield, hospital_bitfield, room_bitfield, appointment_bitfield } = req.body;
|
|
if ([ name, user_bitfield, role_bitfield, verification_code_bitfield, ban_bitfield, patient_bitfield, doctor_bitfield, service_bitfield, company_bitfield, hospital_bitfield, room_bitfield, appointment_bitfield ].every(Boolean)) {
|
|
try {
|
|
await pool.execute(
|
|
'UPDATE roles SET name = ?, user_bitfield = ?, role_bitfield = ?, verification_code_bitfield = ?, ban_bitfield = ?, patient_bitfield = ?, doctor_bitfield = ?, service_bitfield = ?, company_bitfield = ?, hospital_bitfield = ?, room_bitfield = ?, appointment_bitfield = ? WHERE id = ?',
|
|
[ name, user_bitfield, role_bitfield, verification_code_bitfield, ban_bitfield, patient_bitfield, doctor_bitfield, service_bitfield, company_bitfield, hospital_bitfield, room_bitfield, appointment_bitfield, req.params.id ],
|
|
);
|
|
return await respondWithStatus(res, 200, 'Role updated successfully');
|
|
}
|
|
catch (err) {
|
|
error(err);
|
|
return await respondWithStatus(res, 500, 'An error has occured');
|
|
}
|
|
}
|
|
else {
|
|
return await respondWithStatus(res, 400, 'Missing fields');
|
|
}
|
|
});
|
|
|
|
// DELETE role
|
|
router.delete('/:id', verifyToken, checkBanned, checkPermissions('role', 4), async (req, res) => {
|
|
try {
|
|
await pool.execute('DELETE FROM roles WHERE id = ?', [ req.params.id ]);
|
|
return await respondWithStatus(res, 200, 'Role deleted successfully');
|
|
}
|
|
catch (err) {
|
|
error(err);
|
|
return await respondWithStatus(res, 500, 'An error has occured');
|
|
}
|
|
});
|
|
|
|
export default router; |