REST Service for POPCORN - ILIAS
edit | blame | history | raw

Globus-ILIAS-Rest

REST service for POPCORN -> ILIAS sync.

Globus-ILIAS-Rest provides function for accessing ILIAS through a rest api.

Prerequisites

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.)

ILIAS DB Access

Globus-ILIAS-Rest needs access to the ILIAS DB.
The DB credentials are defined in the settings file settings.$NODE_ENV.json.

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 which 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

Set NODE_ENV env var.
E.g. in .bashrc.

For Test installation

NODE_ENV=test

For production installation.

NODE_ENV=prod

NODE_ENV must be set before starting the application!

Install files

Install Globus-ILIAS-Rest 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 and all components are accessible.

Inside Globus-ILIAS-Rest dir run:

npm run test-connect

All tests must succeed without errors.

Note
The tests for "the rest service" can only succeed when the rest service is running (see below).

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

Usage

For accessing the service a auth-token is required.
This token is defined in the config file settings.$NODE_ENV.json.

Access REST API using curl:

curl localhost:4101/api/user?token=AUTHTOKEN

Prettify the response:

curl localhost:4101/api/user?token=AUTHTOKEN | jq .

Manual testing

Some example URLs for manual testing.

Test for globusfm-dev2

Can be accessed by

curl https://globusfm-dev2.minervis.com/popcorn/api/user?token=$TOKEN
curl https://globusfm-dev2.minervis.com/popcorn/api/user/userid/573?token=$TOKEN

Testing PHP Component

curl https://globusfm-dev2.minervis.com/globus-ilias-rest/login.php?token=$ILIASTOKEN&command=getUser&usr_id=573

Other

Logs

To prevent logs from growing too big the file $INSTALLDIR/log.log should be included into a logrotation job.

Furthermore pm2 also does some logging.
pm2 logs can be cleared by running

pm2 flush

Alternatively pm2 logging also can be turned off (not advised).
To do this add the param --disable-logs when running Globus-ILIAS-Rest through pm2.