REST Service for POPCORN - ILIAS
alex
2025-11-17 0a2afeb91d1ff61f9d9446999f8550969871becf
README.md
@@ -1,49 +1,195 @@
# Globus-ILIAS-Rest
REST Service für POPCORN -> ILIAS.
Stellt in ILIAS-SOAP fehlende Funktionen bereit für POPCORN (GS-2101).
REST service for POPCORN -> ILIAS sync.
Globus-ILIAS-Rest provides function for accessing ILIAS through a rest api.
## Voraussetzungen
## Prerequisites
- node >= v22
- pm2
### ILIAS
Globus-ILIAS-Rest must run on the same host the ILIAS installation is running on.
(Theoretically it can also run on a different host but this is untested.)
### Software
- node.js v22.x
- npm (included in node.js)
#### Installing node.js
__Do not install node.js from a package manager!__
These node versions are generally outdated and cannot be used to run Globus-ILIAS-Rest.
Download and install from the node.js website:
https://nodejs.org/en/download
or
Use tools like `nvm` to handle the installation of the required version.
https://github.com/nvm-sh/nvm
#### Installing pm2
Depending on how node.js was installed pm2 is installed differently.
If using a local node.js (e.g. using nvm):
    npm i -g pm2
If using a global node.js
    sudo npm i -g pm2
Registering pm2 to start on system boot.
    pm2 startup
_Then follow the instructions provided by pm2._
#### PHP Component
globus-ilias-rest requires a PHP compoentent for accessing ILIAS internal functions.
This component needs to be copied into the base dir of ILIAS (`$ILIASBASEDIR`).
Starting from the installation dir of Globus-ILIAS-Rest
    cp -ar php/globus-ilias-rest $ILIASBASEDIR/.
    cd $ILIASBASEDIR
    chown -R www-data:www-data globus-ilias-rest
The copied folder contains a file named `token`. This file contains an access token wich __must be kept secret__.
The file `token` is protected by a `.htaccess` rule which prevents the webserver from reading the file.
__Make sure that this `.htaccess` Apache rule is active and prevents the file from beeing read by the webserver.__
#### Apache webserver
Apache needs to work as a reverse proxy for Globus-ILIAS-Rest.
This way Globus-ILIAS-Rest can be accessed through the same URL as the ILIAS Installation (including https).
__ATTENTION__
The service __must__ run under https. Otherwise the AUTH-TOKEN used by Globus-ILIAS-Rest is not secure.
(as of now this is given for both ILIAS installations)
##### Enable mod_proxy
Enable Apache mods if not enabled yet
    a2enmod proxy
    a2enmod proxy_http
##### Apache Config
The apache config must be changed to proxy all requests going to "https://$ILIASURL/popcorn/" to Globus-ILIAS-Rest.
Insert into apache config of the site:
e.g. for `/etc/apache2/sites-available/globusfm-dev2.minervis.com.conf`
    # Proxy all requests to /popcorn/... to the globus-ilias-rest service
    ProxyPreserveHost On
    ProxyPass /popcorn http://localhost:4101
    ProxyPassReverse /popcorn http://localhost:4101
## Setup
### Env und Settings
Als Erstes wird die ENV Variable "NODE_ENV" gebraucht. Diese muss gesetzt sein.
Je nach ENV (dev, test, prod, ...) muss dann auch die settings Datei angepasst werden.
Set `NODE_ENV` env var.
E.g. in `.bashrc`.
For Test installation
    NODE_ENV=test
For production installation.
    NODE_ENV=prod
### Service
__NODE_ENV must be set before starting the application!__
Der REST-Service an sich muss auf dem gleichen Rechner laufen auf dem auch die ILIAS DB läuft (ansonsten die Config anpassen).
    node app.js
bzw. bei Nutzung von pm2 (empfohlen)
### Install files
Install the files using git.
    git clone https://$USER@gitblit.minervis.com/r/globus/globus-ilias-rest.git
    cd globus-ilias-rest
Install dependencies
    npm i
Copy the required .env file.
    cp vue/.env.$NODE_ENV vue/.env
Build frontend
    npm run build
### Run a self test
Globus-ILIAS-Rest has a build-in testing tool to check if everything works correctly.
Inside Globus-ILIAS-Rest dir run:
    npm run test-connect
All tests must succeed without errors.
## Running
The best way to run Globus-ILIAS-Rest is by running it through pm2 (node process manager).
pm2 automatically provides some useful features like restarting the app if it crashes and more.
## Running the app through pm2
Starting from inside the installation dir of Globus-ILIAS-Rest.
    pm2 start app.js --name globus-ilias-rest
Check if the app is running correctly
    pm2 ls
_Check if status is "online"._
Save the app startup config so that it can be restored on system boot.
    pm2 save
### Apache Config
Apache muss als Proxy für globus-ilias-rest fungieren und Verbindungen an diesen weiterreichen.
__ACHTUNG__
Der Service __muss__ unter https laufen. Ansonsten kann das AUTH-TOKEN ausgelesen werden.
TODO
## Usage
Es wird ein Auth-Token gebraucht um den Service zu benutzen. Dieses wird in settings.js definiert.
For accessing the service a auth-token is required.
This token is defined in the config file `settings.$NODE_ENV.json`.
Dann kann der Service angesprochen werden (test mit curl):
@@ -52,16 +198,28 @@
Die Antwort prettyfeien:
    curl localhost:4101/users?token=AUTHTOKEN | jq .
### Routes
### globusfm-dev2
Verfügbare Routen sind:
Kann zugegriffen werden über
    GET /users
    GET /users/count
    GET /user/login/:login
    GET /user/userId/:userId
    https://globusfm-dev2.minervis.com/popcorn/users?token=$TOKEN
#### Testing PHP Component
Folgende URL sollte dann funktionieren für die PHP Komponente:
https://globusfm-dev2.minervis.com/globus-ilias-rest/login.php?token=$PHPTOKEN&command=getUser&usr_id=573
Die API dann über:
https://globusfm-dev2.minervis.com/popcorn/api/user/userid/573?token=$TOKEN
__Achtung__ die Tokens sind unterschiedlich!
### Testing Apache
    https://globusfm-dev2.minervis.com/popcorn/users?token=AUTHTOKEN