Das Secret der App-Registrierung laeuft in Entra ab. Bisher hiess das: jemand
mit SSH-Zugang aendert die .env und startet den Dienst neu - und niemand sieht
vorher, wann es soweit ist. Laeuft es aus, stehen Anmeldung UND
Postfachabgleich still, denn beide haengen an derselben Registrierung.
Neu unter Einstellungen > Anmeldung: Secret eintragen, Ablaufdatum hinterlegen,
Restlaufzeit ablesen. Ab 30 Tagen vor dem Ablauf bekommen Administratoren ueber
jeder Ansicht ein Hinweisband, das direkt dorthin fuehrt; nach dem Ablauf wird
es rot. Der Hinweis reist mit /api/badges mit, das die App ohnehin bei jedem
Laden abruft.
Bewusst so entschieden:
- Das Secret muss dafuer in die Datenbank, entgegen der bisherigen Regel
"keine Geheimnisse in crm_settings". Es liegt deshalb AES-256-GCM-
verschluesselt dort; der Schluessel kommt aus CRM_ENCRYPTION_KEY, ersatz-
weise JWT_SECRET, und steht damit nie im selben Dump.
- Vor dem Speichern holt das CRM mit dem eingegebenen Wert ein Token bei
Microsoft. Ein Tippfehler wird gar nicht erst uebernommen.
- Gelesen wird Datenbank vor .env; der .env-Wert bleibt Rueckfallebene, und
"Hinterlegtes Secret verwerfen" schaltet dorthin zurueck.
- Passt der Schluessel nicht mehr, meldet die Oberflaeche das ausdruecklich,
statt still auf die .env zurueckzufallen - sonst sucht man den Fehler an
der falschen Stelle.
- Das Ablaufdatum wird von Hand eingetragen. Aus Entra lesen braeuchte
Application.Read.All, die die App bewusst nicht hat.
MAIL_CONFIGURED und SSO_CONFIGURED sind dadurch von Konstanten zu den
Funktionen mailConfigured() und ssoConfigured() geworden - die Pruefung muss
jetzt in die Datenbank sehen.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
34 lines
1.2 KiB
JSON
34 lines
1.2 KiB
JSON
{
|
|
"name": "perinco-crm-backend",
|
|
"version": "0.1.0",
|
|
"private": true,
|
|
"description": "REST-Backend fuer perinco CRM (MariaDB perinco_CRM) inkl. portiertem Projekt Scanner",
|
|
"comments": {
|
|
"playwright": "Exakt 1.60.0 - dieselbe Version wie die laufende Scanner-App. Deren Chromium-Build (chromium-1223) liegt auf dem Server schon im Cache, ein Caret wuerde eine neuere Version und damit einen zweiten Browser-Download ziehen."
|
|
},
|
|
"main": "src/server.js",
|
|
"type": "module",
|
|
"scripts": {
|
|
"start": "node src/server.js",
|
|
"dev": "node --watch src/server.js",
|
|
"migrate": "node src/migrate.js",
|
|
"test": "node test/mail.test.mjs && node test/acquisition.test.mjs && node test/userFields.test.mjs && node test/linkedinPhoto.test.mjs && node test/sessionUser.test.mjs && node test/sso.test.mjs && node test/msSecret.test.mjs"
|
|
},
|
|
"dependencies": {
|
|
"bcryptjs": "^2.4.3",
|
|
"cors": "^2.8.5",
|
|
"crypto-js": "^4.2.0",
|
|
"dotenv": "^16.4.5",
|
|
"express": "^4.19.2",
|
|
"jsonwebtoken": "^9.0.2",
|
|
"multer": "^2.0.2",
|
|
"mysql2": "^3.11.5",
|
|
"node-cron": "^3.0.3",
|
|
"nodemailer": "^6.9.13",
|
|
"openai": "^4.47.1",
|
|
"pdf-parse": "^1.1.1",
|
|
"playwright": "1.60.0",
|
|
"sequelize": "^6.37.3"
|
|
}
|
|
}
|