It is important to note, that there are users allowed to access certain resources without authentication, those users are depicted as Anonymous users. Anonymous users are allowed to browse the preview images of the animation files.
A registered user can access a wider range of features, such as uploading new animations, commenting and purchasing animations. All of their activites are require the user to be logged in.
An administrator can access the rest of the features, allowing them to administrate both animations and comments.
Design
======
The following diagram depicts the relationship between the program modules.
A strong emphasis have been put on the protection of the user's personnel data. Also, the protection of the information provided for purchase is considered critical.
Before acessing any resource, the user performing the request is identified first. After that their role is identified and verified. The access rights are checked by the user's role. If the user have insufficent permission, then their requiest will be declined before the resource handler is called.
We are planning on building two component. One web component and one native component. Each component is running separately, using HTTP for their communication.\
The web component will be implemented in Python, using the Flask framework. The native component, which is responsible for decoding the CAFF/CIFF format will be implemented in C language.
We are going to deploy our implementation in a Kubernetes environment in a separate namespace which will only hold the two components described above.
Testing plan
============
We are planning to test our native and web component separately.
The native component will be subjected for extensive fuzzing tests while their memory access will be strictly monitored (using the valgrind tool)
The web component will be tested trough a set of unit tests which will not only ensure the proper implementation of the planned features but ensure that there are no unintended side effects. This plan is realized by 'pytest' testing suite.