feat: HTTPS-TLS-Sync nach Deploy, Projekte ohne Subdomain, portalPassword-Feld

- previewDeploy.syncPreviewTls(): schreibt Traefik-Router (Host-Regeln) fuer alle
  Preview-Subdomains nach preview-hosts.yml, damit Let's Encrypt Zertifikate
  ausstellt. Laeuft nach jedem Deploy und beim Serverstart (ersetzt das nie
  aufgerufene bash-Script sync-preview-tls.sh).
- createProjectFromTemplate: Subdomain optional. Ohne Subdomain wird nur das
  Gitea-Repo angelegt (projectType 'repo', Status 'created'), kein Deploy.
- customerAdmin: Portal-Passwort liegt jetzt im Feld customers.portalPassword
  statt als __portalPassword__-Prefix in den Notizen; Legacy-Notizen werden
  beim naechsten Update bereinigt. CRM-Stufe (lead/customer) wird beim Setzen
  des Portal-Passworts nicht mehr auf 'active' ueberschrieben.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-11 16:34:23 +00:00
parent cf4b3ce4d1
commit cc57cf887a
6 changed files with 124 additions and 30 deletions

View File

@@ -3,6 +3,7 @@ import path from 'node:path'
import { fileURLToPath } from 'node:url'
import { config, assertServerConfig, WOMS_DATABASE_ID } from './config.js'
import { verifyDatabaseAccess } from './services/appwriteAdmin.js'
import { syncPreviewTls } from './services/previewDeploy.js'
import { sessionMiddleware } from './middleware/session.js'
import authRoutes from './routes/auth.js'
import projectsRoutes from './routes/projects.js'
@@ -83,6 +84,9 @@ app.use((err, _req, res, _next) => {
const server = app.listen(config.port, '0.0.0.0', () => {
console.log(`Webklar Kundenbereich läuft auf Port ${config.port}`)
syncPreviewTls()
.then((r) => console.log('[startup] Preview-TLS-Sync:', JSON.stringify(r)))
.catch((err) => console.error('[startup] Preview-TLS-Sync fehlgeschlagen:', err.message))
verifyDatabaseAccess().then((result) => {
if (result.ok) return
console.error(