mirror of
https://gitlab.com/wgp/dougal/software.git
synced 2025-12-06 12:17:08 +00:00
Add /user endpoints to API
This commit is contained in:
@@ -330,17 +330,17 @@ app.map({
|
|||||||
},
|
},
|
||||||
'/rss/': {
|
'/rss/': {
|
||||||
get: [ mw.rss.get ]
|
get: [ mw.rss.get ]
|
||||||
}
|
},
|
||||||
//
|
//
|
||||||
// '/user': {
|
'/user': {
|
||||||
// get: [ mw.user.get ],
|
get: [ mw.auth.access.read, mw.etag.noSave, mw.user.list ],
|
||||||
// post: [ mw.user.put ]
|
post: [ mw.auth.access.edit, mw.etag.noSave, mw.user.post ],
|
||||||
// },
|
},
|
||||||
// '/user/:user': {
|
'/user/:user_id': {
|
||||||
// get: [ mw.user.get ],
|
get: [ mw.user.get ],
|
||||||
// put: [ mw.user.put ],
|
put: [ mw.user.put ],
|
||||||
// // delete: [ mw.user.delete ]
|
delete: [ mw.user.delete ]
|
||||||
// },
|
},
|
||||||
//
|
//
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
32
lib/www/server/api/middleware/user/delete.js
Normal file
32
lib/www/server/api/middleware/user/delete.js
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
|
||||||
|
// const { user } = require('../../../lib/db');
|
||||||
|
// const organisations = require('../../../lib/organisations');
|
||||||
|
const ServerUser = require('../../../lib/db/user/User');
|
||||||
|
|
||||||
|
module.exports = async function (req, res, next) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (req.params.user_id == req.user?.id) {
|
||||||
|
throw {status: 403, message: "Cannot self-delete"};
|
||||||
|
} else {
|
||||||
|
const requestor = new ServerUser(req.user);
|
||||||
|
const target = await ServerUser.fromSQL(null, req.params.user_id);
|
||||||
|
|
||||||
|
if (requestor.canEdit(target)) {
|
||||||
|
if (await target.remove()) {
|
||||||
|
res.status(204).send();
|
||||||
|
} else {
|
||||||
|
// Delete did not return a successful response. We assume this
|
||||||
|
// is because the user did not exist in the first place so we
|
||||||
|
// still return a success response
|
||||||
|
res.status(202).send();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
throw {status: 403, message: "Access denied"};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
next(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
const ServerUser = require('../../../lib/db/user/User');
|
||||||
|
|
||||||
|
module.exports = async function (req, res, next) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
const user = new ServerUser(req.user);
|
||||||
|
const target = await ServerUser.fromSQL(null, req.params.user_id);
|
||||||
|
|
||||||
|
if (requestor.canSee(target)) {
|
||||||
|
res.status(200).send(target.toJSON());
|
||||||
|
} else {
|
||||||
|
throw {status: 403, message: "Access denied"};
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
next(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|||||||
@@ -1,3 +1,10 @@
|
|||||||
|
|
||||||
exports.login = require('./login');
|
module.exports = {
|
||||||
exports.logout = require('./logout');
|
login: require('./login'),
|
||||||
|
logout: require('./logout'),
|
||||||
|
list: require('./list'),
|
||||||
|
get: require('./get'),
|
||||||
|
post: require('./post'),
|
||||||
|
put: require('./put'),
|
||||||
|
delete: require('./delete'),
|
||||||
|
}
|
||||||
|
|||||||
27
lib/www/server/api/middleware/user/list.js
Normal file
27
lib/www/server/api/middleware/user/list.js
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
|
||||||
|
const ServerUser = require('../../../lib/db/user/User');
|
||||||
|
const { pool } = require('../../../lib/db/connection');
|
||||||
|
|
||||||
|
module.exports = async function (req, res, next) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
const requestor = new ServerUser(req.user, pool);
|
||||||
|
console.log("REQUESTOR", requestor.toJSON());
|
||||||
|
if (requestor.name) {
|
||||||
|
const allUsers = await ServerUser.fromSQL(); // Get all users
|
||||||
|
const listableUsers = requestor.editablePeers(allUsers);
|
||||||
|
res.status(200).send(listableUsers.map(u => u.toJSON()));
|
||||||
|
}
|
||||||
|
|
||||||
|
// const userOrgs = organisations.extract(req.user?.organisations ?? {}, [ "write", "edit" ]);
|
||||||
|
// const users = await user.list(userOrgs.includes("*") ? null : userOrgs); // null: list all
|
||||||
|
// console.log("user", JSON.stringify(req.user, null, 4));
|
||||||
|
// console.log("userOrgs", userOrgs);
|
||||||
|
// console.log("users", users);
|
||||||
|
// res.status(200).send(users);
|
||||||
|
next();
|
||||||
|
} catch (err) {
|
||||||
|
next(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
27
lib/www/server/api/middleware/user/post.js
Normal file
27
lib/www/server/api/middleware/user/post.js
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
|
||||||
|
const ServerUser = require('../../../lib/db/user/User');
|
||||||
|
const { pool } = require('../../../lib/db/connection');
|
||||||
|
|
||||||
|
module.exports = async function (req, res, next) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
// const data = await user.create(req.body, req.user?.organisations);
|
||||||
|
// res.status(203).send(data);
|
||||||
|
const requestor = new ServerUser(req.user, pool);
|
||||||
|
if (requestor.name) {
|
||||||
|
const newUser = new ServerUser(req.body);
|
||||||
|
newUser.filter(requestor);
|
||||||
|
newUser.client = pool;
|
||||||
|
console.log("newUser", newUser.toJSON());
|
||||||
|
const asSaved = await newUser.save();
|
||||||
|
console.log("asSaved", asSaved);
|
||||||
|
if (asSaved instanceof ServerUser) {
|
||||||
|
res.status(200).send(asSaved.toJSON());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
next();
|
||||||
|
} catch (err) {
|
||||||
|
next(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
|
||||||
|
const ServerUser = require('../../../lib/db/user/User');
|
||||||
|
|
||||||
|
module.exports = async function (req, res, next) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
// const data = await user.create(req.body, req.user?.organisations);
|
||||||
|
// res.status(203).send(data);
|
||||||
|
const requestor = new ServerUser(req.user);
|
||||||
|
if (requestor.name) {
|
||||||
|
const target = await ServerUser.fromSQL(null, req.params.user_id);
|
||||||
|
const changes = req.body;
|
||||||
|
|
||||||
|
if (requestor.id == target.id || requestor.canEdit(target)) {
|
||||||
|
|
||||||
|
if (requestor.id == target.id) {
|
||||||
|
// User cannot self-deactivate
|
||||||
|
newUser.active = requestor.active;
|
||||||
|
}
|
||||||
|
|
||||||
|
const edited = await requestor.edit(target).to(changes).save();
|
||||||
|
|
||||||
|
if (edited instanceof ServerUser) {
|
||||||
|
res.status(200).send(edited.toJSON());
|
||||||
|
} else {
|
||||||
|
console.log("Unexpected result", edited);
|
||||||
|
throw({status: 500, message: "Unexpected response when editing user"});
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
next({status: 403, message: "Access denied"});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
next();
|
||||||
|
} catch (err) {
|
||||||
|
next(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user