REST Service for POPCORN - ILIAS
alex
2025-07-13 e0954b51705719b6a40e129cacf8688e0fba072b
app.js
@@ -1,10 +1,13 @@
const path = require("path")
const fastify = require('fastify')({
   logger: true
   logger: false,
   // logger: true
})
const _ = require("lodash")
const fs = require("node:fs")
const dayjs = require("dayjs")
const log = require("./logger")
const db = require("./lib/db")
const libIlias = require("./lib/libIlias")
const settings = require("./settings")
@@ -19,17 +22,19 @@
// AUTH
fastify.addHook("onRequest", async (req, res) => {
   console.log(req.url)
   // custom logging
   log.info(`${req.method} ${req.url}`);
   // console.log(req.url)
   const token = req.query.token
   console.log(req.url)
   if (token !== settings.authtoken && !req.url.startsWith("/ui/")) {
      console.error("# AUTH ERROR #", token)
      log.error("# AUTH ERROR #", token)
      await promiseDelay(500) // delay response to avoid denial of service attacks
      res.code(403)
      return res.send({status: "error", error: "access denied"})
   }
   else {
      console.log("AUTH FOR ", req.url)
      // log.debug("AUTH FOR ", req.url)
   }
})
@@ -40,19 +45,19 @@
searchLib.doIndex().catch(console.error)
fastify
   .get("/api/search/user", async function (req, res) {
      console.log(req.query)
      log.info(req.query)
      const search = req.query?.search
      if (!search) {
         return res.code(422).send({status: "error", msg: "no search"})
      }
      else {
         console.log(search)
         log.info(search)
         const data = await searchLib.search(search)
         return res.send(data)
      }
   })
   .post("/api/search/reindex", async function (req, res) {
      console.log("REINDEX ++++")
      log.info("REINDEX ++++")
      const start = Date.now()
      await searchLib.doIndex().catch(console.error)
      return res.send({
@@ -97,7 +102,7 @@
   })
   .get("/api/user/teilnahmen/:userId", async function (req, res) {
      let userId = req.params.userId
      console.log(`--------${userId}-----------`, typeof userId)
      log.debug(`--------${userId}-----------`, typeof userId)
      if (!userId || isNaN(Number(userId))) {
         return res.code(500).send({status: "error", msg: "userId error"})
      }
@@ -127,7 +132,7 @@
      }
      else {
         const res2 = await libIlias.deleteUser(usr_id)
         console.log(res2)
         log.info(res2)
         return res.send(res2)
      }
   })
@@ -232,7 +237,6 @@
   .post("/api/kurs/:refId/status/:usrId", async function (req, res) {
      const {refId, usrId} = req.params
      const {passed, status} = req.body
      // console.log(88888888888888888888, {refId, usrId, passed, status})
      if (!refId || !usrId || _.isNil(passed) || _.isNil(status)) {
         throw {
            statusCode: 400,
@@ -286,7 +290,7 @@
const indexFile = fs.readFileSync(path.join(__dirname, "vue/dist", 'index.html'), 'utf8')
fastify.setNotFoundHandler(function (req, res) {
   console.log("!!!")
   log.error("!!! Not found")
   // res.sendFile("vue/dist/index.html")
   res.type("text/html").send(indexFile)
})
@@ -295,9 +299,10 @@
/////////////////////////////////////////////////////////////////////////
fastify.listen({port: settings.port}, function (err, address) {
   console.log("📡 -=> Listening on", address)
   log.info("📡 -=> Listening on", address)
   if (err) {
      fastify.log.error(err)
      // fastify.log.error(err)
      log.error(err)
      process.exit(1)
   }
   // Server is now listening on ${address}
@@ -308,3 +313,4 @@
async function promiseDelay (ms) {
   return new Promise(resolve => setTimeout(resolve, ms))
}