diff --git a/packages/worker/package.json b/packages/worker/package.json index cd3d783f5..557f0e539 100644 --- a/packages/worker/package.json +++ b/packages/worker/package.json @@ -66,6 +66,7 @@ "pino-pretty": "4.8.0", "pouchdb": "7.3.0", "pouchdb-all-dbs": "1.1.1", + "sp-jsom-node": "^4.0.0", "server-destroy": "1.0.1" }, "devDependencies": { @@ -104,4 +105,4 @@ ] }, "gitHead": "d1836a898cab3f8ab80ee6d8f42be1a9eed7dcdc" -} +} \ No newline at end of file diff --git a/packages/worker/src/api/controllers/global/sp2019.ts b/packages/worker/src/api/controllers/global/sp2019.ts new file mode 100644 index 000000000..2d805411c --- /dev/null +++ b/packages/worker/src/api/controllers/global/sp2019.ts @@ -0,0 +1,31 @@ +const { + getGlobalDB, + getTenantId, + isUserInAppTenant, + } = require("@budibase/backend-core/tenancy") + const { sp2019Lists } = require("../../../utilities/sp2019") + + + + + exports.sp2019Lists = async ctx => { + let { + siteUrl, + username, + password, + domain, + } = ctx.request.body + let user + /*if (userId) { + const db = getGlobalDB() + user = await db.get(userId) + }*/ + const response = await sp2019Lists(siteUrl, + username, + password, + domain, + ) + ctx.body = { + ...response + } + } \ No newline at end of file diff --git a/packages/worker/src/api/index.ts b/packages/worker/src/api/index.ts index 21fbf1d99..1c172437d 100644 --- a/packages/worker/src/api/index.ts +++ b/packages/worker/src/api/index.ts @@ -55,6 +55,11 @@ const PUBLIC_ENDPOINTS = [ route: "/api/global/users/tenant/:id", method: "GET", }, + // sharepoint 2019 connector + { + route: "/api/global/sp2019/lists", + method: "POST", + }, ] const NO_TENANCY_ENDPOINTS = [ diff --git a/packages/worker/src/api/routes/global/sp2019.js b/packages/worker/src/api/routes/global/sp2019.js new file mode 100644 index 000000000..73a8f0dbe --- /dev/null +++ b/packages/worker/src/api/routes/global/sp2019.js @@ -0,0 +1,27 @@ +const Router = require("@koa/router") +const controller = require("../../controllers/global/sp2019") +const { joiValidator } = require("@budibase/backend-core/auth") +const { adminOnly } = require("@budibase/backend-core/auth") +const Joi = require("joi") + + +const router = Router() + +function buildSP2019Validation() { + // prettier-ignore + return joiValidator.body(Joi.object({ + siteUrl: Joi.string().allow("", null), + username: Joi.string().allow("", null), + password: Joi.string().allow("", null), + domain: Joi.string().allow("", null), + }).required().unknown(true)) +} + +router.post( + "/api/global/sp2019/lists", + buildSP2019Validation(), + adminOnly, + controller.sp2019Lists +) + +module.exports = router diff --git a/packages/worker/src/api/routes/index.js b/packages/worker/src/api/routes/index.js index 7f5c783ca..9fe13cc99 100644 --- a/packages/worker/src/api/routes/index.js +++ b/packages/worker/src/api/routes/index.js @@ -13,6 +13,8 @@ const selfRoutes = require("./global/self") const licenseRoutes = require("./global/license") const migrationRoutes = require("./system/migrations") const accountRoutes = require("./system/accounts") +// sharepoint 2019 +const sp2019Routes = require("./global/sp2019") let userGroupRoutes = api.groups exports.routes = [ @@ -31,4 +33,6 @@ exports.routes = [ userGroupRoutes, migrationRoutes, accountRoutes, + // sharepoint 2019 + sp2019Routes, ] diff --git a/packages/worker/src/utilities/sp2019.js b/packages/worker/src/utilities/sp2019.js new file mode 100644 index 000000000..5bd93c0e1 --- /dev/null +++ b/packages/worker/src/utilities/sp2019.js @@ -0,0 +1,37 @@ + +import { JsomNode } from "sp-jsom-node" + +exports.sp2019Lists = async (siteUrl,username,password,domain) => { + console.log("Site url :",siteUrl) + console.log("username :",username) + console.log("password :",password) + console.log("domain :",domain) + const sp2019 = new JsomNode({ + modules: ["taxonomy", "userprofiles"], + }) + const ctx = sp2019 + .init({ + siteUrl: siteUrl, + authOptions: { + username: username, + password: password, + domain: domain + } + }) + const spctx = await ctx.getContext() + const oListsCollection = spctx.get_web().get_lists() + spctx.load(oListsCollection, "Include(Title)") + await spctx.executeQueryPromise() + const arrList = [] + const listsTitlesArr = oListsCollection.get_data().map(l => { + arrList.push({ Title:l.get_title() }) + }) + + + console.log("List test :", arrList) + console.log("List :", listsTitlesArr) + + + + return arrList +} \ No newline at end of file