diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..5ef23ae --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,12 @@ +name: build +on: + push: + branches: [main] + pull_request: +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Compile + run: g++ -std=c++11 -O2 -o osim-security-simulation src/*.cpp -Iinclude diff --git a/README.md b/README.md index 2f0c365..6e668d7 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # OSIM Security Simulation +[![build](https://github.com/Denarzai/Osim-Security-Simulation/actions/workflows/build.yml/badge.svg)](https://github.com/Denarzai/Osim-Security-Simulation/actions/workflows/build.yml) + ## Project Overview OSIM Security Simulation is a C++ console application that models an internal organizational environment with role-based access control (RBAC). It was built for an Object-Oriented Programming university course and focuses on secure operational workflows such as authentication, authorization, task handling, communications, audit logging, and anomaly reporting. @@ -13,16 +15,25 @@ The system uses five organizational roles with increasing clearance: Application state is persisted in text files (for example users, tasks, messages, notifications, audit logs, and performance data), so actions performed in the console menus are retained across runs. ## Class Design -The full UML class diagram is in `finalUML.pdf` (source: `projuml.drawio`). +The full UML class diagram is in `docs/finalUML.pdf` (source: `docs/projuml.drawio`). -![Class diagram](class-diagram.png) +![Class diagram](docs/class-diagram.png) ## Tech Stack - Language: C++ - Standard libraries: iostream, string, ctime/cstdlib, fstream, iomanip, cstring - Architecture style: Object-Oriented Programming (classes, inheritance, managers/singletons) -- Data storage: Plain text files in the project root -- Platform target: Console application (Windows-compatible) +- Data storage: Plain text files (sample data in `data/`) +- Platform target: Console application (cross-platform; developed on Windows) + +## Repository Structure + +| Path | Contents | +|------|----------| +| `src/` | Implementation files (`.cpp`) | +| `include/` | Headers (`.h`) | +| `data/` | Sample data files the application reads and writes | +| `docs/` | UML class diagram (PDF, draw.io source, PNG export) | ## Features - Authentication and RBAC @@ -71,11 +82,11 @@ The full UML class diagram is in `finalUML.pdf` (source: `projuml.drawio`). ## How to Compile and Run The project does not include a build system file, so compile from source files directly. -### Option 1: g++ (MinGW) +### Option 1: g++ From the project root: ```bash -g++ -std=c++11 -O2 -o osim-security-simulation *.cpp +g++ -std=c++11 -O2 -o osim-security-simulation src/*.cpp -Iinclude ./osim-security-simulation ``` @@ -89,11 +100,15 @@ On Windows PowerShell, run: From the project root: ```bat -cl /EHsc /std:c++14 *.cpp +cl /EHsc /std:c++14 /Iinclude src\*.cpp /Feosim-security-simulation.exe osim-security-simulation.exe ``` -Note: The application expects its text data files (such as users.txt, tasks.txt, inbox.txt, notification.txt, audit.txt, performanceLog.txt, preference.txt, anomalyLog.txt) in the same working directory. +Note: The application reads and writes its text data files (users.txt, tasks.txt, inbox.txt, notification.txt, audit.txt, performanceLog.txt, preference.txt, anomalyLog.txt) in the current working directory. Sample data lives in `data/` — copy it next to the binary before the first run: + +```bash +cp data/*.txt . +``` ## Role in Project Built as a pair project for a university OOP course. diff --git a/anomalyLog.txt b/data/anomalyLog.txt similarity index 100% rename from anomalyLog.txt rename to data/anomalyLog.txt diff --git a/audit.txt b/data/audit.txt similarity index 100% rename from audit.txt rename to data/audit.txt diff --git a/inbox.txt b/data/inbox.txt similarity index 100% rename from inbox.txt rename to data/inbox.txt diff --git a/notification.txt b/data/notification.txt similarity index 100% rename from notification.txt rename to data/notification.txt diff --git a/performanceLog.txt b/data/performanceLog.txt similarity index 100% rename from performanceLog.txt rename to data/performanceLog.txt diff --git a/preference.txt b/data/preference.txt similarity index 100% rename from preference.txt rename to data/preference.txt diff --git a/tasks.txt b/data/tasks.txt similarity index 100% rename from tasks.txt rename to data/tasks.txt diff --git a/users.txt b/data/users.txt similarity index 100% rename from users.txt rename to data/users.txt diff --git a/class-diagram.png b/docs/class-diagram.png similarity index 100% rename from class-diagram.png rename to docs/class-diagram.png diff --git a/finalUML.pdf b/docs/finalUML.pdf similarity index 100% rename from finalUML.pdf rename to docs/finalUML.pdf diff --git a/projuml.drawio b/docs/projuml.drawio similarity index 100% rename from projuml.drawio rename to docs/projuml.drawio diff --git a/MFA.h b/include/MFA.h similarity index 100% rename from MFA.h rename to include/MFA.h diff --git a/anomaly.h b/include/anomaly.h similarity index 100% rename from anomaly.h rename to include/anomaly.h diff --git a/audit.h b/include/audit.h similarity index 100% rename from audit.h rename to include/audit.h diff --git a/dashboard.h b/include/dashboard.h similarity index 95% rename from dashboard.h rename to include/dashboard.h index 219baac..2a616f6 100644 --- a/dashboard.h +++ b/include/dashboard.h @@ -3,7 +3,7 @@ #include "audit.h" #include "messageManager.h" #include "notificationManager.h" -#include "perfomanceReview.h" +#include "performanceReview.h" #include "policyEngine.h" #include "taskManager.h" #include "timeManager.h" diff --git a/message.h b/include/message.h similarity index 100% rename from message.h rename to include/message.h diff --git a/messageManager.h b/include/messageManager.h similarity index 100% rename from messageManager.h rename to include/messageManager.h diff --git a/notification.h b/include/notification.h similarity index 100% rename from notification.h rename to include/notification.h diff --git a/notificationManager.h b/include/notificationManager.h similarity index 100% rename from notificationManager.h rename to include/notificationManager.h diff --git a/pch.h b/include/pch.h similarity index 100% rename from pch.h rename to include/pch.h diff --git a/perfomanceReview.h b/include/performanceReview.h similarity index 100% rename from perfomanceReview.h rename to include/performanceReview.h diff --git a/policyEngine.h b/include/policyEngine.h similarity index 100% rename from policyEngine.h rename to include/policyEngine.h diff --git a/task.h b/include/task.h similarity index 100% rename from task.h rename to include/task.h diff --git a/taskManager.h b/include/taskManager.h similarity index 100% rename from taskManager.h rename to include/taskManager.h diff --git a/timeManager.h b/include/timeManager.h similarity index 100% rename from timeManager.h rename to include/timeManager.h diff --git a/user.h b/include/user.h similarity index 97% rename from user.h rename to include/user.h index b6b9e8b..79ccd96 100644 --- a/user.h +++ b/include/user.h @@ -1,7 +1,7 @@ #pragma once #include "pch.h" #include "utilities.h" -#include "perfomanceReview.h" +#include "performanceReview.h" class User { protected: diff --git a/userManager.h b/include/userManager.h similarity index 100% rename from userManager.h rename to include/userManager.h diff --git a/utilities.h b/include/utilities.h similarity index 100% rename from utilities.h rename to include/utilities.h diff --git a/MFA.cpp b/src/MFA.cpp similarity index 100% rename from MFA.cpp rename to src/MFA.cpp diff --git a/anomaly.cpp b/src/anomaly.cpp similarity index 100% rename from anomaly.cpp rename to src/anomaly.cpp diff --git a/audit.cpp b/src/audit.cpp similarity index 100% rename from audit.cpp rename to src/audit.cpp diff --git a/dashboard.cpp b/src/dashboard.cpp similarity index 100% rename from dashboard.cpp rename to src/dashboard.cpp diff --git a/main.cpp b/src/main.cpp similarity index 100% rename from main.cpp rename to src/main.cpp diff --git a/message.cpp b/src/message.cpp similarity index 100% rename from message.cpp rename to src/message.cpp diff --git a/messageManager.cpp b/src/messageManager.cpp similarity index 100% rename from messageManager.cpp rename to src/messageManager.cpp diff --git a/notification.cpp b/src/notification.cpp similarity index 100% rename from notification.cpp rename to src/notification.cpp diff --git a/notificationManager.cpp b/src/notificationManager.cpp similarity index 100% rename from notificationManager.cpp rename to src/notificationManager.cpp diff --git a/perfomanceReview.cpp b/src/performanceReview.cpp similarity index 99% rename from perfomanceReview.cpp rename to src/performanceReview.cpp index 4a51aca..e7f00bb 100644 --- a/perfomanceReview.cpp +++ b/src/performanceReview.cpp @@ -1,4 +1,4 @@ -#include "perfomanceReview.h" +#include "performanceReview.h" PerformanceReview::PerformanceReview(string n, string r) : name(n), role(r), tasksCompleted(0), tasksOverdue(0), diff --git a/policyEngine.cpp b/src/policyEngine.cpp similarity index 100% rename from policyEngine.cpp rename to src/policyEngine.cpp diff --git a/task.cpp b/src/task.cpp similarity index 100% rename from task.cpp rename to src/task.cpp diff --git a/taskManager.cpp b/src/taskManager.cpp similarity index 100% rename from taskManager.cpp rename to src/taskManager.cpp diff --git a/timeManager.cpp b/src/timeManager.cpp similarity index 100% rename from timeManager.cpp rename to src/timeManager.cpp diff --git a/user.cpp b/src/user.cpp similarity index 100% rename from user.cpp rename to src/user.cpp diff --git a/userManager.cpp b/src/userManager.cpp similarity index 100% rename from userManager.cpp rename to src/userManager.cpp diff --git a/utilities.cpp b/src/utilities.cpp similarity index 100% rename from utilities.cpp rename to src/utilities.cpp