fix addOrganizationAdmin + code cleanup + db enhancement

This commit is contained in:
xfarrow 2023-10-18 09:23:52 +02:00
parent e004ba58e9
commit 414b99a462
3 changed files with 37 additions and 25 deletions

View File

@ -20,7 +20,7 @@ app.use(express.json()); // Middleware which parses JSON for POST requests
app.post('/blinkapi/register', api_controller.registerPerson); // Register a Person app.post('/blinkapi/register', api_controller.registerPerson); // Register a Person
app.post('/blinkapi/login', api_controller.login); // Login app.post('/blinkapi/login', api_controller.login); // Login
app.get('/blinkapi/person/:id', api_controller.verifyToken, api_controller.getPerson); // Obtain Person's details app.get('/blinkapi/person/:id', api_controller.verifyToken, api_controller.getPerson); // Obtain Person's details
app.delete('/blinkapi/person/:id', api_controller.verifyToken, api_controller.deletePerson); // Delete a Person app.delete('/blinkapi/person/delete', api_controller.verifyToken, api_controller.deletePerson); // Delete a Person
app.post('/blinkapi/organization', api_controller.verifyToken, api_controller.createOrganization); // Create organization app.post('/blinkapi/organization', api_controller.verifyToken, api_controller.createOrganization); // Create organization
app.delete('/blinkapi/organization/:id', api_controller.verifyToken, api_controller.deleteOrganization); // Delete organization app.delete('/blinkapi/organization/:id', api_controller.verifyToken, api_controller.deleteOrganization); // Delete organization
app.post('/blinkapi/organization/post', api_controller.verifyToken, api_controller.createOrganizationPost); // Create a organization's post app.post('/blinkapi/organization/post', api_controller.verifyToken, api_controller.createOrganizationPost); // Create a organization's post

View File

@ -109,20 +109,17 @@ async function getPerson(req, res){
return res.status(200).send(user); return res.status(200).send(user);
} }
} }
return res.status(403).json({error: "Forbidden"}); return res.status(404).json({error: "Not found"});
} }
catch (error) { catch (error) {
console.log("Error logging in:" + error); console.log("Error while getting person: " + error);
return res.status(500).json({error : "Internal server error"}); return res.status(500).json({error : "Internal server error"});
} }
} }
// GET // GET
async function deletePerson(req, res){ async function deletePerson(req, res) {
if(req.params.id != req.jwt.person_id){ // A user can only delete themselves
return res.status(403).json({error: "Forbidden"});
}
try { try {
await knex('Person') await knex('Person')
.where({id : req.jwt.person_id}) .where({id : req.jwt.person_id})
@ -132,7 +129,6 @@ async function deletePerson(req, res){
console.log("Error deleting a Person: " + error); console.log("Error deleting a Person: " + error);
return res.status(500).json({error : "Internal server error"}); return res.status(500).json({error : "Internal server error"});
} }
} }
// POST // POST
@ -205,6 +201,7 @@ async function createOrganizationPost(req, res){
.insert({ .insert({
organization_id: req.body.organization_id, organization_id: req.body.organization_id,
content: req.body.content, content: req.body.content,
original_author: req.jwt.person_id
}) })
.returning('*'); .returning('*');
return res.status(200).json(organizationPost[0]); return res.status(200).json(organizationPost[0]);
@ -252,24 +249,31 @@ async function deleteOrganizationPost(req, res){
// POST // POST
async function addOrganizationAdmin(req, res){ async function addOrganizationAdmin(req, res){
// Check whether I am admin and if I'm not trying to make myself admin, if I already am
// Ensure that the required fields are present before proceeding
if (!req.body.organization_id || !req.body.person_id) {
return res.status(400).json({ error : "Invalid request"});
}
// Check whether I am admin and if I'm not trying to make myself admin
if(await isPersonOrganizationAdmin(req.jwt.person_id, req.body.organization_id) if(await isPersonOrganizationAdmin(req.jwt.person_id, req.body.organization_id)
&& req.jwt.person_id != req.body.person_id){ && req.jwt.person_id != req.body.person_id){
// Check whether user exists try {
const userToInsert = await knex('Person') // We suppose that the database has Foreign Key constraints
.select('*') await knex('OrganizationAdministrator')
.where({ id: req.body.person_id, enabled: true }) .insert({
.first(); id_person: req.body.person_id,
if(userToInsert){ id_organization: req.body.organization_id
await knex('OrganizationAdministrator') });
.insert({ return res.status(200).json({success : true});
id_person: req.jwt.person_id, }
id_organization: req.body.organization_id catch (error) {
}); console.error('Error while adding organization admin: ' + error);
return res.status(200).json({success : true}); // Foreign Key Constraint Violation
if (error.code === '23503') {
return res.status(404).json({ error : "Not found"});
} }
else { res.status(500).json({error : "Internal server error"});
return res.status(401).json({ error : "Forbidden"});
} }
} }
else { else {

View File

@ -7,6 +7,14 @@ CREATE TABLE IF NOT EXISTS public."OrganizationPost"
id SERIAL PRIMARY KEY, id SERIAL PRIMARY KEY,
organization_id integer NOT NULL, organization_id integer NOT NULL,
content text COLLATE pg_catalog."default" NOT NULL, content text COLLATE pg_catalog."default" NOT NULL,
created_at timestamp without time zone DEFAULT now(),
original_author integer NOT NULL,
CONSTRAINT "OrganizationPost_pkey" PRIMARY KEY (id),
CONSTRAINT "AuthorIdFK" FOREIGN KEY (original_author)
REFERENCES public."Person" (id) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION
NOT VALID,
CONSTRAINT "OrganizationIdFk" FOREIGN KEY (organization_id) CONSTRAINT "OrganizationIdFk" FOREIGN KEY (organization_id)
REFERENCES public."Organization" (id) MATCH SIMPLE REFERENCES public."Organization" (id) MATCH SIMPLE
ON UPDATE CASCADE ON UPDATE CASCADE