refactor(cert-manager): einheitlicher Name Zertifikatsmanager
Seitenleiste/Marktplatz (Seed), Seitentitel, Anleitungen, Kommentare und unveroeffentlichter CHANGELOG heissen jetzt Zertifikatsmanager. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
# Fixtures des Zertifikat-Managers
|
||||
# Fixtures des Zertifikatsmanagers
|
||||
|
||||
Nur Testdaten (quick-261009-ikt). Keine echten Zertifikate, keine echten Schluessel.
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
# Test-only PKI for quick 261009-ikt (Zertifikat-Manager).
|
||||
# Test-only PKI for quick 261009-ikt (Zertifikatsmanager).
|
||||
# Erzeugt alle Fixtures dieses Ordners mit OpenSSL (>= 3.4: -legacy, -not_before).
|
||||
# Die Schluessel der CAs liegen nur in einem mktemp-Ordner, den ein trap loescht;
|
||||
# committet werden nur Schluessel der Server-Zertifikate.
|
||||
|
||||
@@ -4,7 +4,7 @@ import { spkiDerOf } from './cert-keys';
|
||||
import type { CertItem, ChainGap, ChainInfo, CsrItem, KeyItem } from './cert-types';
|
||||
|
||||
/**
|
||||
* Kettenbau des Zertifikat-Managers (quick-261009-ikt, D-18). Reine Funktionen, kein Netz.
|
||||
* Kettenbau des Zertifikatsmanagers (quick-261009-ikt, D-18). Reine Funktionen, kein Netz.
|
||||
*
|
||||
* Aussteller eines Zertifikats C ist jedes andere Zertifikat I der Menge mit
|
||||
* `C.checkIssued(I) && C.verify(I.publicKey)`: checkIssued vergleicht Namen, Schluesselkennungen
|
||||
|
||||
@@ -5,7 +5,7 @@ import { safeBaseName } from './cert-names';
|
||||
import type { CsrItem, ItemSource } from './cert-types';
|
||||
|
||||
/**
|
||||
* Zertifikatsanfragen (CSR) des Zertifikat-Managers (quick-261009-ikt, D-05, D-16).
|
||||
* Zertifikatsanfragen (CSR) des Zertifikatsmanagers (quick-261009-ikt, D-05, D-16).
|
||||
*
|
||||
* Die CSR-Leser von forge koennen nur RSA. Darum wird der ASN.1-Aufbau selbst gelesen
|
||||
* (CertificationRequestInfo: Version, Inhaber, oeffentlicher Schluessel, Attribute) und der
|
||||
|
||||
@@ -10,7 +10,7 @@ import {
|
||||
} from './cert-types';
|
||||
|
||||
/**
|
||||
* Private Schluessel des Zertifikat-Managers (quick-261009-ikt, D-05, D-11, D-16).
|
||||
* Private Schluessel des Zertifikatsmanagers (quick-261009-ikt, D-05, D-11, D-16).
|
||||
*
|
||||
* Alles laeuft ueber node:crypto (`createPrivateKey`): PKCS#1, PKCS#8 und SEC1, als PEM und als DER,
|
||||
* unverschluesselt, als verschluesseltes PKCS#8 und klassisch verschluesselt (Proc-Type), fuer RSA,
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import type { ModuleChangelog } from '../module-registry/module-changelog';
|
||||
|
||||
/**
|
||||
* Änderungen am Modul Cert Manager, neueste Version zuerst (quick-261008-w5w).
|
||||
* Änderungen am Modul Zertifikatsmanager, neueste Version zuerst (quick-261008-w5w).
|
||||
* Die Version in der Seed-Datei kommt ausschließlich von hier; Regeln siehe
|
||||
* docs/anleitung-entwicklung.md, Abschnitt „Modulversion und Modul-Changelog pflegen“.
|
||||
*/
|
||||
@@ -35,6 +35,11 @@ export const CERT_MANAGER_CHANGELOG: ModuleChangelog = [
|
||||
de: 'Fehlt ein Zwischenzertifikat, holt „Fehlendes Zertifikat holen“ es auf Knopfdruck beim Aussteller.',
|
||||
en: 'If an intermediate certificate is missing, “Fetch missing certificate” gets it from the issuer at the click of a button.',
|
||||
},
|
||||
{
|
||||
kind: 'changed',
|
||||
de: 'Das Modul heißt jetzt einheitlich „Zertifikatsmanager“ (vorher „Cert Manager“ in der Seitenleiste).',
|
||||
en: 'The module now has one consistent name everywhere (previously “Cert Manager” in the sidebar).',
|
||||
},
|
||||
{
|
||||
kind: 'fixed',
|
||||
de: 'Beim Zusammenführen ersetzt eine zweite Datei nicht mehr die erste.',
|
||||
|
||||
@@ -68,7 +68,7 @@ export function repairFileName(name: string): string {
|
||||
}
|
||||
|
||||
/**
|
||||
* CertManagerController: Zertifikat-Manager (quick-261009-ikt, D-14).
|
||||
* CertManagerController: Zertifikatsmanager (quick-261009-ikt, D-14).
|
||||
*
|
||||
* Zustandslos: nichts wird gespeichert, Passwoerter und Schluessel kommen nie in ein Log
|
||||
* (kein Logger-Aufruf mit Anfrageinhalt; das Request-Log kennt nur Pfad und Status).
|
||||
|
||||
@@ -16,7 +16,7 @@ export async function seedCertManagerModule(
|
||||
): Promise<void> {
|
||||
await moduleRegistryService.seedModule({
|
||||
slug: 'cert-manager',
|
||||
name: 'Cert Manager',
|
||||
name: 'Zertifikatsmanager',
|
||||
// Die Version kommt ausschließlich aus dem Changelog (quick-261008-w5w).
|
||||
version: latestVersion(CERT_MANAGER_CHANGELOG),
|
||||
category: 'security-tools',
|
||||
|
||||
@@ -29,7 +29,7 @@ import { expandZip, isZip } from './zip-expand';
|
||||
export { describeKey, keyIdOf, sha256Hex };
|
||||
|
||||
/**
|
||||
* Der eine Parser des Zertifikat-Managers (quick-261009-ikt, D-08, D-16).
|
||||
* Der eine Parser des Zertifikatsmanagers (quick-261009-ikt, D-08, D-16).
|
||||
*
|
||||
* Alles ueber Zertifikate und Schluessel entscheidet node:crypto (RSA und EC, PEM und DER).
|
||||
* node-forge wird nur fuer PKCS#12 und als allgemeiner ASN.1-Leser/-Schreiber genutzt; die
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* Dateinamen-Helfer des Zertifikat-Managers. Eigene Datei, damit cert-model.ts und cert-output.ts
|
||||
* Dateinamen-Helfer des Zertifikatsmanagers. Eigene Datei, damit cert-model.ts und cert-output.ts
|
||||
* einander nicht gegenseitig einbinden muessen.
|
||||
*/
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ import {
|
||||
} from './cert-types';
|
||||
|
||||
/**
|
||||
* Ausgabe-Bausteine des Zertifikat-Managers (quick-261009-ikt, D-19).
|
||||
* Ausgabe-Bausteine des Zertifikatsmanagers (quick-261009-ikt, D-19).
|
||||
* Jeder Inhalt in jedem Format laeuft durch die eine Funktion buildOutput. Die Reihenfolge baut die API
|
||||
* immer selbst aus den gesendeten Zertifikaten (buildChains); eine vom Browser mitgeschickte Reihenfolge
|
||||
* wird nie uebernommen. Schluessel und Passwoerter werden nur verarbeitet, nie gespeichert oder
|
||||
|
||||
@@ -4,7 +4,7 @@ import { KdfTooExpensiveError, RequestBudget } from './cert-budget';
|
||||
import { MAX_PASSWORDS } from './cert-keys';
|
||||
|
||||
/**
|
||||
* PKCS#12 (.pfx/.p12) des Zertifikat-Managers (quick-261009-ikt, D-20).
|
||||
* PKCS#12 (.pfx/.p12) des Zertifikatsmanagers (quick-261009-ikt, D-20).
|
||||
*
|
||||
* Lesen laeuft ueber forge (`pkcs12FromAsn1`): OpenSSL-3-Standard (AES-256, SHA-256), das
|
||||
* kompatible 3DES-Format und das alte RC2-Format werden gelesen. forge kennt aber nur RSA:
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { HttpException } from '@nestjs/common';
|
||||
|
||||
/**
|
||||
* Vertrag des Zertifikat-Managers (quick-261009-ikt, D-15, D-19, D-24).
|
||||
* Vertrag des Zertifikatsmanagers (quick-261009-ikt, D-15, D-19, D-24).
|
||||
* Die Typen werden 1:1 in apps/web/.../cert-manager/actions.ts gespiegelt.
|
||||
* Alles hier ist zustandslos: Tessera speichert weder Dateien noch Schluessel noch Passwoerter.
|
||||
*/
|
||||
|
||||
@@ -4,7 +4,7 @@ import { cleanSourcePath } from './cert-names';
|
||||
import type { IgnoredEntry } from './cert-types';
|
||||
|
||||
/**
|
||||
* ZIP-Erkennung und -Entpacken des Zertifikat-Managers (quick-261009-ikt, D-17).
|
||||
* ZIP-Erkennung und -Entpacken des Zertifikatsmanagers (quick-261009-ikt, D-17).
|
||||
*
|
||||
* Regeln:
|
||||
* - Ein ZIP erkennt man an den Anfangsbytes (PK\x03\x04 oder PK\x05\x06), nie an der Endung.
|
||||
|
||||
@@ -14,7 +14,7 @@ export type HttpApp = Pick<INestApplication, 'use' | 'useGlobalPipes' | 'enableC
|
||||
* Gemeinsame HTTP-Einrichtung der API (aus main.ts, damit die Reihenfolge testbar ist).
|
||||
*
|
||||
* Reihenfolge der Schichten bei Express: Anfragelog, Cookies, CORS, dann der eigene JSON-Leser
|
||||
* fuer POST build des Zertifikat-Managers. Der Leser muss HINTER enableCors stehen (Review WR-01):
|
||||
* fuer POST build des Zertifikatsmanagers. Der Leser muss HINTER enableCors stehen (Review WR-01):
|
||||
* seine Fehlerantworten 413 und 400 entstehen, bevor Nests Schichten laufen, und ohne vorherige
|
||||
* CORS-Schicht blockiert der Browser sie im Entwicklungsaufbau mit getrennten Ursprungsadressen
|
||||
* (die Oberflaeche sieht dann nur einen Netzwerkfehler statt tooLarge / invalidInput).
|
||||
@@ -41,7 +41,7 @@ export function configureHttp(app: HttpApp, corsOrigin: string): void {
|
||||
credentials: true,
|
||||
});
|
||||
|
||||
// Eigene JSON-Grenze (512 KiB) nur fuer POST build des Zertifikat-Managers, nach CORS und vor
|
||||
// Eigene JSON-Grenze (512 KiB) nur fuer POST build des Zertifikatsmanagers, nach CORS und vor
|
||||
// Nests globalem Leser (quick-261009-ikt D-26, WR-01)
|
||||
app.use(CERT_BUILD_ROUTE, certBuildJsonBody, certBuildBodyErrors);
|
||||
}
|
||||
|
||||
@@ -1148,7 +1148,7 @@ pub fn run() {
|
||||
// kein `drop` -- Nutzer, 09.10.2026: Hochladen per Ziehen im
|
||||
// Modul Dateien ging im Linux-Client nicht. Die App braucht das
|
||||
// eigene Ereignis nicht, also bekommt die Webseite das Ablegen
|
||||
// wie im Browser (Dateien, Zertifikat-Manager, alle Ablagefelder).
|
||||
// wie im Browser (Dateien, Zertifikatsmanager, alle Ablagefelder).
|
||||
.disable_drag_drop_handler()
|
||||
// Neue Fenster (Suche-Widget per `window.open`, „In neuem Tab
|
||||
// öffnen“ bei XFrame/eigenen Modulen/Favoriten) verwarf die
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { toFormData, type WorkingEntry } from './working-set';
|
||||
|
||||
/**
|
||||
* Aufrufe der Zertifikat-Manager-API (quick-261009-ikt). Die Typen spiegeln 1:1
|
||||
* Aufrufe der Zertifikatsmanager-API (quick-261009-ikt). Die Typen spiegeln 1:1
|
||||
* apps/api/src/cert-manager/cert-types.ts.
|
||||
*
|
||||
* Passwoerter und Schluessel stehen nur im Koerper der Anfrage, nie in einer Adresse
|
||||
|
||||
@@ -45,7 +45,7 @@ afterEach(cleanup);
|
||||
describe('CertManagerPage', () => {
|
||||
it('zeigt Titel und die Reiter in der Reihenfolge Dateien, Analysieren, Aufteilen, Zusammenführen, Konvertieren, Vorlagen', () => {
|
||||
render(<CertManagerPage />);
|
||||
expect(screen.getByRole('heading', { name: 'Zertifikat-Manager' })).toBeInTheDocument();
|
||||
expect(screen.getByRole('heading', { name: 'Zertifikatsmanager' })).toBeInTheDocument();
|
||||
const nav = screen.getByRole('navigation');
|
||||
const tabs = within(nav).getAllByRole('button');
|
||||
expect(tabs.map((b) => b.textContent)).toEqual([
|
||||
|
||||
@@ -16,7 +16,7 @@ import { useCertWorkspace } from './use-cert-workspace';
|
||||
type TabId = 'files' | 'analyze' | 'split' | 'merge' | 'convert' | 'templates';
|
||||
|
||||
/**
|
||||
* CertManagerPage: Zertifikat-Manager rund um einen gemeinsamen Arbeitsbereich (quick-261009-ikt).
|
||||
* CertManagerPage: Zertifikatsmanager rund um einen gemeinsamen Arbeitsbereich (quick-261009-ikt).
|
||||
* Der erste Reiter „Dateien“ sammelt alles; die weiteren Reiter arbeiten auf dieser Liste.
|
||||
* Die Liste lebt nur im Arbeitsspeicher dieses Browserfensters; Reiterwechsel behaelt sie.
|
||||
*/
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* Arbeitsbereich des Zertifikat-Managers (quick-261009-ikt, D-01, D-17, D-23).
|
||||
* Arbeitsbereich des Zertifikatsmanagers (quick-261009-ikt, D-01, D-17, D-23).
|
||||
*
|
||||
* Reine Funktionen ohne React: eine Liste von Eintraegen, die nur wachsen oder gezielt
|
||||
* schrumpfen kann. Eine zweite Auswahl haengt an, sie ersetzt nie die erste.
|
||||
|
||||
@@ -19,7 +19,7 @@ interface FileDropAreaProps {
|
||||
/**
|
||||
* Ablageflaeche fuer eine einzelne Datei (Finanzbuchhaltungs-Module,
|
||||
* quick-261002-fm5). Eigenstaendig, ohne Texte aus einem anderen Modul —
|
||||
* Bauform wie die Ablage des Zertifikat-Managers: echte Schaltflaeche fuer
|
||||
* Bauform wie die Ablage des Zertifikatsmanagers: echte Schaltflaeche fuer
|
||||
* Klick UND Ziehen, Entfernen als Geschwister daneben.
|
||||
*/
|
||||
export function FileDropArea({
|
||||
|
||||
@@ -6,7 +6,7 @@ interface TabBarProps<T extends string> {
|
||||
onChange: (id: T) => void;
|
||||
}
|
||||
|
||||
/** Reiterleiste der Finanzbuchhaltungs-Module — Muster Zertifikat-Manager. */
|
||||
/** Reiterleiste der Finanzbuchhaltungs-Module — Muster Zertifikatsmanager. */
|
||||
export function TabBar<T extends string>({ tabs, active, onChange }: TabBarProps<T>) {
|
||||
return (
|
||||
<nav className="flex gap-6 overflow-x-auto border-b border-border">
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
export const ACCOUNTING_API_URL = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:3001';
|
||||
|
||||
/** Dateiantwort der API (Base64) — wie beim Zertifikat-Manager. */
|
||||
/** Dateiantwort der API (Base64) — wie beim Zertifikatsmanager. */
|
||||
export interface FileResponse {
|
||||
filename: string;
|
||||
content: string;
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
* Clientseitiger Blob-Download: Object-URL plus Anker mit `download`-Attribut.
|
||||
* Genau dieser Weg wird vom Desktop-Client seit 1.9.2 als Datei gespeichert —
|
||||
* deshalb keine Tauri-spezifische Sonderbehandlung. Gleicher Koerper wie
|
||||
* `downloadBase64` im Zertifikat-Manager.
|
||||
* `downloadBase64` im Zertifikatsmanager.
|
||||
*/
|
||||
export function downloadBase64(filename: string, content: string, mimeType: string): void {
|
||||
const bytes = atob(content);
|
||||
|
||||
@@ -1249,7 +1249,7 @@
|
||||
"openDetail": "Details zu {name} öffnen"
|
||||
},
|
||||
"certManager": {
|
||||
"title": "Zertifikat-Manager",
|
||||
"title": "Zertifikatsmanager",
|
||||
"description": "Zertifikate, Zwischenzertifikate, Schlüssel und Anfragen sammeln, prüfen und in das gewünschte Format bringen.",
|
||||
"tabs": {
|
||||
"files": "Dateien",
|
||||
|
||||
@@ -243,7 +243,7 @@ export const UMLAUT_ALLOWLIST: readonly string[] = [
|
||||
'Suchergebnisse',
|
||||
// quick-261009-dkv (Aufgabe 2): Links und Übersichten — korrektes Deutsch mit „ss“
|
||||
'verlassen',
|
||||
// quick-261009-ikt: Zertifikat-Manager — korrektes Deutsch mit „ss“
|
||||
// quick-261009-ikt: Zertifikatsmanager — korrektes Deutsch mit „ss“
|
||||
'Schlüsseltyp',
|
||||
'passende',
|
||||
'passenden',
|
||||
|
||||
Reference in New Issue
Block a user