/* 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 = { ping, getUser, importIliasUser, createKurs, anmelden, abmelden, deleteUser, deleteAllUsers, // deleteTeilnahme, } ///////////////////////////////////////////////////////////////////////// async function ping() { const sp = new URLSearchParams({ command: "ping", token: iliastoken, }) let url2 = `${url}?${sp.toString()}` const res = await fetch(url2, {method: "GET"}) return await res.json() // } /////// GET USER //////////////////////////////////////////////////////////////// async function getUser (usr_id) { const sp = new URLSearchParams({ command: "getUser", usr_id, token: iliastoken, }) let url2 = `${url}?${sp.toString()}` const res = await fetch(url2, {method: "GET"}) return await res.json() // } /////// USER IMPORT //////////////////////////////////////////////////////////////// /** * Format in POPCORN für SOAP; ausprobieren ob das hier auch funktioniert, v.a. die user-defined-fields * const user = { * login: "123456789", * passwd: "123456789", * passwd_type: "plain", * firstname: "Adolfo", * lastname: "de la Cruz", * email: "alex@gorillaeis.com", * gender: "m", * department: "Bananenpflücker", * institution: "Globus Budapest", * role: 4, // assigned global role id * udf: { * "Markt": "Markt UDF 2", * "Marktnummer": "Marktnummer UDF 2", * "Personalnummer": "Personal UDF 2", * }, * } * @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", // course_id: 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 // } // } /////// KURS //////////////////////////////////////////////////////////////// async function createKurs(kurs) { const sp = new URLSearchParams({ command: "createKurs", token: iliastoken, }) let url2 = `${url}?${sp.toString()}` const res = await fetch(url2, { method: "POST", body: JSON.stringify(kurs), }) return await res.json() } /////// Anmelden / Abmelden //////////////////////////////////////////////////////////////// async function anmelden (usr_id, course_id) { // const role = await db.getMemberRoleForCourse(course_id) // nein es wird relative id gebraucht, siehe php const sp = new URLSearchParams({ command: "anmelden", usr_id, course_id, token: iliastoken, }) let url2 = `${url}?${sp.toString()}` console.log(url2) const res = await fetch(url2, {method: "POST"}) return await res.json() } async function abmelden (usr_id, course_id) { const sp = new URLSearchParams({ command: "abmelden", usr_id, course_id, token: iliastoken, }) let url2 = `${url}?${sp.toString()}` console.log(url2) const res = await fetch(url2, {method: "DELETE"}) return await res.json() }