Files
0qln bff34658b8 appendix: 23 Code-Ausschnitte aus dem Houston-Repository
Pin nixpkgs to the revision used by itc.componentware: the channel version
ships a latexminted that crashes on Python 3.14, which made every listing
fail and sent latexmk into an endless error prompt. Also force
nonstopmode/halt-on-error so a broken listing can never loop again.
2026-08-25 21:38:22 +02:00

110 lines
4.1 KiB
TeX

\newcommand{\codelisting}[4]{%
\par\medskip\noindent
\begingroup
\captionsetup{type=listing,hypcap=false}%
\captionof{listing}{#1}%
\label{#2}%
\endgroup
\nopagebreak
\inputminted[
fontsize=\scriptsize,
linenos,
breaklines,
breakanywhere,
breaksymbolleft={},
frame=single,
framesep=1.5mm,
tabsize=4,
numbersep=3mm,
]{#3}{figures/code/#4}%
\par\medskip
}
Die folgenden Ausschnitte stammen aus dem Houston-Repository und geben den Stand
zum Ende des Projektzeitraums wieder. Sie sind auf die jeweils besprochene Stelle
gekürzt; Auslassungen sind mit \texttt{// \ldots} gekennzeichnet.
\subsection{Anbindung des Objektspeichers}
\codelisting{Registrierung des S3-Clients als benannter Dienst, einschließlich der
Korrektur des \texttt{x-amz-copy-source}-Headers}{lst:s3-client-registration}{csharp}{s3-client-registration.cs}
\codelisting{Konfigurationsobjekte für Endpunkt, Zugangsdaten und Bucket}{lst:s3-settings}{csharp}{s3-settings.cs}
\codelisting{Autorisierung des Dokumentenbereichs in \texttt{Program.cs}}{lst:auth-policy}{csharp}{auth-policy.cs}
\clearpage
\subsection{Typisierte Pfade}
\codelisting{\texttt{DocumentKey} — vollständiger Objektschlüssel einschließlich
Kundenordner, nur über eine validierende Fabrikmethode erzeugbar}{lst:document-key}{csharp}{document-key.cs}
\codelisting{\texttt{DocumentId} — die in URLs verwendete Kennung, die den
Kundenordner bewusst nicht enthält}{lst:document-id}{csharp}{document-id.cs}
\codelisting{\texttt{DocumentName} — Ableitung von Anzeigename, PDF- und
Verknüpfungseigenschaft aus der Dateiendung}{lst:document-name}{csharp}{document-name.cs}
\clearpage
\subsection{Dokumenttypen und Symbole}
\codelisting{Dokumenttypen und Ableitung des Ordnernamens aus der
Übersetzungsressource}{lst:document-type}{csharp}{document-type.cs}
\codelisting{Einbindung der Typsymbole als CSS-Maske, damit sie die Themenfarbe
übernehmen}{lst:type-icon-mask}{scss}{type-icon-mask.scss}
\clearpage
\subsection{Auflistung, Suche und Blätterfunktion}
\codelisting{Durchlaufen aller Antwortseiten über den Fortsetzungs-Token}{lst:pagination}{csharp}{pagination-continuation-token.cs}
\codelisting{Auflisten der Dokumente eines Kunden mit Einstiegspunkt für die
Folgeseite}{lst:list-documents}{csharp}{list-documents.cs}
\codelisting{Anwendungsseitige Filterung nach Suchbegriff und
Dokumenttyp}{lst:document-search}{csharp}{document-search.cs}
\codelisting{Tabellenkörper der Dokumentenübersicht}{lst:documents-table}{html}{documents-table-body.cshtml}
\clearpage
\subsection{Download, Vorschau und Freigabe}
\codelisting{Erzeugung vorsignierter URLs und der zugehörigen
\texttt{Content-Disposition}-Kopfzeilen}{lst:presigned-url}{csharp}{presigned-url.cs}
\codelisting{Streamen des ZIP-Archivs ohne Zwischenpufferung}{lst:zip-archive}{csharp}{zip-archive.cs}
\codelisting{Handler des ZIP-Downloads einschließlich der gezielten Freigabe
synchroner Schreibvorgänge}{lst:zip-handler}{csharp}{zip-download-handler.cs}
\codelisting{Anonyme Landeseite für Freigabelinks}{lst:share-page}{csharp}{share-page.cs}
\clearpage
\subsection{Verknüpfungsdateien}
\codelisting{Der eigene INI-Parser}{lst:ini-parser}{csharp}{ini-parser.cs}
\codelisting{Auswertung einer \texttt{.url}-Datei mit Prüfung des
Zielschemas}{lst:url-file}{csharp}{url-file-parsing.cs}
\clearpage
\subsection{Kundenordner}
\codelisting{Bildung des kanonischen Ordnernamens aus dem
Efecte-Firmennamen}{lst:org-slug}{csharp}{org-slug.cs}
\codelisting{Dreistufiger Lookup des Kundenordners}{lst:resolve-customer-prefix}{csharp}{resolve-customer-prefix.cs}
\codelisting{Umbenennen eines Kundenordners — die in Abschnitt~\ref{sec:race-conditions}
beschriebene Stelle}{lst:rename-folder}{csharp}{rename-customer-folder.cs}
\clearpage
\subsection{Tests}
\codelisting{Testdoppel des Objektspeichers: geschriebene Objekte werden für
spätere Abfragen sichtbar}{lst:tests-empty-bucket}{csharp}{tests-empty-bucket.cs}
\codelisting{Test gegen Pfadmanipulation — die Kennung wird bewusst unter Umgehung
der Validierung erzeugt}{lst:test-path-traversal}{csharp}{test-path-traversal.cs}