Feature Wiki

Information about planned and released features

Tabs

IRSS: Container-Storage

1 Initial Problem

The IRSS can currently store individual files (StorableFile-Resources). In ILIAS, however, entire structures of files are also used for certain use cases, for example in HTML or SCORM modules. These structures are dependent on each other, e.g. through links in the HTML, through embedding of images, etc. This means that these structures cannot be used as a structure. This means that these structures cannot be saved as individual files but as a "complete package".

2 Conceptual Summary

The IRSS will be extended so that such structures can be stored, managed and retrieved as a package. Currently, it is still being evaluated how the storage of the structures will be technically implemented; the implementation will then depend on the results of this evaluation.
Two variants are being considered in the investigation:

  • Storage of structures as ZIP files and in-memory handling of the content.
  • Storage of structures as directories and files

3 User Interface Modifications

3.1 List of Affected Views

  • none

3.2 User Interface Details

This feature request only deals with the backand in the IRSS for storing the structures. No adjustments are made to the UI.

Nevertheless, the following UI-relevant topics will be dealt with in two further requests:

  • Administration interface for IRSS resources of the type "structure", so that, for example, HTML learning modules can be administered via the ILIAS interface (add, replace, delete files...): IRSS: Container-Resource User-interface
  • Player for the display of structures, these players are then used to "play" e.g. SCORM modules or HTML learning modules: IRSS: Container-Resource Player

Performance tests have shown that there is no significant difference between saving as a ZIP and saving as single files. therefore, we prefer the implementation as a ZIP, as all existing mechanisms of the IRSS can be used this way.

The implementation will be presented as a PR and technical discussion can take place there.

3.3 New User Interface Concepts

none

3.4 Accessibility Implications

none

4 Technical Information

The technical implementation will be announced in the form of a PR.

5 Privacy

no new user-related data is collected, stored or processed. The following still applies https://github.com/ILIAS-eLearning/ILIAS/blob/trunk/src/ResourceStorage/PRIVACY.md

6 Security

The storage itself is done through existing mechanisms of the IRSS. Metadata of the Containers are stored in the database, the actual files in the file system. The files cannot be accessed directly via the browser, as they are stored in the internal data directory under 'storage'. The files are retrieved via tokens and are protected bya Token Mechanism (as in WebAccessCehcker). For the delivery of files, a new secure token mechanism could be implemented, which is designed for performance so that files can be loaded quickly. In this context, file delivery can also be implemented as a new service. In addition, the new mechanism makes it possible to implement features such as subdomain isolation at a later date.

Therefore, the security is the same or better than the current implementation.

7 Contact

8 Funding

If you are interest in funding this feature, please add your name and institution to this list.

9 Discussion

JourFixe, ILIAS [jourfixe], 26 JUN 2023 : We highly appreciate this suggestion and schedule the feature for ILIAS 9.

10 Implementation

The most important part of this implementation is the implementation of the new FileDelivery service, which was implemented in the following commit: 257b9f8e88958ce24bf414d2fb718972ca01ff78:

 

With the help of this service, containers (stored in IRSS as ZipArchive) can now be delivered in a performant and secure way.

The mechanism is the same for single files as well as for containers: In the case of containers, the desired files can simply be added as a subrequest. For example, a URL is built for a resource:

1
2
3
$rid = $this->storage->manage()->find('...');
$base_url = $this->storage->consume()->src($rid)->getSrc();
$url_to_file_inside_container = $base_url . '/index.html';

Test Cases

No Testcases for this Service available. Since all new FileDeliveries use the service, this is tested by several other cases.

Privacy

Information in privacy.md of component: no change required

Approval

Approved at 2023-10-13 by Schmid, Fabian [fschmid].

Last edited: 13. Oct 2023, 11:07, Schmid, Fabian [fschmid]