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

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

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

Usage

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

curl localhost:4101/users?token=AUTHTOKEN

Die Antwort prettyfeien:

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

globusfm-dev2

Kann zugegriffen werden über

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