From 9926f0d6245f7d182e4599ebe79ff6be0fb3664f Mon Sep 17 00:00:00 2001 From: linuxbandit Date: Sat, 7 Nov 2020 16:02:02 +0100 Subject: [PATCH] feat: add list users useful only for MA-56 --- lib/config/configFile.js | 1 + lib/gsuite-wrapper.js | 75 +++++++++++++++++++++++++++++++++++++++- lib/server.js | 1 + 3 files changed, 76 insertions(+), 1 deletion(-) diff --git a/lib/config/configFile.js b/lib/config/configFile.js index 6ad355a2..8971488e 100644 --- a/lib/config/configFile.js +++ b/lib/config/configFile.js @@ -5,6 +5,7 @@ const config = require('config'); config.GsuiteKeys = require('./myaegee-serviceaccount.json'); config.GsuiteKeys.delegatedUser = require('./secrets.json').delegatedUser; +config.customer_ID = require('./secrets.json').customer_ID; module.exports = config; // module.exports = exports = config ; diff --git a/lib/gsuite-wrapper.js b/lib/gsuite-wrapper.js index 8916bb79..cf0fdcab 100644 --- a/lib/gsuite-wrapper.js +++ b/lib/gsuite-wrapper.js @@ -1,7 +1,7 @@ const {runGsuiteOperation, gsuiteOperations} = require('./google-suite.js'); const log = require('./util/logger.js'); - +const config = require('./config/configFile.js'); const redis = require('./redis.js').db; // API DEFINITION @@ -558,6 +558,79 @@ exports.editAccount = async function(req, res, next) { return res.status(statusCode).json(response); }; + +/** + * @swagger + * + * /account: + * get: + * description: Get all accounts on gsuite (used only once) + * tags: + * - Account + * produces: + * - application/json + * parameters: + * - name: pageToken + * description: The token for the next page of results + * in: query + * required: false + * type: string + * - name: max + * description: Max returned (default ?max=10) + * in: query + * required: false + * type: string + * - name: q + * description: The query (default ?q=orgUnitPath=/individuals ) + * in: query + * required: false + * type: string + * - name: sort + * description: Sorting order (default ?sort=ASCENDING) + * in: query + * required: false + * type: string + * responses: + * 200: + * description: The user list is returned + * schema: + * '$ref': '#/definitions/successResponse' + * 403: + * description: Unauthorised + * schema: + * '$ref': '#/definitions/generalResponse' + * 500: + * description: Internal error + * schema: + * '$ref': '#/definitions/errorResponse' + */ + +exports.listAccounts = async function(req, res , next) { + log.debug(req.headers['test-title']); + + const payload = { + "pageToken": req.query.pageToken, + "maxResults": req.query.max, + "query": req.query.q || "orgUnitPath=/individuals", + "sortOrder": req.query.sort || "ASCENDING", + "customer": config.customer_ID, + "orderBy": "familyName" + }; + + try{ + let result = await runGsuiteOperation(gsuiteOperations.listAccounts, payload); + response = {success: result.success, message: "There you go mate", data: result.data }; + statusCode = result.code; + + }catch(GsuiteError){ + log.warn("GsuiteError"); + response = {success: false, errors: GsuiteError.errors, message: GsuiteError.errors[0].message }; + statusCode = GsuiteError.code; + } + + return res.status(statusCode).json(response); +}; + /** * @swagger * diff --git a/lib/server.js b/lib/server.js index 30dcc918..459835d6 100644 --- a/lib/server.js +++ b/lib/server.js @@ -20,6 +20,7 @@ GsuiteRouter.post('/group', wrapper.createGroup); // circle is created -> create GsuiteRouter.put('/account/:userPK/group', wrapper.editMembershipToGroup); // user is into a circle -> user is added to a group GsuiteRouter.delete('/group/:bodyPK', wrapper.deleteGroup); // body is deleted -> group is deleted //FIXME: archived* +GsuiteRouter.get('/account', wrapper.listAccounts); //retrieve list of accounts GsuiteRouter.post('/account', wrapper.createAccount); // member is created -> create an account GsuiteRouter.put('/account/:userPK/alias', wrapper.updateAlias); // user may need an alias (netcom-xxx@aegee.eu) GsuiteRouter.get('/account/:userPK/alias', wrapper.getAliasFromRedis); // user can read their alias (netcom-xxx@aegee.eu)