SecDoc issueshttps://zivgitlab.uni-muenster.de/secdoc/secdoc/-/issues2023-06-20T14:19:22+02:00https://zivgitlab.uni-muenster.de/secdoc/secdoc/-/issues/128CPE Update Skript auf neue API Version umstellen2023-06-20T14:19:22+02:00Dustin Gawrond.gawron@uni-muenster.deCPE Update Skript auf neue API Version umstellenDie genutzte NIST API wurde auf Version 2.0 aktualisiert und Version 1.0 soll im September 2023 abgeschaltet werden.
https://nvd.nist.gov/developers/productsDie genutzte NIST API wurde auf Version 2.0 aktualisiert und Version 1.0 soll im September 2023 abgeschaltet werden.
https://nvd.nist.gov/developers/productsVersion 2.0 - Backend Reworkhttps://zivgitlab.uni-muenster.de/secdoc/secdoc/-/issues/119Probleme mit der Gruppenabfrage bei OpenLDAP-Anbindung2022-05-27T10:57:45+02:00Dustin Gawrond.gawron@uni-muenster.deProbleme mit der Gruppenabfrage bei OpenLDAP-AnbindungWenn die LDAP-Gruppen nicht über "memberof" gebildet werden, sondern, wie in OpenLDAP üblich über "member", dann funktioniert die aktuelle Methode nicht. Außerdem wird die DN der Gruppe als Wert des Attributs erwartet, jedoch kann es mög...Wenn die LDAP-Gruppen nicht über "memberof" gebildet werden, sondern, wie in OpenLDAP üblich über "member", dann funktioniert die aktuelle Methode nicht. Außerdem wird die DN der Gruppe als Wert des Attributs erwartet, jedoch kann es möglich sein, dass es ein passendes Attribut mit dem kurzen Gruppennamen, z.B. Attribut "cn" mit dem Namen der Gruppe als Wert, zur Verfügung steht.
Alternative Konfiguration zur Abfrage der Gruppenzugehörigkeiten von den Gruppen aus:
```php
...
'usergroups' => ['ldap_base' => 'OU=groups,DC=test,DC=de', 'ldap_filter' => '(&(objectClass=groupOfNames)(member=uid=$,ou=people,dc=test,dc=de))', 'ldap_attributes' => ['cn']],
...
```
## Patch
```diff
diff -Naur secdoc.old/assets/ajax/Utils.class.php secdoc/assets/ajax/Utils.class.php
--- secdoc.old/assets/ajax/Utils.class.php 2022-05-05 15:33:10.000000000 +0200
+++ secdoc/assets/ajax/Utils.class.php 2022-05-25 17:33:24.784861828 +0200
@@ -303,10 +303,15 @@
if($ldap_use && ($dataSources['usergroups'] === 'ldap' || $dataSources['usergroups'] === 'ldap+db')) {
# LDAP Abfrage durchführen
$result = self::getfromLDAP($ldap_configs['usergroups']['ldap_base'], str_replace('$', ldap_escape($userId), $ldap_configs['usergroups']['ldap_filter']), $ldap_configs['usergroups']['ldap_attributes']);
+ $group_attr = $ldap_configs['usergroups']['ldap_attributes'][0];
- if(is_array($result) && array_key_exists('count', $result) && $result['count'] > 0) {
- foreach($result[0]['memberof'] as $group) {
+ if(is_array($result) && array_key_exists('count', $result)) {
+ for($i=0; $i<$result['count']; $i++) {
+ $group = $result[$i][$group_attr];
+ // DN based attribute
if(is_string($group)) array_push($foundGroups, explode('=', explode(',', $group)[0])[1]);
+ // short attribute
+ if(is_array($group)) array_push($foundGroups, $group[0]);
}
}
}
```
von Timo ScheuerVersion 1.11https://zivgitlab.uni-muenster.de/secdoc/secdoc/-/issues/105Nutzeranrede aus DB/LDAP erzeugen2022-02-17T15:30:22+01:00Dustin Gawrond.gawron@uni-muenster.deNutzeranrede aus DB/LDAP erzeugenIm AD/LDAP ist gibt es das `personalTitle`-Attribut, welches eine Anrede enthalten kann. Wenn es da ist, kann es zum Erstellen einer Anrede/Begrüßung genutzt werden (z.B. für E-Mails).
Folgender Code könnte genutzt werden:
```php
public...Im AD/LDAP ist gibt es das `personalTitle`-Attribut, welches eine Anrede enthalten kann. Wenn es da ist, kann es zum Erstellen einer Anrede/Begrüßung genutzt werden (z.B. für E-Mails).
Folgender Code könnte genutzt werden:
```php
public static function getUserAnrede($userId) {
$users = self::searchUsers($userId, TRUE);
if(count($users) === 1) {
$title = trim($users[0]['title']);
if(!empty($title)) {
$salutation = "Sehr geehrte*r";
if(strpos($title, 'Herr') !== FALSE) $salutation = "Sehr geehrter";
if(strpos($title, 'Frau') !== FALSE) $salutation = "Sehr geehrte";
return "$salutation $title {$users[0]['name']}";
}
return "Sehr geehrte*r {$users[0]['name']}";
}
return "Sehr geehrte*r Mitarbeiter*in";
}
```
ToDo:
* [ ] LDAP Nutzer-Abfragen erweitern um `personalTitle`-Attribut
* [ ] DB um zusätzliches Feld für Anrede erweitern
* [ ] `getUserAnrede()` anpassenVersion 2.0 - Backend Reworkhttps://zivgitlab.uni-muenster.de/secdoc/secdoc/-/issues/103Ausblenden von Nutzergruppen in der Suche2023-06-19T15:16:25+02:00Dustin Gawrond.gawron@uni-muenster.deAusblenden von Nutzergruppen in der SucheEinige Einrichtungen haben Nutzergruppen im AD/LDAP, die für Nutzer nicht angezeigt werden sollen. Bei der initialen Anzeige der Nutzergruppen des aktuellen Nutzers kann dies auch nicht über den `ldap_filter` erreicht werden.
Lösungsvor...Einige Einrichtungen haben Nutzergruppen im AD/LDAP, die für Nutzer nicht angezeigt werden sollen. Bei der initialen Anzeige der Nutzergruppen des aktuellen Nutzers kann dies auch nicht über den `ldap_filter` erreicht werden.
Lösungsvorschlag:
* [ ] Einbau einer `ldap_ignore_groups` Konfigurationsvariable, die bei beiden Anfragen Gruppen filtert (Gruppen können dann auch nicht mehr für Rollen genutzt werden!)
* [ ] Einbau einer `suggestions_disable_initial_groups` Konfigurationsvariable, die die initale Anzeige der eigenen Nutzergruppen abschaltetZukünftige Versionenhttps://zivgitlab.uni-muenster.de/secdoc/secdoc/-/issues/98API/Backend Rework2022-03-15T14:17:23+01:00Dustin Gawrond.gawron@uni-muenster.deAPI/Backend ReworkGeplant ist zuerst das Backend parallel zur normalen Entwicklung zu überarbeiten, um eine ordentliche API mit Hilfe einer [OpenAPI Definition](https://zivgitlab.uni-muenster.de/secdoc/secdoc/-/blob/backend_rework/api/secdoc-api.yml) zu p...Geplant ist zuerst das Backend parallel zur normalen Entwicklung zu überarbeiten, um eine ordentliche API mit Hilfe einer [OpenAPI Definition](https://zivgitlab.uni-muenster.de/secdoc/secdoc/-/blob/backend_rework/api/secdoc-api.yml) zu planen. Aus der Definition soll das neue Grundgerüst erzeugt werden und vorhandene Funktionen im neuen Grundgerüst eingebaut werden. Sofern möglich kann bisheriger Code umstrukturiert werden, um die Aufteilung und den logischen Aufbau zu verbessern.
Zugehöriger Branch: [backend_rework](https://zivgitlab.uni-muenster.de/secdoc/secdoc/-/tree/backend_rework)
### Vorschläge an Tools:
* Definition der API mit [OpenAPI](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.2.md)
* Erzeugung eines Grundgerüsts im PHP [Slim Framework](https://www.slimframework.com) mit Hilfe vom [OpenAPI Generator](https://github.com/OpenAPITools/openapi-generator)
* Slim4 Beispiel: https://github.com/odan/slim4-skeleton
* Automatische Überprüfung von Anfragedaten mit Hilfe von [RespectValidation](https://github.com/Respect/Validation)
* [Redoc](https://github.com/Redocly/redoc) zur automatischen Erzeugung einer API Dokumentation im GitLab CI/CD Prozess
* Implementierung von Tests mit [PHPUnit](https://phpunit.de/) und automatischer Ausführung im GitLab CI/CD Prozess
* Implementierung von API Tests
### ToDo:
* [x] OpenAPI Definition der bisherigen Funktionen bauen und Struktur vereinheitlichen
* [x] Backend-Template erzeugen
* [ ] Aufbau/Struktur planen
* [ ] Bisherige Funktionen in neue API-Aufrufe übertragen (Refactoring des Codes soweit einfach möglich)
* [ ] API Tests implementieren
* [ ] Umstellung des Frontends auf die neue API
### Aufbau/Struktur/Ideen
* Backend Pfad `/api`
* PHP Slim für Grundaufbau
* Middleware für Authentifizierung?
* Middleware für CSRF Protection?
* Middleware für Input Validation?
* [Monolog](https://github.com/Seldaek/monolog) zum Logging
* `/api/src/utils`:
* Authorization
* Configuration Management
* `/api/src/db`:
* DBClass
* Migration
* Configuration mit Default-Werten + Overwrite-Werten
* Mapping von Konfigurationsvariablen zu Namen/Beschreibungen (für Anzeige in Oberfläche)
* Konfiguration in einem Array speichern; Arrays mit [array_replace_resurcive()](https://www.php.net/manual/en/function.array-replace-recursive.php) mergen
### Workflow für API Änderungen
1. OpenAPI Definition anpassen (`api/secdoc-api.yml`)
2. Definition mit [OpenAPI Generator](https://github.com/OpenAPITools/openapi-generator) auf Fehler prüfen: `openapi-generator-cli validate -i secdoc-api.yml `
3. Slim-Skelett mit [OpenAPI Generator](https://github.com/OpenAPITools/openapi-generator) aktualisieren: `openapi-generator-cli generate -g php-slim4 -i secdoc-api.yml --global-property apis,apiTests=false,supportingFiles`
4. Unter `api/src/` die zugehörigen Klassen/Funktionen implementierenVersion 2.0 - Backend ReworkDustin Gawrond.gawron@uni-muenster.deDustin Gawrond.gawron@uni-muenster.dehttps://zivgitlab.uni-muenster.de/secdoc/secdoc/-/issues/66Update der TOM- und Vorschläge-Imports2023-06-19T15:15:45+02:00Dustin Gawrond.gawron@uni-muenster.deUpdate der TOM- und Vorschläge-Imports* [ ] TOM Einträge überprüfen
* [ ] Update Skript für vollständige TOMs?
* [ ] Ebenen Zuweisung aktualisieren
* [ ] Eingabevorschläge erweitern
* [ ] Demo-DB aktualisieren* [ ] TOM Einträge überprüfen
* [ ] Update Skript für vollständige TOMs?
* [ ] Ebenen Zuweisung aktualisieren
* [ ] Eingabevorschläge erweitern
* [ ] Demo-DB aktualisierenZukünftige Versionenhttps://zivgitlab.uni-muenster.de/secdoc/secdoc/-/issues/15Framework Nutzung (Front-/Backend)2022-02-22T14:30:12+01:00Dustin Gawrond.gawron@uni-muenster.deFramework Nutzung (Front-/Backend)Ziel in Version 2 ist der Einsatz von Frameworks im Front- und Backend zur Vereinfachung der Entwicklung, Anpassung und des Testens.
Darüber hinaus sollte dies direkt genutzt werden, um den Grundaufbau einmal zu überdenken und anzupassen...Ziel in Version 2 ist der Einsatz von Frameworks im Front- und Backend zur Vereinfachung der Entwicklung, Anpassung und des Testens.
Darüber hinaus sollte dies direkt genutzt werden, um den Grundaufbau einmal zu überdenken und anzupassen.
## Bisherige Überlegung zu diesen Thema:
<details><summary>Ausklappen</summary>
* [x] Frontend
* Welches Framework? Evtl. [React](https://reactjs.org/) oder [Vue.js](https://vuejs.org/)
* [X] React (Telko vom 18.03.2020)
* Kleines [React-Beispiel](https://zivgitlab.uni-muenster.de/d_gawr01/react-beispiel) als Einstieg
* [Reactstrap](https://reactstrap.github.io/) für einfache Verwendung von Bootstrap 4 in React
* [React Router](https://github.com/ReactTraining/react-router) für Clientside Routing?
* [React Step Wizard](https://github.com/jcmcneal/react-step-wizard) für den Wizard?
* :arrow_right: Da das Projekt in die Webentwicklungsabteilung mit aufgenommen werden soll, sollte auf einheitliche Frameworks gesetzt werden, daher soll doch [Vue.js](https://vuejs.org/) genutzt werden
* [x] Backend
* Bei PHP bleiben? (z.B. [Slim](https://github.com/slimphp/Slim) oder [Lumen](https://github.com/laravel/lumen) als Framework nutzen)
* Zu JS oder einer anderen Sprache wechseln? (Nachteil: bisherige Programmteile könne nicht übernommen werden)
* Modularen Aufbau mit austauschbaren Klassen anstreben
* Möglichkeit zur Einbindung von Erweiterungen?
* [Weiter Möglichkeiten](https://medium.com/@shahroznawaz/best-backend-frameworks-to-build-your-next-web-application-2f89f08f34e3)
* :arrow_right: Bei PHP bleiben; nach und nach modularer Umbau; später evtl. in Framework umbauen (Telko vom 18.03.2020)
</details>
## Framwork-Vergleich
### Frontend
* [React](https://reactjs.org/)
* [Vue.js](https://vuejs.org/)
* Wird von unserer Webanwendungsgruppe genutzt
* Unterschiedlicher Aufbau, aber sonst sehr ähnlich von Funktionsumfängen, Performance, etc.
### Backend
| Framwork | Procs | Cons |
| ------ | ------ | ------ |
| [Slim](https://www.slimframework.com/) | - Minimales Framework für REST APIs <br> - Unkompliziert in der Nutzung <br> - Benötigt keine speziellen Strukturen (kann bei aktueller Struktur beispielsweise einfach in einem `api`-Unterordner genutzt werden) | - Weniger Zusatzfunktionen out of the Box wie Input Validation, DB-Anbindung, Rechtemanagement |
| [Lumen](https://lumen.laravel.com/) | - Nicht ganz so umfangreich wie Laravel/Symfony/etc. <br> - Bietet dennoch verschiedene Zusatzfunktionen <br> - Einfacher Umstieg auf Laravel möglich | - Komplexere Nutzung <br> - Benötigt spezielle Ordnerstruktur (weniger Back-/Frontend-Trennung; "Storage" innerhalb der Repo-Struktur) |
| [Laravel](https://laravel.com/) | - Bietet eine Vielzahl an Funktionen out of the box | - Komplexere Nutzung <br> - Benötigt spezielle Ordnerstruktur (weniger Back-/Frontend-Trennung; "Storage" innerhalb der Repo-Struktur) <br> - Riesiges Framework/Viele nicht benötigte Funktionen |
## ToDo:
* [x] Framework-Auswahl nochmal auf der Mailingliste zur Wahl stellen (Abstimmung zwischen ein paar Vorschlägen; Kommentare für andere Vorschläge)
* [ ] Backend auf Slim-Framework => #98
* [ ] Frontend auf Vue.js-Framework umbauenVersion 2.0 - Backend ReworkDustin Gawrond.gawron@uni-muenster.deDustin Gawrond.gawron@uni-muenster.dehttps://zivgitlab.uni-muenster.de/secdoc/secdoc/-/issues/6Grundlegendes Admin-Interface2022-02-22T16:57:24+01:00Dustin Gawrond.gawron@uni-muenster.deGrundlegendes Admin-Interface## Features
* [x] Admin-Template auf Basis des gewählten Frameworks #15
* [x] [AdminLTE](https://adminlte.io/)
* [ ] Umsetzung planen
* [x] Welche(r) Paketmanager? - Das Admin-Backend soll vorerst als separates NPM Projekt gepfl...## Features
* [x] Admin-Template auf Basis des gewählten Frameworks #15
* [x] [AdminLTE](https://adminlte.io/)
* [ ] Umsetzung planen
* [x] Welche(r) Paketmanager? - Das Admin-Backend soll vorerst als separates NPM Projekt gepflegt werden.
* [ ] Wie die React-Komponenten in die vorhandene Oberfläche einbinden?
* Bis Mitte August wird @ext.sachara ein grundlegendes Theming/Mockup für das Backend erstellen, auf dessen Basis gearbeitet werden kann.
* [ ] Konfiguration von SecDoc
* [ ] Authentifizierung (LDAP, ?)
* [ ] PDF-Modul
* [ ] SMTP-Mailserver
* [ ] Datenbank von Vorschlägen/TOMs (Import/Export)
* [ ] Zuordnung von Rollen zu Ebenen, z.B. durch [jQuery Sortable](https://jqueryui.com/sortable/#connect-lists)
* [ ] Datenbankverwaltung
* [ ] Anzeige der Tabellen-Definitionen (Erklärung der Spalten/Werte)
* [ ] Editor für Tabellen-Inhalte
* [ ] Auswertung der Daten ermöglichen
* [ ] Erzeugung des VVT (aktuell in dsbview.html)
* [ ] Visualisierung der Abhängigkeiten (=> #48)
* [ ] Ex-/Import von Daten ermöglichen (Backup)
* [x] Einzeln pro Ebene => siehe #27
* [ ] Inklusive Abhängigkeiten?
* [ ] DSB-Ansicht in Admin-Interface umziehen?
* [ ] IT-Security-Ansicht im Admin-Interface?Version 3.0 - Frontend Reworkhttps://zivgitlab.uni-muenster.de/secdoc/secdoc/-/issues/4PDF Generierung verbessern2022-01-17T13:40:34+01:00Dustin Gawrond.gawron@uni-muenster.dePDF Generierung verbessern* [ ] HTML für PDF serverseitig generieren
* [ ] Digitale Signatur für PDFs?
* [ ] Gesamtverzeichnis anpassen an neue Aufteilung (separate Verzeichnisse oder alle Dokumentationen in einer PDF?)
* [ ] **Bug im Gesamtverzeichnis**: Fußleis...* [ ] HTML für PDF serverseitig generieren
* [ ] Digitale Signatur für PDFs?
* [ ] Gesamtverzeichnis anpassen an neue Aufteilung (separate Verzeichnisse oder alle Dokumentationen in einer PDF?)
* [ ] **Bug im Gesamtverzeichnis**: Fußleisten + Seitenzahlen werden nicht korrekt eingebettet
* [x] PDF-Download nach Abschluss ermöglichen
* [x] PDF des kompletten Verarbeitungsverzeichnisses anbieten
* [x] 'Entwurf' PDFs anbieten?Version 2.0 - Backend Rework