@iddp/create-vefk-app 0.7.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -2
- package/bin/create-vefk-app.js +2 -1
- package/lib/ersetzen.js +25 -6
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -57,7 +57,8 @@ create-vefk-app [<ordner>] [Optionen]
|
|
|
57
57
|
--two-factor / --no-two-factor E-Mail-2FA nach dem Passwort für Mandanten-Logins (tenant/both)
|
|
58
58
|
bzw. den Passwort-Login (--login password); gilt nicht für Magic-Code
|
|
59
59
|
und Mandanten-Zugang; pro Mandant später in /admin umschaltbar
|
|
60
|
-
--mail / --no-mail
|
|
60
|
+
--mail / --no-mail Mail-Versand vorgesehen (2FA/Magic-Code). SMTP-Zugang kommt suite-weit
|
|
61
|
+
aus /etc/vefk-suite/env, das Tool setzt nur SMTP_FROM
|
|
61
62
|
--tenant <slug> erster Mandant (tenant/both)
|
|
62
63
|
--anmeldung <art> erster Mandant: konto (E-Mail + Passwort / E-Mail-Code, Standard) |
|
|
63
64
|
zugang (nur gemeinsames Mandanten-Passwort ohne E-Mail; Passwort danach per
|
|
@@ -103,7 +104,7 @@ npx @iddp/create-vefk-app . --name "VEFK e.V. Mitglieder" --auth tenant --port 3
|
|
|
103
104
|
| `app.config.js` | Name, `authMode` (`tenant`/`generic`/`both`), `zweiFaktorDefault`, generic-Slug/`login`/`zweiFaktor`/Owner, Markenfarben |
|
|
104
105
|
| `package.json` × 3 **+ beide `package-lock.json`** | Paketnamen **aus dem Slug** (`npm ci` prüft die Lock-Namen mit) |
|
|
105
106
|
| `frontend/index.html`, `frontend/src/index.css` | `<title>`, `--iddp` / `--iddp-light` |
|
|
106
|
-
| `.env.example` | `APP_NAME`, `SMTP_FROM` (
|
|
107
|
+
| `.env.example` | `APP_NAME`, `SMTP_FROM` (Display-Name bereinigt nach `docs/07`, Absender `info@dr-dirk-peters.de`), `PORT` = lokaler Dev-Port |
|
|
107
108
|
| `frontend/vite.config.js`, `docs/08`, `CLAUDE-DEPLOYMENT.md` (Dev-Block) | lokale Dev-Ports (nur mit `--port`/`--dev-port`; sonst bleibt 3001/5173) |
|
|
108
109
|
| `backend/.env` (neu, gitignored) | Kopie von `.env.example` mit Dev-Flags + zufälligem `SESSION_SECRET` — nie ausgegeben |
|
|
109
110
|
| `deploy.sh`, `ecosystem.config.cjs`, `CLAUDE-DEPLOYMENT.md`, `docs/01`, `docs/07` | `@@APP@@` (Server-Slug), `@@APPNAME@@`, `@@PORT_PROD@@`/`@@PORT_TEST@@`, `@@DATUM@@`; Rest-Scan meldet vergessene Token in Wurzel + `docs/` |
|
package/bin/create-vefk-app.js
CHANGED
|
@@ -48,7 +48,8 @@ Ordner). Optionen (für Skripte/CI):
|
|
|
48
48
|
--two-factor E-Mail-2FA nach dem Passwort (Mandanten-Logins bzw. --login password);
|
|
49
49
|
nicht für Magic-Code und Mandanten-Zugang; pro Mandant in /admin änderbar
|
|
50
50
|
--no-two-factor … explizit aus
|
|
51
|
-
--mail | --no-mail
|
|
51
|
+
--mail | --no-mail Mail-Versand vorgesehen (2FA/Magic-Code). SMTP-Zugang kommt
|
|
52
|
+
suite-weit aus /etc/vefk-suite/env, das Tool setzt nur SMTP_FROM
|
|
52
53
|
--tenant <slug> erster Mandant (tenant/both)
|
|
53
54
|
--anmeldung <art> erster Mandant: konto (E-Mail + Passwort / E-Mail-Code, Standard)
|
|
54
55
|
| zugang (nur gemeinsames Mandanten-Passwort, ohne E-Mail)
|
package/lib/ersetzen.js
CHANGED
|
@@ -13,6 +13,25 @@
|
|
|
13
13
|
import { readFile, writeFile, cp, access, readdir, rm } from "node:fs/promises";
|
|
14
14
|
import { join } from "node:path";
|
|
15
15
|
|
|
16
|
+
/** Absenderadresse der Suite (der SMTP-Zugang dazu liegt in /etc/vefk-suite/env). */
|
|
17
|
+
export const SMTP_ABSENDER = "info@dr-dirk-peters.de";
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Display-Name für SMTP_FROM nach docs/07 Schicht 4: nur Buchstaben, Ziffern,
|
|
21
|
+
* Leerzeichen, Umlaute — sonst quotet nodemailer den Header und Microsoft 365
|
|
22
|
+
* verwirft die Mail still. Bindestriche/Schrägstriche werden zu Leerzeichen,
|
|
23
|
+
* alles andere (Punkte, Apostrophe, Klammern) fällt weg. deploy.sh macht auf
|
|
24
|
+
* dem Server dasselbe aus APP_NAME.
|
|
25
|
+
*/
|
|
26
|
+
export function smtpAnzeigename(name) {
|
|
27
|
+
const bereinigt = String(name ?? "")
|
|
28
|
+
.replace(/[-–—/]/g, " ")
|
|
29
|
+
.replace(/[^\p{L}\p{N} ]/gu, "")
|
|
30
|
+
.replace(/ +/g, " ")
|
|
31
|
+
.trim();
|
|
32
|
+
return bereinigt || "VEFK Tool";
|
|
33
|
+
}
|
|
34
|
+
|
|
16
35
|
/** Ein Muster genau einmal ersetzen; Fehltreffer → Warnung. */
|
|
17
36
|
function ersetzeGenau(inhalt, muster, ersatz, beschreibung, warnungen) {
|
|
18
37
|
if (!muster.test(inhalt)) {
|
|
@@ -199,10 +218,10 @@ export async function wendeAntwortenAn(dir, antworten) {
|
|
|
199
218
|
await bearbeiteDatei(dir, ".env.example", warnungen, (inhalt) => {
|
|
200
219
|
if (!inhalt.includes("VEFK Tool")) warnungen.push(".env.example: „VEFK Tool“ nicht gefunden");
|
|
201
220
|
inhalt = inhalt.replaceAll("VEFK Tool", name);
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
221
|
+
// Absender: der SMTP-Zugang kommt suite-weit aus /etc/vefk-suite/env, das Tool setzt
|
|
222
|
+
// nur SMTP_FROM. Display-Name nach docs/07 Schicht 4 (keine Punkte/Bindestriche).
|
|
223
|
+
inhalt = ersetzeGenau(inhalt, /^SMTP_FROM=.*$/m, `SMTP_FROM=${smtpAnzeigename(name)} <${SMTP_ABSENDER}>`,
|
|
224
|
+
".env.example: SMTP_FROM", warnungen);
|
|
206
225
|
if (devPort !== undefined) {
|
|
207
226
|
inhalt = ersetzeGenau(inhalt, /^PORT=\d+$/m, `PORT=${devPort}`, ".env.example: PORT", warnungen);
|
|
208
227
|
}
|
|
@@ -337,8 +356,8 @@ function erzeugeReadme({ name, authMode, genericLogin, zweiFaktor, mail, tenantS
|
|
|
337
356
|
? "npm run zugang # optional: Mandanten-Zugang (nur Passwort, kein Konto)\n"
|
|
338
357
|
: "";
|
|
339
358
|
const mailHinweis = mail
|
|
340
|
-
? "SMTP-
|
|
341
|
-
: "
|
|
359
|
+
? "Mail-Versand: der SMTP-Zugang kommt suite-weit aus `/etc/vefk-suite/env` (Server) bzw. `~/.config/vefk-suite/env` (Rechner); das Tool setzt nur `SMTP_FROM` (steht schon in `.env.example`, Regeln: `docs/07`)."
|
|
360
|
+
: "Mail-Versand ist noch nicht vorgesehen — für 2FA/Magic-Code später `docs/07` folgen (SMTP-Zugang suite-weit, Tool setzt nur `SMTP_FROM`).";
|
|
342
361
|
const datenZeile = daten === "json"
|
|
343
362
|
? "Datenspeicher: JSON-Dateien je Mandant (`daten.adapter: \"json\"`); Wechsel auf SQLite später per `npm run migrate:sqlite`."
|
|
344
363
|
: "Datenspeicher: SQLite (`backend/data/app.sqlite`, nie im Git); vorhandene JSON-Mandanten werden beim ersten Start übernommen.";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@iddp/create-vefk-app",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "Scaffolder der VEFK-Tools-Suite — erzeugt ein neues Tool aus vefk-app-template und ersetzt die Platzhalter (Toolname, Marke, Auth-Profil, 2FA/Mail).",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|