From 8f37d4c717f0ff348ee4d23fb75ca6e017705603 Mon Sep 17 00:00:00 2001
From: alex <alex@alexloehr.net>
Date: Fri, 20 Jun 2025 09:43:47 +0000
Subject: [PATCH] GS-2156
---
lib/db.js | 10 ++--
lib/libIlias.js | 13 +++---
package-lock.json | 23 +++++++++++
bin/deleteUserByLogin.js | 44 ++++++++++++++++++++++
package.json | 1
lib/search.js | 11 ++++-
6 files changed, 88 insertions(+), 14 deletions(-)
diff --git a/bin/deleteUserByLogin.js b/bin/deleteUserByLogin.js
new file mode 100644
index 0000000..a280475
--- /dev/null
+++ b/bin/deleteUserByLogin.js
@@ -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!"
+ }
+}
+
diff --git a/lib/db.js b/lib/db.js
index d547d86..531e5cf 100644
--- a/lib/db.js
+++ b/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)
diff --git a/lib/libIlias.js b/lib/libIlias.js
index 1016beb..5dd90ab 100644
--- a/lib/libIlias.js
+++ b/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 ////////////////////////////////////////////////////////////////
diff --git a/lib/search.js b/lib/search.js
index 66b3521..11e1536 100644
--- a/lib/search.js
+++ b/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()
}
diff --git a/package-lock.json b/package-lock.json
index 9fddc76..e7e253c 100644
--- a/package-lock.json
+++ b/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",
diff --git a/package.json b/package.json
index 1a44687..03a0780 100644
--- a/package.json
+++ b/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",
--
Gitblit v1.8.0