REST Service for POPCORN - ILIAS
alex
2025-06-20 8f37d4c717f0ff348ee4d23fb75ca6e017705603
GS-2156
1 files added
5 files modified
102 ■■■■ changed files
bin/deleteUserByLogin.js 44 ●●●●● patch | view | raw | blame | history
lib/db.js 10 ●●●● patch | view | raw | blame | history
lib/libIlias.js 13 ●●●● patch | view | raw | blame | history
lib/search.js 11 ●●●● patch | view | raw | blame | history
package-lock.json 23 ●●●●● patch | view | raw | blame | history
package.json 1 ●●●● patch | view | raw | blame | history
bin/deleteUserByLogin.js
New file
@@ -0,0 +1,44 @@
const db = require("../lib/db")
const yargs = require("yargs")
const libIlias = require("../lib/libIlias")
const search = require("../lib/search")
/////////////////////////////////////////////////////////////////////////
const argv = yargs
   .usage("$0 <login>", "delete user <login>",)
   .strict()
   .parse()
console.log(`argv.ref_id=${argv.ref_id}`)
run(argv)
   .then(console.log)
   .catch(console.error)
   .finally(process.exit)
async function run ({login}) {
   let userIds = await search.search(String(login))
   if (userIds.length > 1) throw {msg: "result not distinct!", results: userIds}
   if (userIds.length === 0) throw {msg: "nothing found!", results: userIds}
   const usr_id = userIds[0]
   const user = await db.getUserByUserId(usr_id)
   console.log(user)
   const { Confirm } = require('enquirer');
   const prompt = new Confirm({
      name: 'question',
      message: `Delete user ${user.firstname} ${user.lastname} (${user.usr_id})`,
   });
   const doContinue = await prompt.run();
   if(doContinue) {
      return libIlias.deleteUser(usr_id)
   }
   else {
      return "nothing changed... bye bye!"
   }
}
lib/db.js
@@ -44,7 +44,7 @@
/////////////////////////////////////////////////////////////////////////
function getUserSearchQuery (offset, limit, search) {
async function getUserSearchQuery (offset, limit, search) {
   const sel = `usr_id, login, firstname, lastname, gender, email, institution, street, city, zipcode, country, department, active`
   if (!search || search === '') {
      return `SELECT ${sel}
@@ -55,10 +55,10 @@
      `
   }
   else {
      const ids = searchLib.search(search)
      const ids = await searchLib.search(search)
      if (!ids.length) {
         throw "nothing found"
         return getUserSearchQuery(offset, limit)
         return await getUserSearchQuery(offset, limit)
      } // nothing found
      return `SELECT ${sel}
              FROM ${database}.usr_data AS ud
@@ -79,7 +79,7 @@
   const pool = await poolP
   try {
      let userSearchQuery = getUserSearchQuery(offset, limit, search)
      let userSearchQuery = await getUserSearchQuery(offset, limit, search)
      // console.log(userSearchQuery)
      const [results, fields] = await pool.query(userSearchQuery)
      const count = await getUserCount(offset, limit, search)
@@ -101,7 +101,7 @@
async function getUserCount (offset, limit, search) {
   const pool = await poolP
   // const q = getUserSearchQuery(offset, limit, search)
   const q = getUserSearchQuery(0, 1000000, search) // hier darf kein Limit sein, offset=0
   const q = await getUserSearchQuery(0, 1000000, search) // hier darf kein Limit sein, offset=0
   const q2 = `SELECT COUNT(*) AS count
               FROM (${q}) AS X`
   const [results, fields] = await pool.query(q2)
lib/libIlias.js
@@ -1,4 +1,11 @@
/* Lib for interacting with customized ILIAS php */
const settings = require("../settings")
const {getObjIdFromRefId} = require("./db")
const db = require("./db")
const {url, iliastoken} = settings.ilias
const search = require("./search")
/////////////////////////////////////////////////////////////////////////
module.exports = {
   importIliasUser,
@@ -10,12 +17,6 @@
/////////////////////////////////////////////////////////////////////////
const settings = require("../settings")
const {getObjIdFromRefId} = require("./db")
const db = require("./db")
const {url, iliastoken} = settings.ilias
/////////////////////////////////////////////////////////////////////////
/////// USER IMPORT ////////////////////////////////////////////////////////////////
lib/search.js
@@ -77,6 +77,7 @@
/////////////////////////////////////////////////////////////////////////
let indexed = false
async function doIndex () {
   const start = Date.now()
   console.log("++ START indexing Users...")
@@ -100,10 +101,13 @@
      addUser(user)
      // addTags(user)
   }
   indexed = true
   console.log(`++ END indexing Users in ${Date.now() - start}ms`)
}
function search (query) {
async function search (query) {
   // when called from a cli program the search index is not initalized
   if(!indexed) await doIndex()
   const searchLimit = 10000
   return idxUser.search(query, searchLimit)
}
@@ -126,8 +130,9 @@
function getUserString (user) {
   const {usr_id, firstname, lastname, login, institution, department} = user
   if(firstname.trim()==="Adolfo") console.log(user)
   return `${usr_id} ${login} ${firstname} ${lastname} ${institution} ${department}`.trim()
   // if(firstname.trim()==="Adolfo") console.log(user)
   return `${login} ${firstname} ${lastname} ${institution} ${department}`.trim()
   // return `${usr_id} ${login} ${firstname} ${lastname} ${institution} ${department}`.trim() // KEINE usr_id
   // return `${usr_id} ${firstname} ${lastname}`.trim()
}
package-lock.json
@@ -15,6 +15,7 @@
        "chai": "^5.2.0",
        "dayjs": "^1.11.13",
        "dotenv": "^16.5.0",
        "enquirer": "^2.4.1",
        "fastify": "^5.3.3",
        "flexsearch": "^0.8.205",
        "lodash": "^4.17.21",
@@ -2007,6 +2008,15 @@
        }
      }
    },
    "node_modules/ansi-colors": {
      "version": "4.1.3",
      "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
      "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
      "license": "MIT",
      "engines": {
        "node": ">=6"
      }
    },
    "node_modules/ansi-regex": {
      "version": "5.0.1",
      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
@@ -2671,6 +2681,19 @@
        "once": "^1.4.0"
      }
    },
    "node_modules/enquirer": {
      "version": "2.4.1",
      "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz",
      "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==",
      "license": "MIT",
      "dependencies": {
        "ansi-colors": "^4.1.1",
        "strip-ansi": "^6.0.1"
      },
      "engines": {
        "node": ">=8.6"
      }
    },
    "node_modules/entities": {
      "version": "4.5.0",
      "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
package.json
@@ -19,6 +19,7 @@
    "chai": "^5.2.0",
    "dayjs": "^1.11.13",
    "dotenv": "^16.5.0",
    "enquirer": "^2.4.1",
    "fastify": "^5.3.3",
    "flexsearch": "^0.8.205",
    "lodash": "^4.17.21",