An app that tracks the usage of keys in a keyboard while giving some users statistics about them in intuitive ways. Allows for monitoring of multiple users running a keylogger by a team leader. Also detects inactivity and improper activity (such as gaming in work hours) and alerts the team leader about it.
Made for the IES course on school year 23/24
Team Manager - Miguel Pinto [email protected]
Product Owner - Ricardo Quintaneiro [email protected]
DevOps - Miguel Figueiredo [email protected]
Architect - João Dourado [email protected]
The following practices were followed:
- Conventional Commit Messages (Feat, Fix, Chore) according to the following link
- Feature-branching workflow - Creation of branches and development based on features and division between backend and frontend (usually each issue had one developer for frontend and another for backend). The naming of the branches followed the same approach that was taught in theoretical classes (new/ - new feature, imp/ - improvement) with the number of the issue(s) being developed included in the name (as we divided the issues between backend and frontend that distinction is also done).
- Branches:
- feature-branches: (already mentioned) created according to the needs to implement new features
- develop: branch from which feature branches are created. For quick fixes direct commits were made on this branch. For each feature a pull request was made to this branch from feature branches to merge the changes (and record history). From this branch we do a pull request to main at each iteration/release.
- main: used to mark the releases of each iteration and where the last version is. (For quick fixes direct commits were also made on this branch.)
- Keylogger - projSensor - includes implementation of keylogger and messaging of keystrokes through rabbitmq
- Backend - projBackend - includes the reception of keystrokes, buffering to redis, notifications, websockets, controllers, persitence services...
- Frontend - projFrontend - includes the user interface made in react
- More documentation on each subproject can be found on the README of the respective folder
# clone repository locally
git clone [email protected]:miguel-silva48/KeyUsageProfiler.git;
cd KeyUsageProfiler;
Make sure you have Docker Compose installed.
Uses the following Docker images:
mysql:5.7
- persistence DBredis:alpine
- cache/short-lived data DBrabbitmq:management
- message queuemaven:3-openjdk-17
- for running spring frameworknode:18-alpine
- for running the frontend web application
docker compose up -d; # create docker containers
Access the frontend at http://localhost:5173/.
There is also a .env file that you may edit if you chose to change some of the environmental variables.
Make sure you have both Maven and Java 17+ installed. Furthermore, make sure you edit the USER_ID in the .env file to the database id of the user you want to impersonate when producing the keystrokes. If you want to use the deployed version in the IES server change RABBITMQ_HOST to "deti-ies-16.ua.pt" (DISCLAIMER: At this moment in time we had problems with our vm and the STIC didn't fix the issue so that we could deploy there our application. We'll send a mail if at any time the option for deployment is available for us again - that is, if STIC fix the issue):
USER_ID=1
RABBITMQ_HOST="localhost"
Running directly:
cd projSensor/keylogger_sensor/;
mvn package;
mvn exec:java -Dexec.mainClass="com.mibef108287.app.App";
Packaging into a JAR and running:
cd projSensor/keylogger_sensor/;
mvn package;
java -jar target/keylogger_sensor-1.0-SNAPSHOT-jar-with-dependencies.jar;
- Keylogger - projSensor
- Spring Boot - projBackend
- KeystrokeConsumer - KeystrokesConsumer.java
- Alarm Aggregator - RedisService handleRedisKeyExpiredEvent method and NotificationService createAndSendNotification method
- Keystroke Saver - KeystrokeSaver
- Cache Service - RedisService
- Persistence Service - almost all services on Services
- Rest API Controller - Controllers
- Frontend - projFrontend
An overall view of the user stories and their status can be found in the following link:
https://github.com/users/miguel-silva48/projects/1
Project_Specification_Report:
https://docs.google.com/document/d/1QzRJoO-oqjjJ1CPPHerlChldXcHeHqTO6yjKa63GLKo/edit
Prototype (Figma):
Presentation:
While running the backend service, access the following endpoint: http://localhost:8080/swagger-ui/index.html#/