# S2 Checkliste

Internes Webtool für digitale Onboarding- und Offboarding-Checklisten.

## Systemvoraussetzungen

- PHP 8.2+
- MariaDB 10.6+
- Apache 2.4 (intern Port 8080, hinter Caddy Reverse Proxy)
- Composer
- Debian-basiertes Linux

## Deployment-Architektur

```
Internet → Caddy (https://check.tbln-cloud.ddns.net) → Apache (intern 192.168.178.51:8080)
```

**Wichtig:** Caddy darf NIEMALS gestoppt oder deaktiviert werden.

## Installation

```bash
sudo bash install.sh
```

Das Script installiert alle Abhängigkeiten, richtet Apache auf Port 8080 ein,
legt die Datenbank an und erstellt den Standard-Admin.

## Zugangsdaten nach Installation

- URL intern: `http://<server-ip>:8080/`
- URL extern: `https://check.tbln-cloud.ddns.net/`
- Admin-Login: `admin@s2-checkliste.local` / `Admin1234!`
- **Passwort sofort nach dem ersten Login ändern!**
- Zugangsdaten gespeichert in: `/root/s2-checkliste-credentials.txt`

## Deinstallation

```bash
sudo bash install.sh --uninstall
```

## Konfiguration (.env)

Kopiere `.env.example` nach `.env` und passe die Werte an:

| Variable | Bedeutung |
|----------|-----------|
| `APP_URL` | Externe URL (https://check.tbln-cloud.ddns.net) |
| `DB_NAME` | Datenbankname (s2_checkliste) |
| `DB_USER` | Datenbankbenutzer (s2_checkliste_user) |
| `DB_PASS` | Datenbankpasswort |
| `SMTP_HOST` | SMTP-Server |
| `SMTP_PASS` | SMTP-Passwort |
| `HR_EMAIL` | HR-Empfänger für Abschlussdokumente |

## Cronjob

```
*/5 * * * * www-data php /var/www/s2-checkliste/cron/send_due_mails.php >> /var/log/s2-checkliste-cron.log 2>&1
```

Gespeichert in: `/etc/cron.d/s2-checkliste`

## Apache-Konfiguration

- Port: **8080** (intern)
- DocumentRoot: `/var/www/s2-checkliste/public`
- Konfiguration: `/etc/apache2/sites-available/s2-checkliste.conf`

## Rollen

- **Admin**: Vollzugriff
- **Benutzer**: Kann Checklisten anlegen und prüfen. Nach finaler Bestätigung kein Zugriff mehr.

## Sicherheit

- Passwörter werden mit `password_hash(PASSWORD_ARGON2ID)` gespeichert
- Alle Formulare mit CSRF-Schutz
- PDO Prepared Statements (kein SQL-Injection-Risiko)
- `.env` und `storage/` sind nicht öffentlich erreichbar
- `setup.php` nach Installation löschen oder `.env` mit `APP_INSTALLED=true` setzen

## PDF-Speicherort

Generierte PDFs liegen in `/var/www/s2-checkliste/storage/documents/` (nicht web-öffentlich).

## Dateistruktur

```
public/          ← Apache DocumentRoot (einziger öffentlicher Einstiegspunkt)
src/
  Controllers/
  Models/
  Services/
  Utils/
templates/       ← PHP-Templates
cron/            ← Cronjob-Scripts
database/        ← SQL-Schema
storage/         ← PDFs, Logs (nicht öffentlich)
.env             ← Konfiguration (nicht im Git)
composer.json
install.sh
```
