/* Lib for interacting with customized ILIAS php */ const _ = require("lodash") const settings = require("../settings") const {getObjIdFromRefId} = require("./db") const db = require("./db") const {url, iliastoken} = settings.ilias const search = require("./search") ///////////////////////////////////////////////////////////////////////// module.exports = { importIliasUser, deleteUser, deleteAllUsers, deleteTeilnahme, } ///////////////////////////////////////////////////////////////////////// /////// USER IMPORT //////////////////////////////////////////////////////////////// /** * Format in POPCORN für SOAP; ausprobieren ob das hier auch funktioniert, v.a. die user-defined-fields * { * Action: "Insert", * login: formatSapNr(dbMa.sapNr), * password: passGen(12), * firstname: dbMa.vorname, * lastname: dbMa.nachname, * email: email, * gender: mapSex[dbMa.geschlecht], * // GS-1894: Azubis wird der Ausbildungsberuf auch als Abteilung angezeigt * department: getDepartment(dbMa), * institution: dbMa.markt.markt, * roleIdGlobal: 4, * userDefinedField: [ * { * name: "Markt", * value: dbMa.markt.markt, * }, * { * name: "Marktnummer", * value: dbMa.markt.nr, * }, * { * name: "Personalnummer", * value: formatSapNr(dbMa.sapNr), * }, * ], * } * @param user * @returns {Promise} */ async function importIliasUser (user) { const sp = new URLSearchParams({ command: "importUser", token: iliastoken, }) let url2 = `${url}?${sp.toString()}` const udfDef = await db.getUdf() const udfMap = _.keyBy(udfDef, "field_name") user.udf = _.mapKeys(user.udf, function (value, key) { return udfMap[key].field_id }) const res = await fetch(url2, { method: "POST", body: JSON.stringify(user) }) const text = await res.text() try { return JSON.parse(text) } catch (ex) { console.error(ex.message) console.log(text) throw ex } } /////// USER DELETE //////////////////////////////////////////////////////////////// async function deleteUser (obj_id, dry = false) { const sp = new URLSearchParams({ command: "deleteUser", obj_id, // dry: "1", dry: dry ? "1" : "0", token: iliastoken, }) let url2 = `${url}?${sp.toString()}` const res = await fetch(url2, {method: "DELETE"}) const data = await res.json() // TODO update search index return data // } async function deleteAllUsers () { const {data: users} = await db.getUsers(0, 100000) const res = { command: "deleteAllUsers", start: new Date(), end: new Date(), duration: null, count: 0, userIds: [], } for (const user of users) { await deleteUser(user.usr_id) res.count += 1 res.userIds.push(user.usr_id) } res.end = new Date() res.duration = res.end - res.start // TODO update search index return res } async function deleteTeilnahme (ref_id, usr_id, dry = false) { const {obj_id} = await getObjIdFromRefId(ref_id) const sp = new URLSearchParams({ command: "deleteTeilnahme", obj_id, usr_id, dry: dry ? "1" : "0", token: iliastoken, }) let url2 = `${url}?${sp.toString()}` console.log("libIlias.deleteTeilnahme >>>", url2) let res try { res = await fetch(url2, {method: "DELETE"}) return await res.json() } catch (ex) { console.error(ex) throw ex } }