Wird in der Akquise ein Projekt mit Berater angelegt (oder ein Berater beim Bearbeiten hinzugefuegt), bekommt er eine Mail ueber Graph sendMail aus crm@perinco.de; Reply-To ist der eintragende Benutzer. Je Berater abschaltbar unter Einstellungen -> Akquise (Spalte notify, Vorgabe an). Versand laeuft nach der Antwort und kippt das Speichern nie. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
139 lines
5.6 KiB
Bash
139 lines
5.6 KiB
Bash
# perinco CRM Backend
|
|
# Kopie als .env anlegen und Werte setzen. .env niemals committen.
|
|
|
|
PORT=5006
|
|
# Nur lokal binden - von aussen erreichbar ist die App ausschliesslich
|
|
# ueber den Apache-Reverse-Proxy.
|
|
HOST=127.0.0.1
|
|
|
|
DB_HOST=localhost
|
|
DB_PORT=3306
|
|
DB_USER=root
|
|
DB_PASSWORD=changeme
|
|
DB_NAME=perinco_CRM
|
|
|
|
# Signiert die JWT-Sessions. Muss ein langer Zufallswert sein.
|
|
JWT_SECRET=changeme-langer-zufallswert
|
|
JWT_EXPIRES_IN=7d
|
|
|
|
# Wird beim ersten Start angelegt, falls noch kein Benutzer existiert.
|
|
ADMIN_USERNAME=admin
|
|
ADMIN_NAME=Administrator
|
|
ADMIN_EMAIL=admin@perinco.de
|
|
ADMIN_PASSWORD=changeme-starkes-passwort
|
|
|
|
# Das Diktat braucht hier keine Konfiguration: Whisper laeuft im Browser des
|
|
# Benutzers, eingestellt wird es im Reiter "Whisper" der Anwendung.
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Postfachanbindung Microsoft 365 (crm@perinco.de)
|
|
# ---------------------------------------------------------------------------
|
|
# Lesender Zugriff ueber Microsoft Graph mit App-only-Berechtigung
|
|
# (Client Credentials). Benoetigt wird in Entra genau eine
|
|
# Anwendungsberechtigung: Mail.Read, mit Administratorzustimmung. Kein
|
|
# Schreibzugriff, kein Redirect-URI, kein interaktiver Login.
|
|
#
|
|
# Fehlen diese Werte, startet das CRM normal - die Postfachanbindung meldet in
|
|
# den Einstellungen, welche Angabe fehlt, und der Abgleich bleibt aus.
|
|
#
|
|
# In Exchange Online zusaetzlich den Zugriff auf dieses eine Postfach begrenzen,
|
|
# sonst darf die App jedes Postfach im Tenant lesen:
|
|
# New-ApplicationAccessPolicy -AppId <MS_CLIENT_ID> `
|
|
# -PolicyScopeGroupId crm@perinco.de -AccessRight RestrictAccess `
|
|
# -Description "perinco CRM: nur crm@perinco.de"
|
|
MS_TENANT_ID=
|
|
MS_CLIENT_ID=
|
|
MS_CLIENT_SECRET=
|
|
MS_MAILBOX=crm@perinco.de
|
|
|
|
# Adresse des CRM fuer den Link in der Berater-Mail bei neuem Projekt
|
|
# (braucht zusaetzlich die Anwendungsberechtigung Mail.Send).
|
|
# CRM_PUBLIC_URL=https://crm.perinco.de
|
|
|
|
# Ordner im Postfach. "inbox" ist ein von Graph vorgegebener Name.
|
|
# MS_MAIL_FOLDER=inbox
|
|
|
|
# Hintergrundabgleich. Standard ist AN; nur "false" schaltet ihn hart ab.
|
|
# Intervall, Zeitraum und automatische Kontaktuebernahme stehen dagegen in den
|
|
# Einstellungen der Anwendung (Tabelle crm_settings).
|
|
MAIL_SYNC=true
|
|
|
|
# Bremse fuer den Erstabgleich: so viele Delta-Seiten holt ein Lauf hoechstens.
|
|
# Der naechste Lauf setzt an derselben Stelle fort.
|
|
# MAIL_MAX_PAGES=20
|
|
|
|
# Obergrenze fuer den gespeicherten Mailtext je Nachricht (Zeichen).
|
|
# MAIL_MAX_BODY_CHARS=400000
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Projekt Scanner (portiert)
|
|
# ---------------------------------------------------------------------------
|
|
# Eigene Datenbank, eigener Schluessel, eigenes Upload-Verzeichnis, eigener
|
|
# Scheduler. Die eigenstaendige Vorgaenger-App wurde am 09.09.2026
|
|
# zurueckgebaut, es gibt keine zweite Instanz mehr.
|
|
|
|
# Wird beim Start automatisch angelegt, falls sie fehlt.
|
|
SCANNER_DB_NAME=perinco_scanner
|
|
# SCANNER_DB_HOST=localhost
|
|
# SCANNER_DB_PORT=3306
|
|
# SCANNER_DB_USER=root
|
|
# SCANNER_DB_PASSWORD=
|
|
|
|
# Schluessel fuer die Portal-Passwoerter (AES).
|
|
# Langer Zufallswert, z. B.: node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
|
|
SCANNER_ENCRYPTION_KEY=
|
|
|
|
# Verzeichnis fuer die CV-PDFs. Leer = <server>/uploads.
|
|
SCANNER_UPLOAD_DIR=
|
|
|
|
# Hintergrund-Scraper (Playwright + OpenAI). Standard ist AN; nur "false"
|
|
# schaltet ihn ab.
|
|
SCANNER_SCHEDULER=true
|
|
|
|
# Minuten Versatz fuer den allerersten Lauf. Stammt aus dem Parallelbetrieb mit
|
|
# der alten App und ist seit deren Rueckbau ohne Wirkung, solange in der
|
|
# Datenbank ein last_scan_at steht - der traegt den Zeitplan ueber Neustarts.
|
|
# 0 = sofort loslegen.
|
|
SCANNER_SCHEDULER_OFFSET=0
|
|
|
|
# Fallback fuer den OpenAI-Key; bevorzugt wird der Wert aus Einstellungen > KI.
|
|
# Dort wird auch das Modell je Einsatzzweck gewaehlt.
|
|
# OPENAI_MODEL setzt nur die Vorgabe der erweiterten Suche.
|
|
# OPENAI_API_KEY=
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Anmeldung ueber Microsoft Entra (SSO)
|
|
# ---------------------------------------------------------------------------
|
|
# Nutzt dieselbe App-Registrierung wie die Postfachanbindung - also dieselben
|
|
# MS_TENANT_ID / MS_CLIENT_ID / MS_CLIENT_SECRET, kein zweites Secret.
|
|
#
|
|
# In Entra zusaetzlich noetig:
|
|
# - Authentifizierung > Plattform hinzufuegen > Web
|
|
# Umleitungs-URI: der Wert von MS_SSO_REDIRECT_URI, zeichengenau
|
|
# Implizite Genehmigung: beide Haken aus
|
|
# - Delegierte Berechtigungen mit Administratorzustimmung:
|
|
# openid, profile, User.Read (Foto zusaetzlich: ProfilePhoto.Read.All)
|
|
#
|
|
# Es werden keine Konten angelegt: wer sich per Microsoft anmeldet, braucht ein
|
|
# bestehendes CRM-Konto mit derselben E-Mail-Adresse. Die Anmeldung mit
|
|
# Benutzername und Passwort bleibt parallel bestehen.
|
|
#
|
|
# Ohne MS_SSO_ENABLED=true bleibt alles aus und die Anmeldemaske sieht aus wie
|
|
# bisher.
|
|
MS_SSO_ENABLED=false
|
|
MS_SSO_REDIRECT_URI=https://crm.perinco.de/api/auth/sso/callback
|
|
|
|
# Optionale Einschraenkung auf E-Mail-Domains, kommagetrennt. Leer = keine
|
|
# zusaetzliche Pruefung; Tenant und vorhandenes CRM-Konto begrenzen ohnehin.
|
|
# icon-experts.de gehoert dazu - Konten dieser Domain arbeiten mit im CRM.
|
|
MS_SSO_ALLOWED_DOMAINS=perinco.de,icon-experts.de
|
|
|
|
# Verschluesselt das Client-Secret, wenn es in der Oberflaeche hinterlegt wird
|
|
# (Einstellungen > Anmeldung). Fehlt der Wert, dient JWT_SECRET als Schluessel.
|
|
# Wird einer von beiden gewechselt, muss das Secret einmal neu eingetragen
|
|
# werden - die Oberflaeche weist darauf hin.
|
|
# CRM_ENCRYPTION_KEY=
|
|
|
|
# MS_CLIENT_SECRET oben ist seither nur noch die Rueckfallebene: Vorrang hat der
|
|
# in den Einstellungen hinterlegte Wert.
|