sysops
b3074b303e
fix: LDAP leere BindPassword schlägt Login fehl + install.sh Passwort-Extraktion
...
- auth.Manager.Login: LDAP-Fallback überspringen wenn URL oder BindPassword leer
(verhindert go-ldap ErrorEmptyPassword Code 206 bei fehlerhaftem LDAP-Config-Eintrag)
- install.sh: grep-Muster von variablenbreitem Lookbehind auf \K umgestellt
(PCRE unterstützt keine variablen Lookbehinds — Passwörter wurden nie korrekt extrahiert)
- install.sh: Wartezeit auf Backend-Start erhöht (bis zu 15s statt 2s)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-20 01:47:48 +01:00
sysops
fd46f0de9a
fix: superadmin beim ersten Start anlegen + Installer zeigt echte Passwörter
...
- seedDefaultUsers: superadmin (Rolle superadmin) zu Default-Usern hinzugefügt
→ wird beim ersten Backend-Start mit Zufallspasswort angelegt
- Installer: Passwörter werden nach dem Deployment aus dem Journal gelesen
(journalctl -u archivmail) statt falschen Platzhalter 'archivmailrockz'
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-20 01:23:33 +01:00
sysops
32032b49d2
fix(installer): echte Web-Passwörter aus Journal lesen statt Platzhalter
...
Der Backend generiert beim ersten Start zufällige Passwörter und gibt
sie im Journal aus. Der Installer liest sie nun nach dem Deployment
und trägt sie korrekt in install-summary.txt und Terminal-Output ein.
Zuvor wurden fälschlicherweise 'archivmailrockz' als Passwörter angezeigt.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-20 01:22:50 +01:00
sysops
33eafc1624
feat(installer): Zusammenfassung aller angelegten User & Passwörter
...
- Abschlussbericht zeigt alle Credentials in übersichtlicher Tabelle:
DB-Passwort, API-Secret, Web-Logins (superadmin/admin/auditor)
- Speichert vollständige Zusammenfassung als /etc/archivmail/install-summary.txt
(chmod 600, nur root lesbar) mit allen Pfaden, Diensten und Hinweisen
- Tabelle im Terminal-Output mit allen wichtigen Zugangsdaten auf einen Blick
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-20 01:10:19 +01:00
sysops
d262253faf
fix(installer): DB-Passwort-Mismatch bei Re-Install verhindern
...
Bei vorhandener config.yml wird das DB-Passwort daraus gelesen und
PostgreSQL entsprechend aktualisiert — verhindert Auth-Fehler beim
zweiten Installer-Durchlauf auf demselben Server.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-20 01:05:51 +01:00
sysops
48e04f36fd
fix(installer): Lücken aus Gap-Report geschlossen
...
- rsync zum apt-Paket-Block hinzugefügt
- DEBIAN_FRONTEND=noninteractive gesetzt (keine debconf-Interaktion)
- go PATH-Fix: Debian-spezifische Pfade in /usr/lib/go-*/bin ergänzen
(update.sh + install.sh symlink-Fallback)
- TLS-Zertifikat: selbstsigniertes RSA-4096 Cert via hostname -f,
/etc/ssl/archivmail/ anlegen + Permissions (640, root:archivmail)
- nginx: HTTPS von Anfang an (HTTP→HTTPS Redirect + TLS-Block statt HTTP-only)
- config.yml-Template vollständig:
- smtp.enabled, smtp.domain (hostname -f), smtp.tls_cert/tls_key
- imap_server (enabled, bind :993, tls_cert/tls_key)
- api.trusted_proxies, api.secure_cookies: true
- Vorhandenes config.yml wird nicht überschrieben
- systemd archivmail.service: AmbientCapabilities=CAP_NET_BIND_SERVICE
(für privilegierten Port 993 als non-root User)
NoNewPrivileges=false (erforderlich für AmbientCapabilities)
ReadOnlyPaths um /etc/ssl/archivmail ergänzt
- systemctl enable am Ende des Installers (ohne --now)
- update.sh nach /opt/archivmail/ kopieren + erstes Deployment direkt anstoßen
- Abschlussbericht: FQDN, HTTPS/IMAP/SMTP URLs, TLS-Hinweis
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-20 01:03:57 +01:00
sysops
c59cad92be
fix: IMAP-Konto bearbeiten + Löschen auch bei sync_running
...
- Store: UpdateCredentials() — Zugangsdaten + Passwort neu verschlüsseln,
setzt status='idle', error_msg='', sync_running=false zurück
- Handler: PATCH /api/imap/{id} unterstützt nun Credential-Update
(name/host/username vorhanden = Credential-Update, sonst sync_interval)
- Frontend: "Bearbeiten"-Button öffnet Edit-Dialog mit allen Feldern;
Passwort-Feld leer = unverändertes Passwort
- Frontend: Löschen-Button nicht mehr durch sync_running blockiert
(nur noch bei status=running gesperrt)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-20 00:49:37 +01:00
sysops
4a4136e4a6
feat: FQDN-Support, IMAP-TLS und SMTP-TLS via Master-Cert
...
- config: IMAPServerConfig um TLSCert/TLSKey erweitert
- imapserver: TLS-Support (tls.Listen) mit automatischem Port 993-Default
- Server-Konfiguration: FQDN archivmail.scahome.local
- nginx server_name auf archivmail.scahome.local gesetzt
- SMTP domain auf archivmail.scahome.local
- SMTP TLS aktiviert (/etc/ssl/archivmail/archivmail.crt)
- IMAP-Server TLS auf Port 993 aktiviert
- secure_cookies: true (HTTPS)
- Firewall: Port 993 geöffnet
- Zertifikat neu ausgestellt (SAN: archivmail.scahome.local + archivmail + 192.168.1.131)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-20 00:32:25 +01:00
sysops
9e71af104f
feat: Dark Mode + Zertifikat-Verwaltung im Superadmin
...
- Dark Mode: ThemeProvider (next-themes), ThemeToggle in Navbar (Hell/Dunkel/System)
- Zertifikat-Tab (superadmin only): aktuelles Zertifikat anzeigen, Upload (cert+key),
Self-Signed ausstellen, Let's Encrypt/ACME
- Backend: /api/admin/cert/* Endpunkte (info, upload, self-signed, acme), nginx reload
- HTTPS bereits live auf Server (self-signed RSA-4096, Port 443)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-20 00:14:43 +01:00
sysops
0e62b10bd4
fix(PROJ-26): IMAP-Löschen-Fehler nicht mehr stumm verschlucken — Fehlermeldung anzeigen
2026-03-18 12:16:32 +01:00
sysops
d79e334029
refactor: server.go in separate Handler-Dateien aufgeteilt
...
server.go (2357 -> 391 Zeilen) enthaelt nur noch Server-Struct,
Konstruktor, Router, Middleware und Hilfsfunktionen.
Neue Dateien:
- auth_handlers.go: Login, Logout, Me
- search_handlers.go: Suche, Mail-Anzeige, Anhaenge, Raw-Download
- admin_handlers.go: User-CRUD, SMTP/Storage-Stats, Services, Security
- import_handlers.go: IMAP + POP3 Account-Verwaltung und Import
- dashboard_handlers.go: System-Stats, Audit-Log
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-18 11:55:21 +01:00
sysops
e7146fdbac
fix: ungenutzten pgx/v5 Import in labelstore entfernen
2026-03-18 11:47:10 +01:00
sysops
19a55a3166
feat(PROJ-26): IMAP-Archive-Server Read-Only Zugriff auf archivierte Mails
...
- Neues Package internal/imapserver: vollständiger IMAP4rev1-Server (~700 Zeilen)
- Auth via bcrypt (userstore.VerifyPassword), Multi-Tenant-Isolation
- INBOX + INBOX/LabelName Ordnerstruktur
- FETCH mit BODY[], ENVELOPE, RFC822.SIZE, INTERNALDATE, FLAGS, UID
- SEARCH: ALL, FROM, TO, SUBJECT, SINCE, BEFORE + UID FETCH/SEARCH
- Read-Only: STORE, DELETE, COPY, MOVE, APPEND → NO [CANNOT]
- \Seen-Flag nicht persistent (GoBD-konform)
- Max 5 gleichzeitige Verbindungen pro User, 30min Idle-Timeout
- Audit-Log: imap_login / imap_login_failed Events
- Config: imap_server.enabled + imap_server.bind (default: 127.0.0.1:1143)
- Externe Ports: 9993 (primär) und 993 (alternativ) via nginx TLS-Terminierung
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-18 11:42:35 +01:00
sysops
5c25e3a7e7
feat(PROJ-26): IMAP-Verbindungsinfo in User-Settings anzeigen
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-18 11:36:04 +01:00
sysops
dd41e1f00e
fix(PROJ-16): LDAP URL-Feld zeigt flexible Port-Hinweise inkl. Univention UCS (7389/7636)
2026-03-18 10:50:34 +01:00
sysops
cee75094ad
feat(PROJ-9): implement labels frontend - LabelList, LabelPicker, search integration, admin UI
2026-03-18 09:51:10 +01:00
sysops
2e9f1f0471
feat(PROJ-26): Add feature specification for IMAP server interface (read-only archive access)
2026-03-18 09:50:53 +01:00
sysops
5a6289c83d
feat(PROJ-9): implement labels backend - DB schema, labelstore, API handlers, Xapian integration
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-18 08:32:30 +01:00
sysops
bd09992441
feat(PROJ-21): Phase 6+7 abschliessen — Dienste-Tab nur superadmin
...
Frontend: Dienste-Tab (Systemdienste starten/stoppen) ist jetzt nur
noch für superadmin sichtbar. domain_admin sieht: Dashboard, Benutzer,
Audit-Log, Import, LDAP (eigener Mandant).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-18 01:18:28 +01:00
sysops
372eee7aef
fix: api.ts internes request-Typ auch auf qr_code korrigiert
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-18 01:13:38 +01:00
sysops
26ab14b25b
fix: restlichen setQrSvg-Aufruf auf setQrCode umbenennen
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-18 01:12:52 +01:00
sysops
dc13edf2f6
fix(PROJ-25): QR-Code als PNG-Base64 anzeigen (statt fehlendem SVG)
...
Backend gibt qr_code als base64-PNG zurück — Frontend war auf qr_code_svg
ausgerichtet. Fix: getTOTPSetup-Typ angepasst, img-Tag statt dangerouslySetInnerHTML.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-18 01:12:07 +01:00
sysops
0fbb1924bb
fix(security): W-02 Secure-Cookie-Flag + W-03 TrustedProxies für X-Forwarded-For
...
W-02: Cookie Secure-Flag ist nun über config.yml steuerbar.
api.secure_cookies: true/false — default false (kein Breaking Change).
Alle 3 SetCookie-Aufrufe (Login, Logout, TOTP) nutzen s.cfg.SecureCookies.
W-03: remoteIP() ist jetzt eine Methode und prüft api.trusted_proxies.
X-Forwarded-For wird nur ausgewertet wenn der direkte Peer in der
trusted_proxies-Liste steht (IP oder CIDR). Sonst wird r.RemoteAddr
verwendet — kein Spoofing mehr möglich.
Neue Hilfsfunktion: isTrustedProxy(ip, proxies).
config.go: APIConfig um SecureCookies bool + TrustedProxies []string erweitert.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-18 01:10:24 +01:00
sysops
280034679e
feat(PROJ-25): User-Profil & Einstellungen — Passwort, E-Mail, 2FA
...
Backend:
- PATCH /api/auth/password — Passwort ändern (bcrypt, LDAP-Guard, Audit-Log)
- PATCH /api/auth/email — E-Mail ändern (Unique-Check, LDAP-Guard, Audit-Log)
- userstore: UpdatePassword, UpdateEmail, GetPasswordHash
Frontend:
- UserNav.tsx: Dropdown-Menü (Profil & Einstellungen, Abmelden)
- navbar.tsx: UserNav eingebunden
- /settings: Passwort ändern, E-Mail ändern, 2FA verwalten (QR-Code + Deaktivieren)
- api.ts: changePassword, changeEmail, getTOTPSetup, confirmTOTPSetup, disableTOTP
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-18 01:05:33 +01:00
sysops
89a6651b62
chore: go.sum aktualisiert für go-ldap/v3 + Abhängigkeiten
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-18 00:55:54 +01:00
sysops
5fd419617d
chore: go.sum aktualisiert für github.com/pquerna/otp v1.4.0 (PROJ-24 TOTP)
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-18 00:55:22 +01:00
sysops
2de340573b
fix(security): behebe F-01/F-02/W-03/W-04 aus Security-Audit + PROJ-24 TOTP 2FA
...
F-01: err.Error() wird nicht mehr an HTTP-Clients gesendet.
Stattdessen generische Fehlermeldungen + Server-Log.
Betrifft: handleCreateUser, handleUpdateUser, handleDeleteUser,
handleSyncNow, handleSecurityConfig, handleUpload.
F-02: Login-Audit-Log enthält keinen rohen err.Error() mehr.
Neue classifyLoginError() Funktion: invalid_password / ldap_error /
account_disabled / unknown — schützt vor LDAP-Info-Leak via Audit-API.
W-03: remoteIP() trimmt jetzt Leerzeichen aus X-Forwarded-For.
Vollständige Lösung erfordert Proxy-Konfiguration (W-03 bleibt WARN).
W-04: Attachment-Dateiname wird durch sanitizeFilename() bereinigt.
Nur [a-zA-Z0-9._- ] erlaubt — verhindert Header-Injection.
PROJ-24: TOTP 2FA vollständig implementiert:
- internal/auth/totp.go: GenerateSecret, ValidateTOTP, QRCodeSVG
- internal/api/totp_handlers.go: Setup, Login-Step2, Admin-Reset
- internal/userstore: SetTOTPSecret, EnableTOTP, DisableTOTP, ResetTOTP
- Login-Flow: totp_pending JWT → /api/auth/totp → vollwertiger JWT
- AES-256-GCM verschlüsseltes Secret in users.totp_secret
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-18 00:54:00 +01:00
sysops
787db6638f
fix(PROJ-23): Privilege Escalation in Tenant-LDAP + Login-Reihenfolge
...
- BUG-1 (P0): domain_admin kann keine Rollen > auditor in default_role/
group_mappings setzen — serverseitige Allowlist-Prüfung in
handleSaveTenantLDAP (user/auditor) und handleAdminSaveTenantLDAP
(user/auditor/domain_admin)
- WARN-1: Login-Fallback-Reihenfolge korrigiert — tenant_ldap wird
jetzt VOR globalem ldap_config geprüft (Spec: tenant > global > local)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-18 00:32:47 +01:00
sysops
9e7add31cd
feat(PROJ-23): Pro-Mandant LDAP Frontend
...
- domain_admin: neuer LDAP-Tab mit Tenant-Konfiguration (eigener Mandant)
- Gruppen-Mapping auf user/auditor beschränkt (keine Eskalation)
- Nutzt /api/tenant/ldap Endpunkte
- superadmin: globaler LDAP-Tab umbenannt zu "LDAP (Global)"
- superadmin: Mandantentabelle um LDAP-Statusspalte erweitert
- Badge: Aktiv / Deaktiviert / ---
- TenantLDAPDialog pro Mandant (alle Rollen bis domain_admin)
- api.ts: TenantLDAPConfig Interface + 8 neue API-Funktionen
- getTenantLDAPConfig/save/delete/test (domain_admin)
- getAdminTenantLDAPConfig/save/delete/test (superadmin)
- Tenant Interface: ldap_enabled + ldap_url Felder ergänzt
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-18 00:27:51 +01:00
sysops
e333e34a03
fix: unused time import in tenant_store.go
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-18 00:19:00 +01:00
sysops
78d83d3e98
feat(PROJ-21/23): Pro-Tenant Xapian-Index + Tenant-LDAP Backend
...
PROJ-21 Phase 4:
- internal/index/tenant_manager.go: TenantIndexManager mit lazy-loading Pool
- internal/index/tenant_worker.go: TenantIndexWorker leitet Submit an richtigen Index
- Jeder Mandant bekommt eigenes Xapian-Verzeichnis (tenant-<id>/)
- handleSearch nutzt direkt Tenant-Index statt nachgelagertem Post-Filter
- runBackfill re-indexiert pro Mandant beim Start
PROJ-23 / PROJ-16 Phase B:
- internal/ldapconfig/tenant_store.go: TenantStore mit AES-256-GCM für tenant_ldap
- internal/api/ldap_tenants.go: 8 neue Handler (GET/PUT/DELETE/test für
/api/tenant/ldap und /api/admin/tenants/{id}/ldap)
- internal/auth/auth.go: Login-Fallback prüft tenant_ldap nach globalem LDAP
(Domain-Extraktion → tenant_ldap config → UpsertLDAPUser mit tenant_id)
- internal/api/server.go: SetTenantLDAP(), neue Routen registriert
- internal/tenantstore/store.go: GetByDomain() Interface für auth-Package
- cmd/archivmail/main.go: TenantLDAPStore + TenantIndexManager verdrahtet
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-18 00:18:35 +01:00
sysops
46d7bfe608
fix(security): Kritische Sicherheitslücken beheben (SEC-01/02/03/05/08/17/22/26/28)
...
- SEC-01: Privilege Escalation verhindert — Rollenhierarchie in Create/Update/DeleteUser
- SEC-02: Tenant-Isolation in Update/DeleteUser — domain_admin nur eigene Nutzer
- SEC-03: IMAP/POP3 Owner-Check via auth.HasRole statt direktem String-Vergleich
- SEC-05: Export PDF/ZIP prüft Tenant-Zugehörigkeit vor Dateiausgabe
- SEC-08: HKDF-SHA256 trennt JWT-Secret von AES-Key (archivmail-jwt-v1 / archivmail-aes-v1)
- SEC-17: handleSecurityFix erfordert requireRole(superadmin)
- SEC-22: Mail-ID Regex [0-9a-f]{64} in allen Handlern (Path-Traversal-Schutz)
- SEC-26: SMTP Fail-Closed — leere AllowedIPs blockiert alles statt zu erlauben
- SEC-28: handleGetRaw — Parse-Fehler bricht ab statt Fallthrough zu Dateizugriff
BREAKING: IMAP/POP3/LDAP-Passwörter müssen nach Deploy einmalig neu eingegeben
werden (neuer AES-Key). JWT-Sessions laufen ab (einmaliges Re-Login nötig).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-18 00:05:47 +01:00
sysops
143db65755
fix: Tenant-Isolation in handleSearch + requireMailAccess
...
- handleSearch: Ergebnisse nach tenant_id filtern (via email_refs)
- requireMailAccess: domain_admin darf Mails lesen, Tenant-Prüfung
erfolgt bereits in handleGetMail via GetTenantForMail
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-17 22:03:22 +01:00
sysops
d8a8204e36
fix: allowed_ips non-null assertion
2026-03-17 21:46:25 +01:00
sysops
3e7f365707
fix: allowed_ips optional chain
2026-03-17 21:45:40 +01:00
sysops
24d866d100
fix: smtpStatus.domains optional chain
2026-03-17 21:44:57 +01:00
sysops
13cc114f2f
fix: optional SMTPStatus Felder mit ?? absichern
2026-03-17 21:44:14 +01:00
sysops
473715ca20
fix: SMTPStatus Typ um tenant-Felder erweitert
2026-03-17 21:43:19 +01:00
sysops
b360e07e2d
fix: doppelte sess-Deklaration in handleServiceAction
2026-03-17 21:42:23 +01:00
sysops
2dbddff0e2
feat: rollenbasierte SMTP-Statistik + Service-Aktionen
...
- handleServiceAction: nur superadmin darf Dienste stoppen/starten
- handleSMTPStatus: domain_admin bekommt tenant-gefilterte Stats
(Domains, Mailanzahl, Speicher) statt globaler Daemon-Info
- Admin-Dashboard: SMTP-Kacheln, Systemauslastung, IP-Allowlist
nur für superadmin; domain_admin sieht eigene Domain-Statistik
- Dienste-Tab: Aktions-Buttons nur für superadmin sichtbar
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-17 21:41:57 +01:00
sysops
db433e5c2e
fix: Rollenhierarchie domain_admin/superadmin in Frontend
...
- useAuth: neue Rollen domain_admin/superadmin + hasRole() helper
- Admin-Page: useAuth(domain_admin), isSuperAdmin-Flag
- Tabs LDAP/Security/Mandanten/Module nur für superadmin
- Navbar: Admin-Link für domain_admin + superadmin sichtbar
- User-Anlage: domain_admin-Rolle wählbar, superadmin nur für superadmin
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-17 21:23:24 +01:00
sysops
73cb609411
fix: Navbar props in upload page
2026-03-17 21:04:45 +01:00
sysops
479c27e5a8
feat(PROJ-21): Phase 2+3+5+8 Multi-Tenancy + PROJ-2 EML/MBOX Upload
...
Phase 2a: userstore domain_admin/superadmin Rollen, User.TenantID,
ListByTenant, UpsertLDAPUser mit tenantID
Phase 2b: storage.Save() mit tenantID *int64, email_refs Tabelle,
GetTenantForMail, GetAllIDsByTenant, StatsByTenant
Phase 2c: JWT-Claims tenant_id/tenant_slug, Session.TenantID,
Login Domain-Erkennung via E-Mail-Domain
Phase 3: tenantMiddleware, Handler-Filterung (Users, Mail, Stats)
Phase 5: SMTP Domain-Routing via DomainToTenantFunc Callback,
config smtp.tenant_routing + default_tenant_id
Phase 8: archivmail migrate-tenants Subkommando
PROJ-2: Upload-Seite /admin/upload mit DropZone + Progress-Polling
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-17 21:03:40 +01:00
sysops
5250ffcd52
fix(deploy): korrigiere update.sh Frontend-Standalone-Deployment
...
Vorher: rsync --delete führte dazu dass FRONTEND_DIR nach dem Sync
nur den _build/-Unterordner enthielt statt server.js direkt.
Ursache: Next.js standalone spiegelt den absoluten Build-Pfad.
Jetzt: FRONTEND_DIR wird vor dem Sync geleert (rm -rf) um veraltete
Verzeichnisse zu entfernen; rsync ohne --delete kopiert den korrekten
Standalone-Root direkt.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-17 20:32:10 +01:00
sysops
3fd7b85080
chore: add go.sum entries for github.com/go-ldap/ldap/v3 v3.4.8
...
Dependencies resolved via go get on server:
- github.com/go-ldap/ldap/v3 v3.4.8
- github.com/go-asn1-ber/asn1-ber v1.5.5 (indirect)
- github.com/Azure/go-ntlmssp v0.0.0-20221128193559-754e69321358 (indirect)
- github.com/google/uuid v1.6.0 (indirect)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-17 20:29:18 +01:00
sysops
ac91dceac2
feat(PROJ-22): LDAP Web-GUI + feat(PROJ-21): Multi-Tenancy Phase 1
...
PROJ-22 – LDAP Web-GUI Konfiguration & Test:
- internal/ldapconfig/store.go: AES-256-GCM Passwortspeicherung, CRUD Upsert (id=1)
- internal/ldapauth/client.go: TestConnection (RootDSE, UserCount) + Authenticate (2-step bind)
- internal/auth/auth.go: LDAP-Fallback in Login(), Gruppen-Rollenzuordnung, issueToken helper
- internal/api/ldap_tenants.go: GET/PUT/DELETE/POST-test /api/admin/ldap mit Audit-Log
- go.mod: github.com/go-ldap/ldap/v3 v3.4.8 hinzugefügt
- Frontend: LDAPConfig/LDAPTestResult Typen, LDAP-Tab mit Gruppen-Mappings + Testergebnis
PROJ-21 Phase 1+6+7 – Multi-Tenancy Grundstruktur:
- internal/tenantstore/store.go: tenants, tenant_domains, tenant_ldap Schema; Migration users/audit_log
- API: 8 Tenant-Routen (CRUD + Domain-Management) via SetTenants()
- cmd/archivmail/main.go: ldapSt + tenantSt initialisiert
- Frontend: Mandanten-Tab mit Tabelle, Domain-Dialog, Deaktivieren/Löschen
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-17 20:27:56 +01:00
sysops
4f0670d94c
fix: update.sh Frontend-Deployment — standalone server.js Pfad korrekt ermitteln
2026-03-17 19:51:21 +01:00
sysops
adffff7ee1
feat(PROJ-14): POP3-Import — Client, Store, Importer, API-Routen, Frontend-Seite
2026-03-17 19:48:14 +01:00
sysops
5e69c29f16
feat: Security Audit Auto-Fix Buttons + manuelle Dokumentation (docs/security-audit.md)
2026-03-17 15:23:31 +01:00
sysops
4668150727
feat: Security Audit Tab im Admin-Panel mit nftables/SSH/Fail2ban-Checks
2026-03-17 15:09:01 +01:00