summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLauri Ojansivu <x@xet7.org>2018-10-02 00:21:43 +0300
committerLauri Ojansivu <x@xet7.org>2018-10-02 00:21:43 +0300
commit33caf1809a459b136b671f7061f08eb5e8d5e920 (patch)
tree3f37385a9c79807db055f86822cbeb72c40d2c00
parentfccdffb9cc70f2ec4fd751aec793a24320120087 (diff)
downloadwekan-33caf1809a459b136b671f7061f08eb5e8d5e920.tar.gz
wekan-33caf1809a459b136b671f7061f08eb5e8d5e920.tar.bz2
wekan-33caf1809a459b136b671f7061f08eb5e8d5e920.zip
- REST API: Add member with role to board. Remove member from board.
Docs: https://github.com/wekan/wekan/wiki/REST-API-Role - OAuth2: Change Oidc preferred_username back to username. Thanks to xet7 ! Related #1861
-rw-r--r--models/users.js77
1 files changed, 76 insertions, 1 deletions
diff --git a/models/users.js b/models/users.js
index d1b8d047..60e9e759 100644
--- a/models/users.js
+++ b/models/users.js
@@ -491,7 +491,7 @@ if (Meteor.isServer) {
if (user.services.oidc) {
const email = user.services.oidc.email.toLowerCase();
- user.username = user.services.oidc.preferred_username;
+ user.username = user.services.oidc.username;
user.emails = [{ address: email, verified: true }];
const initials = user.services.oidc.fullname.match(/\b[a-zA-Z]/g).join('').toUpperCase();
user.profile = { initials, fullname: user.services.oidc.fullname };
@@ -766,6 +766,81 @@ if (Meteor.isServer) {
}
});
+ JsonRoutes.add('POST', '/api/boards/:boardId/members/:userId/add', function (req, res) {
+ try {
+ Authentication.checkUserId(req.userId);
+ const userId = req.params.userId;
+ const boardId = req.params.boardId;
+ const action = req.body.action;
+ const {isAdmin, isNoComments, isCommentOnly} = req.body;
+ let data = Meteor.users.findOne({ _id: userId });
+ if (data !== undefined) {
+ if (action === 'add') {
+ data = Boards.find({
+ _id: boardId,
+ }).map(function(board) {
+ if (!board.hasMember(userId)) {
+ board.addMember(userId);
+ function isTrue(data){
+ return data.toLowerCase() === 'true';
+ }
+ board.setMemberPermission(userId, isTrue(isAdmin), isTrue(isNoComments), isTrue(isCommentOnly), userId);
+ }
+ return {
+ _id: board._id,
+ title: board.title,
+ };
+ });
+ }
+ }
+ JsonRoutes.sendResult(res, {
+ code: 200,
+ data: query,
+ });
+ }
+ catch (error) {
+ JsonRoutes.sendResult(res, {
+ code: 200,
+ data: error,
+ });
+ }
+ });
+
+ JsonRoutes.add('POST', '/api/boards/:boardId/members/:userId/remove', function (req, res) {
+ try {
+ Authentication.checkUserId(req.userId);
+ const userId = req.params.userId;
+ const boardId = req.params.boardId;
+ const action = req.body.action;
+ let data = Meteor.users.findOne({ _id: userId });
+ if (data !== undefined) {
+ if (action === 'remove') {
+ data = Boards.find({
+ _id: boardId,
+ }).map(function(board) {
+ if (board.hasMember(userId)) {
+ board.removeMember(userId);
+ }
+ return {
+ _id: board._id,
+ title: board.title,
+ };
+ });
+ }
+ }
+ JsonRoutes.sendResult(res, {
+ code: 200,
+ data: query,
+ });
+ }
+ catch (error) {
+ JsonRoutes.sendResult(res, {
+ code: 200,
+ data: error,
+ });
+ }
+ });
+
JsonRoutes.add('POST', '/api/users/', function (req, res) {
try {
Authentication.checkUserId(req.userId);