This commit is contained in:
@@ -8,7 +8,7 @@ public static class TemplatePackage
|
||||
public const string Extension = ".lavorlage";
|
||||
|
||||
public static void Create(string outputPath, TemplateManifest manifest, string layoutSource,
|
||||
IReadOnlyDictionary<string, byte[]> assets)
|
||||
IReadOnlyDictionary<string, byte[]> assets, string? continuationLayoutSource = null)
|
||||
{
|
||||
if (!TemplateLoader.IsSafeRelativePath(manifest.MetadataFile))
|
||||
throw new InvalidDataException("metadataFile enthält einen unsicheren Pfad.");
|
||||
@@ -17,6 +17,14 @@ public static class TemplatePackage
|
||||
throw new InvalidDataException("metadataFile und layoutFile dürfen nicht identisch sein.");
|
||||
var reservedPaths = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
|
||||
{ "manifest.json", TemplateLoader.Normalize(manifest.LayoutFile), TemplateLoader.Normalize(manifest.MetadataFile) };
|
||||
if (manifest.ContinuationLayoutFile is { } continuationPath)
|
||||
{
|
||||
if (!TemplateLoader.IsSafeRelativePath(continuationPath))
|
||||
throw new InvalidDataException("continuationLayoutFile enthält einen unsicheren Pfad.");
|
||||
reservedPaths.Add(TemplateLoader.Normalize(continuationPath));
|
||||
if (continuationLayoutSource is null)
|
||||
throw new InvalidDataException("Das Folgeseiten-Layout fehlt.");
|
||||
}
|
||||
if (!string.Equals(Path.GetExtension(outputPath), Extension, StringComparison.OrdinalIgnoreCase))
|
||||
outputPath += Extension;
|
||||
var directory = Path.GetDirectoryName(outputPath);
|
||||
@@ -28,6 +36,8 @@ public static class TemplatePackage
|
||||
{
|
||||
WriteText(archive, "manifest.json", JsonSerializer.Serialize(manifest, TemplateLoader.JsonOptions));
|
||||
WriteText(archive, manifest.LayoutFile, layoutSource);
|
||||
if (manifest.ContinuationLayoutFile is { } continuationFile)
|
||||
WriteText(archive, continuationFile, continuationLayoutSource!);
|
||||
WriteText(archive, manifest.MetadataFile, TemplateMetadataText.Serialize(manifest.Metadata));
|
||||
foreach (var asset in assets)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user