\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}