delete org

This commit is contained in:
xfarrow 2023-10-13 12:34:15 +02:00
parent 0593b0fb01
commit 03d2283a3f
2 changed files with 42 additions and 11 deletions

View File

@ -22,14 +22,15 @@ const port = process.env.API_SERVER_PORT;
app.use(express.json()); app.use(express.json());
// Register a Person // Register a Person
app.post('/blinkapi/register', api_controller.register); app.post('/blinkapi/register', api_controller.registerPerson);
// Login // Login
app.post('/blinkapi/login', api_controller.login); app.post('/blinkapi/login', api_controller.login);
// Obtain Person's details // Obtain Person's details
app.get('/blinkapi/person/:id', api_controller.verifyToken, api_controller.person); app.get('/blinkapi/person/:id', api_controller.verifyToken, api_controller.getPerson);
// Create organization // Create organization
app.post('/blinkapi/organization', api_controller.verifyToken, api_controller.organization); app.post('/blinkapi/organization', api_controller.verifyToken, api_controller.createOrganization);
// Delete organization
app.delete('/blinkapi/organization/:id', api_controller.verifyToken, api_controller.deleteOrganization);
// Start the server // Start the server
app.listen(port, () => { app.listen(port, () => {
console.log(`Blink API server is running on port ${port}`); console.log(`Blink API server is running on port ${port}`);

View File

@ -28,7 +28,7 @@ const db = pgp(database_configuration);
// ======== API ENDPOINTS ======== // ======== API ENDPOINTS ========
// POST // POST
async function register(req, res){ async function registerPerson(req, res){
const userData = req.body; const userData = req.body;
@ -107,7 +107,7 @@ async function login(req, res){
} }
// GET // GET
async function person(req, res){ async function getPerson(req, res){
try { try {
const user = await db.oneOrNone('SELECT * FROM "Person" WHERE id = $1 and enabled = $2' , [req.params.id, false]); const user = await db.oneOrNone('SELECT * FROM "Person" WHERE id = $1 and enabled = $2' , [req.params.id, false]);
@ -125,7 +125,7 @@ async function person(req, res){
} }
// POST // POST
async function organization(req, res){ async function createOrganization(req, res){
const organizationData = req.body; const organizationData = req.body;
// Ensure that the required fields are present before proceeding // Ensure that the required fields are present before proceeding
@ -171,11 +171,28 @@ async function organization(req, res){
} }
} }
// DELETE
async function deleteOrganization(req, res){
const organizationIdToDelete = req.params.id;
try {
if(await isPersonOrganizationAdmin(req.jwt.person_id, organizationIdToDelete)){
await db.none('DELETE FROM "Organization" WHERE id = $1', [organizationIdToDelete]);
return res.status(200).json("Ok");
}
return res.status(403).json("Forbidden");
}
catch (error) {
console.error(error);
return res.status(500);
}
}
// ======== END API ENDPOINTS ======== // ======== END API ENDPOINTS ========
async function checkUserCredentials(email, password){ async function checkUserCredentials(email, password){
try { try {
const user = await db.oneOrNone('SELECT * FROM "Person" WHERE email = $1 and enabled = $2', [email, false]); const user = await db.oneOrNone('SELECT * FROM "Person" WHERE email = $1 and enabled = $2', [email, true]);
if(user){ if(user){
const passwordMatches = await bcrypt.compare(password, user.password); const passwordMatches = await bcrypt.compare(password, user.password);
if (passwordMatches) { if (passwordMatches) {
@ -190,6 +207,18 @@ async function checkUserCredentials(email, password){
} }
} }
async function isPersonOrganizationAdmin(personId, organizationId){
try {
if(await db.oneOrNone('SELECT * FROM "OrganizationAdministrator" WHERE id_person = $1 AND id_organization = $2', [personId, organizationId])){
return true;
}
return false;
}
catch (error) {
return false;
}
}
function generateToken(person_id) { function generateToken(person_id) {
const payload = { const payload = {
person_id: person_id person_id: person_id
@ -222,9 +251,10 @@ function verifyToken(req, res, next) {
// means making a JavaScript function defined in one // means making a JavaScript function defined in one
// module available for use in another module. // module available for use in another module.
module.exports = { module.exports = {
register, registerPerson,
login, login,
person, getPerson,
verifyToken, verifyToken,
organization createOrganization,
deleteOrganization
}; };