Roomy is a forum chat-based web application that provides users with multiple chat-groups for various needs. From your gaming hobbies to educational purposes, Roomy offers you a wide area of topics for you to engage in. More than just chatting, Roomy also offers multiple communication methods like video and audio chatting. People will likely to share some files within the forum from pdf to excel files and it is considered dangerous to just randomly have to download the file and to make sure the file is harmless, so we provide you with a pop-up to preview the files in the chat. The web application will be separated to 4 EC2 Instances deployed using Docker for each of them. the first one will handle the user managing process, the main chat-room functionality with Socket.io and the most of the interface basic functionality. The second one will serve to handle audio and video calls using WebRTC to ensure the secure and clean communication via video and audio. The third one covers the file preview feature. For convenience only office file types and images can be saved, when uploading the files this instances will be responsible to check the requirements of the file, including size and format, and also to handle the security check of the files using VirusTotal API v3 and insert it into the database. The fourth instances will be for previewing and downloading the files. For convenience the office files will be converted into PDFs using CloudConvert API, and then previewed using PDF.js within an iFrame.
Name: Riandy Rafael
Student number: 47612976
EC2 Instances: Deployed with Docker to ensure consistency between development and deployment to make sure the machine difference will not make an impact. Socket.io: JavaScript library for room-based messaging. WebRTC: Handles Peer-to-Peer (P2P) communication for audio and video calling with End-to-End Encryption (E2EE). VirusTotal API v3: Security check for file sharing features, limited-free usage. CloudConvert API: Converting office files to PDFs for previewing purposes. PDF.js: Javascript library to view PDF Files. iFrame: Embedded different window within the main window to view the documents. 4 EC Instances: The point of separating the functionality is for precaution purposes, if the Audio/Video calls or file preview api is in unhealthy it will not compromise the main functionality of the chat room and the user can still use it.
Extensibility: We have 4 different EC2 instances for running our main application. Adding more features for future development is easier since it uses Docker since it is architecturally modular meaning that it can separates containers and it operates individually. Each EC2 instances will be run in a separated container meaning that if we want to add more features, we can deploy it in a different EC2 instances in a different container. Doing this method will make sure the addition of a feature will have little risk of breaking the existing features and if for some reason the features break the app, we can just disable the container first until a fix is done.
Deployability: Since we use different API and multiple EC2 instances we might run into problems and difficulty of trying to make the same condition from development stage to deployment. Using Docker on development will ease the deployment process afterwards, making no difference in hardware requirements and complications. Docker can also make the same development environment from the same OS, dependencies and configuration which we can just pull the image later to deploy in production.
Security: Since we will be dealing with data, we need to consider the security of users data seriously. Video and audio calls are secured with P2P implementation of WebRTC which includes the E2EE, so even the attacker intercept the calls, they cannot read the data. File sharing will also bring some risk of malware sharing that is why the file sharing feature also checked with Virus Total API v3 to remove any harmful file being uploaded to the server. For security reasons, file previewing only allow user to read the data and will not be able to edit it within the iFrame as it can be a risk of injections of malicious code and compromise the safety of the data. All data passed into the server will be cleaned first and rejected if any of them have a security risk/issues.
Extensibility: The project has an architecture of easier future development with the help of Docker with it’s containerise structure, adding more features will have little risk of compromising other components of the application since it’s separated. Also to be noted that the environment used for the earlier features will follow the future ones assuming we use docker for the earlier stage of development and the future stage.
Deployability: With Docker the environment at deployment will mimic the ones that we have at development stage, that means the risk of deployment problem will be small since we can just deploy the docker image with the same configurations, dependencies, libraries, etc.
Security: The project has a strict data security check and precaution using WebRTC to encrypt the data of video and audio calls. While file sharing will have the highest risk, that is why we check the file shared first before we share it within the application. If the file compromise the risk of the application, it will be rejected.