generated from Labyricorn/labyricorn-project-template
164 lines
5.7 KiB
Markdown
164 lines
5.7 KiB
Markdown
# CyberSim OS
|
|
|
|
**Phase 2.5: Localization, Corporate Branding, and Immersive Login**
|
|
|
|
CyberSim OS is an offline-first, browser-native cybersecurity simulation platform designed for enterprise organizations and end-user learners. Learners enter a convincing fictional enterprise workstation, perform routine workplace activities, investigate ambiguous communications, encounter realistic threats (credential harvesting, malicious attachments) alongside legitimate false flags, receive a multi-axis behavioral after-action assessment, and earn cryptographically verifiable completion certificates (`*.cybercert`).
|
|
|
|
**Phase 2.5** adds **organizational readiness** through runtime multilingual localization, configuration-driven corporate branding, an immersive workstation login experience, learner first-name personalization, and cross-locale cryptographic verification.
|
|
|
|
---
|
|
|
|
## Key Features
|
|
|
|
- **Immersive CyberSim OS Login**: Fictional enterprise workstation login and dynamic network/workplace selection without requesting passwords or sensitive employee credentials.
|
|
- **Runtime Multilingual & Localization (I18n)**:
|
|
- CyberSim OS user interface localization with deterministic fallback chain (Selected Locale $\to$ Deployment Default Locale $\to$ English $\to$ `[missing: key]`).
|
|
- Working demonstration locales: English (`en`) and Spanish (`es`).
|
|
- Independent scenario content localization (`scenarios/<id>/locales/<lang>.json`).
|
|
- **Configuration-Driven Corporate Branding**:
|
|
- Customize organization name, short name, logo, desktop wallpaper, accent color, and service desk name via `src/config/deployment.json`.
|
|
- Automatic fallback to CyberSim default enterprise theme when branding fields are omitted.
|
|
- Preserves simulation safety boundaries (CyberSim identity remains visible).
|
|
- **Learner Personalization**:
|
|
- First-name input is passed into scenario state (`learner.firstName`).
|
|
- Safe template interpolation (`{{learner.firstName}}`, `{{learner.name}}`) in emails, notifications, alerts, web pages, documents, and certificates with strict HTML entity escaping.
|
|
- **Scenario-Driven Architecture**: Complete simulations are defined through declarative JSON scenario packages without application source code modification.
|
|
- **Verifiable Cryptographic Certificates**:
|
|
- Canonical Web Crypto SHA-256 scenario fingerprinting unaffected by display translations.
|
|
- Portable, structured `*.cybercert` JSON credential export.
|
|
- Standalone offline certificate validator (`verify.html`) supporting localized verification.
|
|
- **100% Offline-First & Zero Dependencies**: Runs directly from any static web server, GitHub Pages, or the bundled `launcher.py` with zero npm/node/external CDN requirements.
|
|
|
|
---
|
|
|
|
## Quick Start
|
|
|
|
### Option 1: Standalone Local Launcher (Python 3)
|
|
Run the lightweight local launcher to start the server at `http://127.0.0.1:8080`:
|
|
|
|
```bash
|
|
python launcher.py
|
|
```
|
|
|
|
Your default web browser will open automatically with the CyberSim OS Login interface.
|
|
|
|
### Option 2: Static Web Server
|
|
Serve the `src/` directory with any static HTTP server:
|
|
|
|
```bash
|
|
cd src
|
|
python -m http.server 8000
|
|
```
|
|
Open [http://127.0.0.1:8000](http://127.0.0.1:8000) in your browser.
|
|
|
|
---
|
|
|
|
## Deployment Configuration
|
|
|
|
Deployments are customized via `src/config/deployment.json`:
|
|
|
|
```json
|
|
{
|
|
"organization": {
|
|
"name": "NexaCore Technologies",
|
|
"shortName": "NexaCore",
|
|
"logo": "",
|
|
"wallpaper": "",
|
|
"accentColor": "#2563eb",
|
|
"supportName": "NexaCore Service Desk"
|
|
},
|
|
"localization": {
|
|
"defaultLocale": "en",
|
|
"enabledLocales": ["en", "es"]
|
|
},
|
|
"scenarios": [
|
|
{
|
|
"id": "nexacore-orientation",
|
|
"path": "scenarios/nexacore-orientation/scenario.json",
|
|
"networkName": "NexaCore Corporate",
|
|
"networkDescription": "Corporate Workplace Network",
|
|
"networkIcon": "corporate",
|
|
"supportedLocales": ["en", "es"]
|
|
},
|
|
{
|
|
"id": "quickstart-example",
|
|
"path": "scenarios/quickstart-example/scenario.json",
|
|
"networkName": "Meridian Health Partners",
|
|
"networkDescription": "Clinical & Administrative Network",
|
|
"networkIcon": "health",
|
|
"supportedLocales": ["en", "es"]
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Included Scenarios
|
|
|
|
| Scenario | Description | Supported Languages |
|
|
|----------|-------------|---------------------|
|
|
| **NexaCore Orientation** (`nexacore-orientation`) | Full-featured scenario: 5 emails, 3 web pages, 3 documents, 6 scoring categories, credential phishing + malicious attachment threats, 2 false flags. | English (`en`), Español (`es`) |
|
|
| **Meridian Health Quickstart** (`quickstart-example`) | Minimal scenario: 3 emails, 1 web page, 2 documents, 3 scoring categories, 1 credential phishing threat. | English (`en`), Español (`es`) |
|
|
|
|
---
|
|
|
|
## Scenario Localization & Personalization
|
|
|
|
Scenarios declare supported languages in `scenario.json`:
|
|
|
|
```json
|
|
{
|
|
"formatVersion": "1.0",
|
|
"id": "my-scenario",
|
|
"supportedLocales": ["en", "es"],
|
|
"login": {
|
|
"networkName": "My Enterprise",
|
|
"networkDescription": "Corporate Network",
|
|
"networkIcon": "corporate"
|
|
}
|
|
}
|
|
```
|
|
|
|
Scenario translations are placed in `locales/<lang>.json` (e.g. `locales/es.json`):
|
|
|
|
```json
|
|
{
|
|
"title": "Título en español",
|
|
"description": "Descripción en español",
|
|
"messages": {
|
|
"email_welcome": {
|
|
"sender": "Nombre del Remitente",
|
|
"subject": "Asunto traducido",
|
|
"body": "Hola {{learner.firstName}},\n\n¡Bienvenido a su turno!"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Automated Tests
|
|
|
|
Run the headless automated test suite with Node.js:
|
|
|
|
```bash
|
|
node tests/run_tests.js
|
|
```
|
|
|
|
---
|
|
|
|
## Devlog Validation
|
|
|
|
Run the validation suite to ensure `.labyricorn/` records and devlog entries adhere to the schema:
|
|
|
|
```bash
|
|
python devlog_editor.py --validate
|
|
```
|
|
|
|
---
|
|
|
|
## License
|
|
|
|
MIT License. See `LICENSE` for details.
|